《多级反馈队列调度算法的实现》由会员分享,可在线阅读,更多相关《多级反馈队列调度算法的实现(16页珍藏版)》请在人人文库网上搜索。

1、学生实习报告课程名称_ 数据结构与数据处理应用训练 题目名称 多级反馈队列调度算法的实现 学生学院 计算机与计算科学 专业班级 学 号 学生姓名 指导教师 2012 年 2 月 16 日多级反馈队列调度算法的实现【摘要】 多级反馈队列调度算法是操作系统中CPU处理机调度算法之一,该算法既能使高优先级的进程(任务)得到响应又能使短进程(任务)迅速完成。UNIX操作系统便采取这种算法,而本次试验就是试用C语言模拟某多级反馈队列调度算法。本次试验中前三级就绪队列采用时间片轮转法,时间片大小分别为2、4和8,最后一级就绪队列采用FIFO调度,将任务进入多级队列进行模拟,任务从优先级高的队列到优先级地的。

2、队列的顺序逐一进入,还用了算法支持抢占式,最后完成模拟,得到各个任务先后完成的顺序,还有得到各个任务的响应时间、离开时间、周转时间。【关键词】 队列 优先级 任务 时间 1 内容与要求【内容】多级反馈队列调度算法是操作系统中CPU处理机调度算法之一,该算法既能使高优先级的进程(任务)得到响应又能使短进程(任务)迅速完成。UNIX操作系统便采取这种算法,本次试验就是试用C语言模拟某多级反馈队列调度算法,通过输入任务号、到达时间、运行时间,求出任务完成的先后顺序以及各个任务的响应时间、离开时间、周转时间。【要求】多级反馈队列调度算法描述:1、该调度算法设置四级就绪队列:前三级就绪队列采用时间片轮转。

3、法,时间片大小分别为2、4和8;最后一级就绪队列采用FIFO调度。2、任务在进入待调度的队列等待时,首先进入优先级最高的队列等待。3、首先调度优先级高的队列中的任务。若高优先级中队列中已没有调度的任务,则调度次优先级队列中的任务,依次类推。4、对于同一个队列中的各个任务,按照队列指定调度方法调度。每次任务调度执行后,若没有完成任务,就被降到下一个低优先级队列中。5、在低优先级的队列中的任务在运行时,又有新到达的任务,CPU马上分配给新到达的任务。(注:与原来的题目不同,原题是在低优先级的队列中的任务在运行时,又有新到达的任务时,要在运行完这个时间片后,CPU马上分配给新到达的任务,而本题不需要。

4、在运行完这个时间片,即正在进行的任务立刻停止,CPU马上分配给新到达的任务)6、为方便实现,时间以1为单位,用整数数据表示;且每个时间点,最多只有一个任务请求服务(即输入)。2 总体设计2.1 算法总体思路:这是建立在一个时间轴上的,即时刻,一个一个时刻(时间点)进行。 2.1.1 主函数思路:先初始化所有队列,再输入任务个数,如果输入个数为0,则重新输入,然后输入各个任务的信息,即任务号、到达时间、运行时间,再当时刻到任务的到达时间时,就创建任务,然后运行任务,时刻自动加1 ,创建任务与运行任务进行循环,直到所有任务进行完或所有队列为空才跳出循环,最后清空所有队列。2.1.2 功能函数思路:。

