优先级调度算法实验报告(共篇)_第1页
优先级调度算法实验报告(共篇)_第2页
优先级调度算法实验报告(共篇)_第3页
优先级调度算法实验报告(共篇)_第4页
优先级调度算法实验报告(共篇)_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

1、优先级调度算法实验报告(共10篇) 优先级调度算法实验报告 优 先 级 调 度 算 法 实 验 报 告 院系:*学院 班级:* 姓名:* 学号:* 一、实验题目:优先级调度算法 二、实验目的 进程调度是处理机管理的核心内容。本实验要求用高级语言编写模拟进程调度程序,以便加深理解有关进程控制快、进程队列等概念,并体会和了解优先级算法的具体实施办法。 三、实验内容 1.设计进程控制块PCB的结构,通常应包括如下信息: 进程名、进程优先数(或轮转时间片数)、进程已占用的CPU时间、进程到完成还需要的时间、进程的状态、当前队列指针等。 2.编写优先级调度算法程序 3.按要求输出结果。 四、实验要求 每

2、个进程可有三种状态;执行状态(RUN)、就绪状态(READY,包括等待状态)和完成状态(FINISH),并假定初始状态为就绪状态。 (一)进程控制块结构如下: NAME进程标示符 PRIO/ROUND进程优先数 NEEDTIME进程到完成还需要的时间片数 STATE进程状态 NEXT链指针 注: 1.为了便于处理,程序中进程的的运行时间以时间片为单位进行计算; 2.各进程的优先数或,以及进程运行时间片数的初值,均由用户在程序运行时给定。 (二)进程的就绪态和等待态均为链表结构,共有四个指针如下: RUN当前运行进程指针 READY就需队列头指针 TAIL就需队列尾指针 FINISH完成队列头指

3、针 五、实验结果:六、实验总结: 首先这次实验的难度不小,它必须在熟悉掌握数据结构的链表和队列的前提下才能完成,这次实验中用了三个队列,就绪队列,执行队列和完成队列,就绪队列中的优先级数是有序插入的,当进行进程调度的时候,需要先把就绪队列的队首节点(优先级数最大的节点)移入执行队列中,当执行进程结束后,判断该进程是否已经完成,如果已经完成则移入完成队列,如果没有完成,重新有序插入就绪队列中,这就是这次实验算法的思想。 附录(算法代码):#include stdio.h #include stdlib.h #include string.h typedef struct node char na

4、me20; /*进程的名字*/ 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(); /*输出队列信息*/ v

5、oid 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);

6、printf(请输入要创建的进程数目:); scanf(%d,&num); PrioCreate(); Priority(); Output(); void GetFirst() /*取得第一个就绪队列节点*/ run = ready; if(ready!=NULL) run -state = R; ready = ready -next; run -next = NULL; 篇二:操作系统优先调度算法实验报告 中央财经大学 实 验 报 告 实验项目名称 优先调度算法 所属课程名称 计算机操作系统 实 验 类 型 设计型 实 验 日 期2011-4-25 班 级 学 号20093110

7、58 姓 名 李玉芳 成 绩 实验室 6#304 篇三:操作系统 优先级调度算法实验报告 学 号专 业 姓 名实验日期 2010.11.18教师签字 成 绩 实验报 告 【实验名称】设计一个按优先级调度的算法【实验目的】1、理解按优先级调度算法的内涵,并熟练掌握该算法。 2、学会采用动态优先级调度算法模拟处理cpu的进程调度过程。 【实验流程图】【实验内容】 #include stdio.h #include conio.h #define N 20 struct PCB/进程控制块定义 char pnameN;int pro;char state;int runtime; struct PC

