本研究设计并实现了一种基于动态优先级调整的新型进程调度算法仿真系统。通过模拟不同应用场景下的任务调度过程,验证了该算法在提高系统吞吐量和减少延迟方面的有效性。
实验目的:通过动态优先权算法的模拟加深对进程概念及调度过程的理解。
实验内容:
1. 使用C语言实现N个进程采用动态优先级算法进行进程调度。
2. 每个用于标识进程的进程控制块(PCB)用结构体来描述,包含以下字段:
- 进程标识符id;
- 进程优先数priority,规定优先数值越大其优先权越高;
- 已占用CPU时间cputime;
- 需要继续使用的CPU时间alltime,在进程运行完毕时该值变为0;
- 当进程再运行startblock个时间片后进入阻塞状态的阻塞时间startblock(对于不会被立即阻塞的情况,此字段为-1);
- 已经处于阻塞状态的时间长度blocktime。
- 进程的状态state:表示当前进程是就绪、运行还是阻塞等不同情况;
- 队列指针next用于将PCB排成队列。
3. 优先数调整规则:
- 在就绪队列中等待一个时间片,优先级加1。
- 每执行一次CPU时间片后,优先级减3。
4. 实验假设在调度开始时系统中有五个进程(ID从0到4),它们的初始状态如下:
| ID | 0 | 1 | 2 | 3 | 4 |
|----|-----|-----|-----|-----|---|
| PRIORITY (优先级) |9 |38 |30 |29 |0 |
| CPUTIME (已使用CPU时间)|0 |0 |0 |0 | 0 |
| ALLTIME (剩余所需CPU时间)|3 |3 |6 |3 |-|
| STARTBLOCK (-1表示不会立即被阻塞,否则为进入阻塞状态前还需运行的时间片数) |- |-1 |-1 |-1 |-1 |
| BLOCKTIME(进程处于阻塞状态的持续时间)|3 |0 |0 |0 |---|
| STATE (当前状态:就绪、运行或等待等) |READY| READY| READY| READY|-|
5. 程序需清晰地显示每个时间片内所有相关进程的状态,参照以下格式输出:
通过上述实验内容的实现和观察可以对动态优先级算法有更直观深入的理解。