《操作系統(tǒng)實訓(xùn)》指導(dǎo)書_第1頁
《操作系統(tǒng)實訓(xùn)》指導(dǎo)書_第2頁
《操作系統(tǒng)實訓(xùn)》指導(dǎo)書_第3頁
《操作系統(tǒng)實訓(xùn)》指導(dǎo)書_第4頁
《操作系統(tǒng)實訓(xùn)》指導(dǎo)書_第5頁
已閱讀5頁,還剩37頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、操作系統(tǒng)實訓(xùn)指導(dǎo)書一、實訓(xùn)目的通過操作系統(tǒng)實訓(xùn),主要強化學(xué)生對本課程基礎(chǔ)知識的掌握;使學(xué)生理論聯(lián)系實際,加強學(xué)生的動手能力;加深對操作系統(tǒng)的基本概念、工作原理和實現(xiàn)方法等理論知識的理解;掌握操作系統(tǒng)各個部分之間的有機聯(lián)系,從而了解操作系統(tǒng)在整個計算機系統(tǒng)中的地位和作用,鞏固和加強與本課程相關(guān)的其他計算機課程的知識,提高對計算機專業(yè)知識理解的系統(tǒng)性和完整性,并加強合作完成系統(tǒng)的團隊精神和提高程序設(shè)計的能力。二、實訓(xùn)內(nèi)容本實訓(xùn)的內(nèi)容為實現(xiàn)一個模擬操作系統(tǒng)。要求使用實驗室所提供的安裝有C語言編程環(huán)境的計算機,模擬采用多道程序設(shè)計方法的單用戶操作系統(tǒng),該操作系統(tǒng)包括進程管理、存儲管理、設(shè)備管理和文件管

2、理四部分。三、實訓(xùn)設(shè)備1、PC計算機2、VC+等軟件系統(tǒng)。四、實訓(xùn)任務(wù)及要求根據(jù)實訓(xùn)內(nèi)容,認真完成模擬操作系統(tǒng)的實現(xiàn),模擬操作系統(tǒng)需包括進程管理、存儲管理、設(shè)備管理和文件管理四部分。實訓(xùn)的基本原理主要包括操作系統(tǒng)中的進程的同步與互斥;常用的進程調(diào)度算法;地址重定位;動態(tài)頁式存儲管理技術(shù)的頁面淘汰算法;設(shè)備管理中設(shè)備的分配和回收;用死鎖避免方法來處理申請獨占設(shè)備可能造成的死鎖;磁盤調(diào)度算法等。本實訓(xùn)結(jié)束后,需要學(xué)生提交實訓(xùn)的源代碼及可執(zhí)行程序,并提交實訓(xùn)報告。 五、實訓(xùn)基本操作方法1.搜集與整理,設(shè)定操作系統(tǒng)所面臨的操作需求;2.設(shè)計各部分的實現(xiàn)方案;3.程序開發(fā);4.程序測試;5.系統(tǒng)集成;6

3、.提交源程序,完成實訓(xùn)報告。六、實訓(xùn)項目任務(wù)一 分析操作系統(tǒng)所面臨的操作需求【實訓(xùn)目的】使學(xué)生理解操作系統(tǒng)所面臨的操作需求,掌握操作系統(tǒng)中的進程管理、存儲管理、設(shè)備管理和文件管理等功能?!緦嵱?xùn)內(nèi)容】1. 分析操作系統(tǒng)所面臨的操作需求;2. 熟悉實訓(xùn)環(huán)境;3. 資料搜集與整理,進行實訓(xùn)的前期準備。【預(yù)習(xí)要求】操作系統(tǒng)的功能及實現(xiàn)的基本原理?!緦嵱?xùn)步驟】1. 分析操作系統(tǒng)所面臨的操作需求:進程管理、存儲管理、設(shè)備管理和文件管理,進一步熟悉各模塊的工作原理;2. 根據(jù)操作需求,進行系統(tǒng)的整體設(shè)計,畫出系統(tǒng)總體的功能模塊圖,如下圖1所示;3. 根據(jù)上一步得出的功能模塊圖,進行資料的搜集與整理,并熟悉實

4、訓(xùn)環(huán)境,為之后實訓(xùn)任務(wù)的完成打下堅實的基礎(chǔ)。圖1系統(tǒng)功能模塊圖【注意事項】操作系統(tǒng)中各模塊之間的功能劃分?!舅伎碱}】1. 操作系統(tǒng)中各模塊有怎樣的功能?2. 它們之間有怎樣的聯(lián)系?3. 針對某一特定的應(yīng)用環(huán)境,如何完善操作系統(tǒng)的功能?任務(wù)二 進程管理【實訓(xùn)目的】掌握臨界區(qū)的概念及臨界區(qū)的設(shè)計原則;掌握信號量的概念、PV操作的含義以及應(yīng)用PV操作實現(xiàn)進程的同步與互斥;分析進程爭用資源的現(xiàn)象,學(xué)習(xí)解決進程互斥的方法;掌握進程的狀態(tài)及狀態(tài)轉(zhuǎn)換;掌握常用的進程調(diào)度算法?!緦嵱?xùn)內(nèi)容】1.分析進程的同步與互斥現(xiàn)象,編程實現(xiàn)經(jīng)典的進程同步問題生產(chǎn)者消費者問題的模擬;2.編寫允許進程并行執(zhí)行的進程調(diào)度程序,在

5、常用的進程(作業(yè))調(diào)度算法:先來先服務(wù)算法、短作業(yè)優(yōu)先算法、最高響應(yīng)比優(yōu)先算法、高優(yōu)先權(quán)優(yōu)先算法等調(diào)度算法中至少選擇三種調(diào)度算法進行模擬,并輸出平均周轉(zhuǎn)時間和平均帶權(quán)周轉(zhuǎn)時間?!绢A(yù)習(xí)要求】進程同步與互斥的概念及實現(xiàn)方法;進程調(diào)度的作用及常用的調(diào)度算法。【實訓(xùn)步驟】1.分析計算機系統(tǒng)中對資源的分配與釋放過程:計算機系統(tǒng)中的每個進程都可以消費或生產(chǎn)某類資源。當(dāng)系統(tǒng)中某一進程使用某一資源時,可以看作是消耗,且該進程稱為消費者。而當(dāng)某個進程釋放資源時,則它就相當(dāng)一個生產(chǎn)者。2.定義生產(chǎn)者消費者問題中的各數(shù)據(jù)結(jié)構(gòu),并初始化信號量;3.創(chuàng)建生產(chǎn)者與消費者進程,利用信號量實現(xiàn)生產(chǎn)者與消費者之間的同步與互斥;

6、可參考的部分源代碼如下:include windows.h#include conio.h#include stdio.h#define MAX 20 /定義緩沖池的最大容量是20int count=5; /初始產(chǎn)品的數(shù)量為5void Proclucer()/生產(chǎn)者函數(shù)while(1) if(count = MAX) printf(緩沖池已滿!等待 1 秒!n); Sleep(3000); else count+; printf(生產(chǎn)了一個產(chǎn)品!當(dāng)前產(chǎn)品的總數(shù)量是: %dnn,count); Sleep(1300); /注意毫秒為單位 void Consumer() /消費者函數(shù)while(1

7、) if(count = 0) printf(緩沖池已空!等待 2 秒!n); Sleep(2000); else count-; printf(取出了一個產(chǎn)品!當(dāng)前產(chǎn)品的數(shù)量是: %d nn,count); Sleep(2000); HANDLE ahThread;HANDLE bhThread;HANDLE hThread;int tStop() /停止函數(shù) int l=getchar();return l;void Start() /開始函數(shù) ahThread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)Proclucer,NULL,0,NUL

8、L); bhThread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)Consumer,NULL,0,NULL); hThread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)tStop,NULL,0,NULL); /多線程int IsStop=tStop();if(IsStop=0) /滿足停止條件 CloseHandle(ahThread); CloseHandle(bhThread); CloseHandle(hThread);void shengcanzexiaofeize() /主函數(shù)printf

