处理机调度示例程序.doc_第1页
处理机调度示例程序.doc_第2页
处理机调度示例程序.doc_第3页
处理机调度示例程序.doc_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

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

文档简介

设计一个按时间片轮转法实现处理机调度的程序设计的提示如下:(1) 假设系统有35个进程,每个进程用一个进程控制块(PCB)来表示。 进程控制块的格式如下:(2) 按照进程到达的先后顺序排成一个循环队列,设一个队首指针指向第一个到达进程的首址。另外再设一个当前运行进程指针,指向当前正在运行的进程。(3) 执行处理机调度时,首先选择队首的第一个进程运行。(4) 由于本实验是模拟实验,所以对被选中进程并不实际启动运行,而只是执行: 估计运行时间减1 输出当前运行进程的名字用这个操作来模拟进程的一次运行。(5) 进程运行一次后,以后的调度则将当前指针依次下移一个位置,指向下一个进程,即调整当前运行指针指向该进程的连接指针所指进程,以指示应运行进程,同时还应该判断该进程的剩余运行时间是否为0.若不为0,则等待下一轮的运行;若进程的剩余运行时间为0,则将该进程的状态置为完成状态“C”,并退出循环队列。(6) 若就绪队列不空,则重复上述的步骤(4)和(5)知道所有进程都运行完为止。(7) 在所设计的调度程序中,应包含显示或打印语句,以便显示或打印每次选中进程的名称及运行一次后队列的变化情况。示例代码:#define N 10#include#includetypedef struct pcb /进程控制块定义char pnameN; /进程名int runtime; /运行时间int arrivetime; /到达时间char state; /进程状态struct pcb *next;/连接指针PCB;PCB head_input; /就绪队列头指针PCB head_run; /运行队列头指针PCB *pcb_input;static char R=r,C=c;unsigned long current; /记录系统当前时间的变量void inputprocess(); /建立进程的函数int readydata(); /判断是否有就绪进程的函数int runprocess(); /运行进程的函数int readyprocess(); /检查就绪队列并准备运行进程的函数FILE *f; /生命一个文件指针/检查就绪队列并准备运行进程的函数int readyprocess()while(1)if(readydata()=0) /判断就绪队列是否为空的函数return 1;elserunprocess(); /运行进程的函数/判断就绪队列是否为空的函数int readydata()if(head_input.next=NULL)if(head_run.next=NULL)return 0;elsereturn 1;PCB *p1,*p2,*p3;p1=head_run.next;p2=&head_run;while(p1!=NULL) /判断队列是否为空p2=p1;p1=p2-next;p1=p2;p3=head_input.next;p2=&head_input;while(p3!=NULL) /判断就绪队列不空时,将他们移到运行队列if(unsigned long)p3-arrivetimestate=R)printf(Time is %4d; Process %s start,n,(current+500)/1000,p3-pname);fprintf(f,Time is %4d; Process %s start,n,(current+500)/1000,p3-pname);p2-next=p3-next;p3-next=p1-next;p1-next=p3;p3=p2;p2=p3;p3=p3-next;return 1;/运行进程的函数int runprocess()PCB *p1,*p2;if(head_run.next=NULL) /运行队列为空时,修改当前时间current+;return 1;elsep1=head_run.next;p2=&head_run;while(p1!=NULL) /由运行队列顺序取一个进程运行p1-runtime-;current+;if(p1-runtimepname);fprintf(f,Time is %4d; Process %s end.n,(current+500)/1000,p1-pname);p1-state=C;p2-next=p1-next;delete p1;p1=NULL;elsep2=p1;p1=p2-next;return 1;/建立进程的函数void inputprocess()PCB *p1,*p2;int num; /要建立的进程数量printf(How many processes do you want to run :);fprintf(f,How many processes do you want to run :);scanf(%d,&num);fprintf(f,%dn,&num);p1=&head_input;p2=p1;p1-next=new PCB;p1=p1-next;for(int i=0;ipname);fprintf(f,%sn,p1-pname);printf( runtime:);fprintf(f, runtime:);scanf(%d,&(p1-runtime);fprintf(f,%dn,&(p1-runtime);printf( arrivetime:);fprintf(f, arrivetime:);scanf(%d,&(p1-arrivetime);fprintf(f,%dn,&(p1-arrivetime);p1-runtime=(p1-runtime)*1000;p1-arrivetime=(p1-arrivetime)*1000;p1-state=R;p1-next=new PCB;p2=p1;p1=p1-next;delete p1;p1=NULL;p2-next=NULL;/主函数void main()f=fopen(result.tx

温馨提示

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

评论

0/150

提交评论