- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
设计一个有N个进程进程调度程序通过一个简单的进程调度模拟程序的实现,加深对进程调度算法,进程切换的理解。进程调度算法:采用最高优先数优先的调度算法(即把处理机分配给优先数最高的进程)。
每个进程有一个进程控制块(PCB)表示。进程控制块可以包含如下信息:进程名优先数到达时间进程的到达时间为进程输入的时间
进程还需要运行时间已用CPU时间进程状态PCB排成队列。
进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机数产生)。进程的到达时间为进程输入的时间进程的运行时间以时间片为单位进行计算优先数每个进程的状态可以是就绪()、运行R(Run)、或完成F(Finish)种状态之一就绪进程获得CPU后都只能运行一个时间片用已占用CPU时间加1来表示如果运行一个时间片后,进程的已占用CPU时间已达到所需要的运行时间,则撤消该进程,如果运行一个时间片后进程的已占用CPU时间还未达所需要的运行时间,也就是进程还需要继续运行,此时应将进程的优先数减,然后把它插入就绪队列等待CPU每进行一次调度程序都打印一次运行进程、就绪队列、以及各个进程的PCB,以便进行检查重复以上过程,直到所要进程都完成为止。实1、实验目的。2、实验内容。3、程序及运行情况。4、实验过程中出现的问题及解决方法。#includestdio.h
#includestdlib.h
enum STATE{ Ready=1,Run,Block,Finish };
struct PCB{
int ID; //进程名
int Priority; //优先数
int Time; //到达时间
int AllTime; //进程还需要运行时间
int CPUTime; //已用CPU时间
int StartBlock; //进程的进入阻塞时间
int StartTime; //进程的等待阻塞时间
STATE State; //进程状态
PCB* Next; //队列指针
}*ready=NULL,*p;
void Sort(){
// 建立对进程进行优先级排列函数
PCB *first, *second;
int insert=0;
if(ready==NULL||(p-Priorityready-Priority)) //优先级最大者,插入队首
{
p-Next=ready;
ready=p;
}
else // 进程比较优先级,插入适当的位置中
{
first=ready;
second=first-Next;
while(second!=NULL)
{
if(p-Prioritysecond-Priority) //若插入进程比当前进程优先数大
{ //插入到当前进程前面
p-Next=second;
first-Next=p;
second=NULL;
insert=1;
}
else // 插入进程优先数最低,则插入到队尾
{
first=first-Next;
second=second-Next;
}
}
if(insert==0) first-Next=p;
}
}
void Input() {
// 输入进程控制块信息
int i,num;
//clrscr(); /*清屏*/
printf(\n 请输入进程数量:);
scanf(%d,num);
for(i=0;inum;i++)
{
p=(PCB*)malloc(sizeof(PCB)); //动态生成
p-ID=i+1;
printf(\n 输入进程%d的信息:\n,p-ID);
printf(\n 进程优先数:);
scanf(%d,p-Priority);
printf(\n 进程需要运行时间:);
scanf(%d,p-AllTime);
p-Time=3*i;
p-CPUTime=0;
p-StartBlock=0;
p-StartTime=0;
p-State=Ready;
p-Next=NULL;
printf(\n);
Sort(); /* 调用sort函数*/
}
}
int Length()
{
int l=0; PCB* pr=ready;
while(pr!=NULL)
{
l++;
pr=pr-Next;
}
return(l);
}
void OutPut(PCB * pr) //显示当
您可能关注的文档
最近下载
- 意大利cemb(赛博)er60动平衡仪中文操作手册.pdf VIP
- 粮油供货保障方案.docx VIP
- 负压引流器产品技术要求标准2023版.pdf VIP
- 初中英语课外阅读黑布林版渔夫和他的灵魂中文译文.docx VIP
- Oasis montaj7.5 操作手册-Oasis montaj Mapping and Processing软件平台.pdf VIP
- 机械精度设计与检测技术基础第2版杨沿平第七章滚动轴承配合1课件教学.ppt VIP
- 云南省昆明市盘龙区2023-2024学年七年级上学期期末英语试卷.pdf VIP
- 硬膜下血肿的护理常规.pptx
- 2020年牛津译林版7A英语七年级上册Unit2-单元检测卷(含答案).docx VIP
- 机械精度设计与检测技术基础第2版杨沿平第八章键与花键连接1课件教学.ppt VIP
文档评论(0)