8、B *next; ; struct PCB *head_input; struct PCB *head_run; struct PCB *head_run_pre; unsigned long current; /记录系统当前时间的变 量 /-定义建立就绪队列函数- return 1; void runprocess() /运行进程函数 head_run-runtime-=10;head_run-pro+;struct PCB *p1,*p2;printf(Time slice is%d,current);current+=10;printf( %s startsn,head_run-pnam

9、e);printf(Time slice is %d,current);printf( %s endsn,head_run-pname);if(head_run-runtime=0) /判断进程是否运行结束 int readydata() /建立就绪队列函数 if(head_input-next=NULL) return 0; struct PCB *p1=head_input-next,*pmax,*p2; int maxpro=0xffff; pmax=p1; p2=head_input; /head_run_pre=head_input; while(p1!=NULL) if(p1-pr

10、omaxpro) maxpro=p1-pro;head_run_pre=p2;pmax=p1; p2=p1; p1=p1-next; head_run=pmax; head_run_pre-next=head_run-next;/ delete(*head-run);else p1=head_input; p2=head_input-next; p1-next=head_run; head_run-next=p2; int readyprocess() while(1) if(readydata()=0) return 0; else runprocess(); void Init() hea

11、d_input=new PCB; head_input-next=NULL;current=0; int numpro; printf(请输入要建立的进程数:nn); scanf(%d,&numpro); printf(please input the information of the processesn); printf(process 进程名*运行时间*权值n); for(int i=0;inumpro;i+) /printf(please input the %d-th processs information:n,i+1); struct PCB *p1=new PCB;

12、 scanf(%s,p1-pname); scanf(%d,&p1-runtime); scanf(%d,&p1-pro); p1-state=C; p1-next=NULL; struct PCB *p2=head_input-next; head_input-next=p1; p1-next=p2; int main() printf(*xxxxxxxxxxxxxxx*nn); Init(); printf(优先级调度算法运行结果如下:n); readyprocess(); return 0; 【实验小结】 本实验难度不小,但关键在于对算法的理解,同时注意看好实验题目要求以

13、 节省时间和精力。另外一定的数据结构基础也是必需的。篇四:5种进程调度算法实验报告 院系 班级 学号 姓名 操作系统教程 进程调度算法 计算机与软件学院 08软件工程2班 20081344066 何丽茗 进程调度算法的模拟实现 ? 实验目的 1本实验模拟在单处理机情况下的处理机调度问题,加深对进程调度的理解。 2利用程序设计语言编写算法,模拟实现先到先服务算法FCFS、轮转调度算法RR、最短作业优先算法SJF、优先级调度算法PRIOR、最短剩余时间优先算法SRTF。 3进行算法评价,计算平均等待时间和平均周转时间。 ? 实验内容及结果 1先来先服务算法 2轮转调度算法 3. 优先级调度算法4.

14、 最短时间优先算法5. 最短剩余时间优先算法 ? 实验总结篇五:精品作业分享_OS-优先数调度算法源代码(实验报告) 计算机操作系统一、设计理论描述 进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位。另有一种定义方法是“程序在处理器上的执行”。简单地说,进程包括三种状态:运行状态(Running)、就绪状态(Ready)、等待状态或阻塞状态(Blocked);严格地说,进程除了上面的三个状态,还有挂起就绪(Readya)和挂起等待(Blocked)等状态。进程控制块(PCB)的数据结构来记录进程的属性信息。PCB一般应包含以下信息:进程标识信息(本进程的标志ID、父进程的标志I

15、D、用户标识);处理机状态信息(用户使用的寄存器、控制和状态寄存器、堆栈指针);进程调度和控制信息(进程的状态、进程的调度优先级、程序和数据的地址、进程同步和通信机制、进程已等待时间、已使用的处理器时间、进程在有关队列中的链接指针、分给进程的主存大小和位置、进程使用的其他资源信息、进程得到有关服务的优先级、进程调度所需的其他信息)。 进程调度算法:(1)先进先出调度算法(FIFO):按照进程的到达顺序调度进程,属于不可抢占策略。(2)优先级调度算法:按照进程的优先级大小来调度,是高优先级进程得到优先的处理的调度策略,可使用非抢占或可抢占两种策略。 二、设计思想、设计分析及数据结构模型 这个设计