9、(*會出現(xiàn)返回不了主界面的情況*);Start(); /開始printf(n);4. 運行并測試程序,運行界面如下圖2所示:圖2 生產(chǎn)者與消費者問題程序模擬效果圖5.分析常用的進程調(diào)度算法的工作原理,優(yōu)先級法可被用作業(yè)或進程的調(diào)度策略。以下步驟以優(yōu)先級法為例說明實訓(xùn)步驟。圖3高優(yōu)先權(quán)算法的工作流程:首先,系統(tǒng)或用戶按某種原則為作業(yè)或進程指定一個優(yōu)先級來表示該作業(yè)或進程所享有的調(diào)度優(yōu)先級權(quán)。該算法的核心是確定進程或作業(yè)的優(yōu)先級。確定優(yōu)先級的方法分為兩類:靜態(tài)法和動態(tài)法。靜態(tài)法根據(jù)作業(yè)或進程的靜態(tài)特性,在作業(yè)或進程開始執(zhí)行之前就確定它們的優(yōu)先級,一旦開始執(zhí)行之后就不能改變。動態(tài)法則不然,它把作業(yè)或

10、進程的靜態(tài)特性和動態(tài)特性結(jié)合起來確定作業(yè)或進程的優(yōu)先級,隨著作業(yè)或進程的執(zhí)行過程,其優(yōu)先級不斷變化。本實訓(xùn)指導(dǎo)書以動態(tài)法為例進行說明。靜態(tài)優(yōu)先級的調(diào)度算法實現(xiàn)雖然簡單,系統(tǒng)開銷小,但由于靜態(tài)優(yōu)先級一旦確定之后,直到執(zhí)行結(jié)束為止始終保持不變,從而系統(tǒng)效率較低,調(diào)度性能不高,而動態(tài)優(yōu)先級的系統(tǒng)效率較高,調(diào)度性能也高。6.高優(yōu)先權(quán)算法的設(shè)計,下圖4所示:圖3高優(yōu)先權(quán)算法的流程圖4高優(yōu)先權(quán)算法的設(shè)計先讀入進程,比較進程的優(yōu)先級,排列出分配CPU的隊列,按時間片分配CPU,一個時間片后,優(yōu)先級減1,再一次比較優(yōu)先級,再排分配CPU的隊列,按時間片分配CPU,直到進程全部執(zhí)行完畢。每個進程有一個進程控制塊

11、( PCB)表示。進程控制塊可以包含如下信息:進程名、優(yōu)先數(shù)、到達時間、需要運行時間、已用CPU時間、進程狀態(tài)等等。進程的優(yōu)先數(shù)及需要的運行時間可以事先人為地指定(也可以由隨機數(shù)產(chǎn)生)。進程的到達時間為輸入進程的時間。進程的運行時間以時間片為單位進行計算。每個進程的狀態(tài)可以是就緒 W(Wait)、運行R(Run)、或完成F(Finish)三種狀態(tài)之一。就緒進程獲得 CPU后都只能運行一個時間片。用已占用CPU時間加1來表示。如果運行一個時間片后,進程的已占用 CPU時間已達到所需要的運行時間,則撤消該進程,如果運行一個時間片后進程的已占用CPU時間還未達所需要的運行時間,也就是進程還需要繼續(xù)運

12、行,此時應(yīng)將進程的優(yōu)先數(shù)減1(即降低一級),然后把它插入就緒隊列等待CPU。 每進行一次調(diào)度程序都打印一次運行進程、就緒隊列、以及各個進程的PCB,以便進行檢查。 7. 根據(jù)以上算法編寫程序,最后計算平均周轉(zhuǎn)時間與平均帶權(quán)周轉(zhuǎn)時間?!咀⒁馐马棥縿討B(tài)優(yōu)先權(quán)與靜態(tài)優(yōu)先權(quán)的區(qū)別?!舅伎碱}】 針對某一具體應(yīng)用環(huán)境,如何選擇合適的調(diào)度算法?任務(wù)三 存儲管理【實訓(xùn)目的】掌握物理內(nèi)存和虛擬內(nèi)存的基本概念;掌握重定位的基本概念及其要點,理解邏輯地址與絕對地址;掌握各種存儲管理的實現(xiàn)方法,包括基本原理、地址變換和缺頁中斷、主存空間的分配及分配算法;掌握常用淘汰算法。【實訓(xùn)內(nèi)容】編寫一個模擬的動態(tài)頁式存儲管理程序

