實驗二--單處理器系統(tǒng)的進程調度_第1頁
實驗二--單處理器系統(tǒng)的進程調度_第2頁
實驗二--單處理器系統(tǒng)的進程調度_第3頁
實驗二--單處理器系統(tǒng)的進程調度_第4頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、精品文檔實驗二單處理器系統(tǒng)的進程調度(附實驗報告)1實驗目的加深對進程概念的理解,明確進程和程序的區(qū)別;深入了解系統(tǒng)如何組織進程、創(chuàng)建進程;進一步認識如何實現(xiàn)處理器調度。2實驗預備知識進程的概念;進程的組織方式;進程的創(chuàng)建;進程的調度。3實驗內容。1歡迎下載精品文檔編寫程序完成單處理機系統(tǒng)中的進程調度, 要求采用時間片輪轉調度算法。實驗具體包括:首先確定進程控制塊的內容,進程控制塊的組成方式;然后完成進程創(chuàng)建原語和進程調度原語; 最后編寫主函數(shù)對所作工作進程測試。4提示與講解這個實驗主要要考慮三個問題:如何組織進程、如何創(chuàng)建進程和如何實現(xiàn)處理器調度。考慮如何組織進程,首先就要設定進程控制塊的內

2、容。進程控制塊 PCB 記錄各個進程執(zhí)行時的情況。 不同的操作系統(tǒng),進程控制塊記錄的信息內容不一樣。操作系統(tǒng)功能越強,軟件也越龐大,進程控制塊記錄的內容也就越多。這里的實驗只使用了必不可少的信息。一般操作系統(tǒng)中,無論進程控制塊中信息量多少,信息都可以大致分為以下四類: 標識信息每個進程都要有一個惟一的標識符, 用來標識進程的存在和區(qū)別于其他進程。這個標識符是必不可少的,可以用符號或編號實現(xiàn),它必須是操作系統(tǒng)分配的。在后面給出的參考程序中,采用編號方式,也就是為每個進程依次分配一個不相同的正整數(shù)。 說明信息。2歡迎下載精品文檔用于記錄進程的基本情況,例如進程的狀態(tài)、等待原因、進程程序存放位置、進

3、程數(shù)據(jù)存放位置等等。實驗中,因為進程沒有數(shù)據(jù)和程序,僅使用進程控制塊模擬進程,所以這部分內容僅包括進程狀態(tài)。 現(xiàn)場信息現(xiàn)場信息記錄各個寄存器的內容。當進程由于某種原因讓出處理器時,需要將現(xiàn)場信息記錄在進程控制塊中, 當進行進程調度時, 從選中進程的進程控制塊中讀取現(xiàn)場信息進行現(xiàn)場恢復。 現(xiàn)場信息就是處理器的相關寄存器內容,包括通用寄存器、程序計數(shù)器和程序狀態(tài)字寄存器等。在實驗中,可選取幾個寄存器作為代表。 用大寫的全局變量 AX、BX、CX、DX模擬通用寄存器、大寫的全局變量 PC模擬程序計數(shù)器、大寫的全局變量 PSW模擬程序狀態(tài)字寄存器。 管理信息管理信息記錄進程管理和調度的信息。 例如進程

4、優(yōu)先數(shù)、進程隊列指針等。實驗中,僅包括隊列指針。因此可將進程控制塊結構定義如下:struct pcbint name;int status;。3歡迎下載精品文檔int ax, bx, cx,dx;int pc;int psw;int next;確定進程控制塊內容后,要考慮的就是如何將進程控制塊組織在一起。多道程序設計系統(tǒng)中,往往同時創(chuàng)建多個進程。在單處理器的情況下,每次只能有一個進程處于運行態(tài),其他的進程處于就緒狀態(tài)或等待狀態(tài)。為了便于管理,通常把處于相同狀態(tài)的進程的進程控制塊鏈接在一起。單處理器系統(tǒng)中,正在運行的進程只有一個。因此,單處理器系統(tǒng)中進程控制塊分成一個正在運行進程的進程控制塊、就

5、緒進程的進程控制塊組織成的就緒隊列和等待進程的進程控制塊組成的等待隊列。 由于實驗模擬的是進程調度, 沒有對等待隊列的操作, 所以實驗中只有一個指向正在運行進程的進程控制塊指針和一個就緒進程的進程控制塊隊列指針。操作系統(tǒng)的實現(xiàn)中, 系統(tǒng)往往在主存中劃分出一個連續(xù)的專門區(qū)域存放系統(tǒng)的進程控制塊, 實驗中應該用數(shù)組模擬這個專門的進程控制塊區(qū)域,定義如下:#definen10struct pcbpcbarean;。4歡迎下載精品文檔這樣,進程控制塊的鏈表實際上是數(shù)據(jù)結構中使用的靜態(tài)鏈表。進程控制塊的鏈接方式可以采用單向和雙向鏈表, 實驗中,進程控制塊隊列采用單向不循環(huán)靜態(tài)鏈表。為了管理空閑進程控制塊

6、, 還應該將空閑控制塊鏈接成一個隊列。實驗中采用時間片輪轉調度算法, 這種算法是將進程控制塊按照進入就緒隊列的先后次序排成隊列。 關于就緒隊列的操作就是從隊頭摘下一個進程控制塊和從隊尾掛入一個進程控制塊。 因此為就緒隊列定義兩個指針,一個頭指針,指向就緒隊列的第一個進程控制塊;一個尾指針,指向就緒隊列的最后一個進程控制塊。實驗中指向運行進程的進程控制塊指針、 就緒隊列指針和空閑進程控制塊隊列指針定義如下:intrun;structinthead;inttail;ready;intpfree;以上是如何組織進程,下面考慮如何創(chuàng)建進程。5歡迎下載精品文檔進程創(chuàng)建是一個原語,因此在實驗中應該用一個函

7、數(shù)實現(xiàn), 進程創(chuàng)建的過程應該包括:申請進程控制塊: 進程控制塊的數(shù)量是有限的, 如果沒有空閑進程控制塊,則進程不能創(chuàng)建,如果申請成功才可以執(zhí)行第步;申請資源:除了進程控制塊外,還需要有必要的資源才能創(chuàng)建進程,如果申請資源不成功, 則不能創(chuàng)建進程,并且歸還已申請的進程控制塊;如果申請成功,則執(zhí)行第三步,實驗無法申請資源,所以模擬程序忽略了申請資源這一步;填寫進程控制塊: 將該進程信息寫入進程控制塊內, 實驗中只有進程標識符、進程狀態(tài)可以填寫, 每個進程現(xiàn)場信息中的寄存器內容由于沒有具體數(shù)據(jù)而使用進程(模擬進程創(chuàng)建時,需輸入進程標識符字,進程標識符本應系統(tǒng)建立,并且是惟一的,輸入時注意不要沖突),

8、剛剛創(chuàng)建的進程應該為就緒態(tài),然后轉去執(zhí)行第四步;掛入就緒隊列: 如果原來就緒隊列不為空, 則將該進程控制塊掛入就緒隊列尾部,并修改就緒隊列尾部指針;如果原來就緒隊列為空,則將就緒隊列的頭指針、尾指針均指向該進程控制塊,進程創(chuàng)建完成。進程創(chuàng)建流程圖如圖2.2 所示。多道程序設計的系統(tǒng)中, 處于就緒態(tài)的進程往往是多個,它們都要求占用處理器,可是單處理器系統(tǒng)的處理器只有一個, 進程調度就是解決這。6歡迎下載精品文檔個處理器競爭問題的。 進程調度的任務就是按照某種算法從就緒進程隊列中選擇一個進程, 讓它占有處理器。 因此進程調度程序就應該包括兩部分,一部分是在進程就緒隊列中選擇一個進程, 并將其進程控

9、制塊從進程就緒隊列中摘下來,另一部分工作就是分配處理器給選中的進程,也就是將指向正在運行進程的進程控制塊指針指向該進程的進程控制塊,并將該進程的進程控制塊信息寫入處理器的各個寄存器中。圖 2.2進程創(chuàng)建流程圖。7歡迎下載精品文檔實驗中采用時間片輪轉調度算法。 時間片輪轉調度算法讓就緒進程按就緒的先后次序排成隊列, 每次總是選擇就緒隊列中的第一個進程占有處理器,但是規(guī)定只能使用一個 “時間片 ”。時間片就是規(guī)定進程一次使用處理器的最長時間。 實驗中采用每個進程都使用相同的不變的時間片。采用時間片輪轉調度算法的進程調度流程圖如圖2.3 所示。完成上述功能后,編寫主函數(shù)進行測試:首先建立一個就緒隊列

10、,手工輸入信息建立幾個進程; 然后進行進程調度; 最后將指向正在運行進程的指針指向的進程控制塊的內容輸出,察看結果。8歡迎下載精品文檔圖 2.3進程調度流程圖5課外題編程實現(xiàn)采用優(yōu)先數(shù)調度算法的進程調度。9歡迎下載精品文檔我的實現(xiàn)代碼(C 語言):#include #define N 10/系統(tǒng)中所允許的最大進程數(shù)量#define SLOT 5/時間片大小/ 進程狀態(tài)枚舉typedef enumRunning,/運行狀態(tài)Aready,/就緒狀態(tài)Blocking/阻塞狀態(tài) ProStatus;/ 進程控制塊typedef structint name;/進程標識符ProStatus status

11、;/進程狀態(tài)int ax,bx,cx,dx;/通用寄存器int pc;/程序計數(shù)器寄存器int psw;/程序狀態(tài)字寄存器int next;/指向下一個進程的指針 PCB;/ 就緒隊列指針typedef struct。10歡迎下載精品文檔int head;/頭指針int tail;/尾指針 Ready;/ 模擬寄存器int PSW,AX,BX,CX,DX,PC,TIME;/PCB 的靜態(tài)鏈表PCB pcbAreaN;/ 模擬 PCB區(qū)域的數(shù)組int run;/ 運行狀態(tài)程序的指針Ready ready;/ 就緒隊列指針int pfree;/ 空閑隊列的指針/ 初始化運行狀態(tài)進程指針void I

12、nitRun()run=-1;/ 初始化就緒狀態(tài)隊列void InitReady()ready.head=ready.tail=-1;/ 初始化空閑隊列void InitFree()int temp;for(temp=0;tempN-1;temp+)。11歡迎下載精品文檔pcbAreatemp.next=temp+1;pcbAreatemp.next=-1;pfree=0;/ 就緒隊列出隊int PopReady()/返回結點在PCB區(qū)域數(shù)組的編號int temp;if(ready.head=-1)printf(就緒隊列為空,不能出隊。n);return -1;temp=ready.head;

13、ready.head=pcbAreatemp.next;if(ready.head=-1)ready.tail=-1;pcbAreatemp.next=-1;return temp;/ 空閑隊列出隊int PopFree()/返回結點在PCB區(qū)域數(shù)組的編號int temp;if(pfree=-1)。12歡迎下載精品文檔printf(空閑隊列為空,不能出隊。n);return -1;temp=pfree;pfree=pcbAreatemp.next;pcbAreatemp.next=-1;return temp;/ 就緒隊列入隊void PushReady(int x)/x為入隊結點的編號int

14、 temp;if(ready.head=-1)ready.head=x;ready.tail=x;elsetemp=ready.tail;ready.tail=x;pcbAreaready.tail.next=-1;/ 創(chuàng)建 PCBvoid CreatePCB(int x,PCB pcb)/x為要創(chuàng)建 PCB在 PCB區(qū)域數(shù)組的編。13歡迎下載精品文檔號pcbAreax.ax=pcb.ax;pcbAreax.bx=pcb.bx;pcbAreax.cx=pcb.cx;pcbAreax.dx=pcb.dx;pcbA=;pcbAreax.next=-1;pcbAre

15、ax.pc=pcb.pc;pcbAreax.psw=pcb.psw;pcbAreax.status=pcb.status;/ 創(chuàng)建進程函數(shù)void Create(PCB pcb)int temp;if(pfree=-1)printf(空閑隊列為空,不能創(chuàng)建進程。n);return;temp=PopFree();pcb.status=Aready;CreatePCB(temp,pcb);PushReady(temp);/ 進程調度函數(shù)void Schedule()。14歡迎下載精品文檔int temp;if(ready.head=-1)printf(系統(tǒng)內沒有進程可以調度。);return;te

16、mp=PopReady();pcbAreatemp.status=Running;TIME=SLOT;/恢復 CPU現(xiàn)場AX=pcbAreatemp.ax;BX=pcbAreatemp.bx;CX=pcbAreatemp.cx;DX=pcbAreatemp.dx;PC=pcbAreatemp.pc;PSW=pcbAreatemp.psw;run=temp;/將選中的進程賦給運行指針printf(當前運行的程序:n);/輸出調度結果printf(進程號: %dn,pcbA);printf(進程狀態(tài): %dn,pcbArearun.status);printf(寄存器內容:nAXtBXtCXtDXtPCtPSWn);printf(%dt%dt%dt%dt%dt%dn,pcbArearun.ax,pcbArearun.bx,pcbArearun.cx,pcbArearun.dx,pcbArearun.pc,pcbArearun.psw);。15歡迎下載精品文檔void main()int temp;PCB tmp_pcb;printf(請輸入進程號,以負數(shù)為結束(進程號應保持唯一)。nn按任意鍵進入輸入模式: );getchar

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論