16、需要考虑三个问题:如何组织进程、如何创建进程和如何实现处理机调度。 考虑如何组织进程,首先就要设置进程控制块的内容。进程控制块PCB记录各个进程执行时的情况。一般操作系统中,无论进程控制块中信息量多少,信息都可以大致分为以下四类: (1)标识信息 每个进程都要有一个唯一的标识符,用来标识进程的存在和区别于其他进程。这个标识符是必不可少的,可以用符号或编号实现,它必须是操作系统分配的。在后面给出的参考程序中,采用编号方式,也就是为每个进程依次分配一个不相同的正整数。 (2)说明信息 用于记录进程的基本情况,例如,进程的状态、等待原因、进程程序存放位置、进程数据存放位置等。设计中,因为进程没有数据

17、和程序,仅使用进程控制块模拟进程,所以这部分内容仅包括进程状态。 (3)现场信息 现场信息记录各个寄存器的内容。当进程由于某种原因让出处理机时,需要将现场信息记录在进程控制块中,当进行进程调度时,从选中进程的进程控制块中读取现场信息进行现场恢复。现场信息就是处理机的相关寄存器内容,包括通用寄存器、程序计数器和程序状态字寄存器等。在设计中,可选取几个寄存器作为代表。用大写的全局变了量AX、BX、CX、DX模拟通用寄存器,大写的全局变量PC模拟程序计数器,大写的全局变量PSW模拟程序状态字寄存器。 (4)管理信息 管理信息记录进程管理和调度的信息。例如进程优先数和进程队列指针等。设计中,仅包括队列

18、指针。 因此可将进程控制块结构定义如下: typedef struct node char name10; /*进程标识符*/ int prio;/*进程优先数*/ int cputime; /*进程占用CPU时间*/ int needtime; /*进程到完成还要的时间*/ char state; /*进程的状态*/ struct node *next; /*链指针*/ PCB; PCB *finish,*ready,*run; /*队列指针*/ int N; /*进程数*/ 确定进程控制块内容后,要考虑的就是如何将进程控制块组织在一起。多道程序设计系统,往往同时创建多个进程。在单处理机的情

19、况下,每次只能有一个进程处于运行态,其他的进程处于就绪状态或等待状态。为了便于管理,通常把处于相同状态的进程的进程控制块链接在一起。单处理机系统中,正在运行的进程只有一个,因此,单处理机系统中进程控制块分成一个正在运行进程的进程控制块、就绪进程的进程控制块组织成的就绪队列和等待进程的进程控制块组成的等待队列。由于设计模拟的是进程调度,没有对等待队列的操作,所以设计中只有一个指向正在运行进程的进程控制块指针和一个就绪进程的进程控制块队列指针。操作系统的实现中,系统往往在内存中划分出一个连续的专门区域存放系统的进程控制块,设计中应该用数组模拟这个专门的进程控制块区域,定义如下: #define n

20、 l0 /假定系统允许进程个数为10struct pcb pcbarean; /模拟进程控制块区域的数组 这样,进程控制块的链表实际上是数据结构中使用的静态链表。进程控制块的链接方式可以采用单向和双向链表,设计中,进程控制块队列采用单向不循环静态链表。为了管理空闲进程控制块,还应该将空闲控制块链接成一个队列。 设计中指向运行进程的进程控制块指针、就绪队列指针和空闲进程控制块队列指针定义如下: int run; /定义指向正在运行进程的进程控制块的指针 int head; Int tail; ready;/定义指向就绪队列的头指针head和尾指针tail Int pfree;/定义指向空闲进程控

21、制块队列的指针 以上是如何组织进程,下面考虑如何创建进程。 进程创建是一个原语,因此在设计中应该用一个函数实现,进程创建的过程应该包括: (1)申请进程控制块。进程控制块的数量是有限的,如果没有空闲进程控制块,则进程不能创建,如果申请成功才可以执行第二步。 (2)申请资源。除了进程控制块外,还需要有必要的资源才能创建进程,如果申请资源不成功,则不能创建进程,并且归还已申请的进程控制块;如果申请成功,则执行第三步,设计无法申请资源,所以模拟程序忽略了申请资源这一步。 (3)填写进程控制块。将该进程信息写入进程控制块内,设计中只有进程标识符、进程状态可以填写,每个进程现场信息中的寄存器内容由于没有

