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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

东北大学操作系统实验之Linux及进程状态.docx

1、东北大学操作系统实验之Linux及进程状态操作系统实验报告一 实验一 进程状态转换及其PCB的变化一、实验目的:自行编制模拟程序,通过形象化的状态显示,使学生理解进程的概念、进程之间的状态转换及其所带来的PCB内容 、组织的变化,理解进程与其PCB间的一一对应关系。二、实验内容及要求:(1)、 设计并实现一个模拟进程状态转换及其相应PCB内容、组织结构变化的程序。(2)、 独立编写、调试程序。进程的数目、进程的状态模型(三状态、五状态、七状态或其它)以及PCB的组织形式可自行选择。(3)、 合理设计与进程PCB相对应的数据结构。PCB的内容要涵盖进程的基本信息、控制信息、资源需求及现场信息。(

2、4)、 设计出可视性较好的界面,应能反映出进程状态的变化引起的对应PCB内容、组织结构的变化。(5)、 代码书写要规范,要适当地加入注释。(6)、 鼓励在实验中加入新的观点或想法,并加以实现。(7)、 认真进行预习,完成预习报告。 (8)、 实验完成后,要认真总结,完成实验报告。五状态模型: 3、主要数据结构:struct Run_type /运行态进程 char name; int state; int needtime; int priority;struct Ready_type /就绪态进程 char name; int needtime; int priority;struct Bl

3、ocked_type /阻塞态进程 char name; int needtime; int priority;4、程序源代码:#include#include#includeint i=0; int j=0;struct Run_type char name; int state; int needtime; int priority;struct Ready_type char name; int needtime; int priority;struct Blocked_type char name; int needtime; int priority;struct Run_type

