資源描述:
《單處理器系統(tǒng)的進程調(diào)度》由會員上傳分享,免費在線閱讀,更多相關內(nèi)容在教育資源-天天文庫。
1、一.一、?單處理器系統(tǒng)的進程調(diào)度1.實驗目的在采用多道程序設計的系統(tǒng)中,往往有若干個進程同時處于就緒狀態(tài)。當就緒進程個數(shù)大于處理器數(shù)時,就必須依照某種策略來決定哪些進程優(yōu)先占用處理器。本實驗模擬在單處理器情況下的處理器調(diào)度,幫助學生加深了解處理器調(diào)度的工作。2.實驗內(nèi)容與要求(1)設計多個進程并發(fā)執(zhí)行的模擬調(diào)度程序,每個程序由一個PCB表示。(2)模擬調(diào)度程序可任選兩種調(diào)度算法之一實現(xiàn)。(3)程序執(zhí)行中應能在屏幕上顯示出各進程的狀態(tài)變化,以便于觀察調(diào)度的整個過程。3.實驗說明設計一個按優(yōu)先數(shù)調(diào)度算法實現(xiàn)處理器調(diào)度的程序。(1)假定系統(tǒng)有五個
2、進程,每一個進程用一個進程控制塊PCB來代表,進程控制塊的格式為:進程名指針要求運行時間優(yōu)先數(shù)狀態(tài)其中,進程名——作為進程的標識,假設五個進程的進程名分別為P1,P2,P3,P4,P5。指針——按優(yōu)先數(shù)的大小把五個進程連成隊列,用指針指出下一個進程的進程控制塊的首地址,最后一個進程中的指針為“0”。要求運行時間——假設進程需要運行的單位時間數(shù)。優(yōu)先數(shù)——賦予進程的優(yōu)先數(shù),調(diào)度時總是選取優(yōu)先數(shù)大的進程先執(zhí)行。狀態(tài)——可假設有兩種狀態(tài),“就緒”狀態(tài)和“結束”狀態(tài)。五個進程的初始狀態(tài)都為“就緒”,用“R”表示,當一個進程運行結束后,它的狀態(tài)為“結
3、束”,用“E”表示。(2)在每次運行你所設計的處理器調(diào)度程序之前,為每個進程任意確定它的“優(yōu)先數(shù)”和“要求運行時間”。(3)為了調(diào)度方便,把五個進程按給定的優(yōu)先數(shù)從大到小連成隊列。用一單元指出隊首進程,用指針指出隊列的連接情況。例:隊首標志K2K1P1K2P2K3P3K4P4K5P50K4K5K3K12312415342RRRRRPCB1PCB2PCB3PCB4PCB5(4)處理器調(diào)度總是選隊首進程運行。采用動態(tài)改變優(yōu)先數(shù)的辦法,進程每運行一次優(yōu)先數(shù)就減“1”。由于本實驗是模擬處理器調(diào)度,所以,對被選中的進程并不實際的啟動運行,而是執(zhí)行:優(yōu)
4、先數(shù)-1要求運行時間-1來模擬進程的一次運行。提醒注意的是:在實際的系統(tǒng)中,當一個進程被選中運行時,必須恢復進程的現(xiàn)場,讓它占有處理器運行,直到出現(xiàn)等待事件或運行結束。在這里省去了這些工作。(5)進程運行一次后,若要求運行時間10,則再將它加入隊列(按優(yōu)先數(shù)大小插入,且置隊首標志);若要求運行時間=0,則把它的狀態(tài)修改成“結束”(E),且退出隊列。(6)若“就緒”狀態(tài)的進程隊列不為空,則重復上面(4)和(5)的步驟,直到所有進程都成為“結束”狀態(tài)。(7)在所設計的程序中應有顯示或打印語句,能顯示或打印每次被選中進程的進程名以及運行一次后進程
5、隊列的變化。(8)為五個進程任意確定一組“優(yōu)先數(shù)”和“要求運行時間”,啟動所設計的處理器調(diào)度程序,顯示或打印逐次被選中進程的進程名以及進程控制塊的動態(tài)變化過程。4.實驗步驟本次實驗的思想是,首先將實驗給定的五個進程分別用一個進程控制塊PCB來代表,其實現(xiàn)方法是用一個結構體類型來表示,在此結構體中分別有進程名、進程要求運行時間、進程優(yōu)先級、進程狀態(tài)和指向下一個進程控制塊的指針,其定義如下:typedefstructPCB{intid;進程名字p1、p2、p3、p4、p5structPCB*next;指針,指示下一個進程位置intruntime
6、;進程要求運行時間intpriority;進程的優(yōu)先級charstatus;進程狀態(tài)R或E,結束或是就緒}*pcb;在這之后便是創(chuàng)建預先隊列,方法是將進程按照給定的優(yōu)先級從大到小構成一個優(yōu)先隊列。這樣做的原因是在進行進程調(diào)用時,是系統(tǒng)是按照其優(yōu)先級由大到小的順序進行調(diào)用的,每次被調(diào)用的總是優(yōu)先級數(shù)最大的進程,所以應該將事先給定的五個進程由大到小安排(按優(yōu)先級)。其實現(xiàn)方法是首先創(chuàng)建鏈表表頭,之后依次將優(yōu)先級最大的進程插入至表頭之后。數(shù)據(jù)結構如下:voidcreate(PCB*head){inta,b;a為進程要求運行時間,b為進程優(yōu)先級he
7、ad->next=NULL;for(inti=1;i=5;i++){cout<<"-------P"<>a>>b;PCB*p=newPCB;PCB*q=h->next;輸入進程信息p->id=i;p->runtime=a;p->priority=b;p->status='R';while((q==NULL)
8、
9、(p->priority>q->priority)){如果輸入進程優(yōu)先級p->next=head->next;大于第一個進程優(yōu)先級,head->next=p;將其插入頭指針之后}while((p->
10、prioritynext->priority)&&(q->next!=NULL)){q=q->next;如不是,}那么尋找p->next=q->next;第一個q->ne