22、具体数据而使用进程(模拟进程创建时,需输入进程标识符字,进程标识符本应系统建立,并且是唯一的,输入时注意不要冲突),刚刚创建的进程应该为就绪态,然后转去执行第四步。 (4)挂入就绪队列。如果原来就绪队列不为空,则将该进程控制块挂入就绪队列尾部,并修改就绪队列尾部指针:如果原来就绪队列为空,则将就绪队列的头指针、尾指针均指向该进程控制块,进程创建完成。 多道程序设计的系统中,处于就绪态的进程往往是多个,它们都要占用处理机,但是,单处理机系统的处理机只有一个,进程调度就是解决这个处理机竞争问题的。进程调度的任务就是按照某种算法从就绪进程队列中选择一个进程,让它占有处理机。因此进程调度程序就应该包括

23、两部分,一部分是在进程就绪队列中选择一个进程,并将其进程控制块从进程就绪队列中摘下来,另一部分工作就是分配处理机给选中的进程,也就是将指向正在运行进程的进程控制块指针指向该进程的进程控制块,并将该进程的进程控制块信息写入处理机的各个寄存器中。 在每次运行调度程序之前,为每个进程任意确定它的“优先数”和“需要运行的时间数”,五个进程按给定的优先数从大到小连成队列,调度总是选队首进程运行。 每个进程可有三种状态:R运行状态(RUN);W就绪状态(READY)和F完成状态(FINISH)。并假定初始状态为就绪状态。 PCB结构包括以下信息:进程名、进程优先数(或轮转时间片),进程所占用的CPU时间,

24、进程的状态,当前队列指针等。根据调度算法的不同,PCB结构的内容可以作适当的增删。 PCB结构: NAME进程标识符; PRIO进程优先数; CPUTIME进程占用CPU时间; NEEDTIME进程到完成还需要的CPU时间; STATE进程的状态; NEXT链指针。 本实验是模拟进程调度程序,被选中的进程并不实际启动运行,进程每执行一次,优先数减3,CPU时间片数加1,进程还需要的时间片数减1。在轮转法中,采用固定时间片,时间片数为2,进程每执行一次,CPU时间片数加2,进程还需要的时间片数减2,并排到就绪队列的尾上。 被选中运行的进程,进程状态置为“R”,进程运行一次后,若需要运行时间0,进

25、程从运行状态变为就绪状态,状态置为“W”,并按优先数大小插入到队列中,若需要运行时间=0,则把它的状态置为完成状态(F)。 若“就绪”状态的进程队列不为空,则重复上面的(4)、(5)执行步骤,直到所有进程运行完毕(都为“完成”状态)。 设计的程序中能显示或打印进程控制块的动态变化过程。篇六:进程调度算法 实验报告 操作系统实验报告 实验一:进程调度算法 学 生: 学 号: 学 院: 系 别: 专 业: 实验时间:报告时间: 一、实验内容 按优先数调度算法实现处理器调度。 二、实验目的 在采用多道程序设计的系统中,往往有若干个进程同时处于就绪状态。当就绪进程个数大于处理器数时,就必须依照某种策略

26、来决定哪些进程优先占用处理器。本实验模拟在单处理器情况下的处理器调度,帮助学生加深了解处理器调度的工作。 三、实验原理 设计一个按优先数调度算法实现处理器调度的程序。 (1) 假定系统有五个进程,每一个进程用一个进程控制块PCB来代表,进程控制块的格式为:其中,进程名作为进程的标识,假设五个进程的进程名分别为P1,P2,P3,P4,P5。 指针按优先数的大小把五个进程连成队列,用指针指出下一个进程的进程控制块的首地址,最后一个进程中的指针为“0”。 要求运行时间假设进程需要运行的单位时间数。 优先数赋予进程的优先数,调度时总是选取优先数大的进程先执行。 状态可假设有两种状态,“就绪”状态和“结

