




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验室名称:流程管理实验要求:阅读下面的C语言示例并修改程序,以便在操作过程中可以更改其优先级(动态优先级)。例如,当一个进程被某个特定数量的时间片中断时,它的优先级会增加。关键问题是:要理解源代码,理解过程管理方法,并设计一个算法使程序能够在运行过程中修改过程优先级。设计思想:定义了一个变量来记录过程控制块中的过程中断的数量,在块功能中设置跟踪和记录过程中断的数量,并且在调度功能调度中设置算法来在3个过程中断之后将过程的优先级提高到最高水平。修改后的代码:#包括#定义真1#定义FALSE 0#定义MAXPRI 100#定义NIL -1/过程控制块结构int id。/进程号充电状态;/进程状态,e-执行状态r-高就绪状态t-低就绪状态w-等待状态c-完成状态int nextwr/等待链指针,指示等待同一信号量的下一个等待进程的进程号。int优先级;/进程优先级,值越小,优先级越高。int c;/过程中断的次数多氯联苯3;/总共有3个进程/s1和s2是三个进程共享的变量;种子是一个随机值;Registeri模拟寄存器值并存储计算的重复次数。int registeri,s1,s2,seed,exe=NIL/exe是当前运行的进程号(占用cpu)/两个信号量sem0和sem1分别与共享变量s1和s2相关联。/信号量sem0和sem1分别有两个阻塞队列,第一个由sem指定。firstwr,队列链的指针是pcb。nextwr结构int值;/信号幅度int firstwr/等待信号量的阻塞队列的第一个进程号 SEM2;/三个进程的站点保留区,其中保存区0是寄存器内容,保存区1是下一个指令地址。char保存区域34;char addr/当前正在执行的程序的当前指针void main();void init();浮动随机();int timeint(char ad);int调度程序();int find();int p(int se,char ad);空隙块(内部);int v(int se,char ad);无效唤醒(内部);void process 1();void process 2();void process 3();void ee xit(int n);/-/主程序void main()int currentProcess打印(“过程管理器 n”);init();printf(s1=%d,s2=%dn ,s1,S2);打印(过程1,过程2,过程3准备好了! n );用于(;)current process=scheduler();/进程调度,选择运行优先级最高的就绪进程。if(当前进程=NIL)休息;/所有流程都已完成。开关(当前进程)/运行当前进程代码案例0:process 1();休息;案例1:process 2();休息;案例2:process 3();休息;违约:Printf(进程号错误! n );休息;Printf(“最终结果:s1=%d,s2=%dn”,s1,S2);/-/初始化void init()int i,j;S1=0;S2=0;/生成过程控制块对于(j=0;J3;j)pcbj。id=j。/进程号pcbj。状态=r;/进程的初始状态是高就绪pcbj。nextwr=NIL。PRINTF( n进程%d的优先级?,j 1);scanf(“% d”,I);pcbj。优先级=I;/进程优先级pcbj。c=0;/初始化两个信号量sem0。值=1;/连接s1sem0。firstwr=NIL。sem1。值=1;/与s2关联sem1。firstwr=NIL。/初始化现场预留区域。每个流程都有现场预订。对于(I=1;i3;(I)对于(j=0;j4;j)save areaIj=0;/初始化结束()/-/生成0到1之间的随机值随机浮动()int m;if(seed 0)m=-seed;否则m=种子;seed=(25173 * seed 13849)e536;返回(m/32767.0);/-/检查当前进程的时间片是否已经到达。还没有,返回假,否则返回真。该系统采用分时执行,/将每个进程的执行概率指定为33%,并用生成的数字x模拟时间片/ad是程序的当前语句地址。int timeint(char ad)浮动x;x=随机();如果(x0.33)(exe=0)返回(FALSE);/当前进程是进程1,时隙还没有到达。如果(x=0.33)(x0.66)(exe=1)返回(FALSE);/当前进程是进程2,时隙还没有到达。如果(x=0.66)(x1)(exe=2)返回(FALSE);/当前进程是进程3,时隙还没有到达。/时间片已达到处理:将执行进程的状态设置为低就绪,处理器处于空闲状态。save areaexe0=registeri;/保存通用寄存器内容保存区域exe1=ad;/保存程序指针pcbexe。状态=t;/状态变为低就绪状态打印(时间片中断,进程%d转移到就绪状态,执行1);exe=NIL。返回(真);/-/流程调度:选择要投入运行的流程。返回当前进程的进程号。int调度程序()内部PD;/选择正在运行的进程pdif (pd=find()=NIL exe=NIL)回报(无);/没有要运行的进程,将会结束。if (pd!=NIL)如果(exe=NIL) /选择了进程,并且处理器处于空闲状态,则该进程将投入运行。pcbpd。状态=e;exe=pd。Printf(进程%d正在执行n ,exe 1);否则if (pcbpd。优先级=0)返回(FALSE);/成功申请资源/处理资源申请失败:块(se);/将当前进程挂起到se资源的阻塞队列中save areaexe0=registeri;/保存当前进程的寄存器内容保存区域exe1=ad;/保存当前进程下一条指令的地址exe=NIL。/放弃中央处理器返回(真);/资源应用失败/-/阻塞当前进程,并将其挂在资源se的阻塞队列中。空心砌块(内部)int w;int I;i=(se=0)?1:2;Printf(进程%d在申请s%i n 时被阻止,exe 1,I);pcbexe。状态=w;/当前进程被阻止pcbexe。c;Printf(进程%d中断计数1,当前为%dn ,exe 1,pcbexe。(c);pcbexe。nextwr=NIL。If (w=sem se)。firstwr)=nil)/se资源的阻塞队列为空,w是队列的第一个进程号。semse。firstwr=exe/当前进程是阻塞队列中的第一个进程其他同时(pcbw。下一个。=NIL)/查找队列中的最后一个进程Ww=pcbw。nextwrpcbw。nextwr=exe。/将阻塞过程挂在队列的尾部/-/V操作,释放资源se。如果没有进程等待se资
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025华电新能源集团股份有限公司面向系统内招聘10人笔试参考题库附带答案详解
- 安全标准年会招商案
- 2025“才聚齐鲁成就未来”山东省科创集团有限公司招聘33人笔试参考题库附带答案详解
- 2025广州民用房屋租赁合同样本
- 郑房管局合同协议
- 球馆出租合同协议
- 食堂改造合同协议
- 2025建筑装修合同模板示例
- 装修集资合同协议
- 整合资源合同协议
- 全新机房搬迁协议合同
- 《美的电器审计案例》课件
- 山东省青岛市市南区育才中学2025年中考数学一模试卷(含答案)
- 第十个全民国家安全教育日“全民国家安全教育 走深走实十周年”心得体会
- 网络运维方案
- 江苏省常熟市2022-2023学年高一下学期期中考试历史试题 含答案
- 2025年04月国家广播电视总局直属事业单位公开招聘310人笔试历年典型考题(历年真题考点)解题思路附带答案详解
- 地铁施工监测监理细则
- 江苏省苏州市2024-2025学年度第二学期七年级历史期中模拟试卷(1)含答案
- 住建局安全管理汇报
- 2024年山东省国控设计集团有限公司招聘笔试真题
评论
0/150
提交评论