C.进程调度

12人阅读 评论(0) 收藏 举报
分类:

C.进程调度

Time Limit: 1000 MSMemory Limit: 65536 KB
Total Submissions: 270Accepted: 66

Description


操作系统的一个重要功能是进行进程调度,其进程调度的算法有多种,其中最简单的调度算法是先来先服务(FCFS)算法。该算法的思想是:先进入就绪队列的先执行,后进入就绪队列的后执行,同一时刻进入就绪队列的执行时间少的先执行。我们认为某一进程一旦开始执行,就一直占用处理机,直到执行结束。而一旦处理机被其它进程占用,就绪队列中的进程就必须等待。当某一进程执行结束后,队列中排在最前面的进程就会立即执行。一个进程从进入就绪队列到执行完毕所用的时间为其周转时间,即周转时间=等待时间+执行时间。现在给你若干进程到达就绪队列的时间以及每个队列的执行时间,请编程计算这些进程的平均周转时间。



Input


多组测试数据。

每组测试数据的第一行为一个正整数NN<=1000,表示要处理的进程数目。

接下来有N行,每行有两个正整数AiAi<=1000EiEi<=1000,分别表示一个进程到达就绪队列的时刻和执行该进程所需的时间。


Output


对于每组测试数据,输出平均周转时间,结果保留4位小数。
每组输出占一行。


Sample Input


4
1 1
3 3
2 2
4 4

Sample Output


3.5000

Hint


进程1等待时间为0,执行时间为1,其周转时间为0+1=1;

进程3等待时间为0,执行时间为2,其周转时间为0+2=2;

进程2等待时间为1,执行时间为3,其周转时间为1+3=4;

进程4等待时间为3,执行时间为4,其周转时间为3+4=7;

故平均周转时间=(1+2+4+7)/4=3.5000。


Source


2013 Anhui College Student Programming Contest--ahfywff

# include <stdio.h>
# define M 1000
# define N 2
void Dsort(int *tree[],int n);
int A[M][N],*P[M];
int main()
{
    int n,i,time0=0,time1=0,sum;
    //freopen("AAA.txt","r",stdin);
    while(~scanf("%d",&n))
    {
    for(i=0;i<n;P[i]=A[i],i++)
        scanf("%d %d",&A[i][0],&A[i][1]);
    Dsort(P,n);
    time1=P[0][0]+P[0][1];
    time0=0;
    sum=P[0][1];
    //printf("%d %d %lld\n",time0,time1,sum);
    for(i=1;i<n;i++)
    {
        if(P[i][0]<time1)time0=time1-P[i][0];
        else
        {
            time0=0;//time0=当前进程-时间点=等待时间
            time1=P[i][0];
        }
        time1+=P[i][1];//当前进程结束后的时间点
        sum+=time0+P[i][1];
        //printf("%d %d %lld\n",time0,time1,sum);
    }
    printf("%.4lf\n",sum*1.0/n);
    }
    return 0;
}
void Dsort(int *tree[],int n)
{
    int i,j=0,k,L,*R;
    tree--;
    while((i=++j)<=n)
    {
        R=tree[i];
        while(i>1)
        {
            L=(i>>1);
            for(k=0; k<N&&tree[L][k]==R[k]; k++);
            if(tree[L][k]>=R[k]) break;
            tree[i]=tree[L];
            i=L;
        }
        tree[i]=R;
    }
    while(n)
    {
        R=tree[n];
        tree[n--]=tree[1];
        i=1;
        L=2;
        while(L<=n)
        {
            if(L<n)
            {
                for(k=0; k<N&&tree[L+1][k]==tree[L][k]; k++);
                if(tree[L+1][k]>tree[L][k])L++;
            }
            for(k=0; k<N&&tree[L][k]==R[k]; k++);
            if(tree[L][k]<=R[k]) break;
            tree[i]=tree[L];
            i=L;
            L<<=1;
        }
        tree[i]=R;
    }
    tree++;
}

查看评论

《操作系统》期末复习综合练习题

  《操作系统》期末复习综合练习题 一、单项选择题1.按照所起的作用和需要的运行环境,操作系统属于(   )范畴。A.用户软件        B.应用软件C.支撑软件        D.系统软件2.以...
  • m57091003
  • m57091003
  • 2007-12-26 21:39:00
  • 6714

作业调度和进程调度的区别

  • u014181676
  • u014181676
  • 2014-03-25 21:50:30
  • 1331

进程调度java编写含界面

  • 2013年01月13日 10:46
  • 71KB
  • 下载

C#基于动态级优先的进程调度实验

  • 2014年11月15日 23:17
  • 122KB
  • 下载

抢占进程调度的原则

(1)时间片原则:各进程按系统分配给的一个时间片运行,当该时间片用完或由于该进程等待某事件发生而被阻塞时,系统就停止该进程的执行而重新进行调度。   (2)优先级原则:每个进程均赋于一个调度优先级,...
  • wae_gossip
  • wae_gossip
  • 2012-05-16 09:48:25
  • 1187

读书笔记--深入分析Linux内核源码-第五章进程调度

 深入分析Linux内核源码-第五章进程调度Sailor_forever 整理 sailing_9806@163.com 转载请注明http://blog.csdn.net/sailor_8318/a...
  • sailor_8318
  • sailor_8318
  • 2008-05-16 22:11:00
  • 4157

进程调度详细总结

一、概念: 无论是在批处理系统还是分时系统中,用户进程数一般都多于处理机数、这将导致它们互相争夺处理机。另外,系统进程也同样需要使用处理机。这就要求进程调度程序按一定的策略,动态地把处理机分配给处于...
  • kavensu
  • kavensu
  • 2012-10-16 10:17:14
  • 3985

一顿饭让你学会作业调度和进程调度

场景:毕业师兄请我们去凤雏吃饭。 流程:菜由后厨做好,然后由服务员端上饭桌,接着我们吃饭。 服务员调度算法:后厨的菜做好,由服务员选择端哪个菜上桌,这个服务员是兼洗碗的,她今天晚上还有个约会,所以...
  • qq_34525938
  • qq_34525938
  • 2017-09-30 08:39:48
  • 134

进程调度模拟(C语言)

在CSDN里的第一篇,从之前UNIX程序设计课的学期作业里找了个当时的模拟进程调度的代码贴上。不足之处,请见谅。   #include #include using namespace std...
  • pangshensen
  • pangshensen
  • 2014-02-27 12:35:01
  • 3320

引起进程调度的原因有以下几类

引起进程调度的原因有以下几类 进程调度发生在什么时机呢?这与引起进程调度的原因以及进程调度的方式有关。 (1)正在执行的进程执行完毕。这时,如果不选择新的就绪进程执行,将浪费处理机资源。 ...
  • maxiaozhuang
  • maxiaozhuang
  • 2014-09-22 16:44:59
  • 1199
    个人资料
    持之以恒
    等级:
    访问量: 3万+
    积分: 1371
    排名: 3万+
    最新评论