27、束”状态。五个进程的初始状态都为“就绪”,用“R”表示,当一个进程运行结束后,它的状态为“结束”,用“E”表示。 (2) 在每次运行你所设计的处理器调度程序之前,为每个进程任意确定它的“优先数”和“要求运行时间”。 (3) 为了调度方便,把五个进程按给定的优先数从大到小连成队列。用一单元指出队首进程,用指针指出队列的连接情况。例: 队首标志 K2 K3 K4 K5 (4) 处理器调度总是选队首进程运行。采用动态改变优先数的办法,进程每运行一次优先数就减“1”。由于本实验是模拟处理器调度,所以,对被选中的进程并不实际的启动运行,而是执行: 优先数-1 要求运行时间-1 来模拟进程的一次运行。 提

28、醒注意的是:在实际的系统中,当一个进程被选中运行时,必须恢复进程的现场,让它占有处理器运行,直到出现等待事件或运行结束。在这里省去了这些工作。 (5) 进程运行一次后,若要求运行时间?0,则再将它加入队列(按优先数大小插入,且置队首标志);若要求运行时间=0,则把它的状态修改成“结束”(E),且退出队列。 (6) 若“就绪”状态的进程队列不为空,则重复上面(4)和(5)的步骤,直到所有进程都成为“结束”状态。 (7) 在所设计的程序中应有显示或打印语句,能显示或打印每次被选中进程的进程名以及运行一次后进程队列的变化。 (8) 为五个进程任意确定一组“优先数”和“要求运行时间”,启动所设计的处理

29、器调度程序,显示或打印逐次被选中进程的进程名以及进程控制块的动态变化过程。 四、算法流程图 五、源程序及注释 #includeiostream.h class PCB /PCB类,包含time、range、state、next指针 public: void In(char *n,int t,int r); PCB() PCB(PCB *p) /复制PCBstrcpy(name,p-name);next=p-next;time=p-time;range=p-range;state=p-state; void Red() /模拟进程运行状态time-;range-;if(!time) state=

30、0; void print()/输出当前PCB内容coutnamettimetrangetstateendl; char name10; /进程名称PCB *next;/用于链表的指针int time;/用于记录进程运行时间int range;/用于记录优先值int state;/用于判断该进程是否运行结束 ; void PCB:In(char *n,int t,int r) /初始化PDB对象 strcpy(name,n); time=t; range=r; next=NULL; if(t0)state=1; elsestate=0; void Pri_Li(PCB *head)/用于输出每

31、一次运行的结果 if(head) cout进程队列为:;for(;head;head=head-next) couthead-name,; elsecout进程已全部运行完毕。endl; coutendl; void Grp(PCB *&head,PCB * p,int num)/用于队列的排序,num为当前队列中存在的指针个数 int ii=num;if(p-state)/当该对象为新进程是,插入队列 if(!num) head=p; (head)-next=NULL; else PCB *tp=head; PCB *tp2=head; for(;num0;num-) if(p-ra

32、nge tp-range && ii=num)/位于头部插入 p-next=head; head=p; break;else if(p-range tp-range)/位于中间插入 p-next=tp; tp2-next=p; break;else tp2=tp; tp=tp-next; if(!num && !tp)/位于尾部插入tp2-next=p; else /当该对象是已完成进程时,从队列中除去 PCB *tp=head; int tem=num;for(PCB *tp2=tp;num0;num-,tp=tp-next)篇七:操作系统-最高响应比优先调度

33、算法实验报告(广西民大) 进程调度模拟设计 最高响应比优先调度算法实验报告 一、实验题目与要求 1、实验题目:加深对作业概念的理解。深入了解批处理系统如何组织作业、管理作业和调度作业。 2、实验要求:编写程序完成批处理系统中的作业调度,要求采用响应比高者优先的作业调度算法。实现具体包括:首先确定作业控制块的内容和组成方式;然后完成作业调度;最后编写主函数,对所做工作进行测试。 二、总的设计思想及语言环境、工具 1、总的设计思想: 最高响应比优先法(HRRN)是对FCFS方式和SJF 方式的一种综合平衡。HRRN调度策略同时考虑每个作业的等待时间长短和估计需要的执行时间长短,从中选出响应比最高的