5、void create(LinkQueue* x,Job job):使任务的已运行时间为0,再使任务进入第一个队列。void function(LinkQueue* x, int timing):四个队列从第一个到第四个,即从最高优先级开始,任务在4个队列中逐个进行,根据任务是否为第一次执行,求出响应时间,任务完成时,求出离开时间和周转时间输出信息,在前3个队列,如果任务刚完成一个就绪队列的时间片,就降低优先级,使任务进入下一个队列。2.2 功能模块介绍:void main ()函数功能:主函数void InitQueue(LinkQueue& HQ):队列的初始化void EnQueue(L。

6、inkQueue& HQ,ElemType item) 函数功能:向队列中插入一个元素ElemType OutQueue(LinkQueue& HQ) 函数功能:从队列中删除一个元素 ElemType *PeekQueue(LinkQueue& HQ) 函数功能:读取队首元素bool EmptyQueue(LinkQueue& HQ) 函数功能:检查队列是否为空void ClearQueue(LinkQueue& HQ) 函数功能:清除链队中的所有元素,使之变为空队void create(LinkQueue* x,Job job) 函数功能:创建任务。void function(LinkQue。

7、ue* x, int timing) 函数功能:任务运行。2.3 输入输出输入:任务号 到达时间 运行时间输出:任务号 响应时间 离开时间 周转时间、2.4 文件介绍main.cpp:主函数的存放,功能函数的调用。queue.h:队列的各个基本功能函数,任务的创建函数与运行函数。3 详细设计3.1存储结构描述struct Job int jobnum; /任务号int arrivetime; /到达时间int burst; /运行时间int retime; /响应时间int leavetime; /离开时间int roundtime; /周转时间int runtime; /已运行时间;/任务的。

8、存储结构typedef Job ElemType;/任务的类型定义struct LNodeElemType data;/值域LNode* next;/链接指针域;struct LinkQueueLNode* front;/队首指针LNode* rear;/队尾指针;3.2 参数说明timing是时刻,时间轴;Job *jobing:任务数组(动态分配)int leatime4;/时间片大小到达时间:任务请求的时刻运行时间:任务运行完需要的时间响应时间:任务从到达时间到任务第一次执行的时间差周转时间:任务从开始请求(到达时间)到任务完成离开的时间已运行时间:任务已运行的时间离开时间:任务运行完后。

9、离开队列的时刻3.3 具体算法void InitQueue(LinkQueue& HQ)算法:队首队尾设置为空。void EnQueue(LinkQueue& HQ,ElemType item)算法:得到一个新结点,把item的值赋给新结点的值域,再把新结点的指针域置空,若链队为空,则新结点既是队首又是队尾,若链队非空,则新结点被链接到队尾并修改队尾指针。ElemType OutQueue(LinkQueue& HQ)算法:若链队为空则中止运行,暂存队首元素以便返回,暂存队首指针以便收回队首节点,使队首指针指向下一个结点,若删除后链队为空,则使队尾指针为空,然后回收原队首节点,返回被删除的队首。

10、元素。ElemType *PeekQueue(LinkQueue& HQ)算法:若链队为空则中止运行,返回队首元素指针(Job*)。bool EmptyQueue(LinkQueue& HQ)算法:判断队首或队尾任一个指针是否为空即可。void ClearQueue(LinkQueue& HQ)算法:队首指针赋给p,依次删除队列中的每个结点,然后循环结束后队首指针已经变空,置队尾指针为空。void create(LinkQueue* x,Job job)算法:使任务的已运行时间为0,再使任务进入第一个队列。void function(LinkQueue* x, int timing) 算法:将。

11、4个队列设为循环,从第一个队列开始到第四个队列逐个进行以下操作。判断队列是否为空,当队列不为空时,则继续,若该队列的已运行时间为1并且时刻已等于或大于任务的到达时间,即判断任务是否为第一次执行,若是,求出任务响应时间=当前时刻-任务到达时间,即发出请求到任务开始的时间差。如果运行完,求出任务离开时间=当前时刻+1,周转时间=离开时间-到达时间,输出任务信息,再判断该任务是否完成该队列的时间片,若是,则降低优先级,任务进入下一级队列。所有队列遍历完,任务均完成,循环结束。4 程序测试测试一:测试数据:1 0 82 6 43 9 12测试二:测试数据:1 0 72 5 43 7 134 12 9测。

12、试三:当输入错误,输入任务个数是0,重新输入测试数据:1 0 72 5 43 7 134 12 9测试四:测试数据:1 1 52 4 2测试五:测试数据:1 2 82 3 23 7 54 9 105 14 6选作(同个时间点多个任务请求)测试六:测试数据:1 2 32 2 43 6 94 6 75 总结这次实验用了多级反馈队列调度算法,这个算法我们没有学过,所以理解有点困难,但是,这个算法中涉及到了队列,它是队列的升级,是多级队列,因此,我在此不仅学到了新的知识,还是对数据结构中队列部分的熟悉与加深,更好的掌握了队列知识。这次实验我的题目与原题有点差别,在低优先级的队列中的任务在运行时,又有新。

