首页 操作系统实验三分析解析

操作系统实验三分析解析

举报
开通vip

操作系统实验三分析解析实验三P、V原语的模拟实现、实验目的理解信号量相关理论;掌握记录型信号量结构;掌握P、V原语实现机制。二、实验内容本实验针对操作系统中信号量相关理论进行实验,要求实验者输入实验指导书提供的代码并进行测试。代码主要模拟信号量的P操作(down)和V操作(up)。信号量信号量也称为信号锁,主要应用于进程间的同步和互斥,在用于互斥时,通常作为资源锁。信号量通常通过两个原子操作dwon(P)和up(V)来访问。dwon操作使信号量的值+1,up操作使信号量的值-1。记录型信号量记录型信号量采用了“让权等待”的策略,存在多个...

操作系统实验三分析解析
实验三P、V原语的模拟实现、实验目的理解信号量相关理论;掌握记录型信号量结构;掌握P、V原语实现机制。二、实验内容本实验针对操作系统中信号量相关理论进行实验,要求实验者输入实验指导书提供的代码并进行测试。代码主要模拟信号量的P操作(down)和V操作(up)。信号量信号量也称为信号锁,主要应用于进程间的同步和互斥,在用于互斥时,通常作为资源锁。信号量通常通过两个原子操作dwon(P)和up(V)来访问。dwon操作使信号量的值+1,up操作使信号量的值-1。记录型信号量记录型信号量采用了“让权等待”的策略,存在多个进程等待访问同一临界资源的情况,所以记录型信号量需要一个等待链表来存放等待该信号量的进程控制块或进程号。在本实验中,使用记录型信号量。三、实验要求输入给定代码;进行功能测试并得出正确结果。分析dwon和up函数功能模块;在实验 报告 软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载 中画出dwon和up函数流程图;撰写实验报告。四、程序清单#include"basic.h"semphoresem[5];//deinfe5semphorespnode*pr[20];//define0-19total20process//downoperationvoiddown(char*sname,intpid){intfflag,pflag;pnode*p,*p1;semphore*s;fflag=0;pflag=0;for(inti=0;i<5;i++)if(!strcmp(sem[i].name,sname))//findsemaphorebyname根据名字找到信号量{s=&sem[i];//将找到的信号量存入sfflag=1;//设置信号量标志位fflag为1,表示找到了信号量break;}for(i=0;i<20;i++)//findpcbbypid根据pid找到pcb进程if(pr[i]->node->pid==pid){p1=pr[i];//存入p1pflag=1;//设置进程标志位pflag为1,表示找到了pcbbreak;}if(!fflag)//semaphoreisnotexist如果找不到资源信号量{printf("thesemphore'%s'isnotexist!\n",sname);//输出没有该信号量return;}if(!pflag)//pidisnotexist如果找不到pcb进程{printf("theprocess'%d'isnotexist!\n",pid);//输出没有该pcb进程return;}s->count--;//semaphore!svalue-1被该pcb进程占用的资源信号量减1if(s->count>=0)//thispcbgetthesemaphore如果当前资源信号量没有被用完s->curpid=p1->node->pid;//当前pcb进程就占用该信号量else{if(s->wlist)//thelinkisnotNULL,addthepcbtothelast如果等待链表不为空,就去//找等待链表的尾部插入;若当前pcb进程所占用的信号量没有了,就将该进程放到该进程//链表的尾部去等待{for(p=s->wlist;p->next;p=p->next);p->next=p1;}else//thispcbisthefirstpcbbeaddedtothedownlist若等待链表为空,则该pcb进//程是一个等待的pcb进程,直接插入s->wlist=p1;}}//upoperationvoidup(char*sname)//释放资源信号量{intfflag=0;for(inti=0;i<5;i++)if(!strcmp(sem[i].name,sname))//findthesemaphorebyname由名字找到要释放的资源信号量{fflag=1;//将资源信号量标志设为1break;}if(fflag)//findit如果找到{sem[i].count++;//该资源信号量加1表示释放if(sem[i].wlist)//thereareprocessesinthedownlist若等待链表中有请求该资源信号//量的pcb进程{sem[i].curpid=sem[i].wlist->node->pid;//信号量被在等待链表中的第一个pcb//进程占用sem[i].wlist=sem[i].wlist->next;//等待链表指向下一个等待的pcb进程}}elseprintf("thesemphore'%s'isnotexist!\n",sname);//若找不到该信号量就输出}//showsemphoreinfomationvoidshowdetail(){inti;pnode*p;printf("\n");for(i=0;i<5;i++){if(sem[i].count<=0){printf("%s(current_process%d):",sem[i].name,sem[i].curpid);p=sem[i].wlist;while(p){printf("%5d",p->node->pid);p=p->next;}}elseprintf("%s:",sem[i].name);printf("\n");}/*************************************************************voidinit(){//initsemaphorestrcat(sem[0].name,"s0");strcat(sem[1].name,"s1");strcat(sem[2].name,"s2");strcat(sem[3].name,"s3");strcat(sem[4].name,"s4");for(inti=0;i<5;i++){sem[i].wlist=NULL;sem[i].count=1;}//initprocessfor(i=0;i<20;i++){pr[i]=newpnode;pr[i]->node=newpcb;pr[i]->node->pid=i;pr[i]->brother=NULL;pr[i]->next=NULL;pr[i]->sub=NULL;}}voidmain(){shortcflag,pflag;charcmdstr[32];char*s,*s1,*s2;initerror();init();for(;;){cflag=0;pflag=0;printf("cmd:");scanf("%s",cmdstr);if(!strcmp(cmdstr,"exit"))//exittheprogrambreak;if(!strcmp(cmdstr,"showdetail")){cflag=1;pflag=1;showdetail();}else{s=strstr(cmdstr,"down");//createprocessif(s){cflag=1;//getparameters1=substr(s,instr(s,'(')+1,instr(s,',')-1);s2=substr(s,instr(s,',')+1,instr(s,')')-1);if(s1&&s2){down(s1,atoi(s2));pflag=1;}}else{s=strstr(cmdstr,"up");//deleteprocessif(s){cflag=1;s1=substr(s,instr(s,'(')+1,instr(s,')')-1);if(s1){up(s1);pflag=1;}}}}if(!cflag)geterror(0);elseif(!pflag)geterror(1);}/*******************************************************************/五、测试要求至少进行10次以上的wait和signal操作;要求wait操作出现进程等待队列;对有等待队列的信号量进行signal操作。六、实验指导实验中提供了5个信号量(S0-S4)和20个进程(pid0-19)。在程序运行过程中可以键入downup命令和showdetail命令显示每个信号量的状态。具体输入解释如下:dwon获取信号量操作(P操作)。参数:1Sname2pid。示例:down(S1,2)。进程号为2的进程申请名字为S1的信号量。up释放信号量操作(V操作)。参数1Sname。示例:up(s1)。释放信号量名字为S1的信号量。Showdetail显示各信号量状态及其等待队列。exit退出命令行。七、实验过程这是为每个进程申请的信号量的状态nhi<137IS1418101418IS141813171317这是删除si信号量中的4号进程,此时进程5占用该信号量0号信号量拥有进程0,1,2,3;1号信号量拥有进程4,5,6,7;2号信号量拥有进程8,9,10,11;3号信号量拥有进程12,13,14,15;4号信号量拥有进程16,17,18,19.这是删除s0信号量中的0号进程,此时进程IsBcmd:showdetails0end:down<50,3>cnd:douncmd:downcmd:doijncnd:douncnd:douncmd:downcmd:downcmd:dounend:doun<53,12>end:down<53,13>cmd:downend:down<53,15>end:down<54,16>end:down<54,17>end:down<54,18>end:down<54,19>cmd:showdetail叙:\OS3\2011013245\Debug\2011013245.exe**D:\OS3\2011013245\Debug\2011013245.eze^a□S023sl567_is291011s3=;:131415s4end,:showdetailS023sl67s291011s3=;:131415s4cmd:showdetailsi龍s323si67521陳1133:131415s4:171819end:upend:upend:showdetai;eprovcommand*end:shoedetaileprovcommand*end:showdetails023671R11s3:15s4:171819end■*这是先释放0号,4号进程,然后为0号进程申请so号信号量这是先释放进程号为0和1的进程,然后再为1号进程申请si信号量这是为进程号为1,2,3,4的进程先申请SO信号量,然后再释放进程,直至全部释放完毕这是先为进程号为1,2,3,4的进程申请信号量,然后释放1进程,再为1号进程申请信口曰.号量(31^2011013245d.exe*.□Xcmd£downcmd:dauncmd:docmd:di!)wncnd:sho^idetail—-B(currentjirDcess1>:s1:s2:s3endcnd«shawdetail4>:s0:si:s2:s3::emd:先释放资源成功了,然后为0号进程申请信号量,再释放0号进程八、实验思考1)读懂down和up操函数,并画出这两个函数的流程。答:函数分析如上述代码,并加以注释down函数流程图■开始信号量不存在Sname,pidCount--进程不存在up函数流程图开始2显示所输入信号浪不存在2)如何修改down操作,使之能一次申请多个信号量?答:假设可一次获取三个信号量down(s1,s2,s3,1)si=substr(s,instr(s,(")+1,instr(s,''-1);sis=substr(s,instr(s,','+1,instr(s,')'));s2=substr(s1s,0,instr(s1s,',')-1);s2s=substr(s1s,instr(s1s,',')+1,instr(s1s,')'));s3=substr(s2s,0,instr(s2s,',')-1);s3s=substr(s2s,instr(s2s,',')+1,instr(s2s,')'));s4=substr(s3s,0,instr(s3s,')')-1);if(s1&&s2&&s3&&s4){down(s1,atoi(s4));down(s2,atoi(s4));down(s3,atoi(s4));pflag=1;}3)在某个时刻,一个进程最多可以等待多少个信号量?答:一个进程最多可以等待的信号量数目不限。九、实验总结函数和up()函数分别对应于教材上的wait()函数与signal()函数,分别为申请资源与释放资源。在运行的过程中,也出现了一些问题,比如说,如下图所示的问题,会出现进程卡死的问题,现在我还不是很清楚问题的原因究竟是什么。*D:\OS3\201l0l3245\Debu«\2011013245.:二EKLl9IS19181913191819181919191819181918191819Ifi19181918191819181918IB191819IS1919IS£9191?IE191819丄&191819IS19181918191919Iff19181918191819IB1918191819181918191819IB1918191019181918£9181?jB191819IS191819ia191819181919191819181918191819IB191819181918191819181?IB1918计19181918£9181?IB1918IS191819is191819181919191&191818191819IB191819181918191819181?181918讦19IB19IS£9181?ift19181918191819IS191819181919191819181918191819IB191819181918191819181?IB1918191?lit19IS£?191?IB1918二P:L&191819lfi19181918191919
本文档为【操作系统实验三分析解析】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_179289
暂无简介~
格式:doc
大小:313KB
软件:Word
页数:0
分类:
上传时间:2021-11-18
浏览量:41