处理器调度的实验报告_第1页
处理器调度的实验报告_第2页
处理器调度的实验报告_第3页
处理器调度的实验报告_第4页
处理器调度的实验报告_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

一 实验内容 按优先数调度算法实现处理器调度 二 实验目的 在采用多道程序设计的系统中 往往有若干个进程同时处于就绪状态 当就绪进程 个数大于处理器数时 就必须依照某种策略来决定哪些进程优先占用处理器 本实验模拟 在单处理器情况下的处理器调度 帮助学生加深了解处理器调度的工作 三 实验原理 设计一个按优先数调度算法实现处理器调度的程序 1 假定系统有五个进程 每一个进程用一个进程控制块 PCB 来代表 进程控制块的 格式为 进程名 指针 要求运行时间 优先数 状态 其中 进程名 作为进程的标识 假设五个进程的进程名分别为 P1 P2 P3 P4 P5 指针 按优先数的大小把五个进程连成队列 用指针指出下一个进程的进程控制块 的首地址 最后一个进程中的指针为 0 要求运行时间 假设进程需要运行的单位时间数 优先数 赋予进程的优先数 调度时总是选取优先数大的进程先执行 状态 可假设有两种状态 就绪 状态和 结束 状态 五个进程的初始状态都为 就绪 用 R 表示 当一个进程运行结束后 它的状态为 结束 用 E 表示 2 在每次运行你所设计的处理器调度程序之前 为每个进程任意确定它的 优先数 和 要求运行时间 3 为了调度方便 把五个进程按给定的优先数从大到小连成队列 用一单元指出队 首进程 用指针指出队列的连接情况 例 队首标志 K2 K1P1 K2P2 K3P3 K4P4 K5P5 0K4K5K3K1 23124 15342 RRRRR PCB1PCB2PCB3PCB4PCB5 4 处理器调度总是选队首进程运行 采用动态改变优先数的办法 进程每运行一次 优先数就减 1 由于本实验是模拟处理器调度 所以 对被选中的进程并不实际的启动 运行 而是执行 优先数 1 要求运行时间 1 来模拟进程的一次运行 提醒注意的是 在实际的系统中 当一个进程被选中运行时 必须恢复进程的现场 让它占有处理器运行 直到出现等待事件或运行结束 在这里省去了这些工作 5 进程运行一次后 若要求运行时间 0 则再将它加入队列 按优先数大小插入 且置队首标志 若要求运行时间 0 则把它的状态修改成 结束 E 且退出队列 6 若 就绪 状态的进程队列不为空 则重复上面 4 和 5 的步骤 直到所有 进程都成为 结束 状态 7 在所设计的程序中应有显示或打印语句 能显示或打印每次被选中进程的进程名 以及运行一次后进程队列的变化 8 为五个进程任意确定一组 优先数 和 要求运行时间 启动所设计的处理器调度程 序 显示或打印逐次被选中进程的进程名以及进程控制块的动态变化过程 四 算法流程图 开始 链表初始化 从键盘输入数据 排序 执行表中的第一个 当前进程 time 0 帆中删除 链表是否为 空 结束 是 否 是 五 源程序及注释 include include include typedef struct DATA char pname 10 进程名 float time 要求运行时间数 int ove 优先级 char flag 状态 DATA typedef struct pcb DATA data struct pcb next pcb int flag 5 假设有五个进程 pcb init pcb p 初始化 p pcb malloc sizeof DATA p next NULL return p void show pcb p 输出显示 if flag printf n 没有正在运行的进程 或进程已经全部执行完毕 n else printf n 名称 printf printf 执行时间 printf printf 优先数 printf printf 状态 n while p next p p next printf s p data pname printf printf 1 0f p data time printf printf d p data ove printf printf c n n p data flag void del pcb h 进程执行完成后的删除 pcb p p h p p next if p data flag E printf 有一个进程执行完成 n printf 进程的名称为 s n p data pname p p next h next p flag void in pcb h 从键盘中输入数据 int i 0 pcb pc l pc h printf 请依次输入五个进程的名称 执行时间 优先数 输入时进程与进程之间 用回车来隔开 n for i idata pname rewind stdin if l data time l data flag E else l data flag R l next NULL pc next l pc pc next void soar pcb p 对于这五个进程按其优先级进行排序 pcb q pcb h int i 0 int j q init q h p next for i i flag i for j 0 jdata time if h data ovenext data ove q data h data h data h next data h next data q data h h next else printf 有一个进程执行完成 n printf 进程的名称为 s n h data pname flag h p next if flag printf n 目前优先级最高的进程的名称是 s n 所以执行此进程 p next data pname void run pcb h 执行程序 h h next h data time h data ove if h data time h data flag E void main pcb p char c p init p in p soar p show p del p while flag run p del p soar p show p c getch rewind stdin 六 打印的程序运行时初值和运行结果 1 假设从键盘中输入的五个进程的名称 执行时间 优先数分别为 a 5 6 b 6 5 c 4 4 d 1 2 e 3 3 按优先级排序后 其优先级最高的是 a 2 执行一次 a 后 再次进行排序 a 的优先级为最高 以下程序循环执行 接下来是 b 3 当 a 进程执行完成后 程序会给一个提示 并从队列中删除此进程 4 程序最后执行完成 整个程序运行结束 七 实验小结 此实验主要是用到链表来实现 用到的数据结构为 typedef struct DATA char pname 10 进程名 float time 要求运行时间数 int ove 优先级 char flag

温馨提示

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

评论

0/150

提交评论