【操作系统】先来先服务

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

 

posted @ 2019-01-10 16:13  一头  阅读(2333)  评论(0编辑  收藏  举报