时间片轮转调度算法vc版_第1页
时间片轮转调度算法vc版_第2页
时间片轮转调度算法vc版_第3页
时间片轮转调度算法vc版_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、时间片轮转调度算法设计目的:熟悉各种作业/进程调度算法的原理。设计要求:用高级语言编写和调试多个实现不同的作业/进程调度算法的程序。设计内容:基于时间片的轮转调度的模拟。设计一个系统,提供一个界面,供用户输入等待调度的作业信息,显示调度的结果。/实验名称:时间片轮转调度算法/实验日期:2008/07/16实验者:qhu-hh/实验环境: Visual C+ 2008 ExPress Edition编程语言:C语言/程序思想:先 模拟建立进程就绪链表-置所有进程的到达时间Parrive_time均为0,依PCB链接顺序从第一个进程PCB开始,/使Pid依次为1,2,3,4 ;就绪链表中进程的数量

2、,由常量 MAXSIZE 控制;/再模拟建立调度函数取表头PCB,修改进程执行时间,得到的新时间,即为剩余执行时间,当剩余时间小于或等于0/时,将此进程的PCB取出,依完成的先后次序链到完成链表中,记录当前完成进程的完成时间 Pend_time,/同时修改就绪链表表头;/最后计算和打印里程调度信息-计算出各进程周转时间及所有进程的平均周转时 间。#include"stdio.h”#include"malloc.h”#define TIMESLICE 2/ 时间片;#define MAXSIZE 4/就绪链中进程数量;typedef struct PCB/定义进程控制块的信息

3、结构;int Pid;/进程标识号;int Parrive_time;/进程到达时间;int Pend_time;/进程结束时间;int Pexe_time;/进程执行时间;struct PCB *next;/链向一下进程;Node,*PNode;PNode PCurrent=NULL;/定义全局变量,指向当前进程的 PCBPNode PLast=NULL;/定义全局变量,指向上一进程 PCB;PNode PHead=NULL;/定义全局变量,指向第一个进程的PCBPNode PTail=NULL;/全局变量,指向就绪进程链的最后一个进程的PCBint Exe_timeMAXSIZE; boo

4、l judge=0;/建立进程就绪链表int Create()int i=1;if(PCurrent=NULL)/就绪链表为空时;PCurrent=(PNode)malloc(sizeof(Node);PCurrent->Pid=i;i+;/标识新建进程;PCurrent->Parrive_time=0;/初始化;printf("输入执行用时:");scanf("%d”,&(PCurrent->Pexe_time);/新进程执行用时;Exe_timei-2=PCurrent->Pexe_time;/进程执行用时备份;printf(&

5、quot;n"); PCurrent->Pend_time=0;/初始化;PCurrent->next=NULL;/ 初始化;PHead=PTail=PCurrent;/改变链头、链尾指向;doPCurrent=(PNode)malloc(sizeof(Node);PCurrent->Pid=i;i+;/标识新进程;PCurrent->Parrive_time=0;/ 初始化 printf("输入执行用时:");scanf("%d”,&(PCurrent->Pexe_time);/新进程执行用时;Exe_timei-

6、2=PCurrent->Pexe_time;/进程执行用时备份;printf("n");PCurrent->Pend_time=0;/ 初始化;PCurrent->next=NULL;/ 初始化;PTail->next=PCurrent;/链到链尾PTail=PCurrent;/ 改变链尾 if(i>MAXSIZE)judge=1;while(judge=0);printf("%d,%dn",PHead,PTail);return 0;int Prin(PNode P)/检验就绪链表中各进程 PCBfW存信息;(printf

7、(-打印就绪链表:n");while(P!=NULL)/就绪链空时,检验完;(printf(" 标识号:d,执行时间:d,到达时间:%dn ",P->Pid,P->Pexe_time,P->Parrive_time);P=P->next;printf(" 打印结束:n"); return 0;/时间片轮转调度PNode Time_slice_dispatch(PNode PH,PNode PT)(printf("I'm Time_slice_dispatch(1);n");PNode P_He

8、ad=NULL;PNode P_Tail=NULL;/处理完成的进程组成的链表头结点和尾结点;/PCurrent=PLast=NULL;/PCurrent=PH;int Time_count=0;/ 计时器;printf(" 计时器初始值:dn",Time_count);/printf("%d",PH);while(PH!=NULL)/ 就绪进程链表未处理完时,继续处理;(Time_count+=TIMESLICE;/ 当前时间;printf("计时器值dn",Time_count);printf("进程 %d 要求执行时间

9、:dn",PH->Pid,PH->Pexe_time);PH->Pexe_time-=TIMESLICE;/ 当前处理进程剩余时间;printf("进程 %d 剩余执行时间:dn",PH->Pid,PH->Pexe_time);if(PH->Pexe_time<=0)/ 当前目标进程执行完时的处理方式; (if(P_Head=NULL)/(P_Head=P_Tail=PH;/处于完成态的进程的链表的表头与表尾;P_Head->Pend_time=Time_count;/记录第一个结束的进程的结束时间;printf(&

10、quot;first overtime: %dn",Time_count);PH=PH->next;/改变就绪进程链表的表头;PT->next=NULL;P_Tail->next=NULL;/结束进程的表尾next的域置空;else(P_Tail->next=PH;/链到结束进程的表尾;P_Tail=PH;P_Tail->Pend_time=Time_count;/记录结束时间;/P_Tail=PCurrent;/改变结束进程的表尾;PH=PH->next;/改变就绪进程链表的表头;/PCurrent=PCurrent->next;/*PLa

11、st->next=PCurrent->next;*/P_Tail->next=NULL;/结束进程的表尾next的域置空;else/当前目标进程未处理完时的处理方式;(PT->next=PH;/将当前未完成的进程链到就绪链表表尾;PT=PH;/* /PLast=PCurrent;*/PH=PH->next;/PCurrent;/这两句是改变就绪进程链表的表头;PT->next=NULL;/*if(P_Head=NULL)printf("kkkkkkkkkkkkk");*/int b;scanf("%c",&b)

12、;return P_Head;int Print(PNode P_H)(PCurrent=P_H;char c;double a=0;while(PCurrent!=NULL)(printf("n进程标识号:q执行时间:%d,结束时间d周转时问:d”,PCurrent->Pid,Exe_timePCurrent->Pid-1,PCurrent->Pend_time,( PCurrent->Pend_time)-(PCurrent->Parrive_time);printf("n");a+=(PCurrent->Pend_time)-(PCurrent->Parrive_time);PCurrent=PCurrent->next;printf(&quo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论