1、进程调度算法 一、实验目的 通过优先权法与轮转调度算法的模拟加深对进程概念和进程调度过程的理 解,掌握进程状态之间的切换,同时掌握进程调度算法的实现方法和技巧。 二、实验内容 1、 用 C 语言或 C+语言来实现对 N 个进程采用优先算法以及轮转算法的进程 调度。 2、每个用来标示进程的进程控制块 PCB 用结果来描述,包括以下字段 (1) 进程标识ID, 其中0为闲逛进程, 用户进程的标识数为1、 2、 3、 、 、 、 、 、 、 。 (2)进程优先级 Priority,闲逛进程(idle)的优先级为 0,用户有进 程的优先级大于 0,且随机产生,标识数越大,优先级越高。 (3)进程占用的
2、 CPU 时间 CPUtime,进程每运一次,累积等于 4. (4)进程总共需要运行时间 Alltime,利用随机函数产生。 (5)进程状态,0就绪态,1运行态,2阻塞态。 (6)队列指针 next,用来将多个进程控制块 PCB 链接为队列。 3、优先数改变的原则 (1)进程在就绪队列中每呆一个时间片,优先数增加 1. (2)进程每运行一个时间片,优先数增加 1. 4、在调度前,系统中拥有的进程数 PCB_number 有键盘输入,进初始化后, 所有的进程控制块 PCB 连接成就绪队列。 5、为了清楚的观察诸进程的调度过程,程序应将每个时间片内的进程的情 况显示出来。 三、实验步骤 1、进程管
3、理程序调式好后,运行进程管理程序 操作系统课程设计 2 Y N N Y Y N N Y Y N N Y ready-queue 是否为 将 Running 从 ready_queue 中删除, 再将 running 加入 block_queueb 将其从 blick_queuek 队列是中删除,再将其加入 ready_queuek 输入开始进程数 n 随机 对 block_queue 中的进程 PCB询问是否要唤醒? 创建新进程并加入到 ready_queue 中 Running逐个将 redy_pc 中的 PCB 创建 n 个 PCB并加入 readyqueue 中 处理完了吗 阻塞 Run
4、ning 是否要唤醒 是否创建新 PCB Running=idle 更新新进程就绪队列进程优先数,优先数加 1 Running=id 操作系统课程设计 3 2、优先权调度 (1)输入 1 选择优先权调度算法模拟。 (2)输入开始进程个数 n,创建 n 个 PCB 并加入就绪队列 ready_queue 中。 (3)就绪队列 ready_queue 不为空,调度就绪队列中第一个进程运行,否 则,从闲逛队列 idleprocess 中调度闲逛进程运行。 (4)在运行过程中,当遇到阻塞,则该进程插入到阻塞队列 block_queue 中,且将该进程从 ready_queue 中删除。 (5)如果运行时间 CPUtime 大于等于 Alltime,该进程运行完毕,释放该 进程;否则插入到就绪队列中。 (6)更新就绪队列中的优先级数。 (7)随机对阻塞队列 block_queue 中的进程 PCB 询问是否要唤醒,唤醒, 即从唤醒队列中选择第一个进程,且插入就绪队列中;阻塞队列中没有阻塞进程 返回。 (8)重复上述步骤,直到本次调度结束。 操作系统课程设计 4 3、轮转调度