求教一个时间片轮转模拟进程调度问题

时间:2022-10-06 21:14:50
我是个新手哈....学操作系统的时候老师给了这样一个设计....做了很长时间还是没能按老师的要求完成  只能求助各位大虾了....希望能给予帮助  小弟不胜感激.
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


引用 2 楼 hqin6 的回复:
友情up~~~~~~~

up

#4


我也想要这个

#1


谁能帮帮我啊................

#2


友情up~~~~~~~

#3


引用 2 楼 hqin6 的回复:
友情up~~~~~~~

up

#4


我也想要这个