程序排程演算法 —— 搶佔式優先順序排程
阿新 • • 發佈:2018-11-03
/*搶佔式優先順序排程演算法*/ #include <iostream> using namespace std; struct Num { int priority; //優先順序 int dt; //到達時間 int st; //執行時間 int need_time; //還需執行的時間 }sum[5]={{2,0,3,3},{3,2,2,2},{5,2,5,5},{1,5,3,3},{4,8,1,1}}; int main() { int c=0; //記錄程式的執行個數 int time=0; //記錄時間 int b=100; //記錄上一個的程式 int a=100; while(c<5) { int p=100; //記錄優先順序 for(int i=0;i<5;i++) { if(time>=sum[i].dt) //判斷當前可執行的程式 { if(p>sum[i].priority) //判斷優先順序 { p=sum[i].priority;//更換優先順序 a=i; //記錄當前可執行的優先順序的值 } } } if(a!=b) //判斷當前的時間是否有程式可以執行 { //有 //判斷執行時間內是否有優先順序更高的進來 int yxj = p; int a1=a; for(int i=0;i<5;i++) { if(time+sum[a].need_time>sum[i].dt&&a1!=i) //判斷當前可執行的程式 { if(yxj>sum[i].priority) //判斷優先順序 { yxj=sum[i].priority; //更換優先順序 a1=i; //記錄當前可執行的優先順序的值 } } } if(yxj!=p) { //有優先順序更高的 sum[a].need_time-=(sum[a1].dt-time); cout<<"***執行"<<a+1<<",被"<<a1+1<<"打斷。"<<a+1<<"還剩"<<sum[a].need_time<<endl; time=sum[a1].dt; cout<<time<<endl; b=a; } else { b=a; time+=sum[b].need_time; cout<<"執行程式"<<b+1<<";等待時間:"<<time-sum[b].dt-sum[b].st<<";完成時間:"<<time<<"。"<<endl; sum[a].priority=100; c++; } } else {//找不到時間+1 time++; } } return 0; }