一、實驗要求
1.用視覺化程式設計工具編制程式,在機器上調試執行,並通過上機考核。
2.要求將功能集中在乙個介面中,介面設計美觀,功能完整,使用方便。
二、設計題目
題目1 程序排程模擬程式
目的:熟悉程序排程演算法及其實現
內容:編寫乙個程式完成多道程式的排程
要求:只考慮1個cpu的資源,其他資源不考慮
使用響應比高者優先演算法
程式採用鍵盤輸入,輸入格式為:
ktj1 ys1
……tjk ysk
其中k是作業數(>0),tji提交時間,ysi (i=1~k)是作業預計的執行時間(以分鐘計)tj的輸入格式是xxyy,
其中xx是時,yy是分,如10點28分,輸入為1028。但內部計算要以60進製來算。要求輸出按照作業排程的先後次序輸出結果,
每行為乙個作業狀態,從左到右分別是排程次序,作業號,排程時間,周轉時間和帶權周轉時間,
最後一行輸出兩個數,第一為平均周轉時間,第二為平均帶權周轉時間。
#include
#include
using
namespace std;
struct pcb pcb[10]
;int cnt;
int runningtime =0;
int currenttime =0;
void
input()
}int
add(
int a,
int b)
//得到時刻(xx:yy)(用於時刻+分鐘)
intsub
(int a,
int b)
//得到時長(min)(用於時刻-時刻)
void
hrn()}
cout <<
"排程情況如下:"
<< endl;
cout <<
"排程次序"
<<
" "<<
"作業號"
<<
" "<<
"排程時間"
<<
" "<<
"周轉時間"
<<
" "<<
"帶權周轉時間"
<< endl;
pcb[current]
.turtime = pcb[current]
.sertime;
pcb[current]
.wtutime = pcb[current]
.sertime / pcb[current]
.sertime;
pcb[current]
.begtime = pcb[current]
.arrtime;
//輸出排程次序,作業號,排程時間,周轉時間和帶權周轉時間
cout <<
++n <<
" "
<< current +
1<<
" "
<< pcb[current]
.begtime <<
" "
<< pcb[current]
.turtime <<
" "
<< pcb[current]
.wtutime << endl;
pcb[current]
.finish =1;
runningtime +
= pcb[current]
.sertime;
currenttime = currenttime +
add(pcb[current]
.arrtime, pcb[current]
.sertime)
;for
(i =
0; i < cnt; i++
)for
(i =
0; i < cnt; i++
)//輸出
pcb[current]
.turtime =
sub(currenttime, pcb[current]
.arrtime)
+ pcb[current]
.sertime;
pcb[current]
.wtutime = pcb[current]
.turtime / pcb[current]
.sertime;
pcb[current]
.begtime = currenttime;
cout <<
++n <<
" "
<< current +
1<<
" "
<< pcb[current]
.begtime <<
" "
<< pcb[current]
.turtime
<<
" "
<< pcb[current]
.wtutime << endl;
pcb[current]
.finish =1;
runningtime +
= pcb[current]
.sertime;
currenttime =
add(currenttime, pcb[current]
.sertime)
;for
(int l =
0; l < cnt; l++)}
}else
if(i == cnt -1)
} currenttime =
add(currenttime,
sub(pcb[current]
.arrtime, currenttime));
pcb[current]
.turtime = pcb[current]
.sertime;
pcb[current]
.wtutime = pcb[current]
.sertime / pcb[current]
.sertime;
pcb[current]
.begtime = pcb[current]
.arrtime;
//輸出排程次序,作業號,排程時間,周轉時間和帶權周轉時間
cout <<
++n <<
" "
<< current +
1<<
" "
<< pcb[current]
.begtime <<
" "
<< pcb[current]
.turtime <<
" "
<< pcb[current]
.wtutime << endl;
pcb[current]
.finish =1;
runningtime +
= pcb[current]
.sertime;
currenttime =
add(currenttime, pcb[current]
.sertime)
; i =-1
;//重新開始尋找}}
}void
main()
cout <<
"平均周轉時間和平均帶權周轉時間分別為:"
<< endl;
cout << tur/cnt <<
" "
<< wtu/cnt << endl;
}
高響應比排程演算法
code include stdio.h struct zgxyb zgxyb a 100 void input zgxyb p,int n void print zgxyb p,float arrivetime,float servicetime,float starttime,float fin...
優先順序排程演算法和高響應比優先排程演算法
優先順序排程演算法是基於作業的緊迫程度,由外部賦予作業相應的優先順序,排程演算法是根據該優先順序進行排程的。這樣就可以保證緊迫性作業優先執行。高響應比優先排程演算法則是既考慮了作業等待的時間,又考慮了作業執行時間的排程演算法,因此既照顧了短作業,又不致使長作業的等待時間過長,從而改善了處理機的排程能...
C 高響應比優先演算法
include include string using namespace std struct job 1 其實這個結構體沒有考慮到到達時間的問題,統一認為處理時刻所有作業都已經到達。2 模擬多處理機的時候,不太了解怎麼實現非同步的操作。const int max 5 允許的就緒佇列最大作業數 ...