5种进程调度算法(2)
}Process_Queue;
//进程队列
Process_Queue PQ; int
Process
//定义一个全局队列变量
//全局时间
t;
Run_Now; //当前正在运行的进程,作为全局变量
void InitQueue(Process_Queue PQ) {
PQ.head ->next = NULL; PQ.end
->next = PQ.head;
}/*初始化队列*/
int IsEmpty(Process_Queue PQ) {
if(PQ.end->next == PQ.head)
return 1; return 0;
//队列空的条件为头指针指向尾指针并且尾指针指向头指针
else
}/*判定队列是否为空队列*/
void EnQueue(Process_Queue PQ,Process P) {
Process temp =(Process)malloc(sizeof(_Block)); temp = PQ.end; temp->next->next = P; PQ.end->next = P;
}/*插入队列操作*/
Process DeQueue(Process_Queue PQ) {
if(IsEmpty(PQ))
return NULL;
Process temp = PQ.head->next; PQ.head->next= temp ->next; if(PQ.end->next == temp)
PQ.end->next = PQ.head; return temp;
}/*出列操作*/
Process ShortestProcess(Process_Queue PQ) {
if(IsEmpty(PQ)) { }
if(!Run_Now)
return NULL; return Run_Now; else
//如果队列为空,返回
Process temp,shortest,prev; int min_time; if(Run_Now) { } else { }
temp = PQ.head; prev = temp; while(temp->next) { }
if(shortest == PQ.end->next)
PQ.end->next = prev;
prev->next = shortest->next; return shortest;
//如果最短剩余时间进程是队列中最后一个进程,
//则需要修改尾指针指向其前驱 //修改指针将最短剩余时间进程插入到队头
if(temp->next->PB.remain_time temp=temp->next; shortest = temp->next; prev=temp; //则保存当前进程, //及其前驱 min_time = shortest->PB.remain_time; shortest = PQ.head->next; //则最短进程初始化为队列中第一个进程 min_time = PQ.head->next->PB.remain_time; //如果当前没有进程执行, shortest = Run_Now; //那么最短进程初始化为当前正在执行的进程, min_time = Run_Now->PB.remain_time; //如果当前有进程正在执行, }/*调度最短剩余时间的进程至队头*/ void Run() { Run_Now->PB.remain_time--; return; //某一时间运行它的剩余时间减 }/*运行函数*/ void Wait() { } int sum(intarray[],int n) { int i,sum=0; for(i=0;i sum+=array[i]; return sum; return ; } int main() { PQ.head PQ.end Run_Now Run_Now = (Process)malloc(sizeof(_Block)); = (Process)malloc(sizeof(_Block)); = (Process)malloc(sizeof(_Block)); =NULL; //Total_Time为所有进程的执行时间之和 InitQueue(PQ); int i,N,Total_Time=0; scanf(\,&N); Process *P,temp; P = (Process*)malloc(N*sizeof(Process)); int *wt,*circle_t; wt =(int*)malloc(N*sizeof(int)); circle_t =(int*)malloc(N*sizeof(int)); for(i=0;i for(i=0;i Total_Time+=P[i]->PB.remain_time; printf(\进程按顺序运行依次为:\\n\); i=0; int k=0; for(t=0;;t++) { if(Run_Now) { Run(); if(t == P[i]->PB.arrive_time) { if(P[i]->PB.remain_time < Run_Now->PB.remain_time) { temp = P[i]; P[i] = Run_Now; Run_Now = temp; Run_Now->PB.Tp=t; //则调度它至运行队列中, //如果当前时间正好有进程进入 //如果当前有进程正在执行 P[i] = (Process)malloc(sizeof(_Block)); =i+1; =NULL; =0; =0; P[i]->PB.number P[i]->next wt[i] printf(\请输入计算机中的进程数目:\\n\); circle_t[i] printf(\输入第%d个进程的到达时间及剩余执行时间:\\n\,i+1); scanf(\,&P[i]->PB.arrive_time,&P[i]->PB.remain_time); } } } Run_Now->PB.Tc=t; wt[Run_Now->PB.number-1]+=Run_Now->PB.Tc-Run_Now->PB.Tp; printf(\,Run_Now->PB.number); //并将当前运行进程重新插入队列中 EnQueue(PQ,P[i]); P[i]->PB.Tp=t; k++; i=(i+1)>(N-1)?(N-1):(i+1); //如果当前进程运行结束, //进程运行结束的时间 //则将它所占资源释放掉, //并修改Run_Now为NULL if(Run_Now->PB.remain_time == 0) { } Run_Now->PB.To=t; free(Run_Now); Run_Now =NULL; if(!Run_Now) { } else { } Run_Now->PB.Tc=t; circle_t[Run_Now->PB.number-1] +=t-Run_Now->PB.arrive_time; Run_Now = ShortestProcess(PQ); //从就绪队列中调出最短剩余时间进程至队头, //如果队列为空,转为等待状态 if(IsEmpty(PQ) && k >= N) break; Wait(); continue; wt[Run_Now->PB.number-1]+=Run_Now->PB.Tc-Run_Now->PB.Tp; printf(\,Run_Now->PB.number); else { //如果当前运行进程为空,那么 //如果正好这时有进程入队 if(t == P[i]->PB.arrive_time) { } k++; EnQueue(PQ,P[i]); Run_Now = DeQueue(PQ); Run_Now->PB.Tp=t; Run_Now->PB.Tc=t; //则直接被调入运行队列中 printf(\,Run_Now->P
…… 此处隐藏:2356字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [高等教育]公司协助某村精准扶贫工作总结.doc
- [高等教育]高二生物知识点总结(全)
- [高等教育]苏教版数学三年级下册《解决问题的策略
- [高等教育]仪器分析课程学习心得
- [高等教育]2017年五邑大学数学与计算科学学院333
- [高等教育]人教版七年级下册语文第四单元测试题(
- [高等教育]2018年秋七年级英语上册Unit7Howmuchar
- [高等教育]2017年八年级下数学教学工作小结
- [高等教育]湖南省怀化市2019届高三统一模拟考试(
- [高等教育]四年级下册科学_基础训练及答案教材
- [高等教育]城郊煤矿西风井管路伸缩器更换施工安全
- [高等教育]昆八中20182019学年度上学期期末考试
- [高等教育]项目部各类人员任命书
- [高等教育]上市公司经营水务产业的模式
- [高等教育]人教版高二化学第一学期第三章水溶液中
- [高等教育]【中考物理第一轮复习资料】四.压强与
- [高等教育]金坑水电站报废改建工程机电设备更新改
- [高等教育]高中生物教学工作计划简易版
- [高等教育]2017年西华大学攀枝花学院(联合办学)44
- [高等教育]最新整理超短爆笑英文小笑话大全
- 优秀教师继续教育学习心得体会
- 阳历到阴历的转换
- 留守儿童教育案例分析
- 华师17春秋学期《玩教具制作与环境布置
- 测速传感器新型安装装置的现场应用
- 人教版小学数学三年级下册第四单元
- 创业个人意向书
- 山东省潍坊市2012年高考仿真试题(三)
- [恒心][好卷速递]四川省成都外国语学校
- 多少人错把好转反应当成了病情加重处理
- 中外广播电视史复习资料整理
- 江苏省扬州市江都区宜陵镇中学2014-201
- 工程造价专业毕业实习报告
- 广西师范学院心理与教育统计
- aympkrq基于 - asp的博客网站设计与开
- 建筑业外出经营相关流程操作(营改增后
- 人治 德治 法治
- [精华篇]常识判断专项训练题库
- 中国共产党为什么要实行民主集中
- 小学数学第三册第一单元试卷(A、B、C




