pascal模拟实现按优先数进行处理机调度

pascal模拟实现按优先数进行处理机调度

ID:14328365

大小:53.00 KB

页数:7页

时间:2018-07-27

pascal模拟实现按优先数进行处理机调度_第1页
pascal模拟实现按优先数进行处理机调度_第2页
pascal模拟实现按优先数进行处理机调度_第3页
pascal模拟实现按优先数进行处理机调度_第4页
pascal模拟实现按优先数进行处理机调度_第5页
资源描述:

《pascal模拟实现按优先数进行处理机调度》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、实习作业:设计一个实现按优先数进行处理机调度的方案一.设计时间:2001年10月2日二.功能说明:●采用静态优先数个调读策略,是不可抢占的;●数据结构说明:对每一个进程的PCD,采用记录类型。此纪录包括进程名(name,字符串型)优先级数(priority整数型)状态(status枚举类型)进程地址(address数型)相关信息(messages数型)及指向下一进程PCB的指针(link指针类型);●进程调度的实现:①对每一个进程的就绪对列固定进程个数(此处为三个)共有若干(此处为两个)就绪对列。就绪对列由子程序(crea

2、te)自动生成,为进程调度算法作好准备;②每一个进程的优先级数是事先确定下来的(此处用随机函数产生一个1-100的整数);③当进程调度开始后,利用查寻子程序(find)找出就绪队列中优先级数最大的进程,并把其从就绪队列删除;在进程进入处理机过程中,它可以调用阻塞原语,使自己处于等待状态,同时把它插入等待对列,由waitp子程序实现,同时进程的优先级数被改变。当然,进程也可以不用阻塞厚语,当一个就绪队列的的所有进程执行过后,把刚插入等待对列(whead)中的进程再插入的当前就绪队列,直到当前对列的所有进程全部运行结束再转入下

3、一就绪对列的处理。三.程序流程图:(如图1)四.设计总结:本设计只是简单的模拟了按优先数进行处理机调度的方案,不能动态的,完美的进行演示,因此还需进一步改进。五.PASCAL源程序如下:programZpcb(input,output);typestatus_type=(ready,wait,run);pointer=^pcb;pcb=recordname:string[10];priority:integer;address:integer;status:status_type;messages:integer;link

4、:pointerend;varr,i,j,w,n:integer;rhead:array[1..3]ofpointer;p,q,whead:pointer;functionrnd(varr:integer):integer;constl=20;c=217;m=1024;beginr:=(r*l+c)modm;7rnd:=round(r/m*100)end;procedurecreate(varp:pointer;varr:integer;n,m:integer);varb,c:char;h:integer;beginc:=

5、chr(n+ord('0'));b:=chr(m+ord('0'));p^.name:='PCB-'+c+'-'+b;p^.priority:=rnd(r);p^.address:=10+100*n;p^.status:=ready;h:=rnd(r);ifh<50thenp^.messages:=0elsep^.messages:=1;p^.link:=nilend;procedurefind(varp:pointer;varrhead:pointer);varq,r,h:pointer;beginp:=rhead;q:

6、=rhead^.link;h:=nil;r:=rhead;while(q<>nil)doifq^.priority>p^.prioritythenbeginh:=r;p:=qendelsebeginr:=q;q:=q^.linkend;ifh<>nilthenh^.link:=p^.linkelserhead:=p^.linkend;procedurewaitq(varp:pointer;varwhead:pointer;varr:integer);vart,h:pointer;7beginp^.link:=nil;p^.

7、priority:=rnd(r);p^.messages:=0;p^.status:=wait;ifwhead=nilthenwhead:=pelsebeginh:=whead;t:=whead^.link;while(t<>nil)dobeginh:=t;t:=t^.linkend;h^.link:=pendend;procedurechange(varrhead:pointer;varwhead:pointer;varw:integer);varq:pointer;beginq:=whead;while(q<>nil)

8、dobeginq^.status:=ready;q:=q^.linkend;rhead:=whead;whead:=nil;w:=0end;procedurewtime(n:integer);consth=3000;vart,j,i,x:integer;beginfori:=1tondoforx:=1t

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。