基於動態優先順序的時間片輪調轉演算法(簡單模擬)

2021-08-28 13:53:57 字數 1918 閱讀 4593

實驗要求:

模擬作業系統運轉, 設定時間片輪,程序執行一次,所需執行時間減去時間片**小(設為2),優先順序減去2,等待系統呼叫。

時間片輪排程演算法中,每個程序被分配乙個時間段,稱作它的時間片,即該程序允許執行的時間。如果在時間片結束時程序還在執行,則cpu將被剝奪並分配給另乙個程序實現過程。

動態優先順序排程演算法是指在建立程序之初,先賦予其乙個優先順序,然後其值隨著程序的推進或等待時間的增加而改變,以便獲得更好的排程效能。例如,可以規定在就緒佇列中的程序隨其等待的時間的正常,使其優先順序相應提高。若所有的程序都具有相同的優先順序初值,則最先進入就緒佇列的程序會因為其優先順序變得最高,而優先獲得處理機,這相當於fcfs演算法。若所有的就緒程序具有各不相同的優先順序初值,那麼對於優先順序初值低的程序,在等待了足夠的時間後,也可以獲得處理機。

實現過程:

1、定義結構體

typedef struct pcb

pcb;

2、建立頭指標

pcb* init_circular_linkedlist(pcb * head)

3、建立程序模擬佇列

pcb * creat(int count, pcb *head)

p->next = null;

return head;

}

4、鍊錶按優先順序排序(priority越小,優先順序越高)

void sort1(pcb *head)

p = p->next;

q = q->next;

}tail = p;}}

5、程序排程演算法

pcb * sch(pcb * head)else

ptr->time = ptr->time - m;

if(ptr->time >= -1)else

ptr = head->next; //作業系統執行的一直是head->next

}return head;

}

6、列印函式

void print(pcb *head)

}

7、主函式

int main(void)

結果展示:

此處顯示的time為程序開始時間,優先順序為程序開始時。

過程:

後續過程類似(以上優先順序和時間顯示的是程序當前時間片執行結束後) 

Linux優先順序時間片排程

程序的優先順序有2種度量方法,一種是nice值,一種是實時優先順序 rtprio nice值的範圍是 20 19,值越大優先順序越低,也就是說nice值為 20的程序優先順序最大。實時優先順序 rtprio 的範圍是0 99,與nice值的定義相反,實時優先順序是值越大優先順序越高。實時程序都是一些...

程序時間片的分配(優先順序設定)

系統對不同程序所分配的cpu時間的多少主要由程序的優先順序決定。每乙個程序都有自己的優先順序都有自己的優先順序。靜態優先順序高的程序會搶占低的程序。對優先順序為0的程序將依照其動態優先順序來分配執行時間,優先順序的值越小,優先權越高。但是對程序執行一定的操作就可以改變其動態優先順序。其操作如下 in...

C C 算符優先順序的問題

算符優先順序首先決定了,一些括號是可加可不加,還是必須加 移位運算子 大於比較運算子 cout boolalpha a b endl 是會報錯的 cout boolalpha a b endl 相等性比較運算 的優先順序要高於賦值運算 dir dp struct dirent dirp if dp ...