13、,實現(xiàn)對動態(tài)頁式存儲的淘汰算法的模擬(在先進先出淘汰算法、最近最少使用淘汰算法、最不經(jīng)常使用淘汰算法三種算法中至少選擇兩種進行模擬)并計算各個算法的缺頁率;并且頁面淘汰算法在淘汰一頁時,只將該頁在頁表中抹去,而不再判斷它是否被改寫過,也不將它寫回到輔存?!绢A(yù)習(xí)要求】常用的存儲管理方法及其基本原理;物理內(nèi)存與虛擬內(nèi)存、邏輯地址與絕對地址的概念;常用的淘汰算法?!緦嵱?xùn)步驟】以先進先出淘汰算法為例說明動態(tài)頁式存儲管理的實現(xiàn)過程:1. 產(chǎn)生一個需要訪問的指令地址流,它是一系列需要訪問的指令的地址。為不失一般性,你可以適當(dāng)?shù)兀ㄓ萌斯ぶ付ǖ胤椒ɑ蛴秒S機數(shù)產(chǎn)生器)生成這個序列,使得 50的指令是順序執(zhí)行的。

14、25的指令均勻地散布在前地址部分,25的地址是均勻地散布在后地址部分;2. 指定合適的頁面尺寸(例如以 1K或2K為1頁); 3. 指定內(nèi)存頁表的最大長度,并對頁表進行初始化;4. 每訪問一個地址時,首先要計算該地址所在的頁的頁號,然后查頁表,判斷該頁是否在主存如果該頁已在主存,則打印頁表情況;如果該頁不在主存且頁表未滿,則調(diào)入一頁并打印頁表情況;如果該頁不足主存且頁表已滿,則按 FIFO頁面淘汰算法淘汰一頁后調(diào)入所需的頁,打印頁表情況; 逐個地址訪問,直到所有地址訪問完畢。5. 存儲管理算法的流程圖如圖5所示:6. 根據(jù)圖5編寫并運行程序,程序運行界面如圖6所示。【注意事項】 頁面尺寸的指定

15、;如何選擇合適的頁面淘汰算法以保證較低的缺頁率?!舅伎碱}】各種不同的頁面淘汰算法有哪些優(yōu)缺點?為什么會產(chǎn)生頁面抖動?什么是belady現(xiàn)象?這種現(xiàn)象該如何避免?圖5 動態(tài)頁式存儲管理的流程圖圖6 采用先進先出淘汰算法的動態(tài)頁式存儲管理運行界面任務(wù)四 設(shè)備管理【實訓(xùn)目的】掌握獨占設(shè)備的使用方式,以及設(shè)備的分配和回收;掌握用死鎖避免方法來處理申請獨占設(shè)備可能造成的死鎖?!緦嵱?xùn)內(nèi)容】用死鎖避免方法來處理申請獨占設(shè)備可能造成的死鎖,程序?qū)崿F(xiàn)對銀行家算法的模擬。【預(yù)習(xí)要求】設(shè)備的分類;獨占設(shè)備的分配與回收;處理死鎖的方法?!緦嵱?xùn)步驟】1. 設(shè)計銀行家算法的數(shù)據(jù)結(jié)構(gòu):假設(shè)有M個進程N類資源,則有如下數(shù)據(jù)結(jié)

16、構(gòu):MAXM*N M個進程對N類資源的最大需求量AVAILABLEN 系統(tǒng)可用資源數(shù)ALLOCATIONM*N M個進程已經(jīng)得到N類資源的資源量NEEDM*N M個進程還需要N類資源的資源量2. 分析銀行家算法的實現(xiàn)過程,流程圖如下圖7所示:圖7 銀行算法的實現(xiàn)流程3. 根據(jù)流程圖編寫程序,部分源代碼如下所示:#include string.h#include #include #define M 5#define N 3#define FALSE 0#define TRUE 1/*M個進程對N類資源最大資源需求量*/int MAXMN=7,5,3,3,2,2,9,0,2,2,2,2,4,3,

17、3;/*系統(tǒng)可用資源數(shù)*/int AVAILABLEN=10,5,7;/*M個進程對N類資源最大資源需求量*/int ALLOCATIONMN=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0;/*M個進程已經(jīng)得到N類資源的資源量 */int NEEDMN=7,5,3,3,2,2,9,0,2,2,2,2,4,3,3;/*M個進程還需要N類資源的資源量*/int RequestN=0,0,0;/初始化需要申請的資源數(shù)目void YinHangJia()/銀行家算法的實現(xiàn)int i=0,j=0;char flag=Y;void showdata();void changdata(int)

