模拟进程创建、终止、阻塞、唤醒原语,操作系统原理_第1页
模拟进程创建、终止、阻塞、唤醒原语,操作系统原理_第2页
免费预览已结束,剩余10页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

2、,采用菜单结构(参见后面给出的流程图)。3、设计“显示队列”函数,目的能将就绪、阻塞队列中的进程信息显示在屏幕上,以供 随时查看各队列中进程的变化情况。五、 算法流程图六、程序清单#i nclude #in clude struct pcbchar n ame10; int status;int order;int time;int wtime;int ytime;pcb11;/该结构体用于存储已经输入的进程struct ghostchar name10;int status;int order;int time;ghost11;/该结构体用于优先级调度时,进程的优先级排序char a_nam

3、e10;int i=0,y,a=0,x,z,jilu;void insert();void block();void rouse();void stop();void outPut();void control();/实验二添加函数void order_control();/实验二添加函数void time_control();/实验二添加函数void insert()jilu=0;/jilu是一个用于判断的变量,在重复时进行判断跳过if(i=10)printf(进程已经存在10个,无法继续添加进程n); elseprintf(请输入插入pcb的数据:n);printf(1、进程名:); sc

4、anf(%s,&);printf(2、该进程的优先级(1-10):); scanf(%d,&pcbi.order);printf(3、运行时间);scanf(%d,&pcbi.time);for(y=0;y0)jilu=0;elseprintf(输入已经完成n您输入的数据为:n进程名: %sn优先级:时间: %dn,,pcbi.order,pcbi.time);printf(- n);strcpy(,);ghosti.order=pcbi.order; ghosti.time=pcbi.time

5、;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(,a_name)=0)a=1;if(pcby.status=0)printf(您要修改的进程已经是阻塞状态,无法更改n);if(pcby.status=2)pcby.status=0;for(m=0;m=i;m+)if(strcmp(,a

6、_name)=0)ghostm.status=0;printf(操作已完成,进程成功改为阻塞状态n);%dn运行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(,a_name)=0)a=1;if(pcby.status=1)printf(您要修改的进程已经是就绪状态,无法更改break;if(pcby.status=0)pcby.status=1;for(m=0;m=i;

7、m+)if(strcmp(,a_name)=0)ghostm.status=1;printf(操作已完成,进程成功改为运行状态n); break;if(a=0)printf(对不起!您查找的进程名不存在n);n);a=0;void stop()printf(n请输入您要改变状态的进程的进程名: ); scanf(%s,&a_name);for(y=0;y=i;y+)if(strcmp(,a_name)=0)a=1; for(;yi;y+)pcby=pcby+1;i-;printf(操作已完成,进程成功删除n); break;if(a=0)prin

8、tf(对不起!您查找的进程名不存在n);a=0;void outPut()if(i=0)printf(对不起,没有进程存在,无法显示n);elseprintf(nn已存在进程分别为:(状态:2表示正在运行,1表示就绪,0表示阻塞)n);for(y=0;yi;y+)if(pcby.status!=3)printf(进 程%d进 程 名: %s状 态:%dn,y+1,,pcby.status);void control()for(;1;)printf(进程调度子菜单n0 :返回主菜单n1 :优先级调度n2 :时间片轮转调度n请输入您想要进行的操作的指令 :);scanf(%d,&

9、amp;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 jishi;/用于CPU运行时间计时jishi=0;char pan dua n1,pa ndua n2;用于判断是否继续调度struct ghost jiaohuan;int gg,bl; for(gg=0;ggi;gg+)if(pcbgg.status=2)for(bl

10、=0;bli;bl+)if(strcmp(,)=0)ghostbl.status=2;for(x=0;xi-1;x+)for(y=x+1;yi;y+)if(ghostx.orderghosty.order)jiaohuan=ghostx;ghostx=ghosty;ghosty=jiaohuan;/以上语句是根据优先级为进程排序printf(nn按照优先级调度进程,具体内容为:n);for(x=0;xi;x+)if(ghostx.status=1)printf(正 在 运 行 的 进 程: %sn优 先 级: %dn运 行 时 间:%dnnn,gho

11、,ghostx.order,ghostx.time);for(y=0;y=i;y+)if(strcmp(,)=0)pcby.status=2; ghostx.status=2;/该语句用于更改另一个结构体进程的状态printf(是否继续运行直至进程运行完毕(Y/N); scanf(%s,&panduan1);if(panduan1=Y|panduan1=y)if(ghostx.status=2)jishi=jishi+ghostx.time;printf(CPU运行时间%d ,进程%s运行完毕,正在关闭!n,jishi,ghost

12、);for(y=0;y=i;y+)if(strcmp(,)=0)pcby.status=3; ghostx.status=3;/该语句用于更改另一个结构体进程的状态if(x=(i-1)printf(所 有 进 程 全 部 运 行 完 毕 !n- n);elseprintf(- n是否继续调度(y/n);scanf(%s,&panduan2); if(panduan2=N|panduan2=n)break; else break;printf(如果无输出内容,请检查就绪队列是否存在进程);void time_control()int z

13、,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+)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.sta

14、tus=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运 行 时间: %d ,正在运行进程: %sn,kz2,);printf(进程名 已运 行时间 未运行时间 要求运行时间n);for(kz3=0;kz3i;kz3+)if(pcbkz3.status=1|pcbkz3.status=2)printf(%s%12d%12d%12dn,

15、,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=0;kz6i;kz6+)if(strcmp(,)=0)ghostkz6.status=3; kz1=x;break;printf(- n);printf(注意:如果未输出过程,请检查就绪列表是否存在进程void main()char c;for(;1;

16、)printf(系统主菜单n);printf(1、创建n);printf(2、阻塞n);printf(3、唤醒n);printf(4、终止n );printf(5、显示n);printf(6、调度n);printf(0、退出n); printf(请输入操作指令: ); 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);七、程序中使用的数据结构及符号说明struct pcbchar name10;int status;int order;int time;int wtime;int ytime;pcb11;/该结构体用于存储已经输入的进程n);struct ghostchar name10;int status;int order;int time;ghost

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论