版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、操作系统实验报告2013/2014学年第2学期系别专业班级姓名学号*授课老师*学院实验报告姓名:球程名称:*院(系):计算机学院专业/年级:*实验项目二进程管理-、实验目的1 .理解进程的概念,掌握父、子进程创建的方法。2 .认识和了解并发执行的实质,掌握进程的并发及同步操作。二、实验内容1 .编写一C语言程序,实现在程序运行时通过系统调用fork()创建两个子进程,使父、子三进程并发执行,父亲进程执行时屏幕显示“Iamfather,儿子进程执行时屏幕显示“Iamson,”女儿进程执行时屏幕显示“Iamdaughter”2 .多次连续反复运行这个程序,观察屏幕显示结果的顺序,直至出现不一样的情
2、况为止。记下这种情况,试简单分析其原因。3 .修改程序,在父、子进程中分别使用wait()、exit()等系统调用实现”其同步推进,并获取子进程的ID号及结束状态值。多次反复运行改进后的程序,观察并记录运行结果三、源程序及运行结果源程序1:#include<sys/types.h>#include<unistd.h>#include<stdlib.h>#include<stdio.h>intmain()char*massage;inti;intpid=fork();if(pid<0)printf("error");els
3、eif(pid=0)massage="Iamsonn"i=4;elsei=4;pid=fork();if(pid=0)massage="Iamdaugthern"elsemassage="Iamfathern")for(;i>0;i-)(printf("%s",massage);sleep(1);)return0;)运行结果:(截图)os(aos-desktap:-$gcc2.co2osgos-desktop,/2IamifatherIam:sonIamdaugtherIamsonIamifatherIamd
4、augtherIamfatherIamsonIamdaugtherIamsonIamifatherIamdaugtherosos-desktop源程序2:#include<sys/types.h>#include<unistd.h>#include<stdio.h>#include<sys/wait.h>#include<stdlib.h>intmain(intargc,char*argv)intpid,status,i;pid=fork();if(pid<0)printf("error!");if(pid=
5、0)printf("Iamson.MyprocessIDis%d.n",getpid();exit(5);elsesleep(1);printf("Iamfather.MyprocessIDis%d.waitforchild.n",getpid();pid=wait(&status);i=WEXITSTATUS(status);printf("Mychild'sIDis%d.exitstatus=%dn",pid,i);运行结果:asgos-desktopgcc2_2_Lc-2_1osos-desktop:S./21I
6、amson.MyprocessIDis3258.Iamfather.MyprocessIDis3257,waitforchild4.Mychild1sIDis3258.exitstatus=5osos-desktop:S四、实验分析与总结1 .实验内容1运行结果为什么无固定顺序,fork()函数创建进程是如何并发执行的。答:因为是并发执行的,fork()函数创建的三个进程抢占CP耳同,从而导致三个进被CPUH用执行的顺序不同,从而输出的结果无固定顺序;fork()函数调用成功后,子进程与父进程并发执行相同的代码,但由于子进程也继承了父进程的程序指针,所以子进程是从fork()后的语句开始执行,
7、另外fork在子进程和父进程中的返回值是不同的,在父进程中返回子进程的PID,而在子进程中返回0,使父进程和子进程执行不同的分支,从而实现了进程的并发执行。2 .实验内容3是如何实现父子进程的同步执行的。答:wait()会暂时停止目前进程的执行,直到有信号来到或子进程结束。程序段主要使用了函数wait()和exit()这是因为父进程必须等待两个子进程终止后才终。在父进程中调用wait()函数,则父进程被阻塞,进入等待队列,等待子进程结束。子进程终止时执行exit()向父进程发终止信号,当接到信号后,父进提取子进程的结束状态值,从wait()返回继续执行原程序,从而实现了父、子进程的同步推进。实
8、验项目三进程调度一、实验目的1 .理解进程控制块和进程组织方式;2 .掌握时间片轮转调度算法实现处理机调度。二、实验内容1 .建立合理的PCB数据结构,建立含有8个进程结点的就绪队列,每个进程的要求运行时间随机产生,要求每个进程的要求运行时间不大于15。2 .设置时间片大小(36),使用时间片轮转调度算法实现处理机调度。三、源程序及运行结果源程序:#include<time.h>#include<stdio.h>#include<stdlib.h>#include<malloc.h>#defineNUM8#defineLENsizeof(PCB)
9、typedefstructPCBintname;intruntime;intrunedtime;intkilltime;structPCB*next;PCB;voidmain()(inttimeslice=6,i;PCB*top,*tail,*temp,*runqueue;srand(int)time(0);for(i=0;i<NUM;i+)(temp=(PCB*)malloc(LEN);temp->name=i;temp->runtime=rand()%15;temp->runedtime=0;temp->next=NULL;temp->killtime=
10、0;if(i=0)(top=temp;tail=temp;else(tail->next=temp;tail=temp;)printf("processname%d,runtime=%d,runedtime=%d,killtime=%dn",tail->name,tail->runtime,tail->runedtime,tail->killtime);)printf("*n");while(top!=NULL)runqueue=top;top=top->next;runqueue->next=NULL;runq
11、ueue->runtime=runqueue->runtime-timeslice;if(runqueue->runtime<=0)runqueue->killtime=runqueue->runtime+timeslice;runqueue->runedtime=runqueue->killtime+runqueue->runedtime;runqueue->runtime=0;printf("processname%d,runtime=%d,runedtime=%d,killtime=%d(END)n”,runqueue
12、->name,runqueue->runtime,runqueue->runedtime,runqueue->killtime);)elserunqueue->killtime=timeslice;runqueue->runedtime=runqueue->runedtime+runqueue->killtime;printf("processname%d,runtime=%d,runedtime=%d,killtime=%dn",runqueue->name,runqueue->runtime,runqueue-
13、>runedtime,runqueue->killtime);tail->next=runqueue;tail=tail->next;)运行结果:(截图)osos-desktop:'Sgcc3.c-o3osos-desktop:-s*/3processname0,runtime=llrrunedtime=0Fkilltime=0processname1,runtirne=8rrunedtifne=0rkilltime=0pocessname2,runtime=12rrunedtime=erkilltinie=0processname3fruntime=8rrun
14、edtime=0rkilltime=9processname4,runtime-14rrunedtime=0tkilltime-0processname5,runtimesFrunedtime=0Fkilltime=Qprocessname6(runtime=14rrunedtime=0tkilltime=0processname7,runtimeFrunedtime=0,killtime=6本立卓卓:*卓*:*:*:*:*;零*京*零*米才本本彳*等*率*卓*processname0,runtime=5,runedtime=6,killtime=6processname1,runtimesr
15、runedtime=6rkilltime=6pocew与name2,runtime=6,runedtime=6,killtime=&processname3,runtime=2Frunedtime=6Fkilltime=6processname4(runtime=8.runedtime=6,kilitime=6processname5,runtime=6Frunedtime=3rkilXtime=3(.END.,)processname6,runtime=8trunedtime=6tkilltiine-6processname7,runtime=0Frunedtime=2,killti
16、me=2(,T.END,)processnameerruntime=eJrunedtii»e=lltkHltiine=5(.END.)processname1,runtine=0,runedtin)e=8,killtime=2(.END.)processname2,runtime=0Trunedtirtie=12Fkilltime=6(4.END.)pocessname3,runtime-0,runedtime=8fkilltime=2(.END.)processname4,runtime=2Frunedtime=12rkilltime=6processname6,runtimes,
17、runedtime=12tkilltime=6processname4,runtime=0Frunedtime=14Fkilltime=2(.,END,.,)processname6,runtime=0rrunedtime-14tkilltime-2(4.*END.4)osos-desktop$四、实验分析与总结对实验运行结果进行分析:如果时间片设置值过大或过小,会对进程的调度产生何种影响。答:时间片轮转算法调度的过程是首先取就绪队列的队首结点为运行队列的结点,修改就绪队列队首指针后移;然后调度运行队列结点,即运行队列结点的要求运行时间减去时间片时间;若修改后要求运行时间<=0,则表示该
18、进程结点运行完毕,修改进程结点的PCB信息,记录runtime,runedtime,killtime等信息,并将结点信息输出。否则,表示该进程结点未完成,记录runtime,runedtime,killtime等信息,将结点信息输出。并将该结点置于就绪队列的队尾,等待下次调度,同时修改队尾指针。若就绪队列非空,则继续执行第1步,直至就绪队列为空。如果时间片设置过大使得每个进程能在一个时间片内完成,时间片轮转算法便退化为FCFST法,无法满足交互式用户的需求。时间片设置过小,使得有些进程不能在一个时间片内运行完,会频繁的发生中断、进程上下文的切换,从而增加系统开销,但有利于短作业。实验项目四进程
19、通信、实验目的1 .了解什么是消息,熟悉消息传送原理。2 .了解和熟悉共享存储机制。3 .掌握消息的发送与接收的实现方法。、实验内容1 .根据消息传送机理,使用系统调用msgget(),msgsnd(),msgrev(),及msgctl()编制一长度为1k的消息发送和接收的程序,要求在程序中完成10次消息的发送和接收,每次发送消息结束和接收消息结束都需给出相应的屏幕提示,且每次发送的的内容不少于一个字符,并能在接收端输出。2 .根据共享存储区原理,使用系统调用shmget(),shmat(),shmdt(),及shctl()编制程序,要求创建一个长度为1k的共享存储区,并完成10次数据的发送和
20、接收,每次发送数据结束和接收数据结束都需给出相应的屏幕提示,且每次发送的的数据应能在接收端输出。三、源程序及运行结果1 .源程序:#include<stdio.h>#include<stdlib.h>#include<sys/types.h>#include<sys/msg.h>#include<sys/ipc.h>#defineMSGKEY75定义关键词MEGKEYstructmsgform/消息结构longmtype;intmtext1024;/文本长度msg;intmsgqid,i;voidCLIENT()inti;msgqid
21、=msgget(MSGKEY,0777);for(i=10;i>=1;i-)msg.mtype=i;msg.mtexti=i;printf("(client)sentn");msgsnd(msgqid,&msg,1024,0);/发送消息msg入msgid消息队列exit(0);voidSERVER()msgqid=msgget(MSGKEY,0777|IPC_CREAT);/由关键字获得消息队列do(一msgrcv(msgqid,&msg,1024,0,0);/R队列msgid接受消息msgprintf("%d",msg.mtex
22、tmsg.mtype);printf("(server)receiven");while(msg.mtype!=1);消息类型为1时,释放队列msgctl(msgqid,IPC_RMID,0);exit(0);main()(if(fork()SERVER();elseCLIENT();wait(0);wait(0);运行结果:(截图)OSHOS'desktop:gcc4.c-o4osos-desktop:$,/4(clientJsent(client)sent(client)sent(clientjsent(clientjsent(client)sent(clien
23、t)sent(client)sent(client)sent(clientlsent10(server)receive9(server)receive8(server)receive7(server)receive6(server)receive5(server)receive4(server)receive3(server)receive2(server)receive1(server)receive。5也os-desktopT2.源程序:#include<stdio.h>#include<stdlib.h>#include<sys/types.h>#in
24、clude<sys/shm.h>#include<sys/ipc.h>#defineSHMKEY75intshmid,i;char*addr;client()inti;shmid=shmget(SHMKEY,1024,0777);/瞅取共享区长度1024,关键词SHMKEYaddr=shmat(shmid,0,0);/贝享区起始地址为addrfor(i=9;i>=0;i-)while(*addr!=-1);printf("(client)sentn");/打印(client)sent*addr='a'+i;把i赋给addrexi
25、t(0);server()(shmid=shmget(SHMKEY,1024,0777|IPC_CREAT);/M建共享区addr=shmat(shmid,0,0);/贝享区起始地址为addrfor(i=0;i<10;i+)(*addr=-1;while(*addr=-1);printf("%c",*addr);printf("(server)received'n");/服务进程使用共享区shmctl(shmid,IPC_RMID,0);exit(0);main()(if(fork()server();if(fork()client();w
26、ait(0);wait(0);运行结果:(截图)os(aos-desktop:gcc41.cosQos-desktop:,/4(client)sentj(server)received(client)sent1(server)received(ctzent)senth(server)received(client)sentg(server)received(client)ientf(server)received(client)sente(serverJreceived(client)sentd(server)received(client)sentc(server)received(clie
27、nt)sentb(server)received(client)senta(serverJreceivedosQos-desktop:-$-D4四、实验分析与总结对实验运行结果进行分析:试比较实验中两种方法实现进程通信的不同之处。答:消息队列的建立比共享区的设立消耗的资源少.前者只是一个软彳上设定的问题,后者需要对硬件操作,实现内存的映像,当然控制起来比前者复杂.如果每次都重新进行队列或共享的建立,共享区的设立没有什么优势。当消息队列和共享区建立好后,共享区的数据传输,受到了系统硬件的支持,不耗费多余的资源;而消息传递,由软件进行控制和实现,需要消耗一定的CPU?源.从这个意义上讲,共享区更适
28、合频繁和大量的数据传输.消息的传递,自身就带有同步的控制.当等到消息的时候,进程进入睡眠状态,不再消耗CPU资源.而共享队列如果不借助其他机制进行同步,接受数据的一方必须进行不断的查询,白白浪费了大量的CPU?源。实验项目五存储管理一、实验目的3,熟悉内存空闲分区的分配方式;4.理解动态分区存储管理方式;5,掌握动态分区的分配与回收的过程。二、实验内容使用一个链表来模拟内存存储空间,建立内存块来记录内存分配使用情况,通过随机产生进程及其所需要的内存来模拟真实的进程。通过给进程分配内存及回收来实现对动态分区存储管理方法。编制程序完成上述内容,内存空间大小为100,进程数为5,每个进程所需空间为随
29、机产生,大小为120,首先对5个进程进行内存分配,然后回收指定的进程空间,并进行适当的空闲分区合并操作,要求每次操作结束后都能显示当前的内存分配情况。三、源程序及运行结果源程序:#include<stdio.h>#include<time.h>#include<malloc.h>#defineNUM5#defineLENsizeof(MEMORY_BLOCK)typedefstructMEMORY_BLOCKintname;intaddress;intlength;intflag;structMEMORY_BLOCK*next;MEMORY_BLOCK;vo
30、idallocation(MEMORY_BLOCK*Header,intname,intlength_p)一一MEMORY_BLOCK*temp,*t;intminsize=2;t=Header;while(t!=0)if(t->length>length_p&&t->flag=0)break;t=t->next;if(t->length-lengthp>minsize)(temp=(MEMORY_BLOCK*)malloc(LEN);temp->name=-1;temp->flag=0;temp->length=t->
31、;length-length_p;temp->address=t->address+length_p;t->name=name;t->flag=1;t->length=length_p;temp->next=t->next;t->next=temp;else(t->name=name;t->flag=1;voidmain()(intlength_p,i,processname;MEMORY_BLOCK*Header,*t;Header=(MEMORY_BLOCK*)malloc(LEN);Header->name=-1;Head
32、er->address=0;Header->length=100;Header->flag=0;Header->next=NULL;srand(int)time(0);for(i=1;i<=NUM;i+)length_p=rand()%20+1;allocation(Header,i,length_p);.printf("当前内存分配情况:n");t=Header;while(t!=0)printf("processname=%d,address=%d,length=%d,flag=%dn",t->name,t->
33、;address,t->length,t->flag);t=t->next;运行结果:(截图)osos-desktop:$gcc5,c-o5osD5-desktop:./5当前内存分配情况:processname=l,address=0Flength=6Fflag=lprocessname-2,address=6tlength=19,flag=lprocessname=3,address-25,length=20lflaglprocessname=4,address=451lengtti=ltflag=lprocessname=5faddress=46,length=4rflag=lprocessname=-1taddress=5Oflength=50,flag=6os(aos-desktop:'S四、实验分析与总结对实验运行结果进行分析:程序采用的是何种动态分区分配算法,写出判断依据,并分析该算法的优缺点。答:采用的是首次适应算法,程序使用一个链表来模拟内存存储空间,以地址递增的顺序链接。该算法倾向于优先利用内存中低地址部分的空闲分区,保留了高地址部分的大空闲分区,为后来的大作业分配大内存创造了条件;具缺点是低地址部分被不断划分,留下了许多小的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年人力资源顾问面试题目及答案
- 2026年交行笔试题及答案
- 2026甘肃国企面试题目及答案
- 关于2026年业务培训课程的报名通知函(7篇范文)
- 诊断学复习题与答案新2
- 2025年7月国开电大法律事务专科《民法学(1)》期末纸质考试试题及答案
- 未来已来:生成式人工智能如何落地证券行业
- 机械设备管理制度(固定资产)
- 肿瘤医院加强廉政风险防控工作实施方案
- 资源整合合作意向告知函5篇范文
- 24J113-1 内隔墙-轻质条板(一)
- 六年级课外阅读12篇(含答案)
- 花瓶墩专项施工方案
- 萃取在冶金中的应用课件
- 年产5万吨甲酸钾项目环评报告书
- 安徽光智科技有限公司红外光学与辐射探测产业化项目环境影响报告书
- 2022-2023年粤教版(2019)新教材高中物理必修2 第1章抛体运动第2节运动的合成与分解课件
- GH/T 1070-2011茶叶包装通则
- GB/T 3003-2017耐火纤维及制品
- GB/T 30008-2013节能型船舶能效设计指数基准线值
- GB/T 20303.1-2016起重机司机室和控制站第1部分:总则
评论
0/150
提交评论