使用动态优先权的进程调度算法 C语言模拟实现 含详细源代码和实验结果
-
实现对N个进程采用某种进程调度算法(如动态优先权调度)的调度 -
每个用来标识进程的进程控制块PCB可用结构来描述,包括以下字段
- 进程标识数ID
- 进程优先数 PRIORITY,并规定优先数越大的进程,其优先权越高
- 进程已占用CPU时间 CPUTIME
- 进程还需占用的CPU时间 ALLTIME,当进程运行完毕时, ALLTIME变为0
- 进程的阻塞时间 STARTBLOCK,表示当进程再运行 STARTBLOCK个时间片后,进程将进入阻塞状态
- 进程被阻塞的时间 BLOCKTIME,表示已阻塞的进程再等待 BLOCKTIME个时间片后,将转换成就绪状态
- 进程状态 STATE
- 队列指针NEXT,用来将PCB排成队列
-
优先数改变的原则
- 进程在就绪队列中呆一个时间片,优先数增加1
- 进程每运行一个时间片,优先数减3
-
假设在调度前,系统中有5个进程,合理设计它们的初始状态 -
初始状态参考示例如下
为了清楚地观察每个进程的调度过程,程序应将每个时间片内的进程的情况显示出来,包括正在运行的进程,处于就绪队列中的进程和处于阻塞队列中的进程。 参照的具体格式如下: RUNNING PROG: i READY_QUEUE:->id1->id2 BLOCK_QUEUE:->id3->id4
int main() {
int num = 0;
printf("输入需要初始化进程的个数:\n");
scanf("%d", &num);
PCB* proc_ready = init_process(num);
PCB* proc_block = (PCB*)malloc(sizeof(PCB));
// 运行进程
run_process(proc_ready, proc_block);
return 0;
}
|