操作系统原理.docVIP

  • 5
  • 0
  • 约2.1万字
  • 约 29页
  • 2017-02-14 发布于江苏
  • 举报
操作系统原理

计算机科学与应用系 操作系统原理 课程设计报告 题目 操作系统进程调度算法实验 班级 学号 姓名 专业 计算机科学与应用系 指导教师 实验目的 通过优先权法和轮转算法的模拟加深对进程概念和进程调度过程的理解,掌握进程 状态之间的切换,同时掌握进程调度算法的实现方法和技巧。 2.实验内容 1.用C语言或C++语言来实现对n个进程采用优先权优先算法以及轮转算法的进程调度。 2.每个用来标识进程的进程控制块PCB用结构来描述,包括以下字段: (1)进程标识ID,其中0为闲逛进程,用户进程的标识数为1,2,3…。 (2)进程优先级Priority,闲逛进程(idle)的优先级为0,用户进程的优先级大于0,且随机产生,标识数越大,优先级越高。 (3)进程占用的CPU时间CPUtime,进程每运行一次,累计值等于4。 (4)进程总共需要运行时间Alltime,利用随机函数产生。 (5)进程状态,0-就绪态;1-运行态;2-阻塞态。 (6)队列指针next,用来将多个进程控制块PCB链接为队列。 3.优先数改变的原则 (1)进程在就绪队列中每呆一个时间片,优先数增加1。 (2)进程每运行一个时间片,优先数减3。 4.在调度前,系统中拥有的进程数PCB_number由键盘输入,经初始化后,所有的进程控制块PCB链接成就绪队列。 5.为了清楚地观察诸进程的调度过程,程序应将每个时间片内的进程的情况显示出来,参照输出格式如图1-1、1-2、1-3所示: 图1-1 优先权优先调度算法1 图1-2 优先权优先调度算法2 图1-3 优先权优先调度算法3 轮转调度算法的运行结果如图1-4、1-5所示。 图1-4 轮转调度算法的运行结果1 图1-5 轮转调度算法的运行结果2 3.实验步骤 1 进程调度的基本思想 (1)当系统空闲(就绪队列为空)时,系统运行闲逛进程,否则运行其他进程,发生变迁1(就绪→运行)。 (2)在运行进程(包括闲逛进程)的过程中,可能发生变迁2(运行→阻塞),即将运行进程插入到阻塞队列(闲逛进程不能被阻塞),可能有其他新的进程创建PCB,还可能唤醒阻塞队列中的某些进程PCB,发生变迁3(阻塞→就绪),即从阻塞队列中移出并插入就绪队列中。 (3)时间片运行结束后,若进程累计占用CPU时间大于等于进程需要运行的时间,则进程执行结束,释放其PCB。若进程累计占用CPU时间小于进程需要运行时间,发生变迁4(运行→就绪),即将当前运行的进程插入就绪队列中。 2 程序流程图 1.动态优先权的进程调度算法模拟流程 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)重复上述步骤,直到本次调度结束。 3、轮转调度 (1)输入2选择优先权调度算法模拟。 (2)输入开始进程个数n,创建n个PCB并加入就绪队列ready_queue中。 (3)就绪队列ready_queue不为空,调度就绪队列中第一个进程运行,否则,从闲逛队列idleprocess中调度闲逛进程运行。 (4)在运行过程中,当遇到阻塞,则该进程插入到阻塞队列block_queue中,且将该进程从ready_queue中删除。 (5)如果运行时间CPUtime大于等于Alltime,该进程运行完毕,释放该进程;否则插入到就绪队列中。 (6)随机对阻塞队列block_queue中的进程PCB询问是否要唤醒,唤醒,即从唤醒队列中选择第一个进程,且插入就绪队列中;阻塞队列中没有阻塞进程返回。 (7)如果时间到,本次调度结束,否则重复上述步骤,直到本次调度结束。 2.轮转法进程调度算法模拟流程 3供参考的程序代码 /*以下程序在C++环境调试通过*/ #include stdafx.h

文档评论(0)

1亿VIP精品文档

相关文档