C语言模拟时间片轮转法调度进程
基本要求如下:
进程名:即进程标识。
链接指针:指出下一个到达进程的进程控制块首地址。按照进程到达的顺序排队。系统设置一个队头和队尾指针分别指向第一个和最后一个进程。新生成的进程放队尾。
估计运行时间:可由设计者任意指定一个时间值。
到达时间:进程创建时的系统时间或由用户指定。调度时,总是选择到达时间最早的进程。
进程状态:为简单起见,这里假定进程有两种状态:就绪和完成。并假定进程一创建就处于就绪状态,用R表示。当一个进程运行结束时,就将其置成完成态,用C表示。
(2)为每个进程任意确定一个要求运行时间和到达时间。
(3)按照进程到达的先后顺序排成一个循环队列。再设一个队首指针指向第一个到达进程的首址。
(4)执行处理机调度时,开始选择队首的第一个进程运行。另外再设一个当前运行进程指针,指向当前正运行的进程。
(5)由于本实验是模拟实验,所以对被选中进程并不实际启动运行,而只是执行:
①估计运行时间减1个时间片;
②输出当前运行进程的名字。
用这两个操作来模拟进程的一次运行。
6)进程运行一次后,以后的调度则将当前指针依次下移一个位置,指向下一个进程,即调整运行指针指向该进程的链接指针所指进程,即指示应运行进程。同时还应判断该进程的剩余运行时间是否为零。若不为零,则等待下一轮的运行;若该进程的剩余运行时间为零,则将该进程的运行状态置为完成态C,并退出循环队列。
(7)若就绪队列不空,则重复上述的(5)和(6)步骤直到所有进程都运行完为止。
(8)在所设计的调度程序中,应包含显示或打印语句。以便显示或打印每次选中进程的名称及运行一次后队列的变化情况。
数据结构
typedef struct pcb /*进程控制块定义*/
{
char pname[N]; /*进程名*/
int runtime; /*运行时间*/
int arrivetime; /*到达时间*/
char state; /*进程状态*/
struct pcb *next;/*联接指针*/
}PCB;
给出程序中使用的数据结构及符号说明
给出程序流程图和源程序,源程序中要附有详细的注释
输入:时间片,五个进程的进程名、运行时间、到达时间
输出:打印程序运行时的初值和运行结果,要求如下:
(1)选中运行进程的名、运行后各进程控制块状态以及每次调度时,就绪队列的进程排列顺序;
(2)计算平均周转时间和带权平均周转时间。
总结收获体会及对该题解的改进意见和见解
要做到输入输出如下:
输入:
时间片 1
作业号 A B C D E
到达时间 0 1 2 3 4
到达时间 0 2 3 4 5
运行时间 4 3 5 2 4
输出:
运行时刻: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
运行进程名: A B C D E A B C D E A B C E A C E C
运行后状态: R R R R R R R R C R R C R R C R C C
就绪队列排列A B C D E A B C D E A
B C D E A B C D E A B
C D E A B C D E A B C
D E A B C D E A B C
E
由于学艺不精总是做不到这个输出效果,希望高手给予帮助;
4 个解决方案
#1
谁能帮帮我啊................
#2
友情up~~~~~~~
#3
up
#4
我也想要这个
#1
谁能帮帮我啊................
#2
友情up~~~~~~~
#3
up
#4
我也想要这个