18、;void rstordata(int);int chkerr(int);showdata();while(flag=Y|flag=y)i=-1;while(i=M)printf(請輸入需申請資源的進程號(從0到);printf(%d,M-1);printf(,否則重輸入!):);scanf(%d,&i);if(i=M)printf(輸入的進程號不存在,重新輸入!n);printf(請輸入進程);printf(%d,i);printf(申請的資源數(shù)n);for (j=0;jNEEDij)/第一步判斷申請的資源數(shù)是否大于需要的資源數(shù)printf(進程);printf(%d,i);printf(申

19、請的資源數(shù)大于進程);printf(%d,i);printf(還需要);printf(%d,j);printf(類資源的資源量!申請不合理,出錯!請重新選擇!n);flag=N;break;elseif(RequestjAVAILABLEj)/第二步判斷申請的資源數(shù)是否大于可用資源數(shù)printf(進程);printf(%d,i);printf(申請的資源數(shù)大于系統(tǒng)可用);printf(%d,j);printf(類資源的資源量!申請不合理,出錯!請重新選擇!n);flag=N;break;if(flag=Y|flag=y)changdata(i);if(chkerr(i)rstordata(i)

20、;showdata();elseshowdata();elseshowdata();printf(n);scanf(%c,&flag);void showdata()int i,j;printf(系統(tǒng)可用的資源數(shù)為:n);printf( );for (j=0;jN;j+)printf( 資源);printf(%d,j);printf(:);printf(%d,AVAILABLEj);printf(n);printf(各進程還需要的資源量:n);for (i=0;iM;i+)printf( 進程);printf(%d,i);printf(:);for (j=0;jN;j+)printf(資源);

21、printf(%d,j);printf(:);printf(%d,NEEDij);printf(n);printf(各進程已經(jīng)得到的資源量: n);for (i=0;iM;i+)printf( 進程);printf(%d,i);/*printf(:n);*/for (j=0;jN;j+)printf(資源);printf(%d,j);printf(:);printf(%d,ALLOCATIONij);printf(n);void changdata(int k)int j;for (j=0;jN;j+)/修改數(shù)據(jù)結(jié)構(gòu)的值A(chǔ)VAILABLEj=AVAILABLEj-Requestj;ALLOCA

22、TIONkj=ALLOCATIONkj+Requestj;NEEDkj=NEEDkj-Requestj;void rstordata(int k)int j;for (j=0;jN;j+)/修改數(shù)據(jù)結(jié)構(gòu)的值A(chǔ)VAILABLEj=AVAILABLEj+Requestj;ALLOCATIONkj=ALLOCATIONkj-Requestj;NEEDkj=NEEDkj+Requestj;int chkerr(int s)int WORK,FINISHM,tempM;int i,j,k=0;for(i=0;iM;i+)FINISHi=FALSE;for(j=0;jN;j+)/用安全性檢查算法判斷系統(tǒng)是

23、否安全(即是否為true)WORK=AVAILABLEj;i=s;while(iM)if (FINISHi=FALSE&NEEDij=WORK)WORK=WORK+ALLOCATIONij;FINISHi=TRUE;tempk=i;k+;i=0;elsei+;for(i=0;iM;i+)if(FINISHi=FALSE)printf(n);printf(系統(tǒng)不安全! 本次資源申請不成功!n);printf(n);return 1;printf(n);printf(經(jīng)安全性檢查,系統(tǒng)安全,本次分配成功。n);printf(n);printf( 本次安全序列:);for(i=0;i);printf

24、(n);return 0;4. 測試并運行程序,運行界面如圖8所示:圖8銀行家算法運行界面【注意事項】 獨占設(shè)備的分配方式。【思考題】如果產(chǎn)生了死鎖,應(yīng)如何解除?任務(wù)五 文件管理【實訓(xùn)目的】掌握文件的存取方法;掌握文件的邏輯結(jié)構(gòu)和物理結(jié)構(gòu);掌握存儲空間的分配和回收;掌握磁盤管理與調(diào)度。【實訓(xùn)內(nèi)容】用程序模擬磁盤的調(diào)度過程,并計算各磁盤調(diào)度算法包括先來先服務(wù)算法、最短尋道時間優(yōu)先算法、掃描算法和循環(huán)掃描算法的平均尋道長度?!绢A(yù)習(xí)要求】文件的邏輯結(jié)構(gòu)和物理結(jié)構(gòu);常用的磁盤調(diào)度算法?!緦嵱?xùn)步驟】1. 分析常用的磁盤調(diào)度算法,熟悉其基本原理。2. 自行設(shè)定起始掃描磁道號及最大磁道號數(shù),程序根據(jù)設(shè)定值隨

