《操作系统实验报告.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/LINUX入门一、实验目的了解UNIX/LINUX运行环境,熟悉UNlX/LINUX的常用基本命令,熟悉和掌握UNIX/LINUX下C语言程序的编写、编译、调试和运行方法。二、实验内容熟悉
3、UNIX/LINUX的常用基本命令如Is、who、pwd、ps等。练习UNIX/LINUX的文本行编辑器Vi的使用方法熟悉UNIX/LINUX下C语言编译器cc/gcc的使用方法。用Vi编写一个简单的显示-Hello,World!c语言程序,用gcc编译并观察编译后的结果,然后运行它。三、实验要求按照要求编写程序,放在相应的目录中,编译成功后执行,并按照要求分析执行结果,并写出实验报告。四、实验设计1.inux系统常用命令格式:commandoptionargument1argument2.五、实验程序#include#includeintmain(void)(printf(HelloWorl
4、d!n);system(pause();return0;1六、实验结果七、实验感想LUbUntUJbUntu:文件(F)编辑(E)查看(V)搜索(三)终端(T)帮助(三)orunacommandasadministrator(userroot),usesudo.Seemansudorootfordetails.YAubuntUQUbUntu:$Isl.c.c1.JbUnt岬JbUntu:Sgcc-ogcctestl.cjbuntuubuntu:*$Isl.cl.cJbUnt照UbUntU:$./gcctestHelloWorld!ubuntiaubuntuz-S通过第一次室验,熟悉了LlNUX
5、系统的操作,终端的使用,GCC编译C程序实验二进程管理一、实验目的加深对进程概念的理解,明确进程与程序的区别:进一步认识并发执行的实质。二、实验内容(1)进程创建编写一段程序,使用系统调用fork()创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示“a“;子进程分别显示字符“b”和字符“c”。试观察记录屏幕上的显示结果,并分析原因。(2)进程控制修改已编写的程序,将每一个进程输出一个字符改为每一个进程输出一句话,再观察程序执行时屏幕上出现的现象,并分析原因。(3)进程的管道通信编写程序实现进程的管道通信。使用系统调用PiPeo建
6、立一个管道,二个子进程Pl和P2分别向管道各写一句话:Child1issendingamessage!Child2issendingamessage!父进程从管道中读出二个来自子进程的信息并显示(要求先接收Pl,再接收P2)。三、实验要求按照要求编写程序,放在相应的目录中,编译成功后执行,并按照要求分析执行结果,并写出实验报告。四、实验设计1、功能设计实验要求建立一个管道实现父进程和子进程间的通信,子进程有两个,子进程向管道里写数据,父进程从管道里读出数据。管道的作用是将两个缓冲区相关连起来,使得一个缓冲区写的东西可以从另一个缓冲区读出来,遵循先进先出的顺序。程序的顺序是这样的:先创建子进程1
7、,向管道写入一句话,子进程1结束后创建子进程2,向管道写入一句话,最后父进程从管道中读出。2、数据结构子进程:使用PiCLtfork。函数创建,返回值为子进程号。管道:使用intpipe(intfiledis)创建无名管道,filedis2为两个文件描述符。3、程序框图五、实验程序#include#include#includeintpipe(intfiledis2);#defineINPUTO#defineOUTPUT1intmain()(intfile-descriptors2;pid_tpidl,pid2;定义子进程charbuf256;intretumed_count;pipe(fil
8、e_descriptors);创建无名管道if(pidl=fork()=-l)创建子进程1(printf(HErroronforkn,t);exit(l);)if(pid1=0)fprintf(inthespawned(childI)processn);CIoSe(file_descriptOrSuNPUT);关闭通道的读端write(file-descriptorsOUTPUTJ,childlissendingmessage,strlen(childIissendingmessage);向管道中写一句话exit(O);else(if(pid2=fork()=-l)创建子进程2(printf(
9、MErroronforkn);exit(l);1if(pid2=0)(printf(,inthespawned(child2)processn);close(file_descriptorsINPUT);关闭通道的读端write(file-descriptorsOUTPUT,child2issendingmessage,strlen(child1issendingmessage);向管道中写一句话exit(0);1else(父进程printf(,intheparentprocessnt);CloSe(file_descriptorsOUTPUT);关闭管道的写端returned_count=r
10、ead(file_descriptorsINPUT,buf,sizeof(buf);printf(,%dbytesofdatareceivedfromspawnedprocess:%sn,returneCLCOUnt,buf);父进程从管道中读出数据)1returnO;六、实验结果心应用程序位置系统力I Oe ubutu(ubunt: l文件(F)编辑(E)查看(V)搜索(S)终端(T)帮助(H)To run a command as See man sudo root安装Uubuntuubuntu:$ 2.cUbuntixaubuntu :-$Is22222c: In c:19: c:26:
11、 c:33: C:49:function warning: warning: warning: warning:UbUntuIbUntUT2.c gcctest ubuntuubuntu:$画中 ES 12月13日星期二12:56下午 Q ubuntufunction function function function,exit, *exit, *exit, *exit,built-in built-in built-in built-inof of of ofadministrator (user root), use sudo . for details.2.Cgcc -0 gcctes
12、t 2.c main:incompatible implicit incompatible implicit incompatible implicit incompatible implicit Is gcctest 2.cdeclaration declaration declaration declaration./gcctestin the parent processin the spawned (child2) process25 bytes of data received from spawned process:child2 ubuntuubuntu:-$ in the sp
13、awned(childl)processis sending message$7 ubuntu目 UbUntUUbUntu:由图可知,父进程先后接受了子进程向管道写入的两句话,并成功地打印出来。两个子进程分别向管道写入了25个字符,并且是子进程1先写的,子进程2后写的,故输出的顺序也是如此。七、实验感想通过本次实验,我们对进程的概念加深了理解,熟悉了进程的创建方法与作用机制,明确了进程与程序的异同。同时,我们掌握了使用管道通信的机制,进一步认识了并发执行的实质。实验三一个进程启动另一个程序的执行一、实验目的编写Linux环境下,fork。与exec()的结合使用实现一个进程启动另一个程序的执行
14、的基本方法,掌握exec()的几种调用方法。二、实验内容父进程从终端读取要执行的命令,并交给子进程执行。父进程等待子进程结束,并打印子进程的返回值。提示:从终端读取要执行的命令可用fgets()实现。三、实验要求按照要求编写程序,放在相应的目录中,编译成功后执行,并按照要求分析执行结果,并写出实验报告。四、实验设计1、功能设计根据实验要求,父进程和子进程将被分配不同的任务:父进程从终端读取要执行的命令交给子进程,然后等待子进程技术打印子进程的返回值;子进程执行父进程读取的命令并返回给父进程。因为子进程执行命令需要打开其他文件,所以需要使用exec()类的函数实现在一个进程来启动另一个程序,在这里应使用exedp()函数从PATH环境变量中查找文件并执行。对于父进程,可以调用fget()从终端读取要执行的命令,以字符串形式存储然后交给子进程执行,待子进程执行完毕后接收子进程返回值并打印。由于要求带参数的命令也