动态优先权进程调度算法的模拟说课讲解_第1页
动态优先权进程调度算法的模拟说课讲解_第2页
动态优先权进程调度算法的模拟说课讲解_第3页
动态优先权进程调度算法的模拟说课讲解_第4页
动态优先权进程调度算法的模拟说课讲解_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

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

文档简介

1、动 态 优 先 权 进 程 调 度 算 法 的 模 拟精品文档运算机学院设计性试验报告专业 : 朱文焌 课程名称 本组成员 学号姓名 试验地点项目名称年级 / 班级: 20 xx 级网络工程 20222022 学年第一学期操作系统指导老师张倩倩朱文焌运算机与信息工程学院216 试验时间2022.11.20 使用动态优先权的进程调度算试验类型设计性法的模拟一、试验目的 通过动态优先权调度算法和时间片轮转调度算法的模拟加深进程概念和进 程调度过程的懂得;二、试验仪器或设备 一台笔记本电脑或者是一台台式机 三、总体设计(设计原理、设计方案及流程等)本试验的目的就是用在Linux 下用 C 语言编程模

2、拟 N 个进程采纳高优先权优先(要求采纳动态优先权)进程调度算法;已知时间片轮转算法,可以 依据时间片轮转的思路加以修改就行了;时间轮转调度算法与动态优先权的区分就是时间片轮转是在FIFO 进程调度的基础上,队列中的进程依据进入的次序,每个进程每次都执行一个时间片;假如运行完就把该进程释 放掉,假如在一个时间片内未终止就插到队列尾部;而动态优先权进程调 度算法就是依据优先权的大小运行进程,假如一个时间片内未运行完,就 将优先权数减 3 后再插入到队列中(不是队尾而是队列中的适当位置,该 位置前面的节点的优先级数大于该节点的优先级数,后面的节点的 count 值小于该节点的 count 值);四

3、、试验要求:收集于网络,如有侵权请联系治理员删除精品文档1 在 Linux 下用 C 语言编程模拟 N 个进程采纳高优先权优先(要求采纳 动态优先权)进程调度算法;为了清晰地观看每个进程的调度过程,程 序应将每个时间片内的进程情形显示出来;2 进程掌握块是进程存在的唯独标志,因此,在模拟算法中每一个进程用一个进程掌握块 段:PCB 来代表, PCB用一结构体表示;包括以下字进程标识数 id,或者进程的名称 name;进程优先数 priority ,并规定优先数越大的进程,其优先权越高;进程需要运行的 CPU时间 ntime;进程的运行时间 rtime;进程状态 state;队列指针 next,

4、用来将 PCB 排成队列;3 进程在运行过程中其状态将在就绪、执行、堵塞(可选)、完成几种状 态之间转换,同时进程可能处于不同的队列中,如就绪队列、堵塞队列(可选);在两种调度算法中,考虑分别可以挑选什么样的队列及如何 实现进程的入队、出队操作;4 为了便于处理,优先权调度每次也仅让进程执行一个时间片,如在一个 时间片内未运行终止,调整进程优先级将其插入就绪队列,进行新一轮 调度;5 优先数转变原就:进程每运行如一个时间单位,优先数减 3;进程在就绪队列中呆一个时间片,优先数增加 1;(仅供参考,合 理即可)6 优先权调度中,对于遇到优先权一样的情形,可采纳 FCFS策略解决;7 由于是模拟进

5、程调度,所以,对被选中的进程并不实际启动运行,而是 修改进程掌握块的相关信息来模拟进程的一次运行;8 为了清晰地观看诸进程的调度过程,程序应将每个时间片内的进程的情况显示出来,参照格式如下: prioritycount state id cputime needtime 收集于网络,如有侵权请联系治理员删除精品文档0 0 2 48 ready 9 sort函数执行流程五、试验步骤(包括主要步骤、代码分析等)#include stdio.h #include #define getpchtype type*mallocsizeoftype struct pcb / 定义进程掌握块char nam

6、e10; / 进程的名字char state; / 进程的状态int count; / 进程优先级int ntime; / 进程运行需要的 CPU时间int rtime; / 进程已运行的时间struct pcb* link; / 连接 pcb 的指针*ready=NULL,*tail=NULL,*p; / typedef struct pcb PCB; int slice = 1; 就绪队列指针,队尾指针收集于网络,如有侵权请联系治理员删除精品文档PCB *readyMaxProcess; int readyQueNum=0; / 就绪队列的进程数量sort / 将进程插入到就绪指针 PCB