34、作业投入执行。 响应比R定义如下: R=(W+T)/T=1+W/T 其中T为该作业估计需要的执行时间,W为作业在后备状态队列中的等待时间。 每当要进行作业调度时,系统计算每个作业的响应比,选择其中R最大者投入执行。这样,即使是长作业,随着它等待时间的增加,W/T也就随着增加,也就有机会获得调度执行。这种算法是介于FCFS和SJF 之间的一种折中算法。由于长作业也有机会投入运行,在同一时间内处理的作业数显然要少于SJF 法,从而采用HRRN 方式时其吞吐量将小于采用SJF 法时的吞吐量。另外,由于每次调度前要计算响应比,系统开销也要相应增加。 2、语言环境: 计算机基本配置要求:操作系统:WIN

35、 98/2000/XP/2003 等Windows平台 内存:256MB及以上 主存64KB(Memory)(以KB为单位分配) 开发语言:Visual C+ 6.0 3、工具:Windows平台Visual C+ 6.0 三、数据结构与模块说明(功能与框图) 作业调度的实现主要有两个问题:一个是如何将系统中的作业组织起来;另一个是如何进行作业调度。 为了将系统中的作业组织起来,需要为每个进入系统的作业建立档案以记录和作业相关的信息,例如,作业名、作业所需资源、作业执行时间、作业进入系统的时间、作业信息在存储器中的位置、指向下一个作业控制块的指针等信息。这个记录作业相关信息的数据块称为作业控制

36、块(JCB ),并将系统中等待作业调度的作业控制块组织成一个队列,这个队列称为后备队列。当进行作业调度时,从后备队列中查找选择作业。 由于实验中没有实际作业,作业控制块中的信息内容只使用了实验中需要的数据。作业控制块中首先应该包括作业名;其次是作业所需资源(内存大小、打印机的数量和磁带机的数量);采用响应比高者优先作业调度算法,为了计算响应比,还需要有作业的估计执行时间、作业在系统中的等待时间;另外,指向下一个作业控制块的指针必不可少。 实验中,作业控制块及队列的数据结构定义如下: struct task string name; /*作业号*/ int arrTime; /* 作业到达时间*

37、/ int serTime; /*作业要求服务时间*/ int waiTime; /*等待时间*/ int begTime; /*开始运行时间*/ int finTime; /*结束运行时间*/ int turTime; /*周转时间*/ int wTuTime; /*带权周转时间*/ int priority;/*优先权*/ int finish;/*是否已经完成*/ JCB10; 存放作业控制块的区域: #define n 10 JCB jobtable10; int jobcount; 将作业控制块组织成一个队列,实验中采用静态链表的方式模拟作业的后备队列,作业队列头指针定义为:int

38、*head; 实验中,内存采用可移动的动态分区管理方法,即只要内存空闲区总和比作业大就可以满足作业对内存的需求;对打印机和磁带机这两种独占设备采用静态分配法,即作业执行前必须获得所需资源,并且执行完才归还。 采用响应比高者优先调度算法进行调度时,必须计算出系统中所有满足必要条件作业的响应比,从中选择响应比最高的一个作业装入主存储器分配资源。由于是实验,所以就将作业控制块出队,并输出作业名代替装入处存储器,同时修改系统的资源数量。 最高响应比优先调度算法的作业调度程序流程图(如下) HRN 四、参考源程序: #includedos.h #includetime.h #includestdlib.

39、h #includestdio.h #includeconio.h #includestring.h typedef char string10; /* /定义string为含有10个字符元素的字符数组类型*/ struct task string name; /*作业号*/ int arrTime; /* 作业到达时间*/ int serTime; /*作业要求服务时间*/ int waiTime; /*等待时间*/ int begTime; /*开始运行时间*/ int finTime; /*结束运行时间*/ int turTime; /*周转时间*/ int wTuTime; /*带权周

