《操作系统实验报告.docx》由会员分享,可在线阅读,更多相关《操作系统实验报告.docx(29页珍藏版)》请在第一文库网上搜索。
1、操作系统实验报告目录:一、实验一41 .实验目的-42 .实验内容43 .实验要求-44 .实验设计45 .实验程序46 .实验结果一一47 .实验感想一一5二、实验二51 .实验目的-52 .实验内容-53 .实验要求-54 .实验设计一-55 .实验程序66 .实验结果87 .实验感想8三、实验三81 .实验目的-82 .实验内容83 .实验要求84 .实验设计95 .实验程序-106 .实验结果117 .实验感想11四、实验四111 .实验目的-112 .实验内容113 .实验要求-114 .实验设计125 .实验结果-166 .实验感想-17五、实验五171 .实验目的-一-172 .
2、实验内容-一-173 .实验要求-174 .实验设计175 .实验程序186 .实验结果197 .实验感想19六、实验六201 .实验目的一一202 .实验内容203 .实验要求-204 .实验设计205 .实验结果236 .实验感想一一24七、实验七241 .实验目的一一242 .实验内容243 .实验要求一一-244 .实验设计一一255 .实验程序276 .实验结果287 .实验感想28实验一UNIX/1INUX入门一、实验目的了解UNIX/1INUX运行环境,熟悉UN1X/1INUX的常用基本命令,熟悉和掌握UNIX/1INUX下C语言程序的编写、编译、调试和运行方法。二、实验内容熟悉
3、UNIX/1INUX的常用基本命令如Is、who、pwd、ps等。练习UNIX/1INUX的文本行编辑器Vi的使用方法熟悉UNIX/1INUX下C语言编译器cc/gcc的使用方法。用Vi编写一个简单的显示-He11o,Wor1d!c语言程序,用gcc编译并观察编译后的结果,然后运行它。三、实验要求按照要求编写程序,放在相应的目录中,编译成功后执行,并按照要求分析执行结果,并写出实验报告。四、实验设计1inux系统常用命令格式:commandoptionargument1argument2.五、实验程序#inc1ude#inc1udeintmain(void)(printf(He11oWor1d
4、!n);system(pause();return0;1六、实验结果七、实验感想1UbUntUJbUntu:文件(F)编辑(E)查看(V)搜索(S)终端(T)帮助(H)orunacommandasadministrator(userroot),usesudo.Seemansudorootfordetai1s.YAubuntUQUbUntu:$Is1.c.c1JbUnt岬JbUntu:Sgcc-ogcctest1.cjbuntuubuntu:*$Is1.c1.cJbUnt照UbUntU:$./gcctestHe11oWor1d!ubuntiaubuntuz-S通过第一次室验,熟悉了11NUX系统
5、的操作,终端的使用,GCC编译C程序实验二进程管理一、实验目的加深对进程概念的理解,明确进程与程序的区别:进一步认识并发执行的实质。二、实验内容(1)进程创建编写一段程序,使用系统调用fork()创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示“a“;子进程分别显示字符“b”和字符“c”。试观察记录屏幕上的显示结果,并分析原因。(2)进程控制修改已编写的程序,将每一个进程输出一个字符改为每一个进程输出一句话,再观察程序执行时屏幕上出现的现象,并分析原因。(3)进程的管道通信编写程序实现进程的管道通信。使用系统调用PiPeo建立一
6、个管道,二个子进程P1和P2分别向管道各写一句话:Chi1d1issendingamessage!Chi1d2issendingamessage!父进程从管道中读出二个来自子进程的信息并显示(要求先接收P1,再接收P2)。三、实验要求按照要求编写程序,放在相应的目录中,编译成功后执行,并按照要求分析执行结果,并写出实验报告。四、实验设计1、功能设计实验要求建立一个管道实现父进程和子进程间的通信,子进程有两个,子进程向管道里写数据,父进程从管道里读出数据。管道的作用是将两个缓冲区相关连起来,使得一个缓冲区写的东西可以从另一个缓冲区读出来,遵循先进先出的顺序。程序的顺序是这样的:先创建子进程1,向
7、管道写入一句话,子进程1结束后创建子进程2,向管道写入一句话,最后父进程从管道中读出。2、数据结构子进程:使用PiC1tfork。函数创建,返回值为子进程号。管道:使用intpipe(intfi1edis)创建无名管道,fi1edis2为两个文件描述符。3、程序框图五、实验程序#inc1ude#inc1ude#inc1udeintpipe(intfi1edis2);#defineINPUTO#defineOUTPUT1intmain()(intfi1e-descriptors2;pid_tpid1,pid2;定义子进程charbuf256;intretumed_count;pipe(fi1e_
8、descriptors);创建无名管道if(pid1=fork()=-1)创建子进程1(printf(HErroronforkn,t);exit(1);)if(pid1=0)fprintf(inthespawned(chi1dI)processn);CIoSe(fi1e_descriptOrSuNPUT);关闭通道的读端write(fi1e-descriptorsOUTPUTJ,chi1d1issendingmessage,str1en(chi1dIissendingmessage);向管道中写一句话exit(O);e1se(if(pid2=fork()=-1)创建子进程2(printf(ME
9、rroronforkn);exit(1);1if(pid2=0)(printf(,inthespawned(chi1d2)processn);c1ose(fi1e_descriptorsINPUT);关闭通道的读端write(fi1e-descriptorsOUTPUT,chi1d2issendingmessage,str1en(chi1d1issendingmessage);向管道中写一句话exit(0);1e1se(父进程printf(,intheparentprocessnt);C1oSe(fi1e_descriptorsOUTPUT);关闭管道的写端returned_count=rea
10、d(fi1e_descriptorsINPUT,buf,sizeof(buf);printf(,%dbytesofdatareceivedfromspawnedprocess:%sn,returneC1COUnt,buf);父进程从管道中读出数据)1returnO;六、实验结果由图可知,父进程先后接受了子进程向管道写入的两句话,并成功地打印出来。两个子进程分别向管道写入了25个字符,并且是子进程1先写的,子进程2后写的,故输出的顺序也是如此。七、实验感想通过本次实验,我们对进程的概念加深了理解,熟悉了进程的创建方法与作用机制,明确了进程与程序的异同。同时,我们掌握了使用管道通信的机制,进一步认
11、识了并发执行的实质。实验三一个进程启动另一个程序的执行一、实验目的编写1inux环境下,fork。与exec()的结合使用实现一个进程启动另一个程序的执行的基本方法,掌握exec()的几种调用方法。二、实验内容父进程从终端读取要执行的命令,并交给子进程执行。父进程等待子进程结束,并打印子进程的返回值。提示:从终端读取要执行的命令可用fgets()实现。三、实验要求按照要求编写程序,放在相应的目录中,编译成功后执行,并按照要求分析执行结果,并写出实验报告。四、实验设计1、功能设计根据实验要求,父进程和子进程将被分配不同的任务:父进程从终端读取要执行的命令交给子进程,然后等待子进程技术打印子进程的
12、返回值;子进程执行父进程读取的命令并返回给父进程。因为子进程执行命令需要打开其他文件,所以需要使用exec()类的函数实现在一个进程来启动另一个程序,在这里应使用exedp()函数从PATH环境变量中查找文件并执行。对于父进程,可以调用fget()从终端读取要执行的命令,以字符串形式存储然后交给子进程执行,待子进程执行完毕后接收子进程返回值并打印。由于要求带参数的命令也可以执行,那么需要在父进程中fets两次,第一次gets得到命令给串command,然后gets参数给串Command1,并且将这两个参数分别传到子进程的exec()函数,其中前两个都是command,第三个是command1o2、数据结构用Char*型全局变量command存放指令用Char*型全局变量Command1存放参数3、程序框图结束五、实验程序#inc1udecharcommand256;charcommand1256J;intmain()(intrtn;子进程的返回数值interrorno;whi1e(1)printf();/从终端读取要执行的命令ets(command,256,stdin);printf(root1oca1hostroot#Is