

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 設(shè)計(jì)報(bào)告題目:處理機(jī)調(diào)度模擬程序</p><p><b> 目錄</b></p><p> 一、課程設(shè)計(jì)題目....................................3</p><p> 二、基本概念及思想..................................3</p>&l
2、t;p> 三、部分程序主要流程圖..............................9</p><p> 四、操作截圖.......................................11</p><p> 五、程序源代碼.....................................12</p><p> 六、心得體會(huì)及
3、總結(jié).................................21</p><p> 一. 課程設(shè)計(jì)題目:</p><p> 課題1:理機(jī)調(diào)度模擬程序:選擇一個(gè)調(diào)度算法,實(shí)現(xiàn)處理機(jī)調(diào)度。</p><p> 設(shè)計(jì)目的:在多道程序和多任務(wù)系統(tǒng)中,系統(tǒng)內(nèi)同時(shí)處于就緒狀態(tài)的進(jìn)程可能有若干個(gè)。也就是說(shuō)能運(yùn)行的進(jìn)程數(shù)大于處理機(jī)個(gè)數(shù)。為了使系統(tǒng)中的進(jìn)程能有條不紊地工
4、作,必須選用某種調(diào)度策略,選擇一進(jìn)程占用處理機(jī)。要求學(xué)生設(shè)計(jì)一個(gè)模擬處理機(jī)調(diào)度算法,以鞏固和加深處理機(jī)調(diào)度的概念。</p><p><b> 設(shè)計(jì)要求:</b></p><p> 1)進(jìn)程調(diào)度算法包括:時(shí)間片輪轉(zhuǎn)法,短作業(yè)優(yōu)先算法,最高響應(yīng)比優(yōu)先算法。</p><p><b> 2)可選擇進(jìn)程數(shù)量</b></p
5、><p> 3)本程序包括三種算法,可用C語(yǔ)言實(shí)現(xiàn),執(zhí)行時(shí)在主界面選擇算法(可用函數(shù)實(shí)現(xiàn)),進(jìn)入子頁(yè)面后輸入進(jìn)程數(shù)及每個(gè)進(jìn)程的運(yùn)行時(shí)間,每個(gè)進(jìn)程的優(yōu)先數(shù)由隨機(jī)函數(shù)產(chǎn)生且優(yōu)先數(shù)隨等待時(shí)間而變化,執(zhí)行,顯示結(jié)果。</p><p> 二. 基本概念及思想:</p><p> (1)進(jìn)程的創(chuàng)建:由系統(tǒng)為某個(gè)進(jìn)程設(shè)置一個(gè)進(jìn)程控制塊PCB,用于對(duì)進(jìn)程進(jìn)行控制和管理。進(jìn)程任務(wù)完
6、成,由系統(tǒng)收回其PCB,該進(jìn)程便消亡。</p><p> (2)進(jìn)程的三種狀態(tài):運(yùn)行、就緒、完成。進(jìn)程的三種狀態(tài)可以通過(guò)設(shè)計(jì)三個(gè)鏈隊(duì)列來(lái)實(shí)現(xiàn):finish為完成隊(duì)列的頭指針,ready為就緒隊(duì)列的頭指針,tail為循環(huán)輪轉(zhuǎn)法隊(duì)列的尾指針。因?yàn)槊恳粫r(shí)刻,CPU只能運(yùn)行一個(gè)進(jìn)程,所以運(yùn)行隊(duì)列只有一個(gè)run指針指向當(dāng)前運(yùn)行進(jìn)程。</p><p> (3)進(jìn)程調(diào)度的功能:按照一定的策略從就緒隊(duì)
7、列的多個(gè)進(jìn)程中選取一個(gè)進(jìn)程,使其獲得CPU而運(yùn)行。</p><p> ?、賱?dòng)態(tài)優(yōu)先數(shù)調(diào)度算法: </p><p> 思想:為每一個(gè)進(jìn)程設(shè)一個(gè)優(yōu)先數(shù),它總是把處理機(jī)給就緒隊(duì)列中具有最高優(yōu)先級(jí)的進(jìn)程。初始的進(jìn)程優(yōu)先數(shù)是隨機(jī)產(chǎn)生的,隨著進(jìn)程的運(yùn)行對(duì)優(yōu)先數(shù)進(jìn)行調(diào)整,每次運(yùn)行時(shí)都是從就緒隊(duì)列中選取優(yōu)先數(shù)最大的進(jìn)程運(yùn)行,所以將就緒隊(duì)列按照優(yōu)先數(shù)的大小從高到低排序,這樣,每次取對(duì)首進(jìn)程即可。將進(jìn)程按優(yōu)
8、先數(shù)的大小排列在就緒隊(duì)列中,每次選取就緒隊(duì)列中優(yōu)先權(quán)最高的進(jìn)程首先占用處理機(jī)。優(yōu)先數(shù)由隨機(jī)函數(shù)產(chǎn)生進(jìn)程最初的優(yōu)先數(shù)。優(yōu)先數(shù)的動(dòng)態(tài)變化:進(jìn)程每執(zhí)行一次優(yōu)先數(shù)-1。優(yōu)先數(shù)隨著進(jìn)程的執(zhí)行進(jìn)行調(diào)整,每次執(zhí)行時(shí)都從就緒隊(duì)列中選取優(yōu)先數(shù)最大的進(jìn)程投入運(yùn)行。</p><p> ?、跁r(shí)間片輪轉(zhuǎn)調(diào)度算法:</p><p> 思想:將所有進(jìn)程按照先來(lái)先服務(wù)的規(guī)則排成一個(gè)隊(duì)列,把CPU分配給就緒隊(duì)列的隊(duì)首進(jìn)程
9、,并規(guī)定它的執(zhí)行時(shí)間(稱(chēng)此時(shí)間為時(shí)間片),當(dāng)時(shí)間片用完但并未執(zhí)行結(jié)束時(shí),剝奪該進(jìn)程的執(zhí)行,將其鏈接到就緒隊(duì)列的隊(duì)尾,等待下一次的選擇。將就緒隊(duì)列的隊(duì)首指針投入運(yùn)行。</p><p> ?、鄱套鳂I(yè)優(yōu)先調(diào)度算法(不可剝奪式的)</p><p> 思想:根據(jù)估計(jì)運(yùn)行時(shí)間的長(zhǎng)短,將各個(gè)進(jìn)程排成一個(gè)就緒隊(duì)列(估計(jì)運(yùn)行時(shí)間最短的進(jìn)程排在隊(duì)首),每次運(yùn)行將隊(duì)首進(jìn)程投入運(yùn)行,直到運(yùn)行結(jié)束,將此進(jìn)程連接到
10、完成隊(duì)列的隊(duì)尾。然后,再將下一個(gè)隊(duì)首進(jìn)程投入運(yùn)行,直到所有的進(jìn)程都運(yùn)行完畢。</p><p><b> PCB結(jié)構(gòu)體:</b></p><p> typedef struct node</p><p> { char name[10]; /*進(jìn)程時(shí)間輪轉(zhuǎn)時(shí)間片*/</p><p> int pid;
11、 /*進(jìn)程的標(biāo)號(hào)*/ </p><p> int prio; /*優(yōu)先級(jí)*/ </p><p> int round; /*時(shí)間片*/</p><p> int cputime; /*進(jìn)程占用cpu的時(shí)間*/</p><p> int runtime; /*進(jìn)程運(yùn)
12、行所用的時(shí)間*/</p><p> int waittime; /*進(jìn)程的等待時(shí)間*/</p><p> int length; /*進(jìn)程的長(zhǎng)度*/</p><p> int count; /*計(jì)數(shù)器*/</p><p> char state; /*進(jìn)程的狀態(tài)*/ </p><
13、;p> struct node *next;/*鏈指針*/</p><p> }PCB; PCB結(jié)構(gòu)體用于標(biāo)識(shí)進(jìn)程的創(chuàng)建與撤消。</p><p><b> 鏈指針:</b></p><p> PCB *finish,*ready,*tail,*run;.</p><p> Finish:完成隊(duì)列的首指針
14、,用于標(biāo)識(shí)完成隊(duì)列;</p><p> Ready:就緒隊(duì)列的首指針,用于標(biāo)識(shí)就緒隊(duì)列;;</p><p> Run:運(yùn)行隊(duì)列的首指針,用于標(biāo)識(shí)運(yùn)行隊(duì)列;;</p><p> Tail:循環(huán)輪轉(zhuǎn)隊(duì)列的尾指針;</p><p> 2.3 Create1(),create2(),create3()分別為創(chuàng)建進(jìn)程的函數(shù)</p>
15、<p> Create1( ):按照優(yōu)先級(jí)調(diào)度算法創(chuàng)建進(jìn)程,用戶(hù)輸入進(jìn)程名及進(jìn)程所需的時(shí)間后,創(chuàng)建每個(gè)進(jìn)程的PCB,將每個(gè)進(jìn)程的PCB調(diào)用函數(shù)insert1()按照優(yōu)先數(shù)從高到低排列到就緒隊(duì)列中。</p><p> create2( ):按照時(shí)間片調(diào)度算法創(chuàng)建進(jìn)程,用戶(hù)輸入進(jìn)程名及進(jìn)程所需的時(shí)間后,創(chuàng)建每個(gè)進(jìn)程的PCB,將每個(gè)進(jìn)程的PCB調(diào)用函數(shù)insert2( )將每個(gè)進(jìn)程PCB按照輸入的先后順
16、序插入到就緒隊(duì)列的末尾。</p><p> create3( ):按照短作業(yè)優(yōu)先調(diào)度算法創(chuàng)建進(jìn)程,用戶(hù)輸入進(jìn)程名及進(jìn)程所需的時(shí)間后,創(chuàng)建每個(gè)進(jìn)程的PCB,將每個(gè)進(jìn)程的PCB調(diào)用函數(shù)insert3( ):按照作業(yè)估計(jì)執(zhí)行時(shí)間的長(zhǎng)短從高到低排列到就緒隊(duì)列中。</p><p> 就緒隊(duì)列創(chuàng)建好后,將隊(duì)列當(dāng)中的第一個(gè)PCB變?yōu)檫\(yùn)行態(tài)“R”,將run 指針指向它,ready指針后移,作為就緒隊(duì)列
17、的新頭指針,然后調(diào)用調(diào)度算法。注意每個(gè)時(shí)刻只能有一個(gè)進(jìn)程處于運(yùn)行態(tài)。</p><p> 2.4 insert1(),insert2(),insert3()分別為插入函數(shù)</p><p> 這三個(gè)函數(shù)完成的是就緒隊(duì)列的創(chuàng)建和管理。</p><p> ?、賗nsert1()的功能是將未完成且優(yōu)先數(shù)小于其它進(jìn)程的PCB按進(jìn)程優(yōu)先數(shù)的順序插入到就緒隊(duì)列中去。</p
18、><p> ?、趇nsert2()的功能是將執(zhí)行了一個(gè)時(shí)間片且還未完成的進(jìn)程的PCB插入到就緒隊(duì)列的隊(duì)尾。</p><p> ?、?insert3()的功能是將未完成且作業(yè)的執(zhí)行時(shí)間小于其它進(jìn)程的PCB按進(jìn)程的作業(yè)的執(zhí)行時(shí)間的長(zhǎng)短插入到就緒隊(duì)列中去。</p><p> 2.5 priority()優(yōu)先數(shù)調(diào)度算法</p><p> ?、偌俣ㄏ到y(tǒng)有
19、三個(gè)進(jìn)程,每一個(gè)進(jìn)程用一個(gè)進(jìn)程控制塊PCB來(lái)代表,進(jìn)程控制塊的格式為:</p><p> typedef struct node</p><p><b> { </b></p><p> int pid; /*進(jìn)程的標(biāo)號(hào)*/ </p><p> int prio;
20、 /*優(yōu)先級(jí)*/ </p><p> int cputime; /*進(jìn)程占用cpu的時(shí)間*/</p><p> int runtime; /*進(jìn)程運(yùn)行所用的時(shí)間*/</p><p> char state; /*進(jìn)程的狀態(tài)*/ </p><p> struct node *next;/*鏈指針*/<
21、/p><p><b> }PCB; </b></p><p> 進(jìn)程名,優(yōu)先數(shù), 進(jìn)程占用cpu的時(shí)間, 進(jìn)程到完成還需的時(shí)間, 狀態(tài) </p><p> 進(jìn)程名:作為進(jìn)程的標(biāo)識(shí),假設(shè)三個(gè)進(jìn)程的進(jìn)程名分別為P1,P2,P3。</p><p> 進(jìn)程占用cpu的時(shí)間;假設(shè)進(jìn)程已經(jīng)運(yùn)行的單位時(shí)間數(shù),初始值為“0”。<
22、;/p><p> 優(yōu)先數(shù):賦予進(jìn)程的優(yōu)先數(shù),調(diào)度時(shí)總是選取優(yōu)先數(shù)大的進(jìn)程先執(zhí)行。</p><p> 狀態(tài);有三種狀態(tài),“就緒”狀態(tài),“運(yùn)行”狀態(tài)和“完成”狀態(tài)。三個(gè)進(jìn)程的初始狀態(tài)都為“就緒”,用“w”表示,當(dāng)一個(gè)進(jìn)程運(yùn)行結(jié)束后,它的狀態(tài)為“完成”,用“F”表示,當(dāng)一個(gè)進(jìn)程正在占用cpu ,它的狀態(tài)為“運(yùn)行”狀態(tài)。</p><p> ?、?在每次運(yùn)行所設(shè)計(jì)的優(yōu)先數(shù)調(diào)度
23、程序之前,為每個(gè)進(jìn)程隨機(jī)確定它的“優(yōu)先數(shù)”和“要求運(yùn)行時(shí)間”。</p><p> ?、蹫榱苏{(diào)度方便,把三個(gè)進(jìn)程按隨機(jī)產(chǎn)生的優(yōu)先數(shù)從大到小連成隊(duì)列。用一單元指出隊(duì)首進(jìn)程,用指針指出隊(duì)列的連接情況。</p><p> ?、?優(yōu)先數(shù)調(diào)度總是選隊(duì)首進(jìn)程運(yùn)行。采用動(dòng)態(tài)改變優(yōu)先數(shù)的辦法,進(jìn)程每運(yùn)行一次優(yōu)先數(shù)就減“1”。而是執(zhí)行: </p><p><b> 優(yōu)先數(shù)-
24、1</b></p><p><b> 要求運(yùn)行時(shí)間-1</b></p><p> 進(jìn)程占用cpu的時(shí)間+1,</p><p> 來(lái)模擬進(jìn)程的一次運(yùn)行。 </p><p> ?、葸M(jìn)程運(yùn)行一次后,若要求運(yùn)行時(shí)間〉0,則再將它插入就緒隊(duì)列(按優(yōu)先數(shù)大小插入,且置隊(duì)首標(biāo)志);若要求運(yùn)行時(shí)間=0,則把它的狀態(tài)修
25、改成“完成”(F),且退出隊(duì)列。</p><p> ?、?若“就緒”狀態(tài)的進(jìn)程隊(duì)列不為空,則重復(fù)上面(4)和(5)的步驟,直到所有進(jìn)程都成為“完成”狀態(tài)。</p><p> ?、咴谠O(shè)計(jì)的程序中有顯示或打印語(yǔ)句,能顯示或打印每次被選中進(jìn)程的進(jìn)程名以及運(yùn)行一次后進(jìn)程隊(duì)列的變化及狀態(tài)。</p><p> ?、?為三個(gè)進(jìn)程隨機(jī)確定一組“優(yōu)先數(shù)”和“要求運(yùn)行時(shí)間”,啟動(dòng)所設(shè)計(jì)
26、的處理器調(diào)度程序,顯示或打印逐次被選中進(jìn)程的進(jìn)程名以及進(jìn)程控制塊的動(dòng)態(tài)變化過(guò)程。</p><p> 注意:進(jìn)程的優(yōu)先數(shù)值越小,則代表其優(yōu)先權(quán)越高。 </p><p> 2.6 roundrun()時(shí)間片輪轉(zhuǎn)法調(diào)度算法</p><p> ?、?假定系統(tǒng)有三個(gè)進(jìn)程,每一個(gè)進(jìn)程用一個(gè)進(jìn)程控制塊PCB來(lái)代表。進(jìn)程控制塊的格式為: </p><p>
27、; 進(jìn)程名,進(jìn)程占用cpu的時(shí)間,進(jìn)程到完成還需的時(shí)間,時(shí)間片,計(jì)數(shù)器,狀態(tài) </p><p> 進(jìn)程名——作為進(jìn)程的標(biāo)識(shí),假設(shè)三個(gè)進(jìn)程的進(jìn)程名分別是p1,p2,p3。</p><p> 時(shí)間片——時(shí)間片輪轉(zhuǎn)循環(huán)所需的時(shí)間總數(shù)。</p><p> 計(jì)數(shù)器——對(duì)進(jìn)程執(zhí)行時(shí)間進(jìn)行計(jì)數(shù)。</p><p> 進(jìn)程占用cpu的時(shí)間——假設(shè)進(jìn)程
28、已經(jīng)運(yùn)行的單位時(shí)間數(shù),初始值為“0”。 </p><p> 狀態(tài)——有三種狀態(tài),“就緒”狀態(tài),“運(yùn)行”狀態(tài)和“完成”狀態(tài)。三個(gè)進(jìn)程的初始狀態(tài)都為“就緒”,用“w”表示,當(dāng)一個(gè)進(jìn)程運(yùn)行結(jié)束后,它的狀態(tài)為“完成”,用“F”表示,當(dāng)一個(gè)進(jìn)程正在占用cpu 時(shí),它的狀態(tài)為“運(yùn)行”狀態(tài)。</p><p> ?、?每次運(yùn)行所設(shè)計(jì)的時(shí)間片輪轉(zhuǎn)調(diào)度程序之前,為每個(gè)進(jìn)程任意確定它的“要求運(yùn)行時(shí)間”。&l
29、t;/p><p> ?、?把三個(gè)進(jìn)程按先來(lái)先服務(wù)的順序排成循環(huán)隊(duì)列,用指針指出隊(duì)列連接情況。時(shí)間片輪轉(zhuǎn)調(diào)度總是選擇ready指針指示的進(jìn)程運(yùn)行。而是執(zhí)行:</p><p> 進(jìn)程到完成還需的時(shí)間-1</p><p> 進(jìn)程占用cpu的時(shí)間+1</p><p><b> 計(jì)數(shù)器+1</b></p><
30、p> 來(lái)模擬進(jìn)程的一次運(yùn)行,表示進(jìn)程已經(jīng)運(yùn)行過(guò)一個(gè)單位的時(shí)間。</p><p> 2.7 shortjob()短作業(yè)優(yōu)先法調(diào)度算法</p><p> ?、偌俣ㄏ到y(tǒng)有三個(gè)進(jìn)程,每一個(gè)進(jìn)程用一個(gè)進(jìn)程控制塊PCB來(lái)代表,進(jìn)程控制塊的格式為:</p><p> 進(jìn)程名, 進(jìn)程占用cpu的時(shí)間, 進(jìn)程到完成還需的時(shí)間, 狀態(tài)</p><p&g
31、t; 進(jìn)程名——作為進(jìn)程的標(biāo)識(shí),假設(shè)三個(gè)進(jìn)程的進(jìn)程名分別為P1,P2,P3。</p><p> 進(jìn)程占用cpu的時(shí)間——假設(shè)進(jìn)程已經(jīng)運(yùn)行的單位時(shí)間數(shù),初始值為“0”。</p><p> 狀態(tài)——有三種狀態(tài),“就緒”狀態(tài),“運(yùn)行”狀態(tài)和“完成”狀態(tài)。三個(gè)進(jìn)程的初始狀態(tài)都為“就緒”,用“w”表示,當(dāng)一個(gè)進(jìn)程運(yùn)行結(jié)束后,它的狀態(tài)為“完成”,用“F”表示,當(dāng)一個(gè)進(jìn)程正在占用cpu 時(shí),它的狀
32、態(tài)為“運(yùn)行”狀態(tài)。</p><p> ②在每次運(yùn)行所設(shè)計(jì)的短作業(yè)優(yōu)先調(diào)度程序之前,為每個(gè)進(jìn)程任意確定它的“要求運(yùn)行時(shí)間”。</p><p> ③ 為了調(diào)度方便,把三個(gè)進(jìn)程按任意給定的作業(yè)長(zhǎng)短進(jìn)行排序。用一單元指出隊(duì)首進(jìn)程,用指針指出隊(duì)列的連接情況。每次取對(duì)首進(jìn)程即可。</p><p> ?、?短作業(yè)調(diào)度總是選隊(duì)首進(jìn)程運(yùn)行。進(jìn)程每運(yùn)行一次,</p>
33、<p><b> 要求運(yùn)行時(shí)間-1</b></p><p> 進(jìn)程占用cpu的時(shí)間+1</p><p> 來(lái)模擬進(jìn)程的一次運(yùn)行。</p><p> ?、葸M(jìn)程運(yùn)行一次后,若要求運(yùn)行時(shí)間〉0,則再將它插入就緒隊(duì)列(按作業(yè)長(zhǎng)短插入,且置隊(duì)首標(biāo)志);若要求運(yùn)行時(shí)間=0,則把它的狀態(tài)修改成“完成”(F),且退出隊(duì)列。</p>
34、<p> ?、?若“就緒”狀態(tài)的進(jìn)程隊(duì)列不為空,則重復(fù)上面(4)和(5)的步驟,直到所有進(jìn)程都成為“完成”狀態(tài)。</p><p> ?、?在設(shè)計(jì)的程序中有顯示或打印語(yǔ)句,能顯示或打印每次被選中進(jìn)程的進(jìn)程名以及運(yùn)行一次后進(jìn)程隊(duì)列的變化及狀態(tài)。</p><p> ?、?為三個(gè)進(jìn)程隨機(jī)確定“要求運(yùn)行時(shí)間”,啟動(dòng)所設(shè)計(jì)的處理器調(diào)度程序,顯示或打印逐次被選中進(jìn)程的進(jìn)程名以及進(jìn)程控制塊的動(dòng)
35、態(tài)變化過(guò)程。</p><p><b> 2.8 界面設(shè)計(jì):</b></p><p> 主界面:選擇調(diào)度算法;</p><p> 子界面:輸入進(jìn)程數(shù),進(jìn)程名及進(jìn)程所需的時(shí)間;</p><p> 利用c語(yǔ)言中的畫(huà)圖函數(shù)及清屏函數(shù)設(shè)計(jì)界面。</p><p> 三.部分程序主要流程圖:</
36、p><p><b> main</b></p><p><b> Prt1()</b></p><p> insert1()函數(shù)</p><p><b> 四.操作截圖:</b></p><p> 主界面設(shè)計(jì):(1,2,3算法 4退出)</p
37、><p> 算法1:動(dòng)態(tài)優(yōu)先級(jí)算法</p><p> 算法2:時(shí)間片輪轉(zhuǎn)法</p><p> 算法3:短作業(yè)優(yōu)先法</p><p><b> 五.程序源代碼</b></p><p> #include <stdio.h></p><p> #includ
38、e <stdlib.h></p><p> #include <string.h></p><p> #include <time.h></p><p> typedef struct node</p><p><b> {</b></p><p>
39、char name[10];</p><p><b> int prio;</b></p><p> int round;</p><p> int cputime;</p><p> int needtime;</p><p> int count;</p><p&
40、gt; char state;</p><p> struct node *next;</p><p><b> }PCB;</b></p><p> PCB *finish,*ready,*tail,*run;</p><p><b> int N;</b></p><
41、;p><b> firstin()</b></p><p><b> {</b></p><p> run=ready;</p><p> run->state='R';</p><p> ready=ready->next;</p><
42、;p><b> }</b></p><p> int timesj(void)</p><p><b> {</b></p><p><b> int i,xt;</b></p><p><b> time_t t;</b></p&g
43、t;<p> srand((unsigned) time(&t));</p><p> xt = rand() % 10 +1;</p><p> return xt;</p><p><b> }</b></p><p> void prt1(char a)</p><
44、;p><b> {</b></p><p> if(toupper(a)=='1')</p><p> printf(" name cputime needtime priority state\n");</p><p><b> else</b></
45、p><p> if(toupper(a)=='2')</p><p> printf(" name cputime needtime priority state\n");</p><p><b> else </b></p><p> printf("
46、 name cputime needtime priority state\n");</p><p><b> }</b></p><p> void prt2(char a,PCB *q)</p><p><b> {</b></p><p> if(toupper
47、(a)=='1')</p><p> printf(" %-10s%-10d%-10d%-10d %c\n",q->name,</p><p> q->cputime,q->needtime,q->prio,q->state);</p><p><b> else</b>
48、</p><p> if(toupper(a)=='2')</p><p> printf(" %-10s%-10d%-10d%-10d %c\n",q->name,</p><p> q->cputime,q->needtime,q->prio,q->state);</p>&
49、lt;p><b> else</b></p><p> printf(" %-10s%-10d%-10d%-10d %c\n",q->name,</p><p> q->cputime,q->needtime,q->prio,q->state);</p><p><b>
50、 }</b></p><p> void prt(char algo)</p><p><b> {</b></p><p><b> PCB *p;</b></p><p> prt1(algo); </p><p> if(run!=NULL)
51、</p><p> prt2(algo,run); </p><p> p=ready; </p><p> while(p!=NULL)</p><p><b> {</b></p><p> prt2(algo,p);</p><p> p=p->n
52、ext;</p><p><b> }</b></p><p> p=finish; </p><p> while(p!=NULL)</p><p><b> {</b></p><p> prt2(algo,p);</p><p>
53、p=p->next;</p><p><b> }</b></p><p> getch(); </p><p><b> return;</b></p><p><b> }</b></p><p> insert1(PCB *q)&
54、lt;/p><p><b> {</b></p><p> PCB *p1,*s,*r;</p><p><b> int b;</b></p><p><b> s=q; </b></p><p><b> p1=ready;<
55、/b></p><p><b> r=p1; </b></p><p><b> b=1;</b></p><p> while((p1!=NULL)&&b) </p><p> if(p1->prio>=s->prio)</p>&l
56、t;p><b> {</b></p><p><b> r=p1;</b></p><p> p1=p1->next;</p><p><b> }</b></p><p><b> else</b></p><p
57、><b> b=0;</b></p><p> if(r!=p1) </p><p><b> {</b></p><p> r->next=s;</p><p> s->next=p1;</p><p><b> }</b>
58、;</p><p><b> else</b></p><p><b> {</b></p><p> s->next=p1;</p><p><b> ready=s;</b></p><p><b> }</b>
59、</p><p><b> }</b></p><p> insert2(PCB *p2)</p><p><b> {</b></p><p> tail->next=p2;</p><p><b> tail=p2;</b></
60、p><p> p2->next=NULL;</p><p><b> }</b></p><p> insert3(PCB *q)</p><p><b> {</b></p><p> PCB *p1,*s,*r;</p><p><
61、;b> int b;</b></p><p><b> s=q; </b></p><p><b> p1=ready;</b></p><p><b> r=p1; </b></p><p><b> b=1;</b><
62、;/p><p> while((p1!=NULL)&&b) </p><p> if(p1->needtime<=s->needtime)</p><p><b> {</b></p><p><b> r=p1;</b></p><p&g
63、t; p1=p1->next;</p><p><b> }</b></p><p><b> else</b></p><p><b> b=0;</b></p><p> if(r!=p1) </p><p><b> {
64、</b></p><p> r->next=s;</p><p> s->next=p1;</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></
65、p><p> s->next=p1;</p><p><b> ready=s;</b></p><p><b> }</b></p><p><b> }</b></p><p> void create1(char alg)</p&
66、gt;<p><b> {</b></p><p><b> PCB *p;</b></p><p> int i,time,sjt,priost;</p><p> char na[10];</p><p> ready=NULL;</p><p>
67、 finish=NULL;</p><p><b> run=NULL;</b></p><p> printf("Enter name and time of process\n");</p><p> printf("----\n");</p><p> for(i=
68、1;i<=N;i++)</p><p><b> {</b></p><p> p=malloc(sizeof(PCB));</p><p> printf("Enter name%d",i);</p><p> printf(":");</p><
69、;p> scanf("%s",na);</p><p> printf("Random time%d",i);</p><p> printf(":");</p><p> sjt=timesj();</p><p> printf("%d\n",
70、 sjt);</p><p> printf("Random priority%d",i);</p><p> printf(":");</p><p> printf("%d\n", 20-sjt);</p><p> strcpy(p->name,na);</
71、p><p> p->cputime=0;</p><p> p->needtime=sjt;</p><p> p->state='w';</p><p> p->prio=20-sjt;</p><p> if(ready!=NULL)</p><p&
72、gt; insert1(p);</p><p><b> else</b></p><p><b> {</b></p><p> p->next=ready;</p><p><b> ready=p;</b></p><p><
73、b> }</b></p><p><b> }</b></p><p> printf(" Display Process Of Priority:\n");</p><p> printf("-----\n");</p><p><
74、;b> prt(alg);</b></p><p> run=ready; </p><p> ready=ready->next;</p><p> run->state='R';</p><p><b> }</b></p><p>
75、void create2(char alg)</p><p><b> {</b></p><p><b> PCB *p;</b></p><p> int i,time,sjt;</p><p> char na[10];</p><p> ready=NULL
76、;</p><p> finish=NULL;</p><p><b> run=NULL;</b></p><p> printf("Enter name and time of round process\n");</p><p> printf("-----\n");
77、</p><p> for(i=1;i<=N;i++)</p><p><b> {</b></p><p> p=malloc(sizeof(PCB));</p><p> printf("Enter name%d",i);</p><p> printf(&
78、quot;:");</p><p> scanf("%s",na);</p><p> printf("Random time%d",i);</p><p> printf(":");</p><p> sjt=timesj();</p><p&
79、gt; printf("%d\n", sjt);</p><p> printf("Random priority%d",i);</p><p> printf(":");</p><p> printf("%d\n", 20-sjt);</p><p>
80、 strcpy(p->name,na);</p><p> p->cputime=0;</p><p> p->needtime=sjt;</p><p> p->round=1;</p><p> p->state='w';</p><p> p->co
81、unt=0;</p><p> p->prio=20-sjt;</p><p> if(ready!=NULL)</p><p> insert2(p);</p><p><b> else</b></p><p><b> {</b></p>
82、<p> p->next=ready;</p><p><b> ready=p;</b></p><p><b> tail=p;</b></p><p><b> }</b></p><p><b> }</b></p&
83、gt;<p> printf(" Display Process Of Roundrobin\n");</p><p> printf("-----\n");</p><p><b> prt(alg);</b></p><p> run=ready;<
84、;/p><p> ready=ready->next;</p><p> run->state='R';</p><p><b> }</b></p><p> void create3(char alg)</p><p><b> {</b>
85、;</p><p><b> PCB *p;</b></p><p> int i,time,sjt;</p><p> char na[10];</p><p> ready=NULL;</p><p> finish=NULL;</p><p><b&g
86、t; run=NULL;</b></p><p> printf("Enter name and time of process\n");</p><p> printf("----\n");</p><p> for(i=1;i<=N;i++)</p><p><b&g
87、t; {</b></p><p> p=malloc(sizeof(PCB));</p><p> printf("Enter name%d",i);</p><p> printf(":");</p><p> scanf("%s",na);</p>
88、;<p> printf("Random time%d",i);</p><p> printf(":");</p><p> sjt=timesj();</p><p> printf("%d\n", sjt);</p><p> printf("
89、Random priority%d",i);</p><p> printf(":");</p><p> printf("%d\n", 20-sjt);</p><p> strcpy(p->name,na);</p><p> p->cputime=0;</p&g
90、t;<p> p->needtime=sjt;</p><p> p->state='w';</p><p> p->prio=20-sjt;</p><p> if(ready!=NULL)</p><p> insert1(p);</p><p><b
91、> else</b></p><p><b> {</b></p><p> p->next=ready;</p><p><b> ready=p;</b></p><p><b> }</b></p><p><
92、;b> }</b></p><p> printf(" Display Process Of Priority:\n");</p><p> printf("-----\n");</p><p> prt(alg); </p><p> run=ready
93、; </p><p> ready=ready->next;</p><p> run->state='R';</p><p><b> }</b></p><p> priority(char alg)</p><p><b> {</b&g
94、t;</p><p> while(run!=NULL)</p><p><b> {</b></p><p> run->cputime=run->cputime+1;</p><p> run->needtime=run->needtime-1;</p><p>
95、; run->prio=run->prio-1; </p><p> if(run->needtime==0) </p><p><b> {</b></p><p> run->next=finish;</p><p> finish=run;</p><p>
96、; run->state='C'; </p><p> run=NULL; </p><p> if(ready!=NULL)</p><p> firstin(); </p><p><b> }</b></p><p><b> else <
97、/b></p><p> if((ready!=NULL)&&(run->prio<ready->prio))</p><p><b> {</b></p><p> run->state='W';</p><p> insert1(run);<
98、/p><p> firstin();</p><p><b> }</b></p><p><b> prt(alg);</b></p><p><b> }</b></p><p><b> }</b></p>
99、<p> roundrun(char alg)</p><p><b> {</b></p><p> while(run!=NULL)</p><p><b> {</b></p><p> run->cputime=run->cputime+1;</p&g
100、t;<p> run->needtime=run->needtime-1;</p><p> run->count=run->count+1;</p><p> run->prio=run->prio-1;</p><p> if(run->needtime==0)</p><p&g
101、t;<b> {</b></p><p> run->next=finish;</p><p> finish=run;</p><p> run->state='C';</p><p><b> run=NULL;</b></p><p&g
102、t; if(ready!=NULL)</p><p> firstin();</p><p><b> }</b></p><p><b> else</b></p><p> if(run->count==run->round) </p><p>&
103、lt;b> {</b></p><p> run->count=0;</p><p> if(ready!=NULL) </p><p><b> {</b></p><p> run->state='W'; </p><p> inser
104、t2(run);</p><p> firstin(); </p><p><b> }</b></p><p><b> }</b></p><p> prt(alg); </p><p><b> }</b></p><
105、p><b> }</b></p><p> shorttask(char alg)</p><p><b> {</b></p><p> while(run!=NULL)</p><p><b> {</b></p><p> run
106、->cputime=run->cputime+1;</p><p> run->needtime=run->needtime-1;</p><p> run->prio=run->prio-1;</p><p> if(run->needtime==0) </p><p><b>
107、 {</b></p><p> run->next=finish;</p><p> finish=run;</p><p> run->state='C'; </p><p> run=NULL; </p><p> if(ready!=NULL) </p&g
108、t;<p> firstin(); </p><p><b> }</b></p><p><b> else </b></p><p> if((ready!=NULL)&&(run->needtime>ready->needtime))</p>&l
109、t;p><b> {</b></p><p> run->state='W';</p><p> insert1(run);</p><p> firstin();</p><p><b> }</b></p><p><b>
110、 prt(alg);</b></p><p><b> }</b></p><p><b> return;</b></p><p><b> }</b></p><p><b> menu()</b></p><
111、p> { char algo;</p><p> printf("\n\n COMPUTER OS WORK\n\n");</p><p> printf("\n\n By wanghao(Class 2) \n\n\n");</p><p> pr
112、intf(" choose one of following:\n");</p><p> printf("\n 1.PRIORITY.\n\n");</p><p> printf(" 2.ROUNDROBIN.\n\n");</p><p&g
113、t; printf(" 3.SHORTTASK.\n\n");</p><p> printf(" 4.EXIT.\n\n\n");</p><p> printf("\n please enter your choice:");</p><p
114、> scanf("%c",&algo);</p><p> if(algo=='1')</p><p><b> { </b></p><p> printf("Enter process number\n");</p><p> sca
115、nf("%d",&N);</p><p> create1(algo);</p><p> priority(algo);</p><p><b> }</b></p><p><b> else</b></p><p> if(algo
116、=='2')</p><p><b> { </b></p><p> printf("Enter process number\n");</p><p> scanf("%d",&N);</p><p> create2(algo);</p
117、><p> roundrun(algo);</p><p><b> }</b></p><p><b> else</b></p><p> if(algo=='3')</p><p><b> { </b></p>
118、<p> printf("Enter process number\n");</p><p> scanf("%d",&N);</p><p> create3(algo);</p><p> shorttask(algo);</p><p><b> retur
119、n;</b></p><p><b> }</b></p><p> else if(algo=='4')</p><p><b> exit(0);</b></p><p><b> }</b></p><p>&l
120、t;b> main()</b></p><p><b> {</b></p><p><b> while(1)</b></p><p><b> {</b></p><p><b> menu();</b></p>
121、<p><b> }</b></p><p><b> }</b></p><p> 六.心得體會(huì)及總結(jié):</p><p> 處理機(jī)調(diào)度問(wèn)題實(shí)際上是處理機(jī)分配問(wèn)題。只有那些參與競(jìng)爭(zhēng)處理機(jī)所必須的資源都已得到滿(mǎn)足的進(jìn)程才能享受競(jìng)爭(zhēng)處理機(jī)的資格,這時(shí)它們處于內(nèi)存就緒狀態(tài)。這些必須的資源包括內(nèi)存、外設(shè)及有關(guān)
122、數(shù)據(jù)結(jié)構(gòu)等。作業(yè)調(diào)度程序必須先調(diào)用存儲(chǔ)管理、外設(shè)管理,分配資源,讓它們能有競(jìng)爭(zhēng)資格。</p><p> 為了提高資源利用率,一部分在內(nèi)存中處于就緒、等待狀態(tài)而短期內(nèi)不能執(zhí)行進(jìn)程、作業(yè)換出內(nèi)存,所以外存中除了處于后備狀態(tài)的作業(yè),還有處于就緒狀態(tài)的作業(yè)。這就需要一定的方法和策略來(lái)為這部分作業(yè)分配空間。</p><p> 學(xué)習(xí)完《操作系統(tǒng)原理》課程后,進(jìn)行的這次全面的綜合訓(xùn)練,通過(guò)課程設(shè)計(jì),
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 進(jìn)程調(diào)度模擬程序課程設(shè)計(jì)
- c語(yǔ)言課程設(shè)計(jì)-處理機(jī)低級(jí)調(diào)度模擬系統(tǒng)
- c語(yǔ)言課程設(shè)計(jì)--處理機(jī)低級(jí)調(diào)度模擬系統(tǒng)
- os課程設(shè)計(jì)---模擬處理機(jī)調(diào)度算法mfc實(shí)現(xiàn)
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告--處理機(jī)調(diào)度問(wèn)題
- 頁(yè)面置換算法模擬程序課程設(shè)計(jì)報(bào)告
- java課程設(shè)計(jì)-atm柜員機(jī)模擬程序資料
- 處理機(jī)調(diào)度示例程序
- 頁(yè)面置換算法模擬程序課程設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)-對(duì)處理機(jī)的調(diào)度
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告---信號(hào)燈模擬程序
- 處理機(jī)調(diào)度算法的模擬
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告--頁(yè)面置換算法模擬程序設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告--頁(yè)面置換算法模擬程序設(shè)計(jì)
- java計(jì)算器課程設(shè)計(jì)---計(jì)算器模擬程序
- 處理機(jī)調(diào)度習(xí)題
- 停車(chē)場(chǎng)管理課程設(shè)計(jì)報(bào)告--停車(chē)場(chǎng)管理模擬程序的設(shè)計(jì)
- 磁盤(pán)調(diào)度算法程序課程設(shè)計(jì)報(bào)告
- 磁盤(pán)調(diào)度算法程序課程設(shè)計(jì)報(bào)告
- 磁盤(pán)調(diào)度算法程序課程設(shè)計(jì)報(bào)告
評(píng)論
0/150
提交評(píng)論