设计一个按优先数调度算法实现处理器调度的程序(可以输入进程的数量)

上传人:枫** 文档编号:495242918 上传时间:2023-01-11 格式:DOCX 页数:14 大小:311.39KB
返回 下载 相关 举报
设计一个按优先数调度算法实现处理器调度的程序(可以输入进程的数量)_第1页
第1页 / 共14页
设计一个按优先数调度算法实现处理器调度的程序(可以输入进程的数量)_第2页
第2页 / 共14页
设计一个按优先数调度算法实现处理器调度的程序(可以输入进程的数量)_第3页
第3页 / 共14页
设计一个按优先数调度算法实现处理器调度的程序(可以输入进程的数量)_第4页
第4页 / 共14页
设计一个按优先数调度算法实现处理器调度的程序(可以输入进程的数量)_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《设计一个按优先数调度算法实现处理器调度的程序(可以输入进程的数量)》由会员分享,可在线阅读,更多相关《设计一个按优先数调度算法实现处理器调度的程序(可以输入进程的数量)(14页珍藏版)》请在金锄头文库上搜索。

1、题目:设计一个按优先数调度算法实现处理器调度的程序(可以自己定义进程的数量)提示:(1)假定系统有5个进程,每个进程用一个PCB来代表。PCB的格式为:进程名、指针、要求运行时间、优先数、状态。进程名P1P5。指针一一按优先数的大小把 5个进程连成队列,用指针指出下一个进程PCB的首地址。要求运行时间一一假设进程需要运行的单位时间数。优先数一一赋予进程的优先数,调度时总是选取优先数大的进程先执行。状态一一假设两种状态,就绪,用 R表示,和结束,用 E表示。初始状态都为就绪 状态。(2)每次运行之前,为每个进程任意确定它的“优先数”和“要求运行时间”。(3)处理器总是选队首进程运行。采用动态改变

2、优先数的办法,进程每运行1次,优先数减1,要求运行时间减1。(4)进程运行一次后,若要求运行时间不等于 0,则将它加入队列,否则,将状态改为“结 束退出队列。(5)若就绪队列为空,结束,否则,重复 (3)。2.流程图:(1)主程序流程图:子程序 max_pri_process()流程图:开始定义i,j,tmax_pri_process()!=-1jnumjtgetchar()j=0pcblistmax_pri_process().state=rt+=pcblistj.runtimej=j+1输出提示show ()j=0i=03.源程序清单/按优先数调度算法实现处理器调度的程序#include

3、stdio.h#include string.hint num;struct PCBchar name;/ 进程名int runtime;/ 要求运行时间int pri;/ 优先数char state;/状态,R-就绪,F-结束;struct PCB pcblist100;/ 定义进程控制块数组void init()/PCB 初始化子程序int i;for(i=0;inum;i+)printf(PCB%d: 进程名 优先级 运行时间 n,i+1);/ 为每个进程任意指定pri 和 runtimescanf(%s%d%d, &pcblisti.name, &pcblisti.pri, &pcbl

4、isti.runtime);pcblisti.state=R;/ 进程初始状态均为就绪getchar();/ 接收回车符int max_pri_process()/ 确定最大优先级进程子程序int max=-100;/max 为最大优先数,初始化为 -100int i;int key;for(i=0;inum;i+)if(pcblisti.state=r)/r 为辅助状态标志,表示正在运行return -1;/ 返回 -1elseif(maxpcblisti.pri&pcblisti.state=R)/ 从就绪进程中选取优先数最大的进程max=pcblisti.pri;/max 存放每次循环中

5、的最大优先数key=i;/ 将进程号赋给keyif(pcblistkey.state=E)/ 具有最大优先数的进程若已运行完毕return -1;/ 则返回 -1elsereturn key;/ 将 key 作为返回值返回void show()/ 显示子程序int i;printf(n* 进程名 优先级运行时间 状态 *n);printf(n);for(i=0;inum;i+)/ 依次显示每个进程的名、优先数、要求运行时间和状态pcblisti.pri,printf(* %s %6d%8d%s*n, &pcblisti.name,pcblisti.runtime, &pcblisti.stat

6、e);printf( 按任意键继续.n);void run()/ 进程运行子程序int i,j;int f;int h;int g;int t=0;/t 为运行次数for(j=0;jnum;j+)t+=pcblistj.runtime;/ 运行次数即为各个进程运行时间之和printf(n 处理之前的状态:n);show(); / 调用 show() 子程序显示运行前PCB 的情况getchar();/ 等待输入回车符f=t;g=t;for(j=0;jt;j+)while(max_pri_process()!=-1)/ 具有最大优先数的进程没有运行完,让其运行pcblistmax_pri_pro

7、cess().state=r;/ 将其状态置为r ,表示其正在运行for(i=0;i=1) pcblisti.pri-=1;/ 将当前运行进程的优先数减1pcblisti.runtime-;if(pcblisti.runtime=0)pcblisti.state=E;/ 运行完则将该进程状态置为结束elsepcblisti.state=R;/ 未运行完将其状态置为就绪h=f-(-g);printf( 这是第 %d 运行 ,h);show();/ 显示每次运行后各 PCB 的情况getchar();/ 等待回车进入下一次运行void main()/ 按动态优先数调度主程序 printf( 请输入要运行进程的数目: );scanf(%d,&num);/ 输入进程数init();/ 初始化各个进程PCBrun(); / 进程调度模拟精品资料Welcome ToDownload !欢迎您的下载,资料仅供参考!

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 营销创新

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号