




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、計算機操作系統(tǒng)實驗教 學(xué) 大 綱課程編碼:509311 課程類別:專業(yè)核心課適用專業(yè):計算機科學(xué)與技術(shù)專業(yè) 主要教學(xué)內(nèi)容:操作系統(tǒng)基本原理課程總學(xué)時:78 實驗學(xué)時:14 【實驗?zāi)繕艘蟆坎僮飨到y(tǒng)是計算機教學(xué)中最重要的環(huán)節(jié)之一,也是計算機專業(yè)學(xué)生的一門重要的專業(yè)課程。操作系統(tǒng)課程主要內(nèi)容包括:進程管理、處理機調(diào)度與死鎖、存儲管理、設(shè)備管理、文件系統(tǒng)、操作系統(tǒng)接口、網(wǎng)絡(luò)操作系統(tǒng)、操作系統(tǒng)安全性以及Unix系統(tǒng)內(nèi)核結(jié)構(gòu)。由于操作系統(tǒng)涉及計算機系統(tǒng)中各種軟硬件資源的管理,內(nèi)容比較繁瑣,具有很強的實踐性。要學(xué)好這門課程,必須把理論與實踐緊密結(jié)合,才能取得較好的學(xué)習(xí)效果。培養(yǎng)計算機專業(yè)的學(xué)生的系統(tǒng)程序設(shè)
2、計能力,是操作系統(tǒng)課程的一個非常重要的環(huán)節(jié)。通過操作系統(tǒng)上機實驗,可以培養(yǎng)學(xué)生程序設(shè)計的方法和技巧,提高學(xué)生編制清晰、合理、可讀性好的系統(tǒng)程序的能力,加深對操作系統(tǒng)課程的理解。使學(xué)生更好地掌握操作系統(tǒng)的基本概念、基本原理、及基本功能,具有分析實際操作系統(tǒng)、設(shè)計、構(gòu)造和開發(fā)現(xiàn)代操作系統(tǒng)的基本能力?!緦嶒瀸W(xué)習(xí)要求】認真學(xué)習(xí)教學(xué)過程中講授的與實驗相關(guān)的內(nèi)容,提前做好實驗預(yù)習(xí)。按實驗指導(dǎo)書要求事先編好程序;準備好需要輸入的中間數(shù)據(jù);估計可能出現(xiàn)的問題;預(yù)計可能得到的運行結(jié)果。做到在每個實驗前明確實驗?zāi)康?、掌握實驗的基本?nèi)容及操作方法;在實驗中正確使用實驗設(shè)備 ,認真觀察、分析實驗結(jié)果;實驗后要根據(jù)要求
3、做好總結(jié),上交實驗報告?!緦嶒炗媱潯繉嶒炐蛱枌嶒烅椖績?nèi)容學(xué)時實驗類型實驗一進程調(diào)度實驗4設(shè)計型實驗二資源分配實驗4設(shè)計型實驗三存儲器管理實驗6綜合型【實驗教材及主要參考資料】教材: 計算機操作系統(tǒng),湯子贏等編著,西安電子科技大學(xué)出版社,2002操作系統(tǒng)教程題解與實驗指導(dǎo),孟靜編著,高等教育出版社,2003參考資料: 操作系統(tǒng)實驗指導(dǎo)書,傅秀芬編著,廣東工業(yè)大學(xué)出版科中山大學(xué) OSCAI : http:/i- 操作系統(tǒng)教程,陳向群等編著,北京大學(xué)出版社,2001Windows操作系統(tǒng)原理,尤晉元等編著,機械工業(yè)出版社,2001計算機操作系統(tǒng)教程,周長林等編著,高等教育出版社,2002【實驗任務(wù)】
4、實驗一、單處理器系統(tǒng)的進程調(diào)度一、實驗?zāi)康耐ㄟ^模擬進程控制方法及單處理機系統(tǒng)的進程調(diào)度,了解進程的結(jié)構(gòu),進程的創(chuàng)建與撤消,進程的組織及進程的狀態(tài)及其轉(zhuǎn)換,掌握進程調(diào)度策略。二、實驗學(xué)時4學(xué)時三、實驗內(nèi)容本實驗為單機模擬進程調(diào)度算法,在程序設(shè)計時不需真正地建立線程或者進程。實驗?zāi)M創(chuàng)建若干進程(人為輸入或隨機數(shù)產(chǎn)生),選擇一種或幾種單處理機的進程調(diào)度算法,如FCFS(先來先服務(wù)),SPF(短進程優(yōu)先),RR(時間片輪轉(zhuǎn)法),優(yōu)先級算法等,模擬進行進程調(diào)度。每進行一次調(diào)度,都打印一次運行進程、就緒隊列、以及各個進程的PCB,并能在進程完成后及時撤消該進程。四、算法描述設(shè)計一個按優(yōu)先數(shù)調(diào)度算法實現(xiàn)處
5、理器調(diào)度的程序。(1) 假定系統(tǒng)有五個進程,每一個進程用一個進程控制塊PCB來代表,進程控制塊的格式為:進程名指針要求運行時間優(yōu)先數(shù)狀態(tài)其中,進程名作為進程的標識,假設(shè)五個進程的進程名分別為P1,P2,P3,P4,P5。指針按優(yōu)先數(shù)的大小把五個進程連成隊列,用指針指出下一個進程的進程控制塊的首地址,最后一個進程中的指針為“0”。要求運行時間假設(shè)進程需要運行的單位時間數(shù)。優(yōu)先數(shù)賦予進程的優(yōu)先數(shù),調(diào)度時總是選取優(yōu)先數(shù)大的進程先執(zhí)行。狀態(tài)可假設(shè)有兩種狀態(tài),“就緒”狀態(tài)和“結(jié)束”狀態(tài)。五個進程的初始狀態(tài)都為“就緒”,用“R”表示,當(dāng)一個進程運行結(jié)束后,它的狀態(tài)為“結(jié)束”,用“E”表示。(2) 在每次運
6、行你所設(shè)計的處理器調(diào)度程序之前,為每個進程任意確定它的“優(yōu)先數(shù)”和“要求運行時間”。(3) 為了調(diào)度方便,把五個進程按給定的優(yōu)先數(shù)從大到小連成隊列。用一單元指出隊首進程,用指針指出隊列的連接情況。例: 隊首標志 K2 K1P1 K2P2 K3P3 K4P4 K5P50K4K5K3K12312415342RRRRRPCB1PCB2PCB3PCB4PCB5(4) 處理器調(diào)度總是選隊首進程運行。采用動態(tài)改變優(yōu)先數(shù)的辦法,進程每運行一次優(yōu)先數(shù)就減“1”。由于本實驗是模擬處理器調(diào)度,所以,對被選中的進程并不實際的啟動運行,而是執(zhí)行:優(yōu)先數(shù)-1要求運行時間-1來模擬進程的一次運行。提醒注意的是:在實際的系
7、統(tǒng)中,當(dāng)一個進程被選中運行時,必須恢復(fù)進程的現(xiàn)場,讓它占有處理器運行,直到出現(xiàn)等待事件或運行結(jié)束。在這里省去了這些工作。(5) 進程運行一次后,若要求運行時間0,則再將它加入隊列(按優(yōu)先數(shù)大小插入,且置隊首標志);若要求運行時間=0,則把它的狀態(tài)修改成“結(jié)束”(E),且退出隊列。(6) 若“就緒”狀態(tài)的進程隊列不為空,則重復(fù)上面(4)和(5)的步驟,直到所有進程都成為“結(jié)束”狀態(tài)。(7) 在所設(shè)計的程序中應(yīng)有顯示或打印語句,能顯示或打印每次被選中進程的進程名以及運行一次后進程隊列的變化。(8) 為五個進程任意確定一組“優(yōu)先數(shù)”和“要求運行時間”,啟動所設(shè)計的處理器調(diào)度程序,顯示或打印逐次被選中
8、進程的進程名以及進程控制塊的動態(tài)變化過程。圖1-1 流程圖五、參考程序#include stdio.h #include #include #define getpch(type) (type*)malloc(sizeof(type) #define NULL 0 struct pcb /* 定義進程控制塊PCB */ char name10; char state; int super; int ntime; int rtime; struct pcb* link; *ready=NULL,*p; typedef struct pcb PCB; void sort() /* 建立對進程進行優(yōu)
9、先級排列函數(shù)*/ void input() /* 建立進程控制塊函數(shù)*/ int i,num; printf(n 請輸入進程數(shù)量?); scanf(%d,&num); for(i=0;iname); printf(n 輸入進程優(yōu)先數(shù):); scanf(%d,&p-super); printf(n 輸入進程運行時間:); scanf(%d,&p-ntime); printf(n); p-rtime=0;p-state=w; p-link=NULL; sort(); /* 調(diào)用sort函數(shù)*/ int space() int l=0; PCB* pr=ready; while(pr!=NULL)
10、l+; pr=pr-link; return(l); void disp(PCB * pr) /*建立進程顯示函數(shù),用于顯示當(dāng)前進程*/ printf(n qname t state t super t ndtime t runtime n); printf(|%st,pr-name); printf(|%ct,pr-state); printf(|%dt,pr-super); printf(|%dt,pr-ntime); printf(|%dt,pr-rtime); printf(n); void check() /* 建立進程查看函數(shù) */ PCB* pr; printf(n * 當(dāng)前正在
11、運行的進程是:%s,p-name); /*顯示當(dāng)前運行進程*/ disp(p); pr=ready; printf(n *當(dāng)前就緒隊列狀態(tài)為:n); /*顯示就緒隊列狀態(tài)*/ while(pr!=NULL) disp(pr); pr=pr-link; void destroy() /*建立進程撤消函數(shù)(進程運行結(jié)束,撤消進程)*/ printf(n 進程 %s 已完成.n,p-name); free(p); void running() /* 建立進程就緒函數(shù)(進程運行時間到,置就緒狀態(tài)*/ (p-rtime)+; if(p-rtime=p-ntime) destroy(); /* 調(diào)用des
12、troy函數(shù)*/ else (p-super)-; p-state=w; sort(); /*調(diào)用sort函數(shù)*/ void main() /*主函數(shù)*/ int len,h=0; char ch; input(); len=space(); while(len!=0)&(ready!=NULL) ch=getchar(); h+; printf(n The execute number:%d n,h); p=ready; ready=p-link; p-link=NULL; p-state=R; check(); running(); printf(n 按任一鍵繼續(xù).); ch=getcha
13、r(); printf(nn 進程已經(jīng)完成.n); ch=getchar(); 要求:1、完成上述實驗示例程序,按照優(yōu)先級算法補充出sort()子程序的內(nèi)容。2、若修改優(yōu)先數(shù)時增加下列原則:進程等待的時間超過某一時限時增加其優(yōu)先數(shù),參考上述例程,寫出程序。六、選做題完成FCFS或SPF算法。七、思考題編寫一個多道程序系統(tǒng)的作業(yè)調(diào)度模擬程序,可采用任一調(diào)度算法。對于多道程序系統(tǒng),要假定系統(tǒng)中具有的各種資源及數(shù)量、調(diào)度作業(yè)時必須考慮到每個作業(yè)的資源要求。實驗二、資源分配一、實驗?zāi)康谋緦嵙?xí)要求學(xué)生編寫和調(diào)試一個系統(tǒng)動態(tài)分配資源的簡單模擬程序,觀察死鎖產(chǎn)生的條件,并采用適當(dāng)?shù)乃惴?,有效地防止和避免死鎖
14、的發(fā)生。二、實驗學(xué)時4學(xué)時三、實驗內(nèi)容利用銀行家算法實現(xiàn)進程的動態(tài)資源分配。對進程運行過程中提出的資源請求進行檢查,若分配后系統(tǒng)處于安全狀態(tài),則滿足請求,否則拒絕申請。四、算法描述1銀行家算法基本思想 先對用戶提出的請求進行合法性檢查,即檢查請求的是不大于需要的,是否不大于可利用的。若請求合法,則進行試分配。最后對試分配后的狀態(tài)調(diào)用安全性檢查算法進行安全性檢查。若安全,則分配,否則,不分配,恢復(fù)原來狀態(tài),拒絕申請。2銀行家算法中用到的主要數(shù)據(jù)結(jié)構(gòu)可利用資源向量 int Availablej j為資源的種類。最大需求矩陣 int Maxij i為進程的數(shù)量。分配矩陣 int Allocation
15、ij 需求矩陣 int needij= Maxij- Allocationij申請各類資源數(shù)量 int Request ij i進程申請j資源的數(shù)量工作向量 int Workx int Finishy 3銀行家算法bank()進程i發(fā)出請求申請k個j資源,Request ij=k (1) 檢查申請量是否不大于需求量:Request ij=needi,j,若條件不符重新輸入,不允許申請大于需求量。(2) 檢查申請量是否小于系統(tǒng)中的可利用資源數(shù)量:Request ij=availablei,j,若條件不符就申請失敗,阻塞該進程,用goto語句跳轉(zhuǎn)到重新申請資源。(3) 若以上兩個條件都滿足,則系統(tǒng)
16、試探著將資源分配給申請的進程,并修改下面數(shù)據(jù)結(jié)構(gòu)中的數(shù)值:Availablei,j= Availablei,j- Request ij;Allocationij= Allocationij+ Request ij;needij= needij- Request ij;(4) 試分配后,執(zhí)行安全性檢查,調(diào)用safe()函數(shù)檢查此次資源分配后系統(tǒng)是否處于安全狀態(tài)。若安全,才正式將資源分配給進程;否則本次試探分配作廢,恢復(fù)原來的資源分配狀態(tài),讓該進程等待。(5) 用dowhile 循環(huán)語句實現(xiàn)輸入字符y/n判斷是否繼續(xù)進行資源申請。4安全性檢查算法(safe()函數(shù)) (1) 設(shè)置兩個向量:工作向量
17、Work,它表示系統(tǒng)可提供給進程繼續(xù)運行所需的各類資源數(shù)目,在執(zhí)行安全性算法開始時,Work= Available。Finish,它表示系統(tǒng)是否有足夠的資源分配給進程,使之運行完成。開始時先做Finishi=0;當(dāng)有足夠的資源分配給進程時,再令Finishi=1。(2) 在進程中查找符合以下條件的進程:條件1:Finishi=0;條件2:needij=Workj若找到,則執(zhí)行步驟(3)否則,執(zhí)行步驟(4)(3) 當(dāng)進程獲得資源后,可順利執(zhí)行,直至完成,并釋放出分配給它的資源,故應(yīng)執(zhí)行:Workj= Workj+ Allocationij;Finishi=1;goto step 2;(4) 如果
18、所有的Finishi=1都滿足,則表示系統(tǒng)處于安全狀態(tài),否則,處于不安全狀態(tài)。5算法流程圖Safe();輸出提示:同意分配請求是否進行再次分配退出程序,銀行家算法Bank()結(jié)束;安全性算法Safe()開始Work=AVAILABLE;FINISH=false;NEEDi=Work&FINISHi=falseWork+=ALLOCATIONi;FINISHi=true;所有進程的FINISH=true;安全,輸出安全序列 Return true;安全算法safe()結(jié)束輸出提示:系統(tǒng)是不安全的輸出提示:你的請求被拒!AVAILABLEi-=REQUESTi;ALLOCATIONi-=REQUE
19、STi;NEEDi+=REQUESTi;輸入各進程對各類資源的最大需求初始化函數(shù)chushihua()開始輸入進程的數(shù)量輸入資源種類數(shù)輸入個資源當(dāng)前可用資源數(shù)輸入各進程當(dāng)前已分配的資源數(shù)輸出提示:輸入有誤,請重新輸入初始化函數(shù)chushihua()結(jié)束,銀行家函數(shù)Bank()提出請求REQUESTiREQUESTi=NEEDiREQUESTi=AVAILABLEiError;Error;圖2 銀行算法模擬流程五、實驗主要步驟1啟動C/C+語言環(huán)境,新建文件。2 設(shè)計一個3個并發(fā)進程共享10個同類資源的系統(tǒng),進程可動態(tài)地申請資源和釋放資源,系統(tǒng)按各進程的申請動態(tài)地分配資源。3設(shè)計用銀行家算法,實
20、現(xiàn)資源分配的兩個資源分配程序,應(yīng)具有顯示或打印各進程依次要求申請的資源數(shù)以及依次分配資源的情況。4 確定一組各進程依次申請資源數(shù)的序列,在相同的情況下分別運行上述兩種資源分配程序,觀察運行結(jié)果。5打印資源申請情況:資源申請:進程號依次申請的資源數(shù)/資源號六、參考程序#include #include #include #include /定義全局變量const int x=10,y=10; /常量,便于修改int Availablex; /各資源可利用的數(shù)量int Allocationyy; /各進程當(dāng)前已分配的資源數(shù)量int Maxyy; /各進程對各類資源的最大需求數(shù)int Needyy;
21、 /尚需多少資源int Requestx; /申請多少資源int Workx; /工作向量,表示系統(tǒng)可提供給進程繼續(xù)運行所需的各類資源數(shù)量int Finishy; /表示系統(tǒng)是否有足夠的資源分配給進程,1為是int py; /存儲安全序列int i,j; /i表示進程,j表示資源int n,m; /n為進程i的數(shù)量,m為資源j種類數(shù)int l=0; /l用來記錄有幾個進程是Finishi=1的,當(dāng)l=n是說明系統(tǒng)狀態(tài)是安全的int counter=0;/函數(shù)聲明void chushihua(); /初始化函數(shù)void safe(); /安全性算法void show(); /函數(shù)show,輸出當(dāng)
22、前狀態(tài)void bank(); /銀行家算法void jieshu(); /結(jié)束函數(shù)void chushihua() coutn; coutm; coutendl輸入各種資源當(dāng)前可用的數(shù)量( m 種): endl; for (j=0; jm; j+) cout輸入資源 j 可利用的數(shù)量AvailablejAvailablej; /輸入數(shù)字的過程. Workj=Availablej; /初始化Workj,它的初始值就是當(dāng)前可用的資源數(shù) coutendl輸入各進程當(dāng)前已分配的資源數(shù)量Allocationnm: endl; for (i=0; in; i+) for (j=0; jm; j+) co
23、ut 輸入進程 i 當(dāng)前已分配的資源 jAllocationij; coutendl; Finishi=0;/初始化Finishi coutendl輸入各進程對各類資源的最大需求Maxnm: endl; for (i=0; in; i+) for (j=0; jm; j+) cout 輸入進程 i 對資源 jMaxij; if(Maxij=Allocationij) /若最大需求大于已分配,則計算需求量 Needij = Maxij-Allocationij; else Needij=0;/Max小于已分配的時候,此類資源已足夠不需再申請 coutendl; coutendl初始化完成endl
24、;/安全性算法函數(shù)void safe() /顯示當(dāng)前狀態(tài)函數(shù)void show() /函數(shù)show,輸出當(dāng)前資源分配情況 int i,j; /局部變量 int Ally; /各種資源的總數(shù)量 int L1; /局部變量L1 cout當(dāng)前的狀態(tài)為:endl; cout各種資源的總數(shù)量:endl; for (j=0;jm;j+) cout 資源j: ; Allj=Availablej; /總數(shù)量=可用的+已分配的 for (i=0;in;i+) Allj+=Allocationij; coutAllj ; coutendl當(dāng)前各種資源可用的量為(available):endl; for (j=0;
25、jm;j+) cout 資源j: Availablej ; coutendl各進程已經(jīng)得到的資源量(allocation): endl; for(i=0;i=m;i+) for (j=i;jm;j+) cout 資源j; coutendl; for(L1=0;L1n;L1+) cout進程L1:; for (j=i;jm;j+) coutAllocationL1j ; coutendl; coutendl各進程還需要的資源量(need):endl; for(i=0;i=m;i+) for (j=i;jm;j+) cout 資源j; coutendl; for(L1=0;L1n;L1+) cou
26、t進程L1:; for (j=i;jm;j+) coutNeedL1j ; coutendl; /銀行家算法函數(shù)void bank() coutendl進程申請分配資源:endl; int k=0; /用于輸入進程編號 bool r=false; / 初值為假,輸入Y繼續(xù)申請則置為真 do/輸入請求 cout輸入申請資源的進程(0-n-1k; coutn-1) /輸入錯誤處理 coutendl輸入錯誤,重新輸入:endl; coutendl輸入申請資源的進程(0-n-1k; coutendl; coutendl輸入該進程申請各類資源的數(shù)量: endl; for (j=0; jm; j+) do
27、 /dowhile 循環(huán)判斷申請輸入的情況 cout進程 k 申請資源jRequestj; coutNeedkj) /申請大于需求量時出錯,提示重新輸入(貸款數(shù)目不允許超過需求數(shù)目) cout申請大于需要量!endl; cout申請的資源j的數(shù)量為Requestj,大于進程k對該資源需求量Needkj。endl; cout重新輸入!Availablej) /申請大于可利用量, 應(yīng)該阻塞等待? ? coutn沒有那么多資源,目前可利用資源j數(shù)量為Availablej,本次申請不成功,進程等待!Needkj); /RequestjAvailablej| /改變Avilable、Allocation
28、、Need的值 for (j=0; jm; j+) Availablej = Availablej-Requestj; Allocationkj = Allocationkj+Requestj; Needkj = Needkj-Requestj; Workj = Availablej; /判斷當(dāng)前狀態(tài)的安全性 safe(); /調(diào)用安全性算法函數(shù) if (ln) l=0; coutn試分配后,狀態(tài)不安全,所以不予分配!恢復(fù)原狀態(tài)endl; /恢復(fù)數(shù)據(jù) for (j=0; jm; j+) Availablej = Availablej+Requestj; Allocationkj = Alloc
29、ationkj-Requestj; Needkj = Needkj+Requestj; Workj = Availablej; for (i=0; in; i+) Finishi=0; /進程置為未分配狀態(tài) else l=0; coutn申請資源成功!endl; for(j=0;jm;j+) if(Needkj=0); else /有一種資源還沒全部申請到,則該進程不可執(zhí)行,不能釋放擁有的資源 l=1; /置l為1,作為判斷標志 break; if(l!=1) /進程可以執(zhí)行,則釋放該進程的所有資源 for (j=0;jm;j+) Availablej=Availablej+Allocatio
30、nkj; Allocationkj=0; cout該進程已得到所有需求資源,執(zhí)行后將釋放其所有擁有資源!endl; l=0; /歸零 coutn安全的狀態(tài)!endl; cout安全序列為: ; coutendl進程(p0); /輸出安全序列,考慮顯示格式,先輸出第一個 Finish0=0; for (i=1; in; i+) cout進程(pi); Finishi=0; /所有進程置為未分配狀態(tài) coutendlendl; show(); /顯示當(dāng)前狀態(tài)ppp: /申請大于可利用量, 應(yīng)該阻塞等待,結(jié)束本次資源申請,GOTO 語句跳轉(zhuǎn)至此 coutendl是否繼續(xù)申請資源(y/n) ?; ch
31、ar* b=new char; /輸入y/n,判斷是否繼續(xù)申請 b; coutendl; cout-endlendl; coutendl; if(*b=y|*b=Y) r=true; else r=false; /輸入非 Y 則令 R =false jieshu(); /調(diào)用結(jié)束函數(shù) while (r=true);/結(jié)束函數(shù)void jieshu() coutendlendl; couttt 演示計算完畢endl; coutendlendl;/主函數(shù)int main() coutendlendltttt模擬銀行家算法endlendl; chushihua(); /初始化函數(shù)調(diào)用 coutend
32、l; show(); /輸出當(dāng)前狀態(tài) safe(); /判斷當(dāng)前狀態(tài)的安全性 if (ln) /l在safe中是用來記錄安全的進程的個數(shù)的 coutn當(dāng)前狀態(tài)不安全,拒絕申請!endl; coutendl; return 0; else int i; /局部變量 l=0; coutendln當(dāng)前的狀態(tài)是安全的!安全序列為:endl; cout進程(p0); /輸出安全序列 for (i=1; in; i+) cout進程(pi); for (i=0; in; i+) Finishi=0; /所有進程置為未分配狀態(tài) coutendl; bank(); /調(diào)用銀行家算法函數(shù) couttt 演示計算
33、完畢endl; return 0;要求:1、 完成上述實驗示例程序,按照銀行家算法流程補充出safe()函數(shù)即安全性檢測算法的內(nèi)容。2、 分析各子程序的功能及實現(xiàn)過程,并簡要說明。七、思考題:1、 銀行家算法實現(xiàn)死鎖避免的缺陷在哪里?2、 如何實現(xiàn)并發(fā)執(zhí)行的進程對資源的動態(tài)申請和動態(tài)分配?實驗三、請求頁式存儲管理實驗?zāi)康模河肅/C+編寫和調(diào)試虛擬內(nèi)存管理的模擬程序,通過虛存管理的地址轉(zhuǎn)換過程和各種頁面淘汰算法的編程實現(xiàn),加深對存儲管理方案的理解。實驗內(nèi)容:(1)設(shè)計頁表。分頁式虛擬存儲系統(tǒng)是把作業(yè)的副本存放在磁盤上,當(dāng)作業(yè)被選中時,可把作業(yè)的開始幾頁先裝入主存且啟動執(zhí)行。為此,在為作業(yè)建立頁表
34、時,應(yīng)說明哪些頁已在主存,哪些頁尚未裝入主存,頁表的格式為:頁 號 標 志 主存塊號 在磁盤上的位置(2)地址計算。作業(yè)執(zhí)行時,指令中的邏輯地址指出了參加運算的操作數(shù)存放的頁號和單元號,硬件的地址轉(zhuǎn)換機構(gòu)按頁號查頁表,若該頁對應(yīng)標志為“1”,則表示該頁已在主存,這時根據(jù)關(guān)系式: 絕對地址=塊號*塊長+單元號計算出欲訪問的主存單元地址。按計算出的絕對地址可以取到操作數(shù),完成一條指令的執(zhí)行。若訪問的頁標志為“0”,則表示該頁不在主存,這時硬件發(fā)“缺頁中斷”信號,由OS按該頁在磁盤上的位置,把該頁信息從磁盤讀出裝入主存后再重新執(zhí)行這條指令。(3)設(shè)計“地址轉(zhuǎn)換”程序模擬硬件的地址轉(zhuǎn)換工作。當(dāng)訪問的頁
35、在主存時,則形成絕對地址,但不去模擬指令的執(zhí)行,而用輸出轉(zhuǎn)換后的地址來代替一條指令的執(zhí)行。當(dāng)訪問的頁不在主存時,則輸出“*該頁頁號”,表示產(chǎn)生了一次缺頁中斷,執(zhí)行缺頁中斷程序。該模擬程序的算法如圖3.1所示。開始是取一條指令取指令中訪問的頁號查頁表該頁標志=1?轉(zhuǎn)缺頁中斷子程序形成絕對地址輸出絕對地址有后繼指令?結(jié)束取一條指令否是否圖 3.1 地址轉(zhuǎn)換模擬流程圖(4) 缺頁中斷模擬。如果訪問頁不在主存且頁表未滿,則調(diào)入一頁并打印頁表情況;如果該頁不在主存且頁表已滿,則產(chǎn)生缺頁中斷,模擬算法如圖3.2所示。輸出:頁號lnumber輸出:*lnumber頁號為lnumber淘汰頁的頁號j=phea
36、d將頁lnumber裝入隊尾輸出:頁號j修改頁表:第j頁存在標志改為“0”第lnumber頁存在標記改為“1”第lnumber頁修改標記改為“0”第lnumber頁主存塊號為第j頁原主存塊號圖 3.2 缺頁中斷算法流程圖實驗中采用FIFO算法進行頁面淘汰。把在主存的頁的頁號按進入主存的先后次序排成隊列,每次總是調(diào)出隊首頁。用數(shù)組存放頁號的隊列。若分配給該作業(yè)的物理塊數(shù)為m,則數(shù)組由m個元素組成,p0,p1pm-1,隊首指針head,隊尾指針tail。當(dāng)裝入新頁時,將其頁號裝入數(shù)組。實驗主要步驟:1. 啟動C語言環(huán)境,新建文件。2. 假定主存的每塊長度為128個字節(jié);現(xiàn)有一個共七頁的作業(yè),其中的第0頁至第3頁已經(jīng)裝入主存,其余三頁未裝入主存,主存;該作業(yè)的頁表為:015011118012219013311
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 電力能源行業(yè)電力設(shè)施維修免責(zé)協(xié)議
- 心理學(xué)實驗設(shè)計與數(shù)據(jù)分析試題集詳解
- 計算機及配件銷售合同
- 微電影演員聘用協(xié)議
- 安裝自來水施工合同書
- 采購專業(yè)知識培訓(xùn)課件
- 《物流系統(tǒng)模擬》課件
- 《我國沙漠化防治》課件
- 《信號處理原理》課件
- 信賴保護原則在行政協(xié)議中的適用研究
- GB 45184-2024眼視光產(chǎn)品元件安全技術(shù)規(guī)范
- 2025年湖南科技職業(yè)學(xué)院高職單招數(shù)學(xué)歷年(2016-2024)頻考點試題含答案解析
- 2025年新人教版八年級下冊物理全冊教案
- 《建筑電氣設(shè)計》課件
- 品管圈PDCA案例-介入中心提高手術(shù)患者交接記錄書寫合格率醫(yī)院品質(zhì)管理成果匯報
- 第十七屆山東省職業(yè)院校技能大賽中職組“西式烹飪”賽項規(guī)程
- 華東師范大學(xué)《外國人文經(jīng)典(下)》2022-2023學(xué)年第一學(xué)期期末試卷
- 儲能電池模組PACK和系統(tǒng)集成項目可行性研究報告
- 2024年安徽省公務(wù)員錄用考試《行測》真題及解析
- 牙慢性損傷-楔狀缺損
- JTJ034-2000 公路路面基層施工技術(shù)規(guī)范
評論
0/150
提交評論