7、 *q; ifready=NULL / ready=p; tail=p; 队列为空,将 p 插入到队列中else / 如就绪队列不为空,将p 插入到队列 ifp-countready-count/p指针所指节点的 count 值头的大于队列节点的 count 值,将 p 指针所指节点插入到对头 p-link=ready; ready=p; else bool m=false; q=ready; /q2=q1-link; whilem=false iftail-count=p-count/如 p 的 count 值小于队尾指针所指节点的的 count 值的话,将 p 插到队尾 tail-link

8、=p; tail=p; p-link=NULL; m=true; else 收集于网络,如有侵权请联系治理员删除精品文档ifq-count=p-count&p-countq-link-count/如 p 的 count 值大于队尾指针所指节点的的count 值的话 , 将 p所指节点插入到队列中指定位置/ 必需满意插入位置的前一个节点的 count值大于 p-count, 并且满意插入位置的后一个节点的 count 值小于 p-count p-link=q-link; q-link=p; m=true; else q=q-link; /q2=q2-link; input int i,num;

9、printfn 请输入进程个数 :; scanf%d,# fori=0;iname; printfn 请输入进程优先权数 :; scanf%d,&p-count; 收集于网络,如有侵权请联系治理员删除精品文档printfn 请输入进程运行时间 :; scanf%d,&p-ntime; printfn; p-rtime=0; p-state=w; p-link=NULL; sort; / 将进程 p 插入就绪队列 ready 中 printfn 请输入时间片大小 :; scanf%d,&slice; / 获得就绪队列中进程的个数int space PCB* pr=ready; while

10、pr.=NULL readyQueNum+; pr=pr-link; returnreadyQueNum; / 显示进程dispPCB * pr printfnqname tstate tcount tndtime truntime n; printf|%st,pr-name; printf|%ct,pr-state; printf|%dt,pr-count; printf|%dt,pr-ntime; printf|%dt,pr-rtime; printfn; / 显示当前运行进程和就绪队列中进程的信息收集于网络,如有侵权请联系治理员删除精品文档check PCB* pr; printfn *

11、 当前正在运行的进程是:%s,readyMaxProcess-name; dispreadyMaxProcess; pr=ready; printfn * 当前就绪队列状态为 :n; whilepr.=NULL pr-count+; disppr; pr=pr-link; / 撤销进程destroy printfn 进程 %s 已完成 .n,readyMaxProcess-name; freereadyMaxProcess; /readyQueNum-; / 使当前进程运行一个时间片,如终止就撤销,否就插入就绪队列队尾running int tempt=0; tempt = readyMaxP

12、rocess-ntime - readyMaxProcess-rtime; iftemptslice readyMaxProcess-rtime+=slice; else readyMaxProcess-rtime+=tempt; check; ifreadyMaxProcess-rtime=readyMaxProcess-ntime destroy; else readyMaxProcess-count=readyMaxProcess-count-3; readyMaxProcess-state=w; 收集于网络,如有侵权请联系治理员删除精品文档p=readyMaxProcess;/ 再将队

13、头节点 readyMaxProcess 插入到队列时,现将赋给另一个指针 p sort; main int len,h=0; input; / 输入进程并形成就绪队列len=space; / 获得就绪队列中进程的个数whilelen.=0&ready.=NULL / len=space; h+; 如就绪队列不为空printfn The execute number:%d n,h; readyMaxProcess=ready; / 向队头节点将指向队优先级最大的节点的指针指ready=ready-link; / 转变对头指针分裂出来 readyMaxProcess-link=NULL; / 将优

14、先级最大的进程从队列中readyMaxProcess-state=R; running; printfnn 全部进程已经完成 .n; 进程名 / 进程属运行所需时间进程的优先权数性ntime 8 进程 a 10 进程 b 9 5 进程 c 6 9 收集于网络,如有侵权请联系治理员删除精品文档六、试验结果收集于网络,如有侵权请联系治理员删除精品文档七、结果分析与总结 这个试验最主要就是懂得动态优先权数调度算法的原理,利用 c 语言程序完成 该过程的模拟;在编写该程序的时候采纳了许多方法(如双向链表),但是都 比较复杂,所以转向了在时间片轮转的基础上改进的方法;最主要的思想就是 进程进队列,二次插入或者多次插入队列均采纳依据优先权大小的次序查找插入的适当位置;可以分为三种情形:1 、

温馨提示

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

评论

0/150

提交评论