处理机管理实验报告

上传人:pu****.1 文档编号:513942540 上传时间:2023-01-19 格式:DOCX 页数:11 大小:135.57KB
返回 下载 相关 举报
处理机管理实验报告_第1页
第1页 / 共11页
处理机管理实验报告_第2页
第2页 / 共11页
处理机管理实验报告_第3页
第3页 / 共11页
处理机管理实验报告_第4页
第4页 / 共11页
处理机管理实验报告_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《处理机管理实验报告》由会员分享,可在线阅读,更多相关《处理机管理实验报告(11页珍藏版)》请在金锄头文库上搜索。

1、实验报告课程名称:操作系统实验名称:处理机管理学 号:学生姓名:班 级:指导教师:评 分:实验日期: 2012 年 11 月 19 日1、实验目的:在多道程序或多任务系统中,系统同时处于就绪态的进程有若干个,也就是 说能运行的进程数远远大于处理机个数。为了使系统中的各进程能有条不紊地运 行,必须选择某种调度策略,以选择一进程占用处理机。设计模拟单处理机调度 的算法,巩固和加深处理机调度的概念。2、实验要求(1)设计一个按优先级调度的算法(2)按时间片轮转法进行CPU调度3、实验环境硬件:CPU : AMD QL64内存:2GB显卡:ATI 4570硬盘:日立250G 软件:Windows 20

2、00/XP。开发工具:VC+6.0。4、实验内容1)实现原理(1)设计一个按优先级调度的算法进程的优先数由用户自己指定或程序任意设定,且优先级数越低,优先级越 高。调度时,总是选择优先级最高的进程运行。为了调度方便,设计一个指针指向5个进程排成的就绪队列的第一个进程, 另外再设计一个当前运行进程指针,指向当前正运行的进程。为了采用动态优先级调度,进程每运行一次,其优先级减1。进程运行最后 一次,若剩余的运行时间部位0,且优先级低于就绪队列的进程的优先级,则选 择一个高优先级进程抢占CPU;若剩余时间为0,则把它的状态改为完成状态(C),并撤出就绪队列。若就绪队列部位空,则重复以上操作,直到所有

3、进程为完成状态。在所涉及的程序中,应有显示或打印语句,以显示或打印每次被选中进程的 进程名以及运行一次后进程的变化,就绪队列中的个进程排队情况等。为5个进程任意确定一组“优先级”和“要求运行时间”,启动处理机调度 程序,显示或打印为此选中的进程名以及进程控制块的动态变化过程:包括进程 已运行时间,剩余时间,就绪队列中的进程等。优先级调度算法:按照进程的优先级大小来调度。使高优先级进程或线程得 到优先的处理的调度策略称为优先级调度算法。进程的优先级可以由系统自动地 按一定原则赋给它,也可由系统外部来进行安排但在许多采用优先级调度的系 统中,通常采用动态优先数策略。即一个进程的优先级不是固定的,往

4、往是随许 多因素的变化而变化。尤其随作业(进程)的等待时间,已使用的处理器时间或 其他系统资源的使用情况而定,以防止低优先级进程或线程长期饥饿现象发生 时间片轮转算法:时间片轮转算法主要用于处理器调度。采用此算法的系统,其 进程就绪队列往往按进程到达的时间来排序。进程调度程序总是选择就绪队列中 的第一个进程,也就是说按照先进先出原则调度,但一旦进程占有处理器仅使用 一个时间片,在使用完一个时间片后,进程还没有完成其运行,它也必须释放出 (被抢占)处理器给下一个就绪的进程。而被抢占的进程返回到就绪队列的末尾 重新排队等候再次运行。(2)按时间片轮转法进行CPU调度。编写并调试一个模拟的进程调度程

5、序,采用“简单时间片轮转法”进行CPU 调度。每个进程有一个进程控制块(PCB)表示。进程控制块可以包含如下信 息:进程名、到达时间、需要运行时间、已运行时间、进程状态等等。进程的到达时间及需要的运行时间可以事先人为地指定(也可以由随机数产 生)。进程的到达时间为进程输入的时间。进程的运行时间以时间片为单位进行 计算。每个进程的状态可以是就绪W (Wait)、运行R(Run)两种状态之一。就 绪进程获得CPU后都只能运行一个时间片。用运行时间加1来表示。 如果运 行一个时间片后,进程的已占用CPU时间已达到所需要的运行时间,则撤消该 进程,如果运行一个时间片后进程的已占用CPU时间还未达所需要

