【操作系統】先來先服務


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.測試截圖

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM