模擬非搶占式優先權排程演算法(C )

2021-07-30 19:23:47 字數 1754 閱讀 4503

非搶占式優先權演算法

在這種方式下,系統一旦把處理機分配給就緒佇列中優先權最高的程序後,該程序便一直執行下去,直至完成;或因發生某事件使該程序放棄處理機時,系統方可再將處理機重新分配給另一優先權最高的程序。這種排程演算法主要用於批處理系統中;也可用於某些對實時性要求不嚴的實時系統中。

#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...