6、的运行时间, 也就是进程还需要继续运行,此时应分配时间片给就绪队列中排在该进程之后的 进程,并将它插入就绪队列队尾。每进行一次调度程序都打印一次运行进程、 就绪队列、以及各个进程的PCB,以便进行检查。重复以上过程,直到所要进 程都完成为止。进程调度算法:米用多级反馈队列调度算法。其基本思想是:当一个新进程 进入内在后,首先将它放入第一个队列的末尾,按FCFS原则排队等待高度。当 轮到该进程执行时,如能在该时间片内完成,便可准备撤离系统;如果它在一个 时间片结束时尚为完成,调度程序便将该进程转入第二队列的末尾,再同样地按 FCFS原则等待调度执行。2)程序结构定义结构体PCB描述进程的进程控制

7、块,定义数组PCB pcbMax存放进程 进 程调度程序调用face()函数选择所要进行的操作。输入1则增加进程并调度进程, 输入2则打印进程,输入0则任务结束增加进程,调用AddProcess()函数,将 输入的进程存放在数组pcbMax中打印进程,调用print()函数,在该函数中首 先调用sort()函数对进程按优先级和先来先服务排序,然后显示输出排序后的进 程进程调度,调用attemper()函数,调度优先级最高的进程分配给CPU使之运 行一个时间片 进程优先级排序,调用sort()函数,按照先来先服务和优先级排序, 使排序完最优先运行的进程存放在pcb0中。3) 数据结构1. 按优先

8、数调度算法假定系统有五个进程每一个进程用一个进程控制块PCB来代表,进程控制 块的格式为:进程名链接指针一进程的优先级估计运行时间进程状态2. 按时间片轮转法调度的算法假定系统有五个进程每一个进程用一个进程控制块PCB来代表,进程控制 块的格式为:进程名一链接指针到达时间估计运行时间进程状态为每个进程任意确定一个要求运行时间和到达时间,按照进程到达的先后顺 序排成一个循环队列,再设一个队首指针指向第一个到达进程的首址。执行处理机调度时,开始选择队首的第一个进程运行,再设一个当前运行进 程指针,指向当前正运行的程序。进程运行给最后一次,以后的调度则将当前指针一次下移一个位置,指向下 一个进程,同

9、时还应该判断该进程的剩余时间运行是否为0.若就绪队列不为空,则重复上诉操作指导所有进程都运行完为止。在所涉及的程序中,应有显示或打印语句,以显示或打印每次被选中进程的 进程名以及运行一次后进程的变化情况等。4) 实现步骤(1)打开VC,选择菜单项文件-新建,输入相关程序。按优先级调度的算法:按时间片轮转法进行CPU调度:(2)最后在进行编译连接。并把实验结果截图保存。5、实验测试及分析:按优先级调度的算法:按时间片轮转法进行CPU调度:6、实验心得体会通过这次实验,使我对进程的优先级调度有了一定的了解。也使我能够很好 得了解进程的运行状况,实验中也用到了时间片调度,各个进程分别占用CPU 使用

10、权。附录:源代码按优先级调度的算法:#include #include#include#include #include #include using namespace std;void display。;/ 声明函数int quantity; typedef struct processchar pname20; 进程名 struct process *next;int BurstTime;/所需时间int priority; / 数字越大优先级越高 char Status;PROCESS;void insert(PROCESS *head,PROCESS *p) /入队函数 PROCES

11、S *h;if(head-next =NULL)head-next =p; p-next=NULL;h=head;else while(h-next !=NULL)if(h-next)-priority =p-priority h=h-next;elsep-next =h-next ;h-next =p; break;if(h-next =NULL)h-next =p;p-next=NULL;PROCESS *create() /进程初始化PROCESS *q,*h; int i,num;h=(struct process*)malloc(sizeof(struct process);h-ne

12、xt=NULL;coutnum; for(i=1;i=num;i+)、优先数:q-pnameq-BurstTimeq-priority;q-Status=R; q-next=NULL;insert(h,q);cout就绪队列:n;coutnext;while(q) q-Status=R;coutpnameBurstTimeStatus next;q=(struct process*)malloc(sizeof(struct process); cout输入第i个进程的名字、所需时间prioritynext!=NULL )PROCESS *q;cout*endl;cout运行一次后:next -

13、priority -; pt-next -BurstTime -; if(pt-next-BurstTime =0) 态:pt-next-Status =E;cout进程名为next-pname的进程:已执行完!进程状 next-Status next;pt-next=q-next;free(q); elseif(pt-next-next!=NULL) elseq=pt-next;pt-next=q-next;insert(pt,q); pt-next-Status =Z; pt-next-next-Status =R;态 ;BurstTimenext; pt-next=q-next;insert(pt,q); pt-next-Status =Z;PROCESS *l; l=pt-next;coutendl 进程名 所需时间 优先数 进程状while(l) cout endlpriorityStatus;l=l-next;pnameelse coutendl

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号