40、转时间*/ int priority;/*优先权*/ int finish;/*是否已经完成*/ JCB10; int num; void input() int i; system(cls); printf(n请输入作业数量: ); scanf(%d, &num); for(i=0;inum;i+) printf(n请输入作业 NO.%d:n,i); printf( 作业名称: ); scanf(%s,JCB); printf( 到达时间: ); scanf(%d,&JCBi.arrTime); printf( 服务时间: ); scanf(%d,&JCB

41、i.serTime); JCBi.priority = 0; JCBi.finish =0; 篇八:优先级作业调度系统实验报告 实验报告优先级作业调度系统的模拟 课程名称: 学院:计算机科学与技术学院 目录 1.实验内容分析.31.1 实验目的. 1.2实验要求. 1.3设计分析. 2.试验验证分析. 2.1输入的形式及输入值的范围. 2.2程序所能达到的结果. 2.3测试数据. 3.测试分析. 3.1基础问题. 3.2技术问题. 3.3调试错误 4.调试结果分析. 4.1程序的运行结果. 5.附录. 一、实验内容分析: 实验目的:Windows、Linux等操作系统都支持同时运行多个作业,但

42、作业的执行顺序却因调度算法的不同而不同。通常,操作系统都采用优先级作业调度,即操作系统根据作业的长短来设置优先级大小,优先级高的作业先执行,优先级低的作业后执行。作业调度的详细情况如下描述: 一个作业Ji的长度为ti =(si,ei),si 为作业运行的开始时间(进入时间),ei 为作业运行的结束时间(离开时间),ti则为完成作业Ji所需要的执行时间(单位:秒)。作业调度的基本任务是从作业队列中选取一个来执行,如果没有作业则执行空操作操作。而优先级作业调度,是指每次选取优先级最高的作业来调度,优先级可以用优先数(每个作业一个优先数pi)来表示,优先数越小,优先级越高。作业Ji 进入系统时,即s

43、i 时刻,系统给该作业指定其初始优先数pi = ti,从而使越短的作业优先级越高。该优先数在作业等待调度执行的过程中会不断减小,调整公式为:pi = pi - wi,其中wi 为作业Ji的等待时间:wi = 当前时间-si。一旦作业被调度,该作业就一直执行,不能被抢占,只有当前执行的作业完成时,才产生下一轮调度。所以需要在每次调度前动态调整各作业的优先数。在每次调度的时候,如果出现相同优先级的作业,则按照先进先出(FIFO: First In First Out)的原则进行调度。 实验要求: 1. 要求自己编程实现堆结构及其相关功能,从而实现优先级队列,不允许使用标准模板类的堆函数和优先级队列

44、;测试时,各种情况都需要测试,并附上测试截图; 2. 要求采用类的设计思路,不允许出现类以外的函数定义,但允许友元函数。主函数中只能出现类的成员函数的调用,不允许出现对其它函数的调用。 3. 要求采用多文件方式:.h文件存储类的声明,.cpp文件存储类的实现,主函数main存储在另外一个单独的cpp文件中。如果采用类模板,则类的声明和实现都放在.h文件中。 4. 要求源程序中有相应注释; 5. 不强制要求采用类模板,也不要求采用可视化窗口; 6. 要求测试例子要比较详尽,各种极限情况也要考虑到,测试的输出信息要详细易懂,表明各个功能的执行正确,包括何时作业进入,何时调度哪个作业,何时离开,每个

45、作业等待多长时间,优先数的动态变化情况等; 7. 要求采用Visual C+ 6.0及以上版本进行调试; 设计分析: ? 类的设计 Work:自定义的作业类。 MyHeap:自定义的优先级队列,帮助工程类的实现 System:模拟作业调度系统定义的工程类,模拟处理作业的过程。 类的关系图System ? 基本数据结构类的设计: MyHeap(优先级队列):利用自定义的最小堆实现优先级队列,实现主要的功能,包括作业的插入、最小优先级作业的提取和删除、各个作业优先级的修改等,优先级队列采用的是模板类 ? MyHeap(); /队列的构造函数 ? void pop();/删除队首元素,并更新队列 ?

