实验一---处理器调度(设计一个按时间片轮转法实现处理器调度的程序)_第1页
实验一---处理器调度(设计一个按时间片轮转法实现处理器调度的程序)_第2页
实验一---处理器调度(设计一个按时间片轮转法实现处理器调度的程序)_第3页
实验一---处理器调度(设计一个按时间片轮转法实现处理器调度的程序)_第4页
实验一---处理器调度(设计一个按时间片轮转法实现处理器调度的程序)_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验一实验一 处理器调度处理器调度 一 实验内容一 实验内容 选择一个调度算法 实现处理器调度 二 实验目的二 实验目的 在采用多道程序设计的系统中 往往有若干个进程同时处于就绪状态 当就绪进程个 数大于处理器数时 就必须依照某种策略来决定哪些进程优先占用处理器 本实习模拟在 单处理器情况下的处理器调度 帮助学生加深了解处理器调度的工作 三 实验题目三 实验题目 第二题 设计一个按时间片轮转法实现处理器调度的程序 提示 1 假定系统有五个进程 每一个进程用一个进程控制块 PCB 来代表 进程控制块的 格式为 进程名 指针 要求运行时间 已运行时间 状态 其中 进程名 作为进程的标识 假设五个进程的进程名分别为 Q1 Q2 Q3 Q4 Q5 指针 进程按顺序排成循环队列 用指针指出下一个进程的进程控制块的首地址 最后一个进程的指针指出第一个进程的进程控制块首地址 要求运行时间 假设进程需要运行的单位时间数 已运行时间 假设进程已经运行的单位时间数 初始值为 0 状态 有两种状态 就绪 和 结束 初始状态都为 就绪 用 R 表示 当一个进程运行结束后 它的状态为 结束 用 E 表示 2 每次运行所设计的处理器调度程序前 为每个进程任意确定它的 要求运行时间 3 把五个进程按顺序排成循环队列 用指针指出队列连接情况 另用一标志单元记 录轮到运行的进程 例如 当前轮到 P2执行 则有 标志单元 K1Q1 K2Q2 K3Q3 K4Q4 K5Q5 K2 K3 K4 K5 K1 2 3 1 2 4 1 0 0 0 0 R R R R R PCB1 PCB2 PCB3 PCB4 PCB5 4 处理器调度总是选择标志单元指示的进程运行 由于本实习是模拟处理器调度的 功能 所以 对被选中的进程并不实际的启动运行 而是执行 已运行时间 1 来模拟进程的一次运行 表示进程已经运行过一个单位的时间 K2 请同学注意 在实际的系统中 当一个进程被选中运行时 必须置上该进程可以运 行的时间片值 以及恢复进程的现场 让它占有处理器运行 直到出现等待事件或 运行满一个时间片 在这时省去了这些工作 仅用 已运行时间 1 来表示进程 已 经运行满一个时间片 5 进程运行一次后 应把该进程的进程控制块中的指针值送到标志单元 以指示下 一 个轮到运行的进程 同时 应判断该进程的要求运行时间与已运行时间 若该进程 的要求运行时间 已运行时间 则表示它尚未执行结束 应待到下一轮时再运行 若 该进程的要求运行时间 已运行时间 则表示它已经执行结束 应指导它的状态修 改成 结束 E 且退出队列 此时 应把该进程的进程控制块中的指针值送到 前 面一个进程的指针位置 6 若 就绪 状态的进程队列不为空 则重复上面的 4 和 5 的步骤 直到所 有 的进程都成为 结束 状态 7 在所设计的程序中应有显示或打印语句 能显示或打印每次选中进程的进程名以 及 运行一次后进程队列的变化 8 为五个进程任意确定一组 要求运行时间 启动所设计的处理器调度程序 显示 或打印逐次被选中的进程名以及进程控制块的动态变化过程 四四 所用数据结构所用数据结构及符号说明及符号说明 typedef struct PNode PCB struct PNode next 定义指向下一个节点的指针 char name 10 定义进程名 并分配空间 int All time 定义总运行时间 int Runed Time 定义已运行时间 char state 定义进程状态 Ready End Proc 指向该 PCB 的指针 int ProcNum 总进程数 五五 流程图流程图 开始 输入进 程总数 指针所指的进程是 否结束 输入各进 程信息 输出为就绪 状态的进程 的信息 更改正在运 行的进程的 已运行时间 跳过已结束 的程序 结束 N 指向下一 个进程 Y 如果存在下一 个进程的话 Y N 输出此时为 就绪状态的 进程的信息 六六 源代码 源代码 include include using namespace std typedef struct PNode PCB struct PNode next 定义指向下一个节点的指针 char name 10 定义进程名 并分配空间 int All time 定义总运行时间 int Runed Time 定义已运行时间 char state 定义进程状态 Ready End Proc 指向该 PCB 的指针 int ProcNum 总进程数 初始化就绪队列 void lnitPCB Proc 进程总个数 int Num ProcNum H Proc malloc sizeof PNode 建立头结点 H next NULL Proc p H 定义一个指针 cout 总进程个数为 ProcNum 个 请依次输入相应信息 endl cout next Proc malloc sizeof PNode cout p name p All time p Runed Time p state R p next NULL p next H next 输入运行中的进程信息 void Displnfo Proc H Proc p H next do if p state E 如果该进程的状态不是 End 的话 cout 进程名 name t 总运行时间 All time t 已运行时间 Runed Time t 状态 state next else p p next while p H next 整个进程链条始终完整 只是状态位有差异 时间片轮转法 void SJP Simulator Proc while p All time p Runed Time round cout endl Round round 正在运行 name 进程 Runed Time 更改正在运行的进程的已运行的时间 Displnfo H 输出此时为就绪状态的进程 的信息 if p All time p Runed Time 判断该进程是否结束 p state E flag cout name next while flag 跳过先前已结束的进程 cout endl END n void main Proc H lnitPCB H 数据初始化 Displnfo H 输出此刻的进程状态 SJP Simulator H 时间片轮转法 system pause 七七 测试数据与实验结果测试数据与实验结果 八八 结果分析与实验体会结果分析与实验体会 时间片轮转算法中 系统将所有的就绪程序按先来先服务的原则排成一个队列 每次 调度时 把 CPU 分配给队首进程 并令其执行一个时间片 一个较小的时间单元 轮转法 是一种剥夺式调度 当执行的时间片用完时 调度程序停止该进程的执行 并将它送往就 绪队列的末尾 然后 再把处理机分配给就绪队列中

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论