資源描述:
《時間片輪轉法調(diào)度cup_操作系統(tǒng)課程設計報告》由會員上傳分享,免費在線閱讀,更多相關內(nèi)容在教育資源-天天文庫。
1、目錄一、需求分析11、設計要求:12、解決方案:1二、概要設計21、基本原理:22、數(shù)據(jù)結構及模塊說明:33、流程圖:4三、詳細設計:4主要函數(shù)設計及說明:4四、調(diào)試分析:61、調(diào)試過程及步驟:62、結果分析:8五、總結:81、遇到問題及解決方法:82、心得體會:9六、參考文獻:9附錄:源代碼914計算機操作系統(tǒng)課程設計——時間片輪轉法進行CUP調(diào)度一、需求分析1、設計要求:在多道程序或多任務系統(tǒng)中,系統(tǒng)同時處于就緒狀態(tài)的進程有若干個。為了使系統(tǒng)中各進程能有條不紊地進行,必須選擇某種調(diào)度策略,以選擇一進程占用處理機。要求用時間片輪轉算法模擬單處理機調(diào)
2、度,以鞏固和加深處理機調(diào)度的概念。2、解決方案:(1)、假設系統(tǒng)有5個進程,每個進程用一個進程控制塊PCB來表示。PCB包括:進程名、鏈接指針、到達時間、估計運行時間和進程狀態(tài)。其中,進程名即進程標識。鏈接指針指出下一個到達進程的進程控制塊地址,按照進程到達的順序排隊,統(tǒng)設置一個隊頭和隊尾指針分別指向第一個和最后一個進程,新生成的進程放隊尾。估計運行時間:可由設計者任意指定一個時間值。到達時間:進程創(chuàng)建時的系統(tǒng)時間或由用戶指定,調(diào)度時,總是選擇到達時間最早的進程。進程狀態(tài):為簡單起見,假定進程有兩種狀態(tài),就緒和完成,并假定進程一創(chuàng)建就處于就緒狀態(tài),用
3、R表示,當一個進程運行結束時,就將其置成完成狀態(tài),用C表示。(2)、為每個進程任意確定一個要求運行時間和到達時間。(3)、按照進程到達的先后順序排成一個循環(huán)隊列。再設一個隊首指針指向第一個到達進程的首址。(4)、執(zhí)行處理機調(diào)度時,開始選擇隊首的第一個進程運行。另外再設一個當前運行進程的指針,指向當前正運行進程。(5)、由于本實驗是模擬實驗,所以對被選中進程并不實際啟動運行,而只是執(zhí)行:a)、估計運行時間減1;b)、輸出當前運行進程的名字。用這兩個操作來模擬進程的一次運行。14(6)、進程運行一次后,以后的調(diào)度則將當前指針依次下移一個位置,指向下一個進
4、程,即調(diào)整當前運行指針指向該進程的鏈接指針所指進程,以指示應運行進程。同時還應判斷該進程的剩余運行時間是否為零。若不為零,則等待下一輪的運行;若該進程的剩余運行時間為零,則將該進程的狀態(tài)置為完成狀態(tài)C,并退出循環(huán)隊列。(7)、若就緒隊列不空,則重復上述(5)和(6)步驟直到所有進程都運行完為止。(8)、在所有設計的調(diào)度程序中,應包含顯示或打印語句,以便顯示或打印每次選中進程的名稱及運行一次后隊列的變化情況。二、概要設計1、基本原理:系統(tǒng)將所有的就緒進程按先來先服務的原則排成一個隊列,每次調(diào)度時,把CPU分配給隊首進程,并令其執(zhí)行一個時間片。時間片的大
5、小從幾MS到幾百MS。當執(zhí)行的時間片用完時,由一個計時器發(fā)出時鐘中斷請求,調(diào)度程序便據(jù)此信號來停止該進程的執(zhí)行,并將它送往就緒隊列的末尾;然后再把處理機分配給就緒隊列中的新的隊首進程,同時也讓他執(zhí)行一個時間片。這樣就可以保證就緒隊列中的所有進程在一給定的時間內(nèi)均能獲得一時間片的處理機執(zhí)行時間。換言之,系統(tǒng)能在給定時間內(nèi)相應所有用戶的請求。2、數(shù)據(jù)結構及模塊說明:(1)、數(shù)據(jù)結構模塊主要是定義本設計中需要的兩個主要的結構體PCB和node,從而定義進程控制塊變量與隊列指針。(2)、函數(shù)模塊只要用于實現(xiàn)進程的插入,時間片的插入,輪轉法的實現(xiàn)。(3)、主界
6、面模塊主要用于提示使用者怎樣進行輪轉法的實現(xiàn)。(4)、菜單界面塊主要用于提示使用者進入時間片輪轉算法系統(tǒng)。143、流程圖:開始輸入進程數(shù)輸入進程進程是否輸入完?N輸入時間片Y分配給執(zhí)行隊列隊首時間片時間片-1是否有新進程到達將新到進程插入隊尾Y服務時間-1N是否完成N退出時間片是否用完NYY是否所有進程都完成Y將未完成的插入隊尾結束N三、詳細設計:主要函數(shù)設計及說明:1、創(chuàng)建進程;使用單鏈表的方法,單鏈表中的每個結點相當于一個進程:typedefstruct{charname[20];//進程名14intarrtime;//到達時間intruntim
7、e;//運行時間}DataType;typedefstructnode{DataTypepcb;structnode*next;}ListNode;2、自定義所需進程數(shù)目:intf;cin>>f。3、創(chuàng)建一個進程單鏈表,作為進程隊列:LinkListhead;p=(ListNode*)malloc(sizeof(ListNode));head=p;p->next=NULL;在進程數(shù)目之內(nèi),手動輸入進程:p=(ListNode*)malloc(sizeof(ListNode));cin>>p->pcb.name;cin>>p->pcb.arrtime;
8、cin>>p->pcb.worktime;每輸入一個進程都插進進程隊列,并按arrtime從小到大排序。4、