zoukankan      html  css  js  c++  java
  • 【操作系统】先来先服务

    1.算法原理

        作业调度算法先来先服务:作业个数n,每个作业的到达时间为t1,t2,...,tn,服务时间为s1,s2,...,sn.先到的作业先进入cpu处理,其他作业等待。每个作业的周转时间=完成时间-到达时间,带权周转时间=周转时间/服务时间。平均周转时间=所有作业的周转时间/作业个数,平均带权周转时间=所有作业的带权周转时间/作业个数。

    2.模块分析

        数据结构:

        定义一个结构体表示JCB,其中包括:进程名,到达时间,开始时间,服务时间,完成时间,周转时间,带权周转时间。

    利用3个函数模拟FCFS。输入函数,FCFS核心函数,输出函数。

         

    3.流程图

    4.代码实现

     1 #include<iostream>
     2 #include<algorithm> 
     3 using namespace std;
     4 struct P{
     5     int num;//进程编号 
     6     int arrivedtime;//到达时间 
     7     int starttime;//开始时间 
     8     int servivetime;//服务时间 
     9     int finishtime;//完成时间 
    10     double zhouzhuantime;//周转时间 
    11     double avezztime;//带权周转时间 
    12 };
    13 P p[100];
    14 //按照到达时间升序排列 
    15 bool cmp(P p1,P p2){
    16     return p1.arrivedtime<p2.arrivedtime;    
    17 }
    18 void inputP(int n){
    19     for(int i=0;i<n;i++){
    20         p[i].num=i+1;
    21         cin>>p[i].arrivedtime>>p[i].servivetime;
    22         p[i].starttime=0;
    23         p[i].avezztime=p[i].finishtime=p[i].zhouzhuantime=0;
    24     }
    25 }
    26 
    27 void FCFS(int n){
    28     //sort(p,p+n,cmp);//根据到达时间排序 
    29     int i;
    30     for(i=0;i<n;i++){
    31         if(i==0){
    32             p[i].starttime=p[i].arrivedtime;
    33         }
    34         else {
    35             p[i].starttime=p[i-1].finishtime;
    36         }
    37         p[i].finishtime=p[i].starttime+p[i].servivetime;
    38         p[i].zhouzhuantime=p[i].finishtime-p[i].arrivedtime;
    39         p[i].avezztime=p[i].zhouzhuantime/p[i].servivetime;
    40     }
    41     
    42 } 
    43 void printP(int n){
    44     int i; 
    45     double a=0,b=0;
    46     cout<<"num"<<"  "<<"到达时间"<<"  "<<"服务时间"<<"  "<<"开始时间"<<"  "<<"完成时间"<<"  "<<"周转时间"<<"  "<<"带权时间"<<endl; 
    47     for(i=0;i<n;i++){
    48         cout<<p[i].num<<"      "<<p[i].arrivedtime<<"       "<<p[i].servivetime<<"         "<<p[i].starttime<<"         "<<p[i].finishtime<<"          "<<p[i].zhouzhuantime<<"        "<<p[i].avezztime;
    49         a+=p[i].zhouzhuantime;
    50         b+=p[i].avezztime;
    51         cout<<endl;
    52     }
    53     cout<<"平均周转时间"<<a/n<<endl;
    54     cout<<"平均带权周转时间"<<b/n<<endl;
    55 }
    56 
    57 
    58 int main(){
    59     int n;
    60     cin>>n;
    61     inputP(n);
    62     FCFS(n);
    63     printP(n);
    64     return 0;
    65 } 

    5.测试截图

  • 相关阅读:
    [luogu T71973]卡常者π酱
    [日常] HEOI 2019 退役记
    [教程]网络流详解: 从入门到放弃
    [LOJ 6213]「美团 CodeM 决赛」radar
    [BZOJ 1568][JSOI2008]Blue Mary开公司
    [BZOJ 3167][HEOI 2013]SAO
    [BZOJ 4763]雪辉
    [LOJ 2146][BZOJ 4873][Shoi2017]寿司餐厅
    [HZNOI #koishi] Magic
    [luogu P4230]连环病原体
  • 原文地址:https://www.cnblogs.com/yitou13/p/10250639.html
Copyright © 2011-2022 走看看