本实验报告针对《操作系统》课程中的进程调度部分进行详细研究和实践探索,分析了多种常见调度算法,并通过编程实现及性能测试,加深了对进程调度机制的理解。
一、 目的要求
通过使用高级语言编写并调试一个进程调度程序来加深对进程概念及各种进程调度算法的理解。
二、 实习题
设计并实现一个模拟的进程调度程序,采用“轮转法”(Round Robin, RR)进行五个进程的调度。该方法可以是简单轮转法、可变时间片轮转法或多个队列中的轮转法。在简单轮转算法中,所有就绪状态下的进程按照先来先服务的原则形成一个单向链表;处理机资源始终分配给链首的第一个进程使用,并且每个进程占用的时间长度是固定的。一旦某个正在运行的进程用完其预定时间片而未能完成,则该进程会被重新排回到队列尾部,等待下一轮次的调度执行直至所有任务结束。
三、 编程思想
采用结构体(struct)来表示程序中的每一个独立进程,并通过指针将这些单个实体组合成一个循环链表。每当遇到一个需要处理的任务时,系统会检查该进程中剩余的工作量是否已经全部完成;如果确定了这一点,则从当前的循环列表中移除对应的节点并继续对下一个可用任务进行调度操作直至所有工作项都已处理完毕。
四、 程序数据结构
```c
struct pcb {
char name[10]; /* 进程名 */
char state; /* 进程状态 */
int ntime; /* 完成进程所需时间 */
int rtime; /* 已占用CPU时间 */
struct pcb *link; /* 指向下一个结构体的指针 */
};
typedef struct pcb PCB;
```