25、機產(chǎn)生n個磁道號進行模擬(n也可自行設(shè)定);3. 編寫程序?qū)崿F(xiàn)磁盤調(diào)度算法,并顯示該算法尋道順序并計算出尋道總數(shù)和平均尋道數(shù);對各種算法的優(yōu)劣進行比較,得出比較結(jié)果。部分源代碼如下所示:#include stdio.h#include stdlib.hvoid CopyL(int Sour,int Dist ,int x); /數(shù)組Sour復(fù)制到數(shù)組Dist,復(fù)制到x個數(shù)void SetDI(int DiscL); /隨機生成磁道數(shù) void Print(int Pri,int x); /打印輸出數(shù)組Privoid DelInq(int Sour,int x,int y); /數(shù)組Sour把x

26、位置的數(shù)刪除,并把y前面的數(shù)向前移動,y后的數(shù)保持不變(即會出現(xiàn)2個y)void FCFS(int Han,int DiscL); /先來先服務(wù)算法(FCFS)void SSTF(int Han,int DiscL); /最短尋道時間優(yōu)先算法(SSTF)int SCAN(int Han,int DiscL,int x,int y); /掃描算法(SCAN)void CSCAN(int Han,int DiscL); /循環(huán)掃描算法(CSCAN)void N_Step_SCAN(int Han1,int DiscL); /N步掃描算法void PaiXu(); /尋道長度由低到高排序void P

