非搶占式優先權演算法
在這種方式下,系統一旦把處理機分配給就緒佇列中優先權最高的程序後,該程序便一直執行下去,直至完成;或因發生某事件使該程序放棄處理機時,系統方可再將處理機重新分配給另一優先權最高的程序。這種排程演算法主要用於批處理系統中;也可用於某些對實時性要求不嚴的實時系統中。
#include
#include
#include
using
namespace
std;
using
std::cout;
struct pcb
;// 程序數
int num_process;
// 記錄所有程序的總時間
int totaltime;
// 記錄所有程序的總帶權周轉時間
double weighttotaltime;
pcb *createpcb()
else
}return head;
}// 鍊錶插入排序
pcb *insertsort(pcb *head)
else
// p是q的前驅
t->next = q;// 完成插入動作
}return head;
}// 獲取當前時間段內的程序數量
int getcurrentnumofprocess(pcb *head, int time)
return count;
}// 刪除當前節點
pcb* deletepcb(pcb *head, pcb *t)
else
if(t->next == null)// 刪除節點是尾節點
p->next = null;
else
p->next = q->next;
}// 刪除
free(t);
return head;
}// 在頭節點後的count個節點中選擇優先數最大的返回
pcb *findmaxpriority(pcb *head, int count)
count--;
q =q->next;
}return f;
}/*
輸出a時間內的特定輸出格式,當某一時間段內沒有程序工作時,程序名稱為0
程序名稱.程序工作時間,程序與程序間以|分隔
輸入:1 3 2 8
2 2 1 7
3 6 3 12
輸出:[0.1|2.1|1.1|3.12|1.7|2.6|0.172]
*/void print(vector
vec_output, int a)
}if(flag)
if(vec_output[vec_output.size() - 1].endtime < a)
}cout
<<"0."
<1].endtime<<"]"
if(vec_output[vec_output.size() - 1].endtime == a)
}cout
<1].name<<"."
<1].endtime - vec_output[vec_output.size()-1].starttime<<"]"
}else}}
}void pcb_main(pcb *head)
}// 輸出200時間單位內的執行順序
print(vec_out, 200);
}int main()
優先權排程演算法
include include include include includeusing namespace std define maxn 100 int time 0 定義時間,為全域性變數,第乙個程序到達時為0 typedef structproducer 程序結構體 float rep pr...
課設 模擬優先數排程演算法 非搶占式
優先數排程演算法分為搶占式和非搶占式。非搶占式 程序按優先數大小進行排列,優先數高的程式先執行。直到發生某種情況或執行完成才結束。搶占式 程序按優先數大小進行排列,優先數高的程式先執行。每執行一次 優先數 1 即重新判斷程序序列的優先數大小。只要有優先數更大的,便進行新的最大的優先數的程序 incl...
動態優先權程序排程演算法
include include define ready 1 define block 2 struct pcb pcb ready queue head null pcb block queue head null 建立了就緒佇列和阻塞佇列,均包含頭結點,以後的節點插入均採取插入排序 void i...