4、Cpu;struct Ready_type Ready10;struct Blocked_type Blocked10;void Creat() /创建一个新的进程 int k=0;label1: printf( input new process name(input a letter): n); scanf(%s,&(Readyi.name);getchar(); for(k=0;ki;k+) if(Readyi.name=Readyk.name|Readyi.name=Readyk.name+32|Readyi.name=Readyk.name-32) printf(the proces

5、s is already exist!); goto label1; printf(input needtime (input a int number):n);label3: scanf(%d,&(Readyi.needtime);getchar(); if(Readyi.needtime100) printf(please input the true needtime(1-100)n); goto label3; printf( input the priority(1-10): n);label2: scanf(%d,&(Readyi.priority);getchar(); if(R

6、eadyi.priority10) printf(please 1-10!n); goto label2; i+;void Dispath() /P135 int t;char v;int k;int j; if(Cpu.state=0) if(Readyi-1.needtime=0) printf(* there is no process ready!n); exit(0); else for(k=0;ki-1;k+) for(j=0;jReadyj+1.priority) t=Readyj.priority; Readyj.priority=Readyj+1.priority;Ready

7、j+1.priority=t; t=Readyj.needtime; Readyj.needtime=Readyj+1.needtime;Readyj+1.needtime=t; v=Readyj.name; Readyj.name=Readyj+1.name;Readyj+1.name=v; -i; Cpu.name=Readyi.name;Cpu.needtime=Readyi.needtime;Cpu.priority=Readyi.priority;Cpu.state=1; printf(*%5c is send to cpu! n,Cpu.name); Cpu.needtime-;

8、if(Cpu.needtime=0) printf(*%5c is finished n,Cpu.name); Cpu.state=0; else Readyi.name=Cpu.name; Readyi.needtime=Cpu.needtime; Readyi.priority=Cpu.priority; for(k=0;ki;k+) for(j=0;jReadyj+1.priority) t=Readyj.priority; Readyj.priority=Readyj+1.priority;Readyj+1.priority=t; t=Readyj.needtime; Readyj.n

9、eedtime=Readyj+1.needtime;Readyj+1.needtime=t; v=Readyj.name; Readyj.name=Readyj+1.name;Readyj+1.name=v; Cpu.name=Readyi.name;Cpu.needtime=Readyi.needtime;Cpu.priority=Readyi.priority;Cpu.state=1; printf(*%5c is send to cpu! n,Cpu.name); Cpu.needtime-; if(Cpu.needtime=0) printf(*%5c is finished n,Cp

10、u.name); Cpu.state=0; void Timeout() if(Cpu.state=0) printf(* there is no process in cpu(please select Dispath!n); exit(0); else Readyi.name=Cpu.name; Readyi.needtime=Cpu.needtime; Readyi.priority=Cpu.priority; printf(%c is timeout n,Cpu.name); Cpu.name=0; Cpu.needtime=0; Cpu.priority=0; Cpu.state=0

11、; i+; void Eventwait() if(Cpu.state!=0) Blockedj.name=Cpu.name; Blockedj.needtime=Cpu.needtime; Blockedj.priority=Cpu.priority; printf(* %c is Blocked !n,Cpu.name); j+; Cpu.name=Blockedj.name; Cpu.needtime=Blockedj.needtime; Cpu.priority=Blockedj.priority; Cpu.state=0; else printf(* There is no proc

12、ess in cpu!);void Eventoccurs(char a) int k=0;int m=0;int n=0;int p=0; if(Blocked0.needtime=0) printf(* there is no process blocked!n); exit(0); else for(k;kj;k+) if(Blockedk.name=a) Readyi.name=Blockedk.name; Readyi.needtime=Blockedk.needtime; Readyi.priority=Blockedk.priority; p=1; m=j-k; for(n;nm

13、;n+) Blockedk.name=Blockedk+1.name; Blockedk.needtime=Blockedk+1.needtime; Blockedk.priority=Blockedk+1.priority; k+; j-;i+; if(p=1) printf(* %c is ready!n,a); else printf(* %c is not found! n,a); void main() Cpu.state=0; int Cputime=0; int x=6; while(x!=0) printf(n1:input new process 2:Dispathn); p

14、rintf(3:Timeout 4:Eventwaitn); printf(5:Eventoccurs(select whose eventoccur ) 0:exitn);label4: scanf(%d,&x);getchar(); printf(n=n); if(x=0|x=1|x=2|x=3|x=4|x=5) switch(x) case 1:Creat();break; case 2:Dispath();break; case 3:Timeout();break; case 4:Eventwait();break; case 5:char a;scanf(%c,&a);getchar

15、(); Eventoccurs(a);break; default:printf(please select from 0 to 5n); printf(- Cputime:%3d -n,Cputime); printf(| ProceNsname NeedTime Priority |n); if(Cpu.state!=0)/显示Cpu中的程序 printf(| Cpu:%16c,Cpu.name);printf(%20d,Cpu.needtime);printf(%18d |n,Cpu.priority); else printf(| * Cpu is free |n); int y=0;

16、 if(i=0)/显示Ready队列中的数据 printf(| *There is no process ready. |n); else for(y;yi;y+)/显示Ready中的程序 printf(| Ready%d:,y); printf(%15c,Readyy.name);printf(%20d,Readyy.needtime);printf(%18d |n,Readyy.priority); int z=0; if(j=0) /显示Blocked队列中的程序 printf(| *There is no process blocked. |n); else for(z;zj;z+)

17、printf(| Blocked%d:,z); printf(%13c,Blockedz.name);printf(%20d,Blockedz.needtime);printf(%18d |n,Blockedz.priority); Cputime+; if(Cpu.state!=0) Cpu.needtime=Cpu.needtime-1; printf(-n); else printf(please input 0-5n); goto label4; 5、运行结果:1.创建a,b两个进程2、调度进程(由于b优先级高,所以b先进入运行态)3、当b时间片到了,b变为就绪态4、再次调度(由于b优先级高,故还是b变成运行态)5、正在运行的b阻塞6、当b等待的事件发生,b重新进入就绪态6、程序使用说明:编译程序后若无错就执行程序,初始如下:其中:1表示创建新进程,随后输入进程名,所需时间,优先级 2表示系统调度进程,首先调度最高优先级 3表示时间片已到,运行中的进程将编程就绪态 4表示进程所需的事件尚未发生,进程将被阻塞 5表示进程等待的事件已发生,进程从阻塞态变为就绪态 0退出程序

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

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