设计一个先来先服务的调度算法实现处理机调度
实验内容:
假设系统中有3-5个进程,每个进程由一个进程块(PCB)来识别。进程控制块结构如图所示
进程名 (1)
连接指针 进程名:即进程标识
到达时间
链接指针:按照进程到达系统的时间将处于就绪状态的 估计运行时间 进程连接成一个就绪队列。指针指出下一个到达的进程 进程状态 控制块首地址。最后一个的进程的链接指针为NULL。
估计运行时间:可由设计者任意指定一个时间值。
到达时间:进程创建时系统时间或由用户指定,调度时,总是选择到达时间最早的进程。
进程状态:为简单起见,这里假定进程有两种状态:就绪和完成。就绪状态用“R”表示,完成状态用“C”表示。假定进程一创建就处于就绪状态,运行时间结束时,就被置成完成状态。
(2)设置一个队首指针head用来指出最先进入系统的进程,各就绪进程通过链接指针连在一起。
(3)处理机调度时总是选择队首指针指向的进程投入运行。由于本实验是模拟实验,所以被选中进程并不实际启动运行,而只是执行:估计运行时间减1.用这个操作来模拟进程的一次运行,而且省去进程的现场保护和现场恢复工作。
(4)在所设计的程序中应有显示或打印的语句,能显示或打印正运行的程序名字,已运行时间和剩余时间,就绪队列中的进程名等。所有进程完成时,给出各进程的周转时间和平均周转时间。
1013022056 计102 林洵
实验程序:
#include struct pcb //进程控制块 { char pname[512]; //进程名 int runtime; //运行时间 int arrtime; //到达时间 char state; //进程状态 int rtime; //进程周转时间 pcb *next; //指向下一个进程 }; void input(pcb *head,int n) //进程的输入函数 { pcb *t=head; for(int i=0;i void output(pcb *head,int n) //进程的输出函数 { pcb *x,*p; x=new pcb; p=new pcb; //工作指针 p=head->next; int time=0; float a,b,c,d,e,f=0; //a用来控制程序的循环,b为暂存周转时间,c用来定位,d用来暂存运行时间也用来控制循环,e用来控制循环 //f为所有进程的周转时间和 float g; //g为平均周转时间 time=p->arrtime; for(int i=0;i