版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、計算機操作系統(tǒng)課程實驗指導(dǎo)書目錄計算機操作系統(tǒng)課程實驗教學(xué)大綱1實驗一單處理器系統(tǒng)的進程調(diào)度3基本信息3實驗?zāi)康?實驗內(nèi)容3實驗原理及設(shè)計3實驗條件5實驗過程5實驗要求8思考題8實驗二動態(tài)分配實驗8基本信息8實驗?zāi)康?實驗內(nèi)容8實驗原理及設(shè)計8實驗條件10實驗過程12實驗要求17思考題18實驗三請求頁式管理18基本信息18實驗?zāi)康?8實驗內(nèi)容18實驗原理及設(shè)計18實驗條件21實驗過程21實驗要求22I計算機操作系統(tǒng)課程實驗指導(dǎo)書思考題23II計算機操作系統(tǒng)課程實驗指導(dǎo)書計算機操作系統(tǒng)課程實驗教學(xué)大綱課 程 名 稱 : 英 文 名 稱 : 設(shè) 置 形 式 :實驗課性質(zhì): 計算機操作系統(tǒng)Compu
2、ter Operating Systems非設(shè)課課程模塊: 專業(yè)課課程編號: 509311大綱主撰人: 姜華專業(yè)實驗姜華左風(fēng)朝課程:大綱審核人: 一、學(xué)時、學(xué)分課程總學(xué)時:78實驗學(xué)時:16課程學(xué)分: 4二、適用專業(yè)及年級計算機科學(xué)與技術(shù)、軟件工程、網(wǎng)絡(luò)工程專業(yè)二、 三年級三、課程目標(biāo)與基本要求操作系統(tǒng)是計算機教學(xué)中最重要的環(huán)節(jié)之一,也是計算機及其相關(guān)專業(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)容比較繁瑣,具有
3、很強的實踐性。要學(xué)好這門課程,必須把理論與實踐緊密結(jié)合,才能取得較好的學(xué)習(xí)效果。課程目標(biāo): 培養(yǎng)學(xué)生的系統(tǒng)程序設(shè)計能力,是操作系統(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)的基本能力?;疽?1. 通過對操作系統(tǒng)中經(jīng)典算法的模擬,是學(xué)生深入理解算法的實現(xiàn)和應(yīng)用,了解操作系統(tǒng)在計算機系統(tǒng)中的作用,培養(yǎng)學(xué)生在實驗過程中發(fā)現(xiàn)問題、分析問題和解決問題的能力。2. 掌握系統(tǒng)程序設(shè)計
4、的基本方法和有關(guān)開發(fā)環(huán)境的使用。通過實驗著重培養(yǎng)學(xué)生閱讀參考資料、算法分析和設(shè)計、程序調(diào)試、處理實驗數(shù)據(jù)以及分析與總結(jié)實驗結(jié)果等方面的能力。3. 通過實驗加深對計算機操作系統(tǒng)原理的理解,培養(yǎng)實事求是、踏實細致、嚴(yán)肅認真的科學(xué)態(tài)度和克服、堅韌不拔的工作作風(fēng),以及科學(xué)、良好的實驗素質(zhì)和習(xí)慣。四、主要儀器設(shè)備硬件:臺式計算機;軟件:C、C+環(huán)境。五、實驗項目及教學(xué)安排1序號實驗項目名稱實驗基本方法和內(nèi)容項目學(xué)時項目類型每組人數(shù)教學(xué)要求1進程調(diào)度實驗用 C/C編寫和調(diào)試單處理器進程調(diào)度的模擬程序,觀察調(diào)度過程,以加深對進程的概念及進程調(diào)度算法的理解。4設(shè)計型1必修2管理實驗用 C/C+編寫和調(diào)試系統(tǒng)動
5、態(tài)分配的簡單模擬程序,采用家算法,有效地防止和避免死鎖的發(fā)生。6設(shè)計型1必修計算機操作系統(tǒng)課程實驗指導(dǎo)書六、方式及成績評定認真學(xué)習(xí)教學(xué)過程中講授的與實驗相關(guān)的內(nèi)容,提前做好實驗預(yù)習(xí)。按實驗指導(dǎo)書要求事先編好程序;準(zhǔn)備好需要輸入的中間數(shù)據(jù);估計可能出現(xiàn)的問題;預(yù)計可能得到的運行結(jié)果。做到在每個實驗前明確實驗?zāi)康摹⒄莆諏嶒灥幕緝?nèi)容及操作方法;在實驗中正確使用實驗設(shè)備 ,認真觀察、分析實驗結(jié)果;實驗后要根據(jù)要求做好總結(jié),上交實驗報告。根據(jù)學(xué)生實驗出勤情況、實驗態(tài)度、實驗報告成績等評定實驗成績。 實驗報告(含實驗理論) 占實驗成績的 60%40%,實驗技能(含實驗態(tài)度)占實驗成績的 40%60%。
6、各次實驗成績的平均值為最終實驗成績,占該課程總成績的 2030%。七、實驗教科書、參考書1實驗教科書自編實驗指導(dǎo)書。2實驗參考書,2008.9郁紅英、李春強,計算機操作系統(tǒng)實驗指導(dǎo),23器管理實驗用 C/C+編寫和調(diào)試虛擬內(nèi)存管理的模擬程序,通過虛存管理的地址轉(zhuǎn)換過程和各種頁面淘汰算法的編程實現(xiàn),加深對 管理方案的理解。6綜合型1必修計算機操作系統(tǒng)課程實驗指導(dǎo)書實驗一單處理器系統(tǒng)的進程調(diào)度基本信息實驗課程:計算機操作系統(tǒng)設(shè)課形式:非課程學(xué)分:4實驗項目:進程調(diào)度項目類型:設(shè)計型項目學(xué)時:4實驗?zāi)康耐ㄟ^模擬進程方法及單處理機系統(tǒng)的進程調(diào)度,了解進程的結(jié)構(gòu),進程的創(chuàng)建與撤消,進程的組織及進程的狀態(tài)
7、及其轉(zhuǎn)換,掌握進程調(diào)度策略。實驗內(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è)計設(shè)計一個按優(yōu)先數(shù)調(diào)度算法實現(xiàn)處理器調(diào)度的算法流程描述。(1) 假定系統(tǒng)有五個進程,每一個進程用一個進程塊 PCB 來代表,進程塊的格式為:進程名作為進程的標(biāo)識,假設(shè)五個進程的進程名分別為 P
8、1,P2,P3,P4,P5。指針按優(yōu)先數(shù)的大小把五個進程連成隊列,用指針指出下一個進程的進程塊的首地址,最后一個進程中的指針為“0”。要求運行時間假設(shè)進程需要運行的時間數(shù)。3進程名指針要求運行時間優(yōu)先數(shù)狀態(tài)計算機操作系統(tǒng)課程實驗指導(dǎo)書優(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) 在每次運行你所設(shè)計的處理器調(diào)度程序之前,為每個進程任意確定它的“優(yōu)先數(shù)”和“要求運行時間”。(3) 為了調(diào)度方便,把五個進程按給定的優(yōu)先數(shù)從大到小
9、連成隊列。用一單元指出隊首進程,用指針指出隊列的連接情況。例:隊首標(biāo)志K2K3K4K5PCB1PCB2PCB3PCB4PCB5(4) 處理器調(diào)度總是選隊首進程運行。采用動態(tài)改變優(yōu)先數(shù)的辦法,進程每運行一次優(yōu)先數(shù)就減“1”。由于本實驗是模擬處理器調(diào)度,所以,對被選中的進程并不實際的啟動運行,而是執(zhí)行:優(yōu)先數(shù)-1要求運行時間-1來模擬進程的一次運行。提醒注意的是:在實際的系統(tǒng)中,當(dāng)一個進程被選中運行時,必須恢復(fù)進程的現(xiàn)場,讓它占有處理器運行,直到出現(xiàn)等待或運行結(jié)束。在這里省去了這些工作。(5) 進程運行一次后,若要求運行時間¹0,則再將它加入隊列(按優(yōu)先數(shù)大小且置隊首標(biāo)志);若要求運行時
10、間=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)度程序,顯示或打印逐次被選中進程的進程名以及進程塊的動態(tài)變化過程。4P5K142RP4K324RP3K513RP2K435RK2K1P1021R計算機操作系統(tǒng)課程實驗指導(dǎo)書開始初始化進程PCB,輸入進程信息各進程按優(yōu)先數(shù)從高到低排列圖 1 優(yōu)先權(quán)進程調(diào)度流
11、程圖實驗條件1、裝有 Windows 操作系統(tǒng)的微型計算機;2、Borland C+軟件。實驗過程1、根據(jù)實驗預(yù)習(xí)階段的實驗設(shè)計方案,編寫應(yīng)用程序。參考代碼如下。#include "stdio.h" #include <stdlib.h> #include <conio.h>#define getpch(type) (type*)malloc(sizeof(type)#define NULL 0struct pcb /* 定義進程char name10; char state;int super;塊 PCB */inime;int rtime;str
12、uct pcb* link;*ready=NULL,*p; typedef struct pcb PCB;void sort() /* 建立對進程進行優(yōu)先級排列函數(shù)*/5就緒隊列空?y結(jié)束就緒隊列首進程投入運行時間片到CPU占用時間+1運行已占用CPU時間y已達到所需CPU時間進程完成撤銷該進程是運行進程的優(yōu)先數(shù)減1 把運行進程就緒隊列計算機操作系統(tǒng)課程實驗指導(dǎo)書void input() /* 建立進程塊函數(shù)*/int i,num;printf("n 請輸入進程數(shù)量?"); scanf("%d",&num); for(i=0;i<num;i
13、+)printf("n 進程號 No.%d:n",i); p=getpch(PCB);printf("n 輸入進程名:");scanf("%s",p->name); printf("n 輸入進程優(yōu)先數(shù):"); scanf("%d",&p->super);printf("n 輸入進程運行時間:"); scanf("%d",&p->ntime);printf("n");p->rtime=0;p->
14、;state='w' p->link=NULL;sort(); /* 調(diào)用 sort 函數(shù)*/int space()int l=0; PCB* pr=ready; while(pr!=NULL) 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&q
15、uot;,pr->state); printf("|%dt",pr->super); printf("|%dt",pr->ntime); printf("|%dt",pr->rtime); printf("n");void check() /* 建立進程查看函數(shù) */PCB* pr;6計算機操作系統(tǒng)課程實驗指導(dǎo)書printf("n * 當(dāng)前正在運行的進程是:%s",p->name); /*顯示當(dāng)前運行進程*/ disp(p);pr=ready;printf(&quo
16、t;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)用 destroy 函數(shù)*/ else(p->su
17、per)-; 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()
18、;printf("n 按任一鍵繼續(xù)");7計算機操作系統(tǒng)課程實驗指導(dǎo)書ch=getchar();printf("nn 進程已經(jīng)完成.n"); ch=getchar();2、編譯、運行程序?qū)嶒炓?、完成上述實驗示例程序,按照優(yōu)先級算法補充出 sort()子程序的內(nèi)容。2、分析結(jié)果含義并寫出的心得體會。思考題1、若實驗內(nèi)容中,在修改優(yōu)先數(shù)時增加下列原則:進程等待的時間超過某一時限時增加其優(yōu)先數(shù),參考上述例程,寫出程序。2、若采用基于時間片輪轉(zhuǎn)的調(diào)度算法模擬進程調(diào)度,試設(shè)計算法與程序。實驗二動態(tài)分配實驗基本信息實驗課程:計算機操作系統(tǒng)設(shè)課形式:非課程學(xué)分:4
19、實驗項目:分配項目類型:設(shè)計項目學(xué)時:4實驗?zāi)康谋緦嵙?xí)要求學(xué)生編寫和調(diào)試一個系統(tǒng)動態(tài)分配的簡單模擬程序,觀察死鎖產(chǎn)生的條件,并采用適當(dāng)家算法,有效地防止和避免死鎖的發(fā)生。實驗內(nèi)容利用家算法實現(xiàn)進程的動態(tài)分配。對進程運行過程中提出的請求進行檢查,若分配后系統(tǒng)處于安全狀態(tài),則滿足請求,否則拒絕申請。實驗原理及設(shè)計1家算法基本思想先對用戶提出的請求進行檢查,即檢查請求的是不大于需要的,是否不大8計算機操作系統(tǒng)課程實驗指導(dǎo)書于可利用的。若請求合法,則進行試分配。最后對試分配后的狀態(tài)調(diào)用安全性檢查算法進行安全性檢查。若安全,則分配,否則,不分配,恢復(fù)原來狀態(tài),拒絕申請。2家算法中用到的主要數(shù)據(jù)結(jié)構(gòu)int
20、 int int int intintAvailablej MaxijAllocationijj 為可利用向量的種類。最大需求矩陣i 為進程的數(shù)量。分配矩陣需求矩陣needij= Maxij- Allocationij申請各類數(shù)量Request ijWorkxi 進程申請 jFinishy的數(shù)量int工作向量3家算法 bank()進程 i 發(fā)出請求申請 k 個 j,Request ij=k(1) 檢查申請量是否不大于需求量:Request ij<=needi,j,若條件不符重新輸入,不申請大于需求量。(2) 檢查申請量是否小于系統(tǒng)中的可利用數(shù)量:Request ij<=availa
21、blei,j,若條件不符就申請失敗,阻塞該進程,用 goto 語句跳轉(zhuǎn)到重新申請。(3) 若以上兩個條件都滿足,則系統(tǒng)試探著將數(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)語
22、句實現(xiàn)輸入字符 y/n 4安全性檢查算法(safe()函數(shù))(1) 設(shè)置兩個向量:工作向量 Work,它表示系統(tǒng)可提供給進程繼續(xù)運行所需的各類安全性算法開始時,Work= Available。是否繼續(xù)進行申請。數(shù)目,在執(zhí)行Finish,它表示系統(tǒng)是否有足夠的分配給進程,使之運行完成。開始時先做Finishi=0;當(dāng)有足夠的分配給進程時,再令 Finishi=1。(2) 在進程中查找符合以下條件的進程:9計算機操作系統(tǒng)課程實驗指導(dǎo)書條件 1:Finishi=0;條件 2:needij<=Workj若找到,則執(zhí)行步驟(3)否則,執(zhí)行步驟(4)(3) 當(dāng)進程獲得執(zhí)行:后,可順利執(zhí)行,直至完成,
23、并出分配給它的,故應(yīng)Workj= Workj+ Allocationij; Finishi=1;goto step 2;(4) 如果所有的 Finishi=1 都滿足,則表示系統(tǒng)處于安全狀態(tài),否則,處于不安全狀態(tài)。5、算法流程如圖 2 所示。6、具體實驗設(shè)計(1)設(shè)計一個 3 個并發(fā)進程共享 10 個同類的系統(tǒng),進程可動態(tài)地申請和釋放,系統(tǒng)按各進程的申請動態(tài)地分配。(2)用家算法,實現(xiàn)分配程序,應(yīng)具有顯示或打印各進程依次要求申請的資源數(shù)以及依次分配的情況。(3)打印輸出家算法的申請情況和安全性狀況。實驗條件1、裝有 Windows 操作系統(tǒng)的微型計算機;2、Borland C+軟件。10計算機
24、操作系統(tǒng)課程實驗指導(dǎo)書初始化函數(shù) chushihua()開始輸入各進程對各類的最大需求初始化函數(shù) chushihua()結(jié)束家REQUESTi<=NEEDiREQUESTi<=AVAILABLEiSafe();是否進行再次分配NEEDi<=Work&&FINISHi=falseWork+=ALLOCATIONi;FINISHi=true;所有進程的 FINISH=true;輸出提示:系統(tǒng)是不安全的安全算法 safe()結(jié)束圖 2算法模擬流程11安全,輸出安全序列Return true;Work=AVAILABLE;FINISH=false;安全性算法 Safe
25、()開始程序,家算法 Bank()結(jié)束;AVAILABLEi-=REQUESTi;ALLOCATIONi-=REQUESTi; NEEDi+=REQUESTi;輸出提示:同意分配請求輸出提示:你的請求被拒!Error;Error;提出請求 REQUESTi輸出提示:輸入有誤,請重新輸入輸入各進程當(dāng)前已分配的數(shù)輸入個當(dāng)前可用數(shù)輸入種類數(shù)輸入進程的數(shù)量計算機操作系統(tǒng)課程實驗指導(dǎo)書實驗過程1、根據(jù)實驗預(yù)習(xí)階段的實驗設(shè)計方案,編寫應(yīng)用程序。參考代碼如下。#include <iostream.h> #include <stdio.h> #include <stdlib.h&
26、gt; #include <string.h>/定義全局變量const int x=10,y=10; int Availablex;int Allocationyy;/常量,便于修改/各可利用的數(shù)量/各進程當(dāng)前已分配的數(shù)量int Maxyy;/各進程對各類int Needyy; /尚需多少int Requestx; /申請多少int Workx; /工作向量,表示系統(tǒng)可提供給進程繼續(xù)運行所需的各類int Finishy; /表示系統(tǒng)是否有足夠的分配給進程,1 為是的最大需求數(shù)數(shù)量int py; int i,j; int n,m;int l=0;/安全序列/i 表示進程,j 表示/n
27、 為進程 i 的數(shù)量,m 為j 種類數(shù)/l 用來有幾個進程是 Finishi=1 的,當(dāng) l=n 是說明系統(tǒng)狀態(tài)是安全的int counter=0;/函數(shù)void chushihua();/初始化函數(shù)void safe(); void show(); void bank(); void jieshu();void chushihua()/安全性算法/函數(shù) show,輸出當(dāng)前狀態(tài)/家算法/結(jié)束函數(shù)cout<<"輸入進程的數(shù)量: "/從此開始輸入有關(guān)數(shù)據(jù)cin>>n;cout<<"輸入cin>>m;種類數(shù): "
28、cout<<endl<<"輸入各種for (j=0; j<m; j+)當(dāng)前可用的數(shù)量( "<<m<<" 種): "<<endl;cout<<"輸入"<<j<<" 可利用的數(shù)量 Available"<<j<<": "cin>>Availablej; /輸入數(shù)字的過程.Workj=Availablej;/初始化 Workj,它的初始值就是當(dāng)前可用的數(shù)cout<
29、;<endl<<"輸入各進程當(dāng)前已分配的"<<endl;for (i=0; i<n; i+)數(shù)量 Allocation"<<n<<""<<m<<":12計算機操作系統(tǒng)課程實驗指導(dǎo)書for (j=0; j<m; j+)cout<<"輸入進程 "<<i<<""<<j<<" 數(shù)量: "當(dāng)前已分配的cin>>Allocati
30、onij;cout<<endl;Finishi=0;/初始化 Finishicout<<endl<<"輸入各進程對各類for (i=0; i<n; i+)for (j=0; j<m; j+)的最大需求 Max"<<n<<""<<m<<": "<<endl;cout<<"輸入進程 "<<i<<""<<j<<" 的最大需求數(shù)
31、: "對cin>>Maxij;if(Maxij>=Allocationij) /若最大需求大于已分配,則計算需求量Needij = Maxij-Allocationij;elseNeedij=0;/Max 小于已分配的時候,此類已足夠不需再申請cout<<endl;cout<<endl<<"初始化完成"<<endl;/安全性算法函數(shù)void safe()/顯示當(dāng)前狀態(tài)函數(shù)void show() /函數(shù) show,輸出當(dāng)前int i,j; /局部變量分配情況int Ally; /各種的總數(shù)量int L
32、1; /局部變量 L1cout<<"當(dāng)前的狀態(tài)為:"<<endl;cout<<"各種for (j=0;j<m;j+)的總數(shù)量:"<<endl;cout<<""<<j<<": "Allj=Availablej;/總數(shù)量=可用的+已分配的for (i=0;i<n;i+)Allj+=Allocationij; cout<<Allj<<""cout<<endl<<
33、;"當(dāng)前各種可用的量為(available):"<<endl;13計算機操作系統(tǒng)課程實驗指導(dǎo)書for (j=0;j<m;j+)cout<<""<<j<<": "<<Availablej<<""cout<<endl<<"各進程已經(jīng)得到的for(i=0;i<=m;i+)for (j=i;j<m;j+) cout<<" cout<<endl; for(L1=0;L1
34、<n;L1+)cout<<"進程"<<L1<<":"量(allocation): "<<endl;"<<j;for (j=i;j<m;j+) cout<<AllocationL1j<<"cout<<endl;"cout<<endl<<"各進程還需要的for(i=0;i<=m;i+)量(need):"<<endl;for (j=i;j<m;j+
35、)cout<<endl;cout<<""<<j;for(L1=0;L1<n;L1+)cout<<"進程"<<L1<<":"for (j=i;j<m;j+)cout<<NeedL1j<<" cout<<endl;"/家算法函數(shù)void bank()cout<<endl<<"進程申請分配:"<<endl;int k=0;/用于輸入進程編號bool
36、 r=false;/ 初值為假,輸入 Y 繼續(xù)申請則置為真do/輸入請求cout<<"輸入申請cin>>k;cout<<endl;的進程(0-"<<n-1<<"): "while(k>n-1) /輸入錯誤處理cout<<endl<<"輸入錯誤,重新輸入:"<<endl;cout<<endl<<"輸入申請cin>>k;cout<<endl;的進程(0-"<<
37、n-1<<"): "cout<<endl<<"輸入該進程申請各類的數(shù)量: "<<endl;14計算機操作系統(tǒng)課程實驗指導(dǎo)書for (j=0; j<m; j+)do/dowhile 循環(huán)申請輸入的情況cout<<"進程 "<<k<<" 申請cin>>Requestj; cout<<endl;"<<j<<"的數(shù)量:"if(Requestj>Needkj)/申
38、請大于需求量時出錯,提示重新輸入( 超過需求數(shù)目)cout<<"申請大于需要量!"<<endl;數(shù)目不cout<<"申請的"<<j<<"的數(shù)量為"<<Requestj<<",大于進程"<<k<<"對該需求量"<<Needkj<<"。"<<endl; cout<<"重新輸入!"<<endl;e
39、lse/先是否申請大于需求量,再是否申請大于可利用量if(Requestj>Availablej)/申請大于可利用量, 應(yīng)該阻塞等待?cout<<"n 沒有那么多請不,進程等待!"<<endl;,目前可利用"<<j<<"數(shù)量為"<<Availablej<<",本次申Finishk=0;/該進程等待goto ppp;/goto 語句 跳轉(zhuǎn),結(jié)束本次申請while(Requestj>Needkj);/Requestj>Availablej|/改變 A
40、vilable、Allocation、Need 的值for (j=0; j<m; j+) Availablej = Availablej-Requestj; Allocationkj = Allocationkj+Requestj; Needkj = Needkj-Requestj;Workj = Availablej;/ 當(dāng)前狀態(tài)的安全性safe(); /調(diào)用安全性算法函數(shù)if (l<n)l=0;cout<<"n 試分配后,狀態(tài)不安全,所以不予分配!恢復(fù)原狀態(tài)"<<endl;/恢復(fù)數(shù)據(jù)for (j=0; j<m; j+)Avail
41、ablej = Availablej+Requestj; Allocationkj = Allocationkj-Requestj; Needkj = Needkj+Requestj;Workj = Availablej;for (i=0; i<n; i+)Finishi=0;/進程置為未分配狀態(tài)15計算機操作系統(tǒng)課程實驗指導(dǎo)書elsel=0;cout<<"n 申請for(j=0;j<m;j+)if(Needkj=0);!"<<endl;else /有一種還沒全部申請到,則該進程不可執(zhí)行,不能擁有的l=1;/置l 為 1,作為標(biāo)志brea
42、k;if(l!=1) /進程可以執(zhí)行,則for (j=0;j<m;j+)該進程的所有Availablej=Availablej+Allocationkj;Allocationkj=0;cout<<"該進程已得到所有需求l=0;/歸零其所有擁有!"<<endl;,執(zhí)行后將cout<<"n 安全的狀態(tài)!"<<endl;cout<<"安全序列為:"cout<<endl<<"進程"<<"("<&l
43、t;p0<<")"/輸出安全序列,考慮顯示格式,先輸出第一個Finish0=0;for (i=1; i<n; i+)cout<<"=>>"<<"進程"<<"("<<pi<<")"Finishi=0; /所有進程置為未分配狀態(tài)cout<<endl<<endl;show();/顯示當(dāng)前狀態(tài)ppp:/申請大于可利用量, 應(yīng)該阻塞等待,結(jié)束本次申請,GOTO 語句跳轉(zhuǎn)至此cout<&l
44、t;endl<<"是否繼續(xù)申請char* b=new char;/輸入 y/n, cin>>b;cout<<endl;cout<<"(y/n) ?"是否繼續(xù)申請<<endl"<<endl<<endl;cout<<endl; if(*b='y'|*b='Y') r=true;elser=false;/輸入非 Y 則令 R =false jieshu();/調(diào)用結(jié)束函數(shù) while (r=true);16計算機操作系統(tǒng)課程實驗指導(dǎo)書
45、/結(jié)束函數(shù)void jieshu()cout<<endl<<endl;cout<<"tt 演示計算完畢"<<endl; cout<<endl<<endl;/主函數(shù)int main()cout<<endl<<endl<<"tttt 模擬chushihua(); /初始化函數(shù)調(diào)用cout<<endl;家算法"<<endl<<endl;show();safe(); if (l<n)/輸出當(dāng)前狀態(tài)/當(dāng)前狀態(tài)的安全性
46、/l 在 safe 中是用來安全的進程的個數(shù)的cout<<"n 當(dāng)前狀態(tài)不安全,拒絕申請!"<<endl; cout<<endl;return 0;elseint i;/局部變量l=0;cout<<endl<<"n 當(dāng)前的狀態(tài)是安全的!安全序列為:"<<endl;cout<<"進程"<<"("<<p0<<")"/輸出安全序列for (i=1; i<n; i+)cout&l
47、t;<"->>"<<"進程"<<"("<<pi<<")"for (i=0; i<n; i+) Finishi=0;/所有進程置為未分配狀態(tài)cout<<endl;bank(); cout<<"ttreturn 0;/調(diào)用家算法函數(shù)演示計算完畢"<<endl;2、編譯、運行程序。實驗要求1、完成上述實驗示例程序,按照家算法流程補充出 safe()函數(shù)即安全性檢測算法的內(nèi)容。17計算機操作系統(tǒng)課
48、程實驗指導(dǎo)書2、分析 bank()中的多種的含義以及數(shù)據(jù)結(jié)構(gòu)的變化。3、思考家算法中引入安全性檢測的目的。4、寫出的心得體會。思考題如何實現(xiàn)并發(fā)執(zhí)行的進程對的動態(tài)申請和動態(tài)分配。實驗三請求頁式管理基本信息實驗課程:計算機操作系統(tǒng)設(shè)課形式:非課程學(xué)分:4實驗項目:器管理實驗項目類型:綜合項目學(xué)時:6實驗?zāi)康挠?C/C+編寫和調(diào)試虛擬內(nèi)存管理的模擬程序,通過虛存管理的地址轉(zhuǎn)換過程和各種頁面淘汰算法的編程實現(xiàn),加深對管理方案的理解。實驗內(nèi)容根據(jù)虛擬內(nèi)存管理的請求分頁管理機制,設(shè)計頁表結(jié)構(gòu),模擬實現(xiàn)虛存管理中邏輯地址到物理地址的轉(zhuǎn)換,按照先進先出頁面淘汰算法模擬實現(xiàn)缺頁中斷處理及頁面置換,并輸出顯示執(zhí)
49、行和置換過程。實驗原理及設(shè)計1、設(shè)計頁表。分頁式虛擬系統(tǒng)是把作業(yè)的副本存放在磁盤上,當(dāng)作業(yè)被選中時,可把作業(yè)的開始幾頁先裝入主存且啟動執(zhí)行。為此,在為作業(yè)建立頁表時,應(yīng)說明哪些頁已在主存,哪些頁尚未裝入主存,頁表的格式為:2、地址計算。作業(yè)執(zhí)行時,指令中的邏輯地址指出了參加運算的操作數(shù)存放的頁號和單元號,硬件的地址轉(zhuǎn)換機構(gòu)按頁號查頁表,若該頁對應(yīng)標(biāo)志為“1”,則表示該頁已在主存,這時根據(jù)關(guān)系式:18頁 號標(biāo) 志主存塊號在磁盤上的位置計算機操作系統(tǒng)課程實驗指導(dǎo)書絕對地址=塊號*塊長+單元號的主存單元地址。按計算出的絕對地址可以取到操作數(shù),完成一條指計算出欲令的執(zhí)行。若的頁標(biāo)志為“0”,則表示該頁
50、不在主存,這時硬件發(fā)“缺頁中斷”信號,由 OS 按該頁在磁盤上的位置,把該頁信息從磁盤讀出裝入主存后再重新執(zhí)行這條指令。3、設(shè)計“地址轉(zhuǎn)換”程序模擬硬件的地址轉(zhuǎn)換工作。當(dāng)?shù)捻撛谥鞔鏁r,則形成絕對地址,但不去模擬指令的執(zhí)行,而用輸出轉(zhuǎn)換后的地址來代替一條指令的執(zhí)行。當(dāng)?shù)捻摬辉谥鞔鏁r,則輸出“*該頁頁號”,表示產(chǎn)生了一次缺頁中斷,執(zhí)行缺頁中斷程序。該模擬程序的算法如圖 3 所示。開始否是頁標(biāo)志=1?是有后繼指令?取一條指令否結(jié)束圖 3 地址轉(zhuǎn)換模擬流程圖4、缺頁中斷模擬。如果頁不在主存且頁表未滿,則調(diào)入一頁并打印頁表情況;如果該頁不在主存且頁表已滿,則產(chǎn)生缺頁中斷,模擬算法如圖 4 所示。19輸出
51、絕對地址轉(zhuǎn)缺頁中斷子程序形成絕對地址查頁表取指令中的頁號取一條指令計算機操作系統(tǒng)課程實驗指導(dǎo)書頁號為lnumber輸出:*lnumber輸出:頁號j輸出:頁號lnumber圖 4 缺頁中斷算法流程圖實驗中采用 FIFO 算法進行頁面淘汰。把在主存的頁的頁號按進入主存的先后次序排成隊列,每次總是調(diào)出隊首頁。用數(shù)組存放頁號的隊列。若分配給該作業(yè)的物理塊數(shù)為 m,則數(shù)組由 m 個元素組成,p0,p1pm-1,隊首指針 head,隊尾指針 tail。當(dāng)裝入新頁時,將其頁號裝入數(shù)組。5、具體實驗設(shè)計。(1) 假定主存的每塊長度為 128 個字節(jié);現(xiàn)有一個共七頁的作業(yè),其中的第 0 頁至第 3頁已經(jīng)裝入主存,其余三頁未裝入主存,主存;該
溫馨提示
- 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. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版文化產(chǎn)業(yè)項目融資委托咨詢服務(wù)合同3篇
- 2025年度個人遺產(chǎn)繼承委托管理合同4篇
- 二零二五年度酒店客房承包租賃合同9篇
- 二零二五版花崗石石材行業(yè)節(jié)能減排合作協(xié)議3篇
- 二零二五年度出租車企業(yè)駕駛員勞動合同范本2篇
- 2024試驗檢測技術(shù)服務(wù)委托合同
- 基于2025年度需求的租賃合同2篇
- 二零二五年度出差意外傷害免責(zé)與責(zé)任追溯合同范本4篇
- 2025版塔吊租賃與安裝一體化勞務(wù)分包合同協(xié)議書3篇
- 2025年度個人收入證明模板定制與備案合同3篇
- 《大學(xué)生職業(yè)發(fā)展與就業(yè)指導(dǎo)》課程標(biāo)準(zhǔn)
- 第23課《出師表》課件(共56張)
- GB/T 3953-2024電工圓銅線
- 發(fā)電機停電故障應(yīng)急預(yù)案
- 接電的施工方案
- 常用藥物作用及副作用課件
- 幼兒阿拉伯?dāng)?shù)字描紅(0-100)打印版
- 社會組織等級評估報告模板
- GB/T 12173-2008礦用一般型電氣設(shè)備
- 新媒體研究方法教學(xué)ppt課件(完整版)
- 2020新版?zhèn)€人征信報告模板
評論
0/150
提交評論