文档详情

优先级调度算法实验报告(共10篇).doc

发布:2017-05-03约1.85万字共37页下载文档
文本预览下载声明
优先级调度算法实验报告(共10篇) 优先级调度算法实验报告 优 先 级 调 度 算 法 实 验 报 告 院系:****************学院 班级:*********** 姓名:*** 学号:************ 一、实验题目:优先级调度算法 二、实验目的 进程调度是处理机管理的核心内容。本实验要求用高级语言编写模拟进程调度程序,以便加深理解有关进程控制快、进程队列等概念,并体会和了解优先级算法的具体实施办法。 三、实验内容 1.设计进程控制块PCB的结构,通常应包括如下信息: 进程名、进程优先数(或轮转时间片数)、进程已占用的CPU时间、进程到完成还需要的时间、进程的状态、当前队列指针等。 2.编写优先级调度算法程序 3.按要求输出结果。 四、实验要求 每个进程可有三种状态;执行状态(RUN)、就绪状态(READY,包括等待状态)和完成状态(FINISH),并假定初始状态为就绪状态。 (一)进程控制块结构如下: NAME——进程标示符 PRIO/ROUND——进程优先数 NEEDTIME——进程到完成还需要的时间片数 STATE——进程状态 NEXT——链指针 注: 1.为了便于处理,程序中进程的的运行时间以时间片为单位进行 计算; 2.各进程的优先数或,以及进程运行时间片数的初值,均由用户在程序运行时给定。 (二)进程的就绪态和等待态均为链表结构,共有四个指针如下: RUN——当前运行进程指针 READY——就需队列头指针 TAIL——就需队列尾指针 FINISH——完成队列头指针 五、实验结果: 六、实验总结: 首先这次实验的难度不小,它必须在熟悉掌握数据结构的链表和队列的前提下才能完成,这次实验中用了三个队列,就绪队列,执行队列和完成队列,就绪队列中的优先级数是有序插入的,当进行进程调度的时候,需要先把就绪队列的队首节点(优先级数最大的节点)移入执行队列中,当执行进程结束后,判断该进程是否已经完成,如果已经完成则移入完成队列,如果没有完成,重新有序插入就绪队列中,这就是这次实验算法的思想。 附录(算法代码): #include stdio.h #include stdlib.h #include string.h typedef struct node { char name[20]; /*进程的名字*/ int prio; /*进程的优先级*/ //int cputime; /*CPU执行时间*/ int needtime; /*进程执行所需要的时间*/ char state; /*进程的状态,W--就绪态,R--执行态,F--完成态*/ struct node *next;/*链表指针*/ }PCB; PCB *ready=NULL,*run=NULL,*finish=NULL; /*定义三个队列,就绪队列,执行队列和完成队列*/ int num; void GetFirst(); /*从就绪队列取得第一个节点*/ void Output(); /*输出队列信息*/ void InsertPrio(PCB *in); /*创建优先级队列,规定优先数越小,优先级越高*/ void InsertTime(PCB *in); /*时间片队列*/ void InsertFinish(P(转 载于:wWw.xIeL 写 论文 网:)CB *in); /*时间片队列*/ void PrioCreate(); /*优先级输入函数*/ //void TimeCreate(); /*时间片输入函数*/ void Priority(); /*按照优先级调度*/ //void RoundRun(); /*时间片轮转调度*/ void main() { printf(优先数调度算法\n); printf(请输入要创建的进程数目:); scanf(%d,amp;num); PrioCreate(); Priority(); Output(); } void GetFirst() /*取得第一个就绪队列节点*/ { run = ready; if(ready!=NULL) { run -state = #39;R#39;; ready = ready -next; run -next = NULL; } } 篇二:操作系统优先调度算法实验报告 中央财经大学 实 验 报 告 实验项目名称 优先调度算法 所属课程名称 计算机操作系统 实 验 类 型 设计型 实 验 日 期2011-4-25 班 级 学 号2009311058
显示全部
相似文档