网站大量收购独家精品文档,联系QQ:2885784924

操作系统实习实验3..doc

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
操作系统实习实验3.

实验三 P、V 原语的模拟实现 周骞 电子商务102班 2010012802 一、实验内容 本实验针对操作系统中信号量相关理论进行实验,要求实验者输入实验指导书提供的代码并进行测试。代码主要模拟信号量的 P 操作(down)和 V 操作(up)。 1)输入代码 2) 进行功能测试并得出正确结果。 截图: Down操作 1.S1,s2,s3有等待队列的情况 2.没有等待队列的情况 3.S0信号量最大 4.进行up操作之前的信号量与pcb进程 Up操作 1.释放0号pcb进程的信号量; 释放10号进程的信号量 释放11号进程的信号量 释放12号进程的信号量 分析 dwon 和 up 函数功能模块; 文字分析: void down(char * sname,int pid) { int fflag,pflag,i; pnode *p,*p1; semphore *s; fflag=0; pflag=0; for(i=0;i5;i++) if(!strcmp(sem[i].name,sname))//根据名字找到信号量 { s=sem[i];//将找到的信号量存入s fflag=1;//设置信号量标志位fflag为1,表示找到了信号量; break; } for(i=0;i20;i++) //根据pid找到pcb进程 if(pr[i]-node-pid == pid) { p1 = pr[i];//存入p1 pflag=1;//设置进程标志位pflag为1,表示找到了pcb break; } if(!fflag) //如果找不到资源信号量 { printf(the semphore %s is not exist!\n,sname);//输出没有该信号量 return; } if(!pflag) //如果找不到pcb进程, { printf(the process %d is not exist!\n,pid);//输出没有该pcb进程 return; } s-count--; //被该pcb进程占用的资源信号量减1 if(s-count=0) //如果当前资源信号量没有被用完 s-curpid = p1-node-pid;//当前pcb进程就占用该资源量; else { if(s-wlist) //如果等待链表不为空,就去找等待链表的尾部插入 //如果当前pcb进程所要占用的资源信号量没有了 //就将该进程pcb放到该进程链表的尾部去等待, { for(p=s-wlist;p-next;p=p-next); p-next=p1; } else //如果等待链表为空,则该pcb进程将是第一个等待的pcb进程,直接插入 s-wlist=p1; } } //up operation void up(char *sname)//释放资源信号量 { int fflag=0,i; for( i=0;i5;i++)//根据输入的sname找到要释放的资源信号量 if(!strcmp(sem[i].name,sname))//如果找到 { fflag=1;//将资源信号量标志置为1 break; } if(fflag) // { sem[i].count++;//该资源信号量加1表示释放 if(sem[i].wlist) //如果在等待链表中有请求该资源信号量的pcb进程 { sem[i].curpid = sem[i].wlist-node-pid;//资源信号量被在等待链表中的第一个pcb进程所占用 sem[i].wlist = sem[i].wlist-next;//等待链表指向下一个等待的pcb进程 } } else printf(the semphore %s is not exist!\n,sname);//如果找不到该资源信号量就输出 } ) 在实验报告中画出 dwon 和 up 函数流程图; 流程图分析: Down()流程图 Up()流程图 实验思考: 读懂down和up操函数,并画出这两个函数的流程。(如上题) 2)如何修改 down 操作,使之能一次申请多个信号量? 修改如下: 假设可一次获取获取3个信号量 Down(s1,s2,s3,1)可以这样改 s1

文档评论(0)

s4as2gs2cI + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档