版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 1 2022-3-24进程调度及进程同步模拟实验要求编程完成进程调度及同步模拟。可定义若干进程并发执行,进程数可定义以上进程。进程同步与互斥问题可选n用生产者消费者问题n哲学家就餐问题n读者写者问题l进程调度可任选一种调度算法l每进程完成的工作最好写在磁盘文件中。进程调度及进程同步模拟实验l下列程序是完成进程同步与互斥的信号量操作,有三个进程pcb1.3共享变量s1,s2,三进程s1作加运算,pcb2,pcb3对s2作加运算。主要数据结构进程控制块structint id; /*进程标识*/char status /*进程状态*/;int nextwr; /*指向进程控制块后继的指针*/in
2、t priority; /*进程优先级*/ pcb3; /*进程控制块*/struct int value; int firstwr; /指向信号量等待队列 sem2;/信号量主要数据结构lchar savearea34;/上下文切换区,存放三个进程在切换时的上下文lchar addr;/地址变量lint i,s1,s2,seed,exe=NIL;/s1,s2是共享变量寄存器i地址主要模块l初始化模块init() /初始化程序l int j;l for (j=0;j3;j+)l pcbj.id=j;l pcbj.status=r;/进程控制块初始化,进程状态是就绪态l pcbj.nextwr=
3、NIL;l printf(n process %d priority? ,j+1);l scanf(%d,&i);l pcbj.priority=i;l l sem0.value=1; /信号量初始化l sem0.firstwr=NIL;l sem1.value=1;l sem1.firstwr=NIL;l for(i=0;i3;i+)l for(j=0;j4;j+)l saveareaij=0;/上下文切换区初始化为空l主要模块lfloat random()lint m;l if(seed0) m=-seed;l else m=seed;l seed=(25173*seed+1384
4、9)%65535;l return(m/32767.0);l/产生随机数程序主要模块ltimeint(char ad) /* The time slice interrupt*/l /子调度程序l float x;l x=random();l if(x0.33 & exe=0) return(FALSE);l if(x0.66 & exe=1) return(FALSE);l if(x1 & exe=2) return(FALSE);l saveareaexe0=i;/用变量I模仿寄存器,作为保存上下文内容之一。l saveareaexe1=ad;/被调度程序的地址l
5、pcbexe.status=t;/进程状态为高就绪态l printf(Times silce interrupt process%d enter into ready.n,exe+1);l exe=NIL; exe指向正在执行(运行)的进程l return TRUE;llscheduler()进程调度程序lint pd;l if(pd=find()=NIL & exe=NIL)l return(NIL);/此时无进程可调度,系统为空闲l if(pd!=NIL)l if(exe=NIL)l pcbpd.status=e;l exe=pd;l printf(process%d is exe
6、cuting.n,exe+1);l l else if(pcbpd.prioritypcbexe.priority)l pcbexe.status=r;l printf(process %d enter into readyn,exe+1);l pcbpd.status=e;l exe=pd;l printf(process %d is executingn,exe+1);l l l i=saveareaexe0;l addr=saveareaexe1;l return(exe);l1.find()先查找高就绪态进程队列中找一进程,若没有低再到就绪态进程队列中找一进程。2. int j,pd=
7、NIL,w=MAXPRI;3. for(j=0;j3;j+)4. if(pcbj.status=r)5. if(pcbj.priorityw)6. w=pcbj.priority;7.pd=j;8. 9. if(pd=NIL)10. for(j=0;j3;j+)11. if(pcbj.status=t)12.if(pcbj.priority=0) return(FALSE);4. block(se);5. saveareaexe0=i;6. saveareaexe1=ad;7. exe=NIL;8. return(TRUE);9.进程阻塞操作lblock(se)lint se;lint w;l
8、printf(process %d is blockedn,exe+1);lpcbexe.status=w;lpcbexe.nextwr=NIL;lif(w=semse.firstwr)=NIL)lsemse.firstwr=exe;lelsel while(pcbw.nextwr!=NIL)lw=pcbw.nextwr;l pcbw.nextwr=exe;l l信号量的signal()操作1.signal(int se,char ad)2. if(+semse.value0) return(FALSE);3. wakeup(se);4. saveareaexe1=ad;5. savearea
9、exe0=i;6. return(TRUE);7.进程唤醒操作1.wakeup(int se)2. int w;3. w=semse.firstwr;4. if(w!=NIL)5. semse.firstwr=pcbw.nextwr;6. pcbw.status=r;7. printf(process %d is waken upn,w+1);8. 9.process1() if(addr=a) goto a1; if(addr=b) goto b1; if(addr=c) goto c1; if(addr=d) goto d1; if(addr=e) goto e1; if(addr=f)
10、goto f1; Process()。for(i=1;i6;i+) printf(process1 calls wait on the semaphore 1n); if(wait(0,a) break;a1: printf(process1 is call wait on the semphore 1n); if(timeint(b) break;b1: printf(“s1=%dn”,+s1); printf(process1 call signal on semphore1 and quit cretical section 1.n); if(signal(0,c) break;c1:
11、printf(process1 call wait on semphore 2.n); if(wait(1,d) break;d1: printf(process1 is execting cretical section 2.n); if(timeint(e) break;e1: printf(“s2=%dn”,+s2); printf(process1 call signal on semaphore2 and quit cretical section2n); if(signal(1,f) break;f1: printf(process1 cycle count =%dn,i); if
12、(i6) return ; eexit(0);Process()。 for(i=1;i6;i+) printf(process2 calls wait on the semaphore 2.n); if(wait(1,a) break;a2: printf(process2 is call wait on the semphore 2.n); if(timeint(b) break;b2: printf(“s2=%dn”,+s2); printf(process2 call signal on semphore1 and quit cretical section 2.n); if(signa
13、l(1,c) break;c2: printf(process2 call wait on semphore 1.n); if(wait(0,d) break;d2: printf(process2 is execting cretical section 1.n); if(timeint(e) break;e2: printf(“s1=%dn”,+s1); printf(process2 call signal on semaphore2 and quit cretical section1n); if(signal(0,f) break;f2: printf(process2 cycle
14、count =%dn,i); if(i6) return ; eexit(0);process3() if(addr=a) goto a3; if(addr=b) goto b3; if(addr=c) goto c3; for(i=1;i6;i+) printf(process3 calls wait on the semaphore 2.n); if(wait(1,a) break;a3: printf(process3 is execting cretical section 2.n); if(timeint(b) break;b3: printf(s2=%dn,+s2); printf(process3 call signal on semphore2 and quit cretical section 2.n); if(signal(1,c) break;c3: printf(process3 cycle count =%dn,i); if(i6) return ; eexit(2);main()int k; printf(*process management*nn); init(); printf(s1=%d, s2=%dn,s1,s2); printf(process1,process2,process3 are all in rea
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度个人承包户外广告牌安装合同范本3篇
- 二零二五年度房产更名买卖合同绿色环保生活3篇
- 二零二五年度教育培训机构委托合作合同3篇
- 二零二五年度城市更新项目安置房买卖合同2篇
- 二零二五年度化妆品广告创意制作与品牌合作合同3篇
- 海南职业技术学院《中文信息处理技术》2023-2024学年第一学期期末试卷
- 海南外国语职业学院《地质微生物学》2023-2024学年第一学期期末试卷
- 二零二五年度建筑工程二次结构承包与建筑废弃物资源化利用、处理与回收合同3篇
- 2025年度建筑装修用涂料采购及施工一体化合同2篇
- 课程设计技术特性表
- 经济职业技术学院教务教学管理制度汇编(2024年)
- ISO 56001-2024《创新管理体系-要求》专业解读与应用实践指导材料之15:“6策划-6.4创新组合”(雷泽佳编制-2025B0)
- 2025混凝土外加剂买卖合同
- 2024年电影院项目可行性研究报告
- GB/T 45079-2024人工智能深度学习框架多硬件平台适配技术规范
- 福建省厦门市2023-2024学年高二上学期期末考试质量检测化学试题 附答案
- 假期师生读书活动方案2024年
- Unit 5 Dinner's ready Read and write(说课稿)-2024-2025学年人教PEP版英语四年级上册
- 2024年广东省公务员录用考试《行测》真题及答案解析
- 国家安全教育高教-第六章坚持以经济安全为基础
- 2024年城市环卫一体化服务合同
评论
0/150
提交评论