27、ri();int NAll=0;int Best52; /用作尋道長度由低到高排序時存放的數(shù)組 int Limit=0; /輸入尋找的范圍磁道數(shù)iint Jage;float Aver=0;int fa5()int i;int DiscLine10; /聲明準備要生成的隨機磁道號的數(shù)組int Hand; /磁道數(shù)int Con=1;int n;while(Con=1) Jage=0; printf(n 請輸入初始的磁道數(shù)(0n65536) printf(超出范圍!); else printf(“ n); printf(“ 操作系統(tǒng)課程設(shè)計 n);printf(“ 磁盤調(diào)度算法 n);print

28、f(“ n);printf(“ n);printf( 1.先來先服務(wù)算法(FCFS) n);printf(“ n);printf(“ 2.最短尋道時間優(yōu)先算法(SSTF) n);printf(“ n);printf(“ 3.掃描算法(SCAN) n);printf(“ n);printf(“ 4.循環(huán)掃描算法(CSCAN) n);printf(“ n);printf(“ 5.N步掃描算法(NStepScan) n);printf(“ n);printf(“ 6.各類算法的比較 n);printf(“ n);printf(“ n);printf(“ n);printf(“ 請輸入你的選擇的算法(

29、輸入0離開) n);printf(“ n);scanf(%d,&n);if(n=0) exit(0);printf(n);switch(n)case 1: SetDI(DiscLine); /隨機生成磁道數(shù) FCFS(Hand,DiscLine); /先來先服務(wù)算法(FCFS) break;case 2: SetDI(DiscLine); /隨機生成磁道數(shù) SSTF(Hand,DiscLine); /最短尋道時間優(yōu)先算法(SSTF) break;case 3: SetDI(DiscLine); /隨機生成磁道數(shù) SCAN(Hand,DiscLine,0,9); /掃描算法(SCAN) brea

30、k;case 4: SetDI(DiscLine); /隨機生成磁道數(shù) CSCAN(Hand,DiscLine); /循環(huán)掃描算法(CSCAN) break;case 5: SetDI(DiscLine); /隨機生成磁道數(shù)N_Step_SCAN(Hand,DiscLine); /N步掃描算法(NStepScan) break;case 6: SetDI(DiscLine); /隨機生成磁道數(shù) FCFS(Hand,DiscLine); /先來先服務(wù)算法(FCFS) SSTF(Hand,DiscLine); /最短尋道時間優(yōu)先算法(SSTF) SCAN(Hand,DiscLine,0,9); /

31、掃描算法(SCAN) CSCAN(Hand,DiscLine); /循環(huán)掃描算法(CSCAN) N_Step_SCAN(Hand,DiscLine); /N步掃描算法(NStepScan) PaiXu(); /尋道長度由低到高排序 printf(nn+ 尋道長度由低到高排序:); for(i=0;i5;i+) printf(%4d ,Besti0); break; printf(nn+ 是否繼續(xù)(按0結(jié)束,按1繼續(xù))?); scanf(%5d,&Con); /數(shù)組Sour復(fù)制到數(shù)組Dist,復(fù)制到x個數(shù)void CopyL(int Sour,int Dist ,int x)int i;for(

32、i=0;i=x;i+) Disti=Souri;/打印輸出數(shù)組Privoid Print(int Pri,int x)int i;for(i=0;i=x;i+) printf(%5d,Prii);/隨機生成磁道數(shù)void SetDI(int DiscL)int i;for(i=0;i=9;i+) DiscLi=rand()%Limit;/隨機生成10個磁道號printf(+ 需要尋找的磁道號:);Print(DiscL,9); /輸出隨機生成的磁道號printf(n);/數(shù)組Sour把x位置的數(shù)刪除,并把y前面的數(shù)向前移動,y后的數(shù)保持不變(即會出現(xiàn)2個y) void DelInq(int S

33、our,int x,int y)int i;for(i=x;iy;i+) Souri=Souri+1; x+;/先來先服務(wù)算法(FCFS)void FCFS(int Han,int DiscL)int RLine10; /將隨機生成的磁道數(shù)數(shù)組Discl復(fù)制給數(shù)組RLineint i,k,All,Temp; /Temp是計算移動的磁道距離的臨時變量All=0; /統(tǒng)計全部的磁道數(shù)變量k=9; /限定10個的磁道數(shù)CopyL(DiscL,RLine,9); /復(fù)制磁道號到臨時數(shù)組RLine printf(n+ 按照FCFS算法磁道的訪問順序為:);All=Han-RLine0;for(i=0;i

34、=9;i+) Temp=RLine0-RLine1;/求出移動磁道數(shù),前一個磁道數(shù)減去后一個磁道數(shù)得出臨時的移動距離 if(Temp0) Temp=(-Temp);/移動磁道數(shù)為負數(shù)時,算出相反數(shù)作為移動磁道數(shù) printf(%5d,RLine0); All=Temp+All;/求全部磁道數(shù)的總和 DelInq(RLine,0,k);/每個磁道數(shù)向前移動一位 k-;BestJage1=All;/Best1存放移動磁道數(shù) BestJage0=1; /Best0存放算法的序號為:1 Jage+;/排序的序號加1Aver=(float) All)/10;/求平均尋道次數(shù) printf(n+ 移動磁道

35、數(shù): ,All);printf(n+ 平均尋道長度:*%0.2f* ,Aver);/最短尋道時間優(yōu)先算法(SSTF)void SSTF(int Han,int DiscL)int i,j,k,h,All;int Temp; /Temp是計算移動的磁道距離的臨時變量int RLine10; /將隨機生成的磁道數(shù)數(shù)組Discl復(fù)制給數(shù)組RLineint Min;All=0; /統(tǒng)計全部的磁道數(shù)變量k=9; /限定10個的磁道數(shù)CopyL(DiscL,RLine,9); /復(fù)制磁道號到臨時數(shù)組RLine printf(n+ 按照SSTF算法磁道的訪問順序為:);for(i=0;i=9;i+) Min

36、=64000; for(j=0;jHan) /如果第一個隨機生成的磁道號大于當(dāng)前的磁道號,執(zhí)行下一句 Temp=RLinej-Han; /求出臨時的移動距離 else Temp=Han-RLinej; /求出臨時的移動距離 if(TempMin) /如果每求出一次的移動距離小于Min,執(zhí)行下一句 Min=Temp; /Temp臨時值賦予Min h=j; /把最近當(dāng)前磁道號的數(shù)組下標賦予h All=All+Min; /統(tǒng)計一共移動的距離 printf(%5d,RLineh); Han=RLineh; DelInq(RLine,h,k); /每個磁道數(shù)向前移動一位 k-;BestJage1=All

