我是靠谱客的博主 舒服钢铁侠,最近开发中收集的这篇文章主要介绍操作系统笔记(6):RR轮转调度算法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

这比起说是操作系统实验,不如说是一个模拟算法而已,
当然目标是为了让大家更清楚地了解RR轮转调度算法原理

原理上,书上课上都讲过,实现方式上推荐直接模拟一个队列(本来就应该是这样实现的)http://c.biancheng.net/view/1247.html

下面详解一下模拟过程:

这里宏变量TIMESLICE决定轮转的一次时间片长度单位
首先读入数据,
n为总的进程数量,
arr数组中存放各进程到达时刻
use数组中存放各进程需要的服务时间

que队列,h、t是队列头尾下标,当然由于设计成循环队列,要对队列长取模才是实际的下标。

nowT为当前时刻,arrPtr为依次到达的进程下标
run为上一时间单位运行的进程下标

在具体模拟中while(nowT<=1000)
首先判断有无新进程到达,有的话依次加入到队列尾部
随后如果上一个进程未结束,是被别的进程抢占了,那么它自己还需要的服务时间不为0,那么放回队列尾。
后取出队列头代表的进程,分别处理 能在一个时间片内做完和不能的情况
当然取不出来就空过一个时间单位。

#include<stdio.h>

#define F(i,a,b) for(int i=a;i<=b;i++)
#define MAXN 500
#define TIMESLICE 1
int main(){
    int n;
    scanf("%d",&n);
    int arr[MAXN];
    int use[MAXN];
    F(i,1,n){
        scanf("%d%d",arr+i, use+i);
    }

    int h=0,t=0;
    int que[MAXN];
    
    int nowT=0;int arrPtr = 1;int run=0;
    while(nowT <= 1000){
        while(arr[arrPtr]<=nowT && arrPtr<=n){   //先看有无当前时刻到达的新进程,加入队列
            printf("its %d nown", nowT);
            printf("at time %d process %d has arraivedn",arr[arrPtr], arrPtr);
            que[t % MAXN] = arrPtr;
            arrPtr++;
            t += 1;
        }
       if (run!=0){ //新进程加入后再把老进程加入队列
            if(use[run]){
                que[t] = run;
                t += 1;
            }
       } 
       if(h == t) {nowT++;continue;}//队列为空,没有进程要调度,空过
       printf("its %d now the que is :",nowT);
       F(i,h,t-1){printf(" %d ",que[i % MAXN]);}printf("n");
       run = que[h % MAXN];
       h += 1;
       if(use[run]<TIMESLICE){
            printf("now processing %d for %d tickn", run,use[run]);
            nowT += use[run];
            use[run] = 0;
       }else{
            printf("now processing %d for %d tickn", run,TIMESLICE);
            use[run] -= TIMESLICE;
            nowT += TIMESLICE;
       }
    }
    

    return 0;
}

测试

输入数据如下:
在这里插入图片描述
轮转时间片为1个单位时
在这里插入图片描述

轮转时间片为3个单位时
在这里插入图片描述
两者自然都是20时刻结束调度

结语

RR算法用队列直接模拟是相对很简单的,也很适合在考试时使用,但是其它的调度算法就不一定了,需要用辅助的数组存储信息之类的,符合原理地适时调整吧~

最后

以上就是舒服钢铁侠为你收集整理的操作系统笔记(6):RR轮转调度算法的全部内容,希望文章能够帮你解决操作系统笔记(6):RR轮转调度算法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(80)

评论列表共有 0 条评论

立即
投稿
返回
顶部