ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:61.86KB ,
资源ID:3398557      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3398557.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(模拟进程创建终止阻塞唤醒原语操作系统原理.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

模拟进程创建终止阻塞唤醒原语操作系统原理.docx

1、模拟进程创建终止阻塞唤醒原语操作系统原理模拟进程创建、终止、阻塞、唤醒原语-操作系统原理操作系统原理 题 目:模拟进程创建、终止、阻塞、唤醒原语院 (部): 管理工程学院专 业: 信息管理与信息系统班 级: 信管131姓 名: 栾庆一学 号: 20130216027实验题目一:模拟进程创建、终止、阻塞、唤醒原语一、题目类型:必做题目。二、实验目的:通过设计并调试创建、终止、阻塞、唤醒原语功能,有助于对操作系统中进程控制功能的理解,掌握操作系统模块的设计方法和工作原理。三、实验环境:1、硬件:pc机及其兼容机。2、软件:Windows OS,Turbo C或C+、VC+、VS.net、Java等

2、。四、实验内容:1、设计创建、终止、阻塞、唤醒原语功能函数。2、设计主函数,采用菜单结构(参见后面给出的流程图)。3、设计“显示队列”函数,目的能将就绪、阻塞队列中的进程信息显示在屏幕上,以供随时查看各队列中进程的变化情况。void block();void rouse();void stop();void outPut();void control();/实验二添加函数void order_control();/实验二添加函数void time_control();/实验二添加函数void insert() jilu=0;/jilu是一个用于判断的变量,在重复时进行判断跳过 if(i=10)

3、 printf(进程已经存在10个,无法继续添加进程n); else printf(请输入插入pcb的数据:n); printf(1、进程名:); scanf(%s,&pcbi.name); printf(2、该进程的优先级(1-10):); scanf(%d,&pcbi.order); printf(3、运行时间); scanf(%d,&pcbi.time); for(y=0;y0)jilu=0; else printf(输入已经完成n您输入的数据为:n进程名: %sn优先级: %dn运行时间: %dn,pcbi.name,pcbi.order,pcbi.time); printf(-n);

4、 strcpy(ghosti.name,pcbi.name); ghosti.order=pcbi.order; ghosti.time=pcbi.time; pcbi.status=1; ghosti.status=1; pcbi.wtime=pcbi.time; pcbi.ytime=0; i+; void block() int m; printf(n请输入您要改变状态的进程的进程名: ); scanf(%s,&a_name); for(y=0;y=i;y+) if(strcmp(pcby.name,a_name)=0) a=1; if(pcby.status=0) printf(您要修

5、改的进程已经是阻塞状态,无法更改n); if(pcby.status=2) pcby.status=0; for(m=0;m=i;m+) if(strcmp(ghostm.name,a_name)=0) ghostm.status=0; printf(操作已完成,进程成功改为阻塞状态n); if(a=0) printf(对不起!您查找的进程名不存在n); a=0;void rouse() int m; printf(n请输入您要改变状态的进程的进程名: ); scanf(%s,&a_name); for(y=0;y=i;y+) if(strcmp(pcby.name,a_name)=0) a=

6、1; if(pcby.status=1) printf(您要修改的进程已经是就绪状态,无法更改n); break; ; if(pcby.status=0) pcby.status=1; for(m=0;m=i;m+) if(strcmp(ghostm.name,a_name)=0) ghostm.status=1; printf(操作已完成,进程成功改为运行状态n); break; if(a=0) printf(对不起!您查找的进程名不存在n); a=0;void stop() printf(n请输入您要改变状态的进程的进程名: ); scanf(%s,&a_name); for(y=0;y=

7、i;y+) if(strcmp(pcby.name,a_name)=0) a=1; for(;yi;y+) pcby=pcby+1; i-; printf(操作已完成,进程成功删除n); break; if(a=0) printf(对不起!您查找的进程名不存在n); a=0;void outPut() if(i=0) printf(对不起,没有进程存在,无法显示n); else printf(nn 已存在进程分别为:(状态:2表示正在运行,1表示就绪,0表示阻塞)n); for(y=0;yi;y+) if(pcby.status!=3)printf(进程%d 进程名: %s 状态: %dn,y

8、+1,pcby.name,pcby.status); void control() for(;1;) printf(进程调度子菜单n0 :返回主菜单n1 :优先级调度n2 :时间片轮转调度n请输入您想要进行的操作的指令 :); scanf(%d,&x); if(x=0) break; switch(x) case 0: break; case 1: order_control(); break; case 2: time_control(); break; default: printf(您输入的指令有误,请重新输入n); break; void order_control() int jis

9、hi;/用于CPU运行时间计时 jishi=0; char panduan1,panduan2;/用于判断是否继续调度 struct ghost jiaohuan; int gg,bl; for(gg=0;ggi;gg+) if(pcbgg.status=2) for(bl=0;bli;bl+) if(strcmp(ghostbl.name,pcbgg.name)=0) ghostbl.status=2; for(x=0;xi-1;x+) for(y=x+1;yi;y+) if(ghostx.orderghosty.order) jiaohuan=ghostx; ghostx=ghosty;

10、ghosty=jiaohuan; /以上语句是根据优先级为进程排序 printf(nn按照优先级调度进程,具体内容为:n); for(x=0;xi;x+) if(ghostx.status=1) printf(正在运行的进程: %sn优先级: %dn运行时间: %dnnn,ghostx.name,ghostx.order,ghostx.time); for(y=0;y=i;y+) if(strcmp(pcby.name,ghostx.name)=0) pcby.status=2; ghostx.status=2; ;/该语句用于更改另一个结构体进程的状态 printf(是否继续运行直至进程运行

11、完毕(Y/N); scanf(%s,&panduan1); if(panduan1=Y|panduan1=y) if(ghostx.status=2) jishi=jishi+ghostx.time; printf(CPU运行时间 %d ,进程 %s 运行完毕,正在关闭!n,jishi,ghostx.name); for(y=0;y=i;y+) if(strcmp(pcby.name,ghostx.name)=0) pcby.status=3; ghostx.status=3; ;/该语句用于更改另一个结构体进程的状态 if(x=(i-1) printf(所有进程全部运行完毕!n-n); el

12、se printf(-n是否继续调度(y/n); scanf(%s,&panduan2); if(panduan2=N|panduan2=n)break; else break; printf(如果无输出内容,请检查就绪队列是否存在进程);void time_control() int z,kz1,kz2,kz3,kz4,kz5,kz6;/kz1表示时间片运行的时间计时,kz2表示CPU运行的总时间,kz3用于所有进程时间的输出kz4表示已完成的进程数kz5用于表示状态为就绪的进程的个数kz6用于更改ghost的状态值 z=0;kz2=0;kz4=0;kz5=0; for(y=0;yi;y+)

13、 if(pcby.status=1) kz5=kz5+1; printf(nn请输入时间片长度: ); scanf(%d,&x); printf(nn按照时间片轮转调度进程,具体内容为:n); if(kz5!=0) for(;kz4kz5;) for(y=0;yi;y+) if(pcby.status=1|pcby.status=2) for(kz1=0;kz1x;kz1+) if(pcby.status=1|pcby.status=2) kz2=kz2+1; pcby.wtime=pcby.wtime-1; pcby.ytime=pcby.ytime+1; printf(CPU运行时间: %

14、d ,正在运行进程: %sn,kz2,pcby.name); printf(进程名 已运行时间 未运行时间 要求运行时间n); for(kz3=0;kz3i;kz3+) if(pcbkz3.status=1|pcbkz3.status=2) printf(%s%12d%12d%12dn,pcbkz3.name,pcbkz3.ytime,pcbkz3.wtime,pcbkz3.time); if(pcby.wtime=0&pcby.status!=3) printf(进程 %s 运行完毕,正在关闭!n-n,pcby.name); kz4=kz4+1; pcby.status=3; for(kz6

15、=0;kz6i;kz6+) if(strcmp(ghostkz6.name,pcby.name)=0) ghostkz6.status=3; kz1=x; break; printf(-n); printf(注意:如果未输出过程,请检查就绪列表是否存在进程n);void main() char c; for(;1;) printf(系统主菜单n); printf(1、创建n); printf(2、阻塞n); printf(3、唤醒n); printf(4、终止n ); printf(5、显示n); printf(6、调度n); printf(0、退出n); printf(请输入操作指令 : )

16、; if(scanf(%d,&x) if(x=0) break; switch(x) case 1: insert(); break; case 2: block(); break; case 3: rouse(); break; case 4: stop(); break; case 5: outPut(); break; case 6: control(); break; case 0: break; default: printf(格式非法,请重新输入n); break; else if(scanf(%c,&c) printf(格式非法,请重新输入n); 七、程序中使用的数据结构及符号说

17、明struct pcb char name10; int status; int order; int time; int wtime; int ytime;pcb11;/该结构体用于存储已经输入的进程struct ghost char name10; int status; int order; int time;ghost11;/该结构体用于优先级调度时,进程的优先级排序void insert();/添加进程void block();/阻塞进程void rouse();/唤醒进程void stop();/删除进程void outPut();/输出void control();/实验二添加函数void order_control();/实验二添加函数void time_control();/实验二添加函数八、调试程序时出现问题及解决方法问题一:现象:使用阻塞功能后,输出功能无法正常显示进程状态。解决:在进程的结构体中添加控制进程状态的变量。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1