37、;/Best1存放移動磁道數(shù) BestJage0=2;/Best0存放算法的序號為:2Jage+;/排序序號加1Aver=(float)All)/10;/求平均尋道次數(shù) printf(n+ 移動磁道數(shù): ,All);printf(n+ 平均尋道長度:*%0.2f* ,Aver);/掃描算法(SCAN)int SCAN(int Han,int DiscL,int x,int y) int j,n,k,h,m,All;int t=0;int Temp;int Min;int RLine10; /將隨機生成的磁道數(shù)數(shù)組Discl復(fù)制給數(shù)組RLine int Order;Order=1;k=y;m=2

38、; /控制while語句的執(zhí)行,即是一定要使當(dāng)前磁道向內(nèi)向外都要掃描到All=0; /統(tǒng)計全部的磁道數(shù)變量CopyL(DiscL,RLine,9); /復(fù)制磁道號到臨時數(shù)組RLine printf(n+ 按照SCAN算法磁道的訪問順序為:);Min=64000;for(j=x;jHan) /如果第一個隨機生成的磁道號大于當(dāng)前的磁道號,執(zhí)行下一句 Temp=RLinej-Han; /求出臨時的移動距離 else Temp=Han-RLinej; /求出臨時的移動距離 if(Temp=Han) /判斷磁道的移動方向,即是由里向外還是由外向里 Order=0; t=1;Han=RLineh;DelI

39、nq(RLine,h,k); /每個磁道數(shù)向前移動一位k-;while(m0) if(Order=1) /order是判斷磁盤掃描的方向標簽,order是1的話,磁道向內(nèi)移動 for(j=x;j=y;j+) h=-1; Min=64000; for(n=x;n=k;n+) /判斷離當(dāng)前磁道最近的磁道號 if(RLinen=Han) Temp=Han-RLinen; if(TempMin) Min=Temp; /Temp臨時值賦予Min h=n; /把最近當(dāng)前磁道號的數(shù)組下標賦予h if(h!=-1) All=All+Min; /疊加移動距離 printf(%5d,RLineh); Han=RL

40、ineh; /最近的磁道號作為當(dāng)前磁道 DelInq(RLine,h,k); k-; Order=0; /當(dāng)完成向內(nèi)的移動,order賦予0,執(zhí)行else語句,使磁道向外移動 m-; /向內(nèi)完成一次,m減一次,保證while循環(huán)執(zhí)行兩次 else /order是0的話,磁道向外移動 for(j=x;j=y;j+) h=-1; Min=64000; for(n=x;n=Han) Temp=RLinen-Han; if(Temp5) BestJage1=All;/Best1存放移動磁道數(shù) BestJage0=3;/Best0存放算法的序號為:3 Jage+;/排序序號加1 Aver=(float)

41、All)/10;/求平均尋道次數(shù) printf(n+ 移動磁道數(shù): ,All); printf(n+ 平均尋道長度:*%0.2f* ,Aver);if(t=1) printf(n+ 磁道由內(nèi)向外移動);else printf(n+ 磁道由外向內(nèi)移動);return(Han);/循環(huán)掃描算法(CSCAN)void CSCAN(int Han,int DiscL)int j,h,n,Temp,m,k,All,Last,i;int RLine10; /將隨機生成的磁道數(shù)數(shù)組Discl復(fù)制給數(shù)組RLine int Min;int tmp=0;m=2;k=9;All=0; /統(tǒng)計全部的磁道數(shù)變量Last

42、=Han;CopyL(DiscL,RLine,9); /復(fù)制磁道號到臨時數(shù)組RLine printf(n+ 按照CSCAN算法磁道的訪問順序為:);while(k=0) for(j=0;j=9;j+) /從當(dāng)前磁道號開始,由內(nèi)向外搜索離當(dāng)前磁道最近的磁道號 h=-1; Min=64000; for(n=0;n=Han) Temp=RLinen-Han; if(Temp=0) tmp=RLine0; for(i=0;iRLinei) tmp=RLinei; Han=tmp;/把最小的磁道號賦給Han Temp=Last-tmp;/求出最大磁道號和最小磁道號的距離差 All=All+Temp; BestJage1=All;/Best1存放移動磁道數(shù) BestJage0=4;/Best0存放算法的序號為:4Jage+;/排序序號加1Aver=(float)All)/10;/求平均尋道次數(shù) printf(n+ 移動磁道數(shù): ,All);printf(n+ 平均尋道長度:*%0.2f* ,Aver);/

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論