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.测试截图

  • 相关阅读:
    微服务架构技术栈选型手册(万字长文)
    Visual Studio 2013 always switches source control plugin to Git and disconnect TFS
    Visual Studio 2013 always switches source control plugin to Git and disconnect TFS
    MFC对话框中使用CHtmlEditCtrl
    ATL开发 ActiveX控件的 inf文件模板
    ActiveX: 如何用.inf和.ocx文件生成cab文件
    Xslt 1.0中使用Array
    如何分隔两个base64字符串?
    An attempt was made to load a program with an incorrect format
    JQuery 公网 CDN
  • 原文地址:https://www.cnblogs.com/yitou13/p/10250639.html
Copyright © 2011-2022 走看看