46、 void push(const DATA& item);/在队列中加入新项,并更新队列 ? DATA top();/返回队首的元素 ? bool empty();/判断队列知否为空 ? int size();/返回队列的中元素的个数 ? void update();/将队列中每一项的优先级减一 ? void show(); / 显示队列的所有信息 ? 作业类以及工程类的设计Work(作业类): ? ? ? ? ? ? ? ? ? int s ;/ 作业进入的时间 int t;/作业的执行时间 int p;/作业的优先级 int num;/作业标号 Work();/无参构造函数 Wor

47、k(int n,int a,int b);/有参构造函数 Work& operator-(); / / 自减操作重载 Work& operator=(const Work& a);/ 赋值操作重载 friend ostream& operator(ostream& out,const Work& a);/输出流重载 ? friend bool operator(const Work& a,const Work& b); / 重定义小于 bool operator(const Work& a,const Work&

48、b) / 重定义小于 if(a.p != b.p) return a.p b.p; / 先按优先级排,优先级小的小 return a.s b.s; / 否则,先进入的小 / 因为创建的是最小堆,所以在队首的是优先级小的,符合题目要求 System(工程类):模拟优先级作业调度系统的运行的过程,并设计调试程序代码函数 MyHeapWork mw篇九:进程调度算法模拟实验报告 计算机综合实验报告 课程名称 操作系统 实验学期至 学年 第 学期 学生所在系部 年级 专业班级 学生姓名学号 任课教师 实验成绩 信息科学与技术系制 实验报告须知 1 学生上交实验报告时,必须为打印稿(A4纸)。页面空间不

49、够,可以顺延。 2 学生应该填写的内容包括:封面相关栏目、实验地点、时间、目的、设备环境、 内容、结果及分析等。 3 教师应该填写的内容包括:实验成绩、教师评价等。 操作系统 课程实验报告int time;/需要在cpu上处理的时间 struct node* next;/链指针 PCB; 3.实验代码(要求加注释) void insert1(PCB *p,PCB *queue) PCB *q; q=queue; while(q-next) q=q-next; q-next=p; p-next=NULL; /先来先服务把进程p插入就绪或等待队列的尾部 void creat1(int n) PCB

50、 *p; int i; ready=new PCB; ready-next=NULL; wait=new PCB; wait-next=NULL;/带头结点的队列 run=NULL; for(i=1;i=n;i+) p=new PCB; coutendl请输入进程名称:;cinp-name; cout进程状态:; p-state=rand()%2;coutp-state;coutendl;if(p-state=0) insert1(p,ready);/当state为0时,插入到就绪队列中 else insert1(p,wait);/否则插入到等待队列中 void runing() PCB *p

51、; cout 当前执行进程:; if(!run) cout空endl就绪队列:; else coutrun-nameendl就绪队列:; if(!ready-next) cout空; elsefor(p=ready-next;p;p=p-next) coutp-name ; coutendl等待队列:; if(!wait-next) cout空; elsefor(p=wait-next;p;p=p-next) coutp-name ;篇十:优先数和轮转法进程调度实验报告 实验二 进程调度报告 一、 基本信息 1、 2、 3、 实验题目:进程调度 完成人:* 报告日期:# 二、 实验内容简要描述 1、实验目标:进程调度是处理机管理的核心内容。本实验要求用C语言编写和调试一个简单的进程调度程序。通过本实验可以加深理解有关进程控制块、进程队列的概念,并体会和了解优先数和时间片轮转调度算法的具体实施办法。 2、 实验要求: (1)设计进程进程控制块PCB表结构,分别适用于优先数调度算法和循环轮转调度算法。PCB结构通常包括以下信息:进程名,进程优先数(或轮转时间片),进程所占用的CPU时间,进程的状态,当前队列指针等。根据调度算法的不同,PCB结构的内容可以作适当的增删。 (2)建立进程就绪

温馨提示

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

评论

0/150

提交评论