版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、原语的模拟实现一、实验目的本课题实习的目的是,加深对进程概念及进程管理各部分内容的理解;熟悉进程管理中主要数据结构的设计及进程调度算法,进程控制机构、同步结构、通迅机构的实施。要求设计一个允许n个进程并发运行的进程管理模拟系统。该系统包括有简单的进程控制、同步及通迅机构,其进程调度算法可任意选择。每个进程用一个PCB 表示,其内容可根据具体情况设置。各进程之间应有一定的同步关系。系统在运行过程中应能显示或打印各进程的状态及有关参数的变化情况,以便观察诸进程的运行过程及系统的管理过程。1) 理解信号量相关理论;2)掌握记录型信号量结构;3)掌握P、 V 原语实现机制。二、实验要求1) 输入给定代
2、码;2)进行功能测试并得出正确结果。3)分析P和V函数功能模块;4)在实验报告中画出P 和 V 函数流程图;5)撰写实验报告。三、实验内容本实验针对操作系统中信号量相关理论进行实验,要求实验者输入实验指导书提供的代码并进行测试。代码主要模拟信号量的P 操作和 V 操作。1) 信号量信号量也称为信号锁,主要应用于进程间的同步和互斥,在用于互斥时,通常作为资源锁。信号量通常通过两个原子操作P 和 V 来访问。P 操作使信号量的值+1 , V 操作使信号量的值-1 。2)记录型信号量记录型信号量采用了“让权等待”的策略, 存在多个进程等待访问同一临界资源的情况,所以记录型信号量需要一个等待链表来存放
3、等待该信号量的进程控制块或进程号。在本实验中,使用记录型信号量。四、功能测试五#include<stdio.h>#defineTRUE1#defineFALSE0#defineMAXPRI100#defineNIL-1structintid;charstatus;intnextwr;intpriority;pcb1; structintvalue;intfirstwr;sem2;charsavearea13,addr;inti,s1,s2,seed,exe=NIL;init()intj;for(j=0;j<1;j+)pcbj.id=j;pcbj.status='r
4、39;pcbj.nextwr=NIL;printf("nprocess%dpriority?",j+1);scanf("%d",&i);pcbj.priority=i;sem0.value=1;sem0.firstwr=NIL;sem1.value=1;sem1.firstwr=NIL;for(i=1;i<1;i+)for(j=0;j<3;j+)saveareaij='0'floatrandom()intm;if(seed<0)m=-seed;elsem=seed;seed=(24151*seed+11839)%
5、64416;return(m/12565.0);timeint(charaddr)floatx;x=random();if(x<0.11)&&(exe=0)return(FALSE);if(x<0.66)&&(exe=1)return(FALSE);if(x<1.0)&&(exe=2)return(FALSE);saveareaexe0=i;saveareaexe1=addr;pcbexe.status='t'printf("Timessilceinterrupt'nprocess%denter
6、intoready.n",exe+1);exe=NIL;return(TRUE);find()intj,pd=NIL,w=MAXPRI;for(j=0;j<1;j+)if(pcbj.status='r')if(pcbj.priority<w)w=pcbj.priority;pd=j;if(pd=NIL)for(j=0;j<1;j+)if(pcbj.status='t')if(pcbj.priority<w)w=pcbj.priority;pd=j;return(pd);scheduler()intpd;if(pd=find()=
7、NIL&&exe=NIL)return(NIL);if(pd!=NIL)if(exe=NIL)pcbpd.status='e'exe=pd;printf("process%disexecuting.n",exe+1);elseif(pcbpd.priority<pcbexe.priority)pcbexe.status='r'printf("process%denterintoreadyn",exe+1);pcbpd.status='e'exe=pd;printf("proc
8、ess%denterintoreadyn",exe+1);i=saveareaexe0;addr=saveareaexe1;return(exe);block(intse)intw;printf("process%disblockedn",exe+1);pcbexe.status='w'pcbexe.nextwr=NIL;if(w=semse.firstwr)=NIL)semse.firstwr=exe;elsewhile(pcbw.nextwr!=NIL) w=pcbw.nextwr;pcbw.nextwr=exe;p(intse,charad)
9、if(-semse.value>=0)return(FALSE);block(se);saveareaexe0=i;saveareaexe1=ad;exe=NIL;return(TRUE);wakeup(intse)intw;w=semse.firstwr;if(w!=NIL)semse.firstwr=pcbw.nextwr;pcbw.status='r'printf("process%diswakenupn",w+1);v(intse,charad)if(+semse.value>0)return(FALSE);wakeup(se);save
10、areaexe1=ad;saveareaexe0=i;return(TRUE);eexit(intn)pcbn.status='c'printf("process%discompleted!n",n+1);exe=NIL;processl()if(addr='a')gotoa1;if(addr='b')gotob1;if(addr='c')gotoc1;if(addr='d')gotod1;if(addr='e')gotoe1;if(addr='f')gotof1
11、;for(i=1;i<6;i+)printf("process1callsPonthesemaphore1n");if(p(0,'a')break;a1:printf("process1isexecutinginthecreticalsection1n");if(timeint('b')break;b1:printf("s1=%dn",+s1);printf("process1callsV onsemaphorelandquitcreticalsection1n");if(v(
12、0,'c')break;c1:printf("process1callsPonesemaphorel2n");if(p(1,'d')break;d1:printf("process1isexectingcreticalsection2n");if(timeint('e')break;e1:printf("s2=%dn",+s2);printf("process1callsV onsemaphore2andquitcreticalsection2n");if(v(1,&
13、#39;f')break;f1:printf("process1cyclecount=%dn",i);if(i<6)return;eexit(0);process2()if(addr='a')gotoa2;if(addr='b')gotob2;if(addr='c')gotoc2;if(addr='d')gotod2;if(addr='e')gotoe2;if(addr='f')gotof2;for(i=1;i<6;+i)printf("proces
14、s2callsPonthesemaphore2n");if(p(1,'a')break;a2:printf("process2isexecutinginthecreticalsection2n");if(timeint('b')break;b2:printf("s2=%dn",+s2);printf("process2callsV onsemaphore2andquitcreticalsection2.n");if(v(1,'c')break;c2:printf("p
15、rocess2callsPonesemaphore1.n");if(p(0,'d')break;d2:printf("process2isexectingcreticalsection1.n");if(timeint('e')break;e2:printf("s1=%dn",+s1);printf("process2callsV onsemaphore1andquitcreticalsection1.n");if(v(0,'f')break;f2:printf("pr
16、ocess2cyclecount=%dn",i);if(i<6)return;eexit(1);process1()if(addr='a')gotoa1;if(addr='b')gotob1;if(addr='c')gotoc1;for(i=1;i<6;+i)printf("process1,callsPonsemaphore2n");if(p(1,'a')break;/*process1isbiocked*/a1:printf("process1isexeccutingonit
17、screticalsectionn");if(timeint('b')break;b1:printf("s2=%dn",+s2);printf("process1callsV onsemapore2andquitcreticalsectionn");if(v(1,'c')break;/*wakeupabiockedprocess*/c1:printf("process1cyciencount=%dn",i);if(i<6)return;eexit(2);main()intk;printf("*processmanagement*nn");init();printf("s1=%d,s2=%dn",s1,s2);printf("process1,process
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 北京2025年首都医科大学附属北京世纪坛医院面向应届生招聘45人笔试历年参考题库附带答案详解
- 北京2025年北京妇幼保健院招聘5人笔试历年参考题库附带答案详解
- 内江2025下半年四川内江威远县招聘事业单位工作人员26人笔试历年参考题库附带答案详解
- 伊春2025年黑龙江伊春市中心医院招聘54人笔试历年参考题库附带答案详解
- 乐山2025年四川乐山峨眉山市从“三支一扶”和“大学生志愿服务西部”人员中招聘事业单位工作人员笔试历年参考题库附带答案详解
- 丹东2025年辽宁丹东市第一医院招聘61人笔试历年参考题库附带答案详解
- 中山广东中山市东凤镇第二中学招聘临聘教师笔试历年参考题库附带答案详解
- 中央2025年中国红十字会总会所属事业单位招聘10人笔试历年参考题库附带答案详解
- 三明2025年福建三明宁化县招聘中小学新任教师38人笔试历年参考题库附带答案详解
- 2026深圳市机场(集团)有限公司校园招聘笔试参考题库附带答案详解(3卷)
- 陶瓷工艺品彩绘师改进水平考核试卷含答案
- 2025广东百万英才汇南粤惠州市市直事业单位招聘急需紧缺人才31人(公共基础知识)测试题附答案
- 粉尘防护知识课件
- (2025年)粮食和物资储备局招聘考试题库(答案+解析)
- 2026年乐陵市市属国有企业公开招聘工作人员6名备考题库及答案详解一套
- DB32/T+5309-2025+普通国省道智慧公路建设总体技术规范
- 2025-2030中国环保污水处理产业现状供需研判及投资前景规划分析报告
- 康复医学中心运营报告
- 酒店餐饮营销管理制度内容(3篇)
- 林业执法案件课件
- 卵巢囊肿蒂扭转治疗课件
评论
0/150
提交评论