13、到达的任务,那么在运行完这个时间片后,CPU马上分配给新到达的任务,即算法支持抢占式,但我的程序确是在新到达的任务,那么这个任务立即中止,CPU马上分配给新到达的任务,我觉得这样更好。当然,这次编程中遇到过许多困难,比如存储结构顺序的错误,又比如ElemType *PeekQueue(LinkQueue& HQ),这是与队列的原基础功能函数有所区别,它需要的是返回元素指针(Job*),我原来返回的是元素,后来经过调试,错误提示,才改正确等等。多级反馈队列调度算法是操作系统中CPU处理机调度算法之一,该算法既能使高优先级的进程(任务)得到响应又能使短进程(任务)迅速完成。UNIX操作系统便采取这。

14、种算法。现实中,我们在计算机中打开各种程序,就是多级反馈队列调度算法的应用,这次是我们对操作系统操作的模拟,与实际相联系,增加了趣味性。这次是我们第一次接触操作系统,对操作系统原理有了一定的了解,为我们将来学习操作系统打下了基础。参考文献数据结构实用教程附录main.cpp#include#include#include #include queue.hvoid main ()LinkQueue* x;int n,i;int timing=0;/时刻Job *jobing;/任务数组(动态分配)x = (LinkQueue*)malloc(sizeof(LinkQueue)*5);for(i=。

15、1; in;if(n=0)coutn;jobing = new Jobn;/动态空间分配coutjobingi.jobnumjobingi.arrivetimejobingi.burst;i=0;while(i!=n|!(EmptyQueue(x1)&EmptyQueue(x2)& EmptyQueue(x3)& EmptyQueue(x4)while(timing=jobingi.arrivetime)create(x,jobingi);/创建任务i+;function(x,timing);/任务运行timing+;for(i=1; idata=item;newptr-next=NULL;i。

16、f (HQ.rear=NULL) HQ.front=HQ.rear=newptr;else HQ.rear=HQ.rear-next=newptr;ElemType OutQueue(LinkQueue& HQ)if (HQ.front=NULL) cerrdata;LNode* p=HQ.front;HQ.front=p-next;if (HQ.front=NULL) HQ.rear=NULL;delete p;return temp; ElemType *PeekQueue(LinkQueue& HQ)if (HQ.front=NULL) cerrdata; bool EmptyQueue。

17、(LinkQueue& HQ) return HQ.front=NULL;void ClearQueue(LinkQueue& HQ)LNode* p=HQ.front;while(p!=NULL) HQ.front=HQ.front-next;delete p;p=HQ.front;HQ.rear=NULL;void function(LinkQueue* x, int timing)/任务运行int leatime4;/时间片的大小leatime0=0;leatime1=2;leatime2=6;leatime3=14;Job *t=NULL;int i=1;while(iruntime+。

18、;/已运行时间+1if(t-runtime=1&timing=t-arrivetime)t-retime=timing - t-arrivetime;if(t-runtime = t-burst)t-leavetime=timing+1;t-roundtime =t-leavetime - t-arrivetime;coutjobnumretimeleavetimeroundtime;coutruntime = leatimei) & (i=3)/调整优先级EnQueue(xi+1,OutQueue(xi);break;i+;void create(LinkQueue* x,Job job)job.runtime=0;EnQueue(x1,job。

linux多级反馈队列的实现,多级反馈队列调度算法的实现相关推荐

  1. linux多级反馈队列的实现,多级反馈队列调度算法详解

    通常在使用多级队列调度算法时,进程进入系统时被永久地分配到某个队列.例如,如果前台和后台进程分别具有单独队列,那么进程并不从一个队列移到另一个队列,这是因为进程不会改变前台或后台的性质.这种设置的优点 ...

  2. 多级队列调度和多级反馈队列调度算法的实现

    多级队列调度算法 操作系统实验导航 实验一:银行家算法 https://blog.csdn.net/weixin_46291251/article/details/115384510 实验二:多级队列 ...

  3. Linux进程间通信二 System V 消息队列简介与示例

    1. SystemV消息队列简介 消息队列,顾名思义即是存放消息的队列,内核为每个SystemV 维护了一个msg_queue的结构体,里面记录了每个消息队列的信息. struct msg_queue ...

  4. Linux进程间通讯之消息队列

    首先有个大体的概念:http://www.xefan.com/archives/83703.html 头文件: #include <sys/ipc.h> #include <sys/ ...

  5. linux内核数据结构实现--链表、队列和哈希

    C是面向过程的语言,但是linux内核却用C实现了一套面向对象的设计模式,linux内核中处处体现着面向对象的思想. 1. 内核链表和list_entry 1.1 普通链表实现 我们在语法书上学到的链 ...

  6. linux下添加mq队列管理配置,linux下 MQ第二弹:队列管理器的配置,实现双机MQI通道异步双向通信,亲测!!...

    本人前面文章一提到MQ 在linux下的安装,在此只描述队列管理器的配置,实现MQI通道的双向通讯. 一下方法我已亲测!! 贴出A,B两机的MQ配置记录: A机: #**--------------- ...

  7. java 本地 mq_windows、linux下java连接本地MQ队列实现输入(二)

    windows.linux下java连接本地MQ队列实现输入(二),上一篇文章环境为windows,这一篇将说一下linux环境下java连接本地队列实现输入输出,其实大同小异,但是八戒在这里有很多心 ...

  8. Linux进程间通信详解(三) —— 消息队列及函数

    消息队列的概念 消息队列就是一个消息的链表,每个消息队列都有一个队列头,用结构struct msg_queue来描述.队列头中包含了该队列的大量信息,包括消息队列的键值.用户ID.组ID.消息数目.读 ...

  9. linux 全连接队列,TCP半连接队列和全连接队列的可能和出现问题和解决方案

    问题描述 监控系统发现电商网站主页及其它页面间歇性的无法访问: 查看安全防护和网络流量.应用系统负载均正常: 系统重启后,能够暂时解决,但持续一段时间后间歇性问题再次出现. 此时问题已影响到整个网站的 ...

最新文章

  1. tablayout支持改变选中文字大小,支持左右滑动,支持viewpager,支持三角可移动指示器...
  2. Codeforces Round #697 (Div.3) A~G解题报告与解法证明
  3. python3 多继承搜索__init__方法的两种策略
  4. MediaInfo源代码分析 1:整体结构
  5. 分布式系统如何设计,看看Elasticsearch是怎么做的
  6. 第二章、使用变量、操作符和表达式
  7. threejs加载模型挤压变形_浙大《Nature》子刊新思路:晶界调控金属纳米结构循环变形行为!...
  8. 01 Django简介
  9. 数据结构导论-1.概述
  10. 哪个软件能代替斐讯路由_斐讯路由器最新版本|好用的路由器管理软件_最火手机站...
  11. 被“中年危机”榨干的年轻人:如何尽早实现财务自由?
  12. 括号配对检测python123_括的拼音_括组词_括意思(解释)-常用汉字大全
  13. 微信小程序-云开发 起步
  14. 这种技术,让全世界哑巴都能开口说话 | 精选
  15. 寻求真心话大冒险之猜数游戏的最佳策略
  16. java 手电筒_《SystemUI》限制低电量打开手电筒
  17. 练习聚合函数的综合练习题
  18. LWIP的RAW API UDP通信详解(stm32f103---enc28j60)
  19. 教程 2 || 10分钟成为简笔画达人,然后......
  20. 知识图谱可视化——《间客》人物关系

热门文章

  1. 为什么defineProperty不能检测到数组长度的“变化”
  2. shell:概述、脚本编写、变量的简单基础
  3. VIM学习网址和资料收集
  4. mysql高效获取两张表共同字段的交集数据
  5. Session赋值(备注)
  6. sem_wait sem_post信号量操作进本函数
  7. BootStrap table 传递搜索参数
  8. vue+node+mongodb实现的功能
  9. html 13 背景
  10. 在整个数据库搜索某个字符串在哪个表的哪个字段中