操作系统实验报告由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“实验报告操作系统”。
许昌学院
《操作系统》实验报告书
学号:姓名:闫金科班级:成绩:
5006140057
14物联网工程 2016年02月实验一 Linux的安装与配置
一、实验目的1.熟悉Linux系统的基本概念,比如Linux发行版、宏内核、微内核等。2.掌握Linux系统的安装和配置过程,初步掌握Linux系统的启动和退出方法。3.熟悉Linux系统的文件系统结构,了解Linux常用文件夹的作用。
二、实验内容
1.从网络上下载VMware软件和两个不同Linux发行版镜像文件。2.安装VMware虚拟机软件。
3.在VMware中利用第一个镜像文件完成第一个Linux的安装,期间完成网络信息、用户信息、文件系统和硬盘分区等配置。
4.在VMware中利用第二个镜像文件完成第二个Linux的安装,并通过LILO或者GRUB解决两个操作系统选择启动的问题。
5.启动Linux系统,打开文件浏览器查看Linux系统的文件结构,并列举出Linux常用目录的作用。
三、实验过程及结果
1、启动VMware,点击新建Linux虚拟机,如图所示:
2、点击下一步,选择经典型,点击下一步在选择客户机页面选择Linux,版本选择Red Hat Enterprise Linux 5,如图所示:
3、点击下一步创建虚拟机名称以及所要安装的位置,如图所示:
4、点击下一步,磁盘容量填一个合适大小,此处选择默认值大小10GB,如图所示:
5、点击完成,点击编辑虚拟机设置,选择硬件选项中的CD-ROM(IDE...)选项,在右侧连接中选择“使用ISO镜像(I)”选项,点击“浏览”,找到Linux的镜像文件,如图所示:
6点击确定按钮后,点击启动虚拟机按钮,来到Linux的安装界面,如图所示:
7、到此页面之后,等待自动检测安装,如图所示:
8、等到出现如图所示页面后点击“skip”按钮,跳过检测,直接进入安装设置界面,如图所示:
9、安装设计界面如图所示:
10、点击Next按钮进入设置语言界面,设置语言为“简体中文”,如图所示:
11、点击Nest按钮进入系统键盘设置按钮,设置系统键盘为“美国英语式”,如图所示:
12、点击下一步按钮,弹出“安装号码”对话框,选择跳过输入安装号码,如图所示:
13、按照提示,一直点击下一步按钮,如图所示:
14、到设置最后一步,点击下一步按钮进入开始安装Red Hat Enterprise Linux Sever界面,如图所示:
15、安装完成后,进入欢迎界面,按照提示点击前进按钮知道进入Linux桌面,如图所示:
16、安装成功的Linux系统桌面如图所示,桌面包含五个图标,分别为:计算机、jk’s Home、回收站、RHEL/5.3 i386DVD。
四、实验总结
通过安装虚拟机等操作让我认识到Linux这系统一些基本特点,本次试验学会了安装虚拟机并且使用虚拟机安装操作系统,掌握了红帽Linux系统的安装和配置过程,以及对镜像ISO文件的使用,有别于我们机器上使用的系统,通过虚拟机这个软件还可以在已有系统的基础上使用其他操作系统。安装过程中一定要注意选择版本的时候要选择Red Hat Enterprise Linux 5版本,否则安装不能成功。自己动手成功的安装了Linux系统,自己对Linux的学习产生更大的兴趣。
实验二 Linux操作系统的运行模式
一、实验目的1.熟悉Linux系统终端工作环境的使用,了解Linux命令的格式,使用学会利用常用的Linux命令来完成系统的管理和维护。
2.了解X-Windows的特点,熟悉Linux图形用户接口的使用,掌握GNOME桌面环境的基本操作。
3.了解和掌握在Linux环境下安装软件包的方法,如QQ for Linux等用软件的安装方法。
二、实验内容
1.启动Linux系统打开虚拟终端界面,使用Linux的在线帮助指令man或help获得ls、uname、date、cal、mkdir、cp等Linux命令的帮助手册,了解这些命令的具体使用方法。同时,也可以通过执行“命令名 –help”来显示该命令的帮助信息,如“ls –help”,试用这些命令。
2.通过uname命令的执行,查看并给出相关系统信息:操作系统的名称、系统域名、系统CPU名称等。
3.在主目录下创建一个名为myetc的子目录,将/etc目录下与网络相关的文件和子目录拷贝到该目录,并将这些文件的执行权限设置为可执行。
4.在主目录/home下创建目录program、music 和temp,然后在program下建立目录java和C,列出完成该过程的所有命令。
5.在图形界面环境中,查看GNOME桌面的面板和桌面,设置GNOME,包括屏幕保护程序、更改背景和指定关联程序等。6.实现对光盘的加载和访问,然后卸载。
三、实验过程及结果
1、打开终端,输入 【ls –help】来查看【ls】指令的使用方法,同理查看uname、date、cal、mkdir、cp的使用方法。
2、在终端中输入【uname –a】显示操作系统名系统cpu名和系统域名
3、重启系统,用【root】用户名进入系统,以获得权限。在终端中输入【mkdir myetc】,在主目录下创建【myrtc】的目录,【ls】查看是否创建。输入【cd..】返回至【/】文件,输入【cp –r etc root/myetc】讲etc中内容复制到myetc中,进入myetc文件【ls】查看。输入
【chmod u+x etc】赋予文件可执行的权限,输入【ll】查看。
4、在home下,输入【mkdir {program,music,temp}】,可在home下创立这三个目录,输入【ls】查看。在program下输入【mkdir{java,C}】,可创立java和C两个目录,【ls】查看。
5、在桌面上方选择【系统】-【首选项】,即可设置屏幕保护程序和更改背景和指定关联程序
5、在桌面上可见看到有CD光盘,双击浏览,右键【弹出】即卸载。
四、实验总结和体会
Linux的指令系统是学习Linux操作系统很重要的一部分,指令系统相当于在Windows操作系统下的doc,可以省去图形化界面。通过这次的实验让我了解了Linux的强大功能,了解到Linux有许多方便快捷的设置基本配置的方法,这使我更喜欢上Linux的使用。在使用指令的过程中,有时候对文件的操作需要一定的权限,这时需要在登陆时用户名使用【root】,而不是我们在安装时使用的用户名,这样就获得了管理员权限,可以对一些系统文件进行操作。
实验三 Linux应用软件与系统管理
一、实验目的1.了解OpenOffice.Org集成办公软件,掌握利用OpenOffice.Org的套件来完成文档和图片的处理。
2.了解Linux网络管理的知识,熟悉Linux网络配置的方法,掌握在Linux环境下配置Web服务器和ftp服务的方法。
二、实验内容
1.配置Linux系统的网络环境,安装FTP和Web服务器,并配置相关的属性,利用FTP实现WINDOWS和Linux之间的数据交换。
2.利用FTP程序上传自己的照片到FTP服务器,利用OpenOffice的文字处理工具OpenOffice Writer制作一份表格形式的个人简历。个人简历中至少包含学号、姓名、性别、专业、照片和学习经历等内容,并保存为网页格式(html格式)。3.将个人简历网页设置为WEB服务器的首页,然后在客户端利用浏览器访问WEB服务器,查看效果。
4.通过读取proc文件系统,获取系统各种信息(如主机名、系统启动时间、运行时间、版本号、所有进程信息、CPU使用率等),并以比较容易的方式显示。
三、实验过程及结果
1.配置网络环境:在(服务.cmd).里面进行以下操作:在服务里选择3按回车
完成后,可在本地连接看到VMware已连接上网络
在虚拟机设置中设置以太网网络连接方式为
网关地址填虚拟机的网管,IP地址设为虚拟机的一个子网:
四、总结:
在linux系统下,make是我们经常用到的编译命令,所以关于make代码和他的操作指令一定要记清楚。所以,熟练掌握了make和makefile工具之后,源码安装软件就变的像windows下安装软件一样简单。
实验四 进程控制与管理
一、实验目的1.掌握GCC编译器的用法,学会利用GCC编辑器来编辑C语言程序,学会利用GDB调试器来调试C语言程序。
2.理解进程和程序的区别和联系,3.掌握在Linux环境下观察进程运行情况和CPU工作情况的命令。4.了解fork()系统调用,掌握利用fork()创建进程的方法。
5.了解Linux系统其他与进程相关的系统调用,如exec、wait和exit等。6.了解Linux常用的进程通信机制。
二、实验内容
1.利用Linux的进程管理命令ps、top来监视和跟踪进程,体会进程和程序的关系。2.利用Linux的文字编辑器编写文件复制的C语言程序,并用gcc编译该程序,然后运行该程序。
3.编写一段程序,使用系统调用fork()创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示'a',子进程分别显示字符'b'和字符'c'。试观察记录屏幕上的显示结果,并分析原因。
4.修改上述程序,每一个进程循环显示一句话。子进程显示'daughter „'及'son „„',父进程显示 'parent „„',观察结果,分析原因。5.用fork()创建一个进程,再调用exec()用新的程序替换该子进程的内容。
三、实验过程及结果
1、利用Linux的进程管理命令ps、top来监视和跟踪进程,体会进程和程序的关系。从用户身份切换到ROOT身份
输入命令 ps 查看进程
输入命令 top 跟踪进程
2、利用Linux的文字编辑器编写一个计算机100个自然数和的C语言程序,并用gcc编译该程序,然后运行该程序。
创建一个.C文件 并进入进行编辑
用GCC 进行编译,再查看文件,发现产生执行文件 a.out
执行这个可执行文件得到结果50501、编写一段程序,使用系统调用fork()创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示'a',子进程分别显示字符'b'和字符'c'。试观察记录屏幕上的显示结果,并分析原因。
穿件一个.C文件 并进行编写程序代码
反复执行2次该程序
可以看出两次执行的结果 a b c 出现的顺序不同,原因是,3个进程的输出次序是随机的,并不会按规定的顺序出现,所以会出现上述结果。
4、修改上述程序,每一个进程循环显示一句话。子进程显示'daughter „'及'son „„',父进程显示 'parent „„',观察结果,分析原因。重新修改代码
执行这段程序
原分析:
因和之前一样,可以看出执行的结果 3个单词出现的顺序不同,原因是,3个进程的输出次序是随机的,并不会按规定的顺序出现,所以会出现上述结果。
5、用fork()创建一个进程,再调用exec()用新的程序替换该子进程的内容。
编写代码
执行的结果
结果表明 execl 替代了son的内容
四、实验总结和体会
这个实验考察的是进程之间存在很多可能性以及对编辑器的使用。本次实验学习了在linux环境下用gcc编译器运行c语言程序,在linux环境下编写程序用到了vi编辑器,知道了该编辑器也需要各种命令来操作。编写C语言程序时用到了fork()函数,再调用execl()用新的程序替换该子进程的内容。
实验五 进程调度模拟程序的设计与实现
一、实验目的1.了解进程调度的概念,掌握常用进程调度算法的原理。2.掌握Linux程序设计编辑、编译和调试的技巧。
二、实验内容
1.编写程序实现进程调度调度算法先来先服务、优先级高优先和时间片轮转调度算法。(编程语言不限)
2.输入数据,输出运行结果。
三、实验过程及结果
1先来先服务
#i nclude float t,d;
struct { int id;
float ArriveTime;float RequestTime;float StartTime;float EndTime;float RunTime;float DQRunTime;int Status;}arrayTask[4];GetTask(){ int i;float a;
for(i=0;i
printf(“input the the ArriveTime of arrayTask[%d]:”,i);scanf(“%f”,&a);
arrayTask[i].ArriveTime=a;
printf(“input the RequestTime of arrayTask[%d]:”,i);scanf(“%f”,&a);
arrayTask[i].RequestTime=a;arrayTask[i].StartTime=0;arrayTask[i].EndTime=0;arrayTask[i].RunTime=0;arrayTask[i].Status=0;
} }
int fcfs()
{
int i,j,w=0;
for(i=0;i
{
if(arrayTask[i].Status==0)
{
t=arrayTask[i].ArriveTime;
w=1;
}
if(w==1)
break;
}
for(i=0;i
{
if(arrayTask[i].ArriveTime
t=arrayTask[i].ArriveTime;
}
for(i=0;i
{
if(arrayTask[i].ArriveTime==t)
return i;
}
}
int sjf(){
int i,x=0,a=0,b=0;float g;
for(i=0;i
if(arrayTask[i].Status==1){g=arrayTask[i].EndTime;x=1;} }
if(x==0){
t=arrayTask[0].ArriveTime;
for(i=0;i
if(arrayTask[i].ArriveTime
t=arrayTask[i].ArriveTime;a=i;} }
return a;} else {
for(i=0;ig)g=arrayTask[i].EndTime;}
for(i=0;i
if(b!=0)/*有进程到达则按SJF*/ { for(i=0;i
if(arrayTask[i].Status==0&&arrayTask[i].ArriveTime
return a;} else{ /*否则按FCFS*/ for(i=0;i
{if(arrayTask[i].Status==0)t=arrayTask[i].ArriveTime;}
for(i=0;i
if(arrayTask[i].Status==0&&arrayTask[i].ArriveTime
return a;} } }
new(int s)/*定义执行进程后相关数据的修改*/ { int i,g=0;for(i=0;i
if(arrayTask[i].Status==0)continue;else { g=1;break;} }
if(g==0)/*当处理的是第一个未执行的进程时执行*/ {
arrayTask[s].StartTime=arrayTask[s].ArriveTime;
arrayTask[s].EndTime=arrayTask[s].RequestTime+arrayTask[s].ArriveTime;arrayTask[s].RunTime=arrayTask[s].RequestTime;arrayTask[s].Status=1;g=2;}
if(g==1)/*当处理的不是第一个未执行的进程时执行*/ {
arrayTask[s].Status=1;for(i=0;i
if(arrayTask[i].Status==1)d=arrayTask[i].EndTime;}
for(i=0;i
if(arrayTask[i].EndTime>d&&arrayTask[i].Status==1)d=arrayTask[i].EndTime;}
if(arrayTask[s].ArriveTime
arrayTask[s].StartTime=arrayTask[s].ArriveTime;
arrayTask[s].EndTime=arrayTask[s].StartTime+arrayTask[s].RequestTime;arrayTask[s].RunTime=arrayTask[s].EndTime-arrayTask[s].ArriveTime;}
arrayTask[s].DQRunTime=arrayTask[s].RunTime/arrayTask[s].RequestTime;}
Printresult(int j)/*定义打印函数*/ {
printf(“%dt”,arrayTask[j].id);
printf(“%5.2ft”,arrayTask[j].ArriveTime);printf(“%5.2ft”,arrayTask[j].RequestTime);printf(“%5.2ft”,arrayTask[j].StartTime);printf(“%5.2ft”,arrayTask[j].EndTime);printf(“%5.2ft”,arrayTask[j].RunTime);printf(“%5.2fn”,arrayTask[j].DQRunTime);} main(){
int i,b,k,a,c=0;int d[4];clrscr();
printf(“t F.FCFS n”);printf(“t S.SFJ n”);printf(“t Q.EXIT n”);for(i=0;;i++){ if(c)break;
printf(“please input the number a:n”);scanf(“%d”,&a);switch(a){
case Q: c=1;break;
case F:printf(“please input the different-ArriveTime of arrayTasksn”);GetTask();
printf(“*****************************the result of fcfsn”);printf(“NumbertArrivetServertStarttFinishtTurnovetTake power turnover timen”);
for(b=0;b
k=fcfs();d[b]=k;new(k);}
for(b=0;b
Printresult(d[b]);/*调用打印函数打出结果*/ continue;
case S: printf(“please input the different-RequestTime of array
Tasksn”);GetTask();
printf(“******************************the result of sjfn”);printf(“NumbertArrivetRequesttStarttEndtRuntDQRun timen”);for(b=0;b
for(b=0;b
default:printf(“the number Error.please input another number!n”);} } }
四、实验总结和体会
通过做本实验,让我对进程或作业先来先服务、高优先权、按时间片轮转调度算法以及进程调度的概念和算法,有了更深入的认识!理解进程的状态及变化,动态显示每个进程的当前状态及进程的调度情况。进程调度是处理机管理的核心内容。优先级高优先是根据作业的优先级,总是选择优先级最高者进入队列。轮转调度算法是调度程序每次把CPU分配给就绪队列首进程/线程使用规定的时间间隔,就绪队列中都路保留巡行一个时间片。
实验项目二 进程管理一、实验目的1.理解进程的概念,掌握父、子进程创建的方法。2.认识和了解并发执行的实质,掌握进程的并发及同步操作。二、实验内容1.编写一C语言程序,实现在......
实验二进程调度1.目的和要求通过这次实验,理解进程调度的过程,进一步掌握进程状态的转变、进程调度的策略,进一步体会多道程序并发执行的特点,并分析具体的调度算法的特点,掌握对......
DOS操作系统实验报告(2)班级_____________姓名_____________学号_____________一、写出下列命令(设当前目录为C:\):1、将c盘windows目录中主名长度为1-4个字符的所有文件拷贝到d......
实验报告一一、实验目的通过本实验,掌握Linux的基本操作以及Linux的文本编辑,对Linux有一个基本的了解。 二、实验任务1、Linux的基本操作1) 在图形交互方式下实现对用户、用户......
计算机学院实验报告课 程实验名称 专 业班 级学 号学生姓名 操作系统 进程的控制 计算机操作系统 131110196 邹明镇 嘉应学院计算机学院 1305 一、实验目的熟悉进程的......