三九宝宝网宝宝教育教学论文

操作系统模拟电梯调度算法C语言程序

01月03日 编辑 39baobao.com

[跪求 C语言程序设计现代方法]这是我用的,我同学做的,我也没仔细看,如果可以的话就用这个吧。 #include/*引用库函数*/ #include #include #include typedef struct /*定义结构体数组*/ { char num[10]; /*学...+阅读

多级反馈队列调度算法是一种CPU处理机调度算法,UNIX操作系统采取的便是这种调度算法。 多级反馈队列调度算法即能使高优先级的作业得到响应又能使短作业(进程)迅速完成。(对比一下FCFS与高优先响应比调度算法的缺陷)。 多级(假设为N级)反馈队列调度算法可以如下原理:

1、设有N个队列(Q1,Q2....QN),其中各个队列对于处理机的优先级是不一样的,也就是说位于各个队列中的作业(进程)的优先级也是不一样的。一般来说,优先级Priority(Q1) >Priority(Q2) >... >Priority(QN)。怎么讲,位于Q1中的任何一个作业(进程)都要比Q2中的任何一个作业(进程)相对于CPU的优先级要高(也就是说,Q1中的作业一定要比Q2中的作业先被处理机调度),依次类推其它的队列。

2、对于某个特定的队列来说,里面是遵循时间片轮转法。也就是说,位于队列Q2中有N个作业,它们的运行时间是通过Q2这个队列所设定的时间片来确定的(为了便于理解,我们也可以认为特定队列中的作业的优先级是按照FCFS来调度的)。

3、各个队列的时间片是一样的吗?不一样,这就是该算法设计的精妙之处。各个队列的时间片是随着优先级的增加而减少的,也就是说,优先级越高的队列中它的时间片就越短。同时,为了便于那些超大作业的完成,最后一个队列QN(优先级最高的队列)的时间片一般很大(不需要考虑这个问题)。 多级反馈队列调度算法描述:

1、进程在进入待调度的队列等待时,首先进入优先级最高的Q1等待。

2、首先调度优先级高的队列中的进程。若高优先级中队列中已没有调度的进程,则调度次优先级队列中的进程。例如:Q1,Q2,Q3三个队列,只有在Q1中没有进程等待时才去调度Q2,同理,只有Q1,Q2都为空时才会去调度Q3。

3、对于同一个队列中的各个进程,按照时间片轮转法调度。比如Q1队列的时间片为N,那么Q1中的作业在经历了N个时间片后若还没有完成,则进入Q2队列等待,若Q2的时间片用完后作业还不能完成,一直进入下一级队列,直至完成。

4、在低优先级的队列中的进程在运行时,又有新到达的作业,那么在运行完这个时间片后,CPU马上分配给新到达的作业(抢占式)。 我们来看一下该算法是如何运作的: 假设系统中有3个反馈队列Q1,Q2,Q3,时间片分别为2,4,8。 现在有3个作业J1,J2,J3分别在时间 0 ,1,3时刻到达。而它们所需要的CPU时间分别是3,2,1个时间片。

1、时刻0 J1到达。于是进入到队列1 , 运行1个时间片 , 时间片还未到,此时J2到达。

2、时刻1 J2到达。 由于时间片仍然由J1掌控,于是等待。 J1在运行了1个时间片后,已经完成了在Q1中的 2个时间片的限制,于是J1置于Q2等待被调度。现在处理机分配给J2。

3、时刻2 J1进入Q2等待调度,J2获得CPU开始运行。

4、时刻3 J3到达,由于J2的时间片未到,故J3在Q1等待调度,J1也在Q2等待调度。

5、时刻4 J2处理完成,由于J3,J1都在等待调度,但是J3所在的队列比J1所在的队列的优先级要高,于是J3被调度,J1继续在Q2等待。

6、时刻5 J3经过1个时间片,完成。

7、时刻6 由于Q1已经空闲,于是开始调度Q2中的作业,则J1得到处理器开始运行。

8、时刻7 J1再经过一个时间片,完成了任务。于是整个调度过程结束。

以下为关联文档:

有会设计C语言程序的吗#include "stdio.h" void main() { char sex,sports,diet; float faHeight,moHeight,height; printf("请输入用户的性别,父母身高,是否喜爱体育锻炼,是否有良好的饮食习惯等条件"); sc...

java语言程序设计import java.util.Arrays; public class Test { static int[][] matrix1; static int[][] matrix2; public static void main(String[] args) { matrix1=new int[][]{{1,2,3...

Java语言程序设计的基础最简便代码public class Sort { public static void main(String [] args){ int []arr ={1,2,3,4,5,6,7,8,9}; int sum = 0; for (int i=0;i<arr.length;i++){ sum += arr[i]; } Syste...

java语言程序设计及数据库private JButton getJButton() { if (jButton == null) { jButton = new JButton(); jButton.setText("删除记录"); jButton.addActionListener(new java.awt.event.ActionListen...

Java语言程序设计的基础知识最简便的代码public class Person { protected String name; protected int age; } public class Student extends Person { private int num public Student(int num) { this.num = num...

C语言程序设计课后习题:编写一个C语言程序从键盘上输入x y z三以下下c语言代码,仅供参考 #include <stdio.h> int main() { int a,b,c; printf("请输入a="); scanf("%d", &a); printf("请输入b="); scanf("%d", &b); printf("请输入c="); scanf("%d", &c);...

C语言程序设计题目考试急需(1) 输入10个任意数字,求最大值,最小值,平均数和高于平均数的元素。 #include "stdio.h" main() { int i; double s[10],pingjunshu,max=0,min=0; for(i=0;i<10;i++) { printf("请...

c语言程序设计大赛试题我写了个程序,不知道能达到你的要求不? 主要的算法思路是若输入的数不能被11整除,就先用一个数组将输入数的每一位存起来,然后通过交换数组元素的位置达到重新排列数的目的,每次...

C语言程序设计题#include"stdio.h" #define N 30 typedef struct { int bh; float m; float h; float l; } B; main() { B b[N],cent; int i,m,j,n; float x,y=0; printf("要输入几组信息:\n"); sc...

推荐阅读
图文推荐