文档详情

进程调度实验报告源码及.doc

发布:2016-05-18约3.96千字共14页下载文档
文本预览下载声明
安徽师范大学 数计 学院实验报告 专业名称 计算机科学与技术 实 验 室 2060403 实验课程 计算机操作系统 实验名称 生产者与消费者 实验人员 樊越 实验日期 2015/11/04 一实验目的 在采用多道程序设计的系统中,往往有若干个进程同时处于就绪状态。当就绪进程个数大于处理器数时,就必须依照某种策略来决定哪些进程优先占用处理器。本实验模拟在单处理器情况下的处理器调度,加深了解处理器调度的工作。 二实验环境 PC Windows操作系统 3C++6.0 三实验内容 运用高级语言模拟模拟进程的时间片轮转调度算法和高响应比优先调度算法。设计一个可以自由选择按时间片轮转法或者高响应比优先调度法实现处理器调度程序。 四程序设计概要以及源码 (1)关于时间片轮转法 (1) 设定五个进程,每一个进程用一个进程控制块PCB来代表。 进程名 指针 要求运行时间 已运行时间 状态 (2) 每次运行所设计的进程调度程序前,为每个进程任意确定它的“要求运行时间”。 (3) 把五个进程按顺序排成循环队列,用指针指出队列连接情况。另用一标志单元记录轮到运行的进程。 (4) 处理器调度总是选择标志单元指示的进程运行。剩余时间-1。 (5) 进程运行一次后,把该进程的进程控制块中的指针值送到标志单元,以指示下一个轮到运行的进程。同时,应判断该进程的要求运行时间与已运行时间,若该进程的要求运行时间(已运行时间,则表示它尚未执行结束,应待到下一轮时再运行。若该进程的要求运行时间=已运行时间,则表示它已经执行结束,应指导它的状态修改成“结束”且退出队列。此时,应把该进程的进程控制块中的指针值送到前面一个进程的指针位置。 (6) 若“就绪”状态的进程队列不为空,则重复上面的(4)和(5)的步骤,直到所有的进程都成为“结束”状态。 #includestdio.h #includestdlib.h struct Progress //进程 { char pname[2]; //进程名 struct Progress *next; //next int state; //状态(1为就绪,0为完毕) int rtime; //要求运行时间 int atime; //已运行时间 }; void Initialize(struct Progress *q) //初始化 { int i; for(i=0;i5;i++) { q-rtime=rand()%5+1;//设定每个进程要求运行时间 q-atime=0; q-state=1; q-pname[0]=Q; q-pname[1]=i+49; q-pname[2]=\0; printf(%s进程需要的执行时间为%d\n,q-pname,q-rtime); q=q-next; } } void DispatchProgress(struct Progress *p) //进程调度 { struct Progress *q; q=p-next; while(1) { q-atime++; printf(本次选中%s进程运行该进程的剩余执行时间为%d\n,q-pname,q-rtime-q-atime); if(q-rtime==q-atime)//判断进程是否已经运行完毕 { q-state=0; printf(进程%s已经运行完毕,出队列\n,q-pname); p-next=q-next; //指针前递,再次构成循环队列 q=q-next; } p=q; q=q-next; if(q-state==0q-next==q)//所有进程均运行完毕 break; } } int main() { struct Progress Q1,Q2,Q3,Q4,Q5; struct Progress *p; Q1.next=Q2; //首位相连构成循环队列 Q2.next=Q3; Q3.next=Q4; Q4.next=Q5; Q5.next=Q1; p=Q1; Initialize(Q1); DispatchProgress(Q5); return 0; } (2)关于高响应比优先调度法 (1) 假定系统有五个进程,每一个进程用一个进程控制块PCB来代表 进程名 指针 要求运行时间 等待时间 响应比 状态 (2) 在每次运行你所设计的处理器调度程序之前,为每个进程任意确定它的“等待时间”和“要求运行时间”。 (3) 找出优先级最高的进程 (4) 处理器调度总是选队首进程运行。采用动态改变响应比的办法,进程每运行一次重新计算各进程的响应比。由
显示全部
相似文档