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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

广东工业大学操作系统实验报告4份全Word格式.docx

1、 char state; /*进程状态*/ int super; /*优先数*/ int ntime; /*需要运行的时间*/ int rtime; /*已占用的CPU时间*/ struct pcb* link; *ready=NULL,*p; typedef struct pcb PCB; /*pcb表*/ sort() /* 建立对进程进行优先级排列函数*/ PCB *first, *second; int insert=0; if(ready=NULL)|(p-super)(ready-super) /*优先级最大者,插入队首*/ p-link=ready; ready=p; else

2、/* 进程比较优先级,插入适当的位置中*/ first=ready; second=first-link; while(second!=NULL) if(p-(second-super) /*若插入进程比当前进程优先数大,*/ /*插入到当前进程前面*/ p-link=second; first-link=p; second=NULL; insert=1; else /* 插入进程优先数最低,则插入到队尾*/ first=first- second=second- if(insert=0) first- input() /* 建立进程控制块函数*/ int i,num; clrscr(); /

3、*清屏*/ printf(n 请输入进程号?); scanf(%d,&num); for(i=0;iname); printf(n 输入进程优先数: scanf(p-super);n 输入进程运行时间:ntime); p-rtime=0;state=w;link=NULL; sort(); /* 调用sort函数*/ int space() int l=0; PCB* pr=ready; while(pr! l+; pr=pr- return(l); disp(PCB * pr) /*建立进程显示函数,用于显示当前进程*/ printf(n qname t state t super t nd

4、time t runtime n|%st,pr-|%ctstate);|%dt printf(rtime); check() /* 建立进程查看函数,检查等待队列的进程是否进入就绪队列*/ PCB* pr;n * 当前正在运行的进程是: /*显示当前运行进程*/ disp(p); pr=ready;n *当前就绪队列状态为: /*显示就绪队列状态*/ while(pr! disp(pr);destroy() /*建立进程撤消函数(进程运行结束,撤消进程)*/ printf(n 进程 %s 已完成.n free(p); running() /* 建立进程就绪函数(进程运行时间到,置就绪状态*/

5、(p-rtime)+; if(p-rtime=p-ntime) destroy(); /* 调用destroy函数*/ else (p-super)-; /*调用sort函数*/ main() /*主函数*/ int len, h=0; char ch; input(); len=space(); while(len!=0)&(ready!=NULL) ch=getchar(); h+;n The execute number:%d n,h); p=ready; ready=p-R check(); running();n 按任一键继续. ch=getchar();nn 进程已经完成.n ch

6、=getchar(); 3、运行结果:请输入进程号?5进程号No.0:输入进程名:A输入进程优先数:2输入进程运行时间:1进程号No.1:B3进程号No.2:C进程号No.3:D4进程号No.4:EThe execute number:*当前正在运行的进程是:Qname state super ndtime runtimeE R 5 1 0*当前就绪队列状态为:D w 4 1 0B w 3 1 0A w 2 1 0C w 1 1 0进程E已完成按任一键继续D R 4 1 0进程D已完成B R 3 1 0进程B已完成A R 2 1 0进程A已完成cc R 1 1 0进程C已完成进程已经完成(二)

7、、简单轮转法在分时系统中,都毫无例外采用时间片轮转法。在一种简单的轮转法中,系统将所有就绪进程按FIFO规则排成一个队列,把CPU分配给队首进程,并规定它执行一给定的时间如100ms,称此时间间隔为时间片。当时间片完成时,系统产生一个时钟中断,剥夺该进程的执行,将它送至就绪队列的末尾,并把处理机分配给就绪队列的新队首进程,同样也让它执行一个时间片。这样,就绪队列中的所有进程均可获得一个时间片的处理机而运行。就绪队列中的进程在依次执行时,可能发生以下三种情况:(1)进程未用完一个时间片就结束,这时系统应提前调度;(2)进程在执行过程中提出I/O请求而阻塞,系统应将它放入相应的阻塞队列并引起调度;

8、(3)进程完成一个时间片后尚未完成,系统应将它重新放到就绪队列的末尾,等待下次执行。由于在分时系统中,键盘命令的执行时间较短,大多能在一个时间片内执行完毕,因此分时系统的实际响应时间将比Nq(N是同时性用户数,q是时间片大小)小。#include/*定义一个pcb的结构体*/struct pcb char name; /*进程名*/int time; /*进程执行时间*/;void main() int n,i,j,flag=1;struct pcb a100; /*最多可以有100个进程*/printf(输入进程 个数:scanf(n);getchar();/*接收回车*/ for(i=0;

9、n; printf(输入进程的名字:%cai.name); /*以字符接收进程名*/输入占用的时间片: /*输入进程占用的时间片*/ai.time); i=0;while(flag & n0) /*若进程数为空,结束程序*/ if(ai.time!=0) /*就绪队列是否为空*/,ai.name); /*进程执行一次,打印出该进程*/ai.time-; /*使该进程占用的时间片减1*/for(j=0;jW if(head=NULL) head=q=p; else q- q=p; void print(JCB *pr,int m)JCB *p; printf(ntime=%d,time); if

10、(m=3) printf(n作业名t状态t到达时间t服务时间t优先权tt完成时间t周转时间t带权周转时间n%st%ct%dt%dt%4.2ft%dt%4.2ft%4.2fn, pr-name,pr-state,pr-ts,pr-ntime,pr-super,pr-tc,pr-ti,pr-wi); else printf(n作业名 状态 到达时间 服务时间 完成时间 周转时间 带权周转时间n%st%ct%dt%dt%dt%4.2ft%4.2fn p=head; do if(p-state=)%st%ct%dt%dt%4.2fnname,p-state,p-ts,p-ntime,p- else p

11、rintf(%st%ct%dt%dn p=p- while(p!=NULL);F if(m=3)super,p-tc,p-ti,p- elseprintf(void last()eti/=n;ewi/=n;n平均周转时间%7.3fn平均带权周转时间=%7.3fn,eti,ewi);super()JCB *padv;padv=head;do if(padv-padv-tssuper=(float)(time-padv-ts+padv-ntime)/padv-ntime; padv=padv-while(padv!void hrn(m)JCB *min;int i,iden;i+)p=min=head;iden=1; super(); doif(p- if(iden) min=p;iden=0; else if(p-supermin-super) min=p; if(iden) i-;time+; if(time1000)printf(nruntime is too long.error.getch(); else running(min,m);void sjf(int m) JCB *min; int i,iden; for(i=0;i+) p=min=head;ntimentime) min=p; wh

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

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