7-2 模拟进程调度(操作系统) (60 分)

请你编写一个C语言程序,模拟若干进程调度执行的情况。假设进程的状态分为执行和就绪两种。每个进程以其PCB为代表即可,无需创建真正的进程。以链表的方式组织PCB,分为二个队列:readyQueue就绪队列和runningQueue执行队列。 程序开始运行时,用户输入进程调度方式:先来先服务(FCFS)或短进程优先(SPF),进程数量n,以及每个进程需要运行的时间t0/t1/…/tn,先创建进程PCB,然后插入到readyQueue队列中。程序先从就绪队列中按FCFS或SPF选择一个进程投入运行(注:需要将该PCB中的状态变量赋值为“运行”)。相应的修改其所在队列,再将原来处于运行态的进程需要转变为“就绪”态,插入readyQueue队列。 假设时间片是2,进程每次调度运行后,其还需运行的时间应该减少2,直至为0,即表示该进程执行完毕。 示例片段代码: #define READY 0x01 #define RUNNING 0x02 #define TIMESLICE 0x02 typedef struct _PCB { int pid;
int state;
int time;
struct _PCB *next; } PCB, *pPCB;

输入格式:

输入信息为调度方法,进程个数,以及每个进程需要的运行时间 fcfs 3 12 6 8

输出格式:

输出信息为调度方法和进程的运行序列: fcfs P00 P01 P02 P00 P01 P02 P00 P01 P02 P00 P02 P00 P00

输入样例:

在这里给出一组输入。例如:

fcfs 3
12 6 8

输出样例:

在这里给出相应的输出。例如:

fcfs
P00
P01
P02
P00
P01
P02
P00
P01
P02
P00
P02
P00
P00

参考GPT和自己的思路:

好的,我来回答你的问题。

首先,需要解析输入,并根据调度方式和进程信息创建PCB并插入到readyQueue队列中。可以使用链表来实现队列的操作。

然后,按照指定的调度方式从readyQueue队列中选择进程并将其状态设为“运行”,同时将原来处于“运行”态的进程状态变为“就绪”态并插入到readyQueue队列。为了模拟时间片调度,每次执行一个进程的时间为2,并将其还需运行时间减少2,直至为0。

最后,打印出进程的运行序列即可。

下面是一份可能的代码实现: