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