操作系統(tǒng)實(shí)驗(yàn)指導(dǎo)九(獨(dú)占設(shè)備的分配和回收模擬)_第1頁(yè)
操作系統(tǒng)實(shí)驗(yàn)指導(dǎo)九(獨(dú)占設(shè)備的分配和回收模擬)_第2頁(yè)
操作系統(tǒng)實(shí)驗(yàn)指導(dǎo)九(獨(dú)占設(shè)備的分配和回收模擬)_第3頁(yè)
操作系統(tǒng)實(shí)驗(yàn)指導(dǎo)九(獨(dú)占設(shè)備的分配和回收模擬)_第4頁(yè)
操作系統(tǒng)實(shí)驗(yàn)指導(dǎo)九(獨(dú)占設(shè)備的分配和回收模擬)_第5頁(yè)
已閱讀5頁(yè),還剩13頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、實(shí)驗(yàn)九 獨(dú)占設(shè)備的分配和回收模擬(綜合性編程實(shí)驗(yàn)4學(xué)時(shí))(本次作業(yè)要交,交作業(yè)時(shí)間:第15周上機(jī)課前)一.目的要求通過(guò)模擬獨(dú)占設(shè)備的分配和回收,了解操作系統(tǒng)對(duì)設(shè)備資源組織管理和分 配、回收過(guò)程,掌握設(shè)備管理的思想。二.實(shí)驗(yàn)任務(wù)編程模擬滿(mǎn)足設(shè)備獨(dú)立性的獨(dú)占設(shè)備的分配和回收。三.實(shí)驗(yàn)環(huán)境、設(shè)備硬件:586以上的PC系列機(jī),主頻大于166M,內(nèi)存大于16MB,硬盤(pán)空閑空 間大于500MBo軟件:選擇一個(gè)自己熟悉的計(jì)算機(jī)操作系統(tǒng)(如DOS、Windows98 / 2000 / XP、UNIX、linux等,根據(jù)各學(xué)校的條件與環(huán)境而定)和程序設(shè)計(jì)語(yǔ)言(如Turbo C、C語(yǔ)言、PASCAL語(yǔ)言等)。編程

2、語(yǔ)言由各位同學(xué)自己選擇確定,不做統(tǒng)一規(guī)定。四.實(shí)驗(yàn)指導(dǎo)(一)數(shù)據(jù)結(jié)構(gòu)及算法操作系統(tǒng)設(shè)置“設(shè)備分配表“,用來(lái)記錄計(jì)算機(jī)系統(tǒng)所配置的獨(dú)占設(shè)備類(lèi)型、 臺(tái)數(shù)以及分配情況等。為了實(shí)現(xiàn)設(shè)備分配的獨(dú)立性,一般設(shè)備分配表可以由'設(shè) 備類(lèi)表”和“設(shè)備表”兩部分組成。設(shè)備類(lèi)表記錄系統(tǒng)中的各類(lèi)設(shè)備,每類(lèi)設(shè)備占用一個(gè)登記欄,登記該類(lèi)設(shè)備 的總臺(tái)數(shù)、當(dāng)前有幾臺(tái)設(shè)備空閑以及該類(lèi)設(shè)備在設(shè)備表中的起始地址。每一臺(tái)設(shè) 備在“設(shè)備表”中占用一個(gè)登記項(xiàng),同類(lèi)的若干臺(tái)設(shè)備連續(xù)登記在設(shè)備表中。設(shè)備 表中登記每一臺(tái)設(shè)備的絕對(duì)號(hào)、設(shè)備的好壞情況、設(shè)備是否分配、設(shè)備被哪一個(gè) 作業(yè)占用和設(shè)備相對(duì)號(hào)。設(shè)備類(lèi)表設(shè)備類(lèi)擁有設(shè)備臺(tái)數(shù)現(xiàn)存好的設(shè)

3、備設(shè)備表相對(duì)地址輸入機(jī)220打印機(jī)332磁盤(pán)445磁帶機(jī)II9設(shè)備表絕對(duì)號(hào)好/壞已/未分配占月作業(yè)名相對(duì)號(hào)1好未分配2好未分配3好未分配4好未分配5好未分配6好未分配7好未分配8好未分配9好未分配10好未分配在設(shè)備表中,用“1”表示設(shè)備好,用“0”表示設(shè)備壞;用“1”表示設(shè)備已分配, 用“0”表示設(shè)備未分配。設(shè)備類(lèi)表的數(shù)據(jù)結(jié)構(gòu)定義如下:#define n 4structchar type 4; /*設(shè)備類(lèi)名*/int count; /*擁有設(shè)備臺(tái)數(shù)*/int remain; /*某類(lèi)設(shè)備現(xiàn)存可用的臺(tái)數(shù)*/int address; /*該類(lèi)設(shè)備在設(shè)備表中的起始地址*/equiptypen/*設(shè)備

4、類(lèi)表定義,假定系統(tǒng)有n個(gè)設(shè)備類(lèi)型*/設(shè)備表的數(shù)據(jù)結(jié)構(gòu)定義如下:#define m 10structInt number; /*設(shè)備絕對(duì)號(hào)*/int status; /*設(shè)備好環(huán)狀態(tài),表示設(shè)備壞;用“ 1”表示設(shè)備好*/int remain; /*設(shè)備是否已分配,用“ 1”介表示已分配,用“。”表示末分配 */char jobname 4; /*占有設(shè)備的作業(yè)名*/int inumber; /*設(shè)備相對(duì)號(hào)*/equipment m /*設(shè)備表定義,假定系統(tǒng)有m個(gè)設(shè)備*/當(dāng)作業(yè)申請(qǐng)某類(lèi)設(shè)備時(shí),系統(tǒng)先查“設(shè)備類(lèi)表”,如果該設(shè)備的現(xiàn)存臺(tái)數(shù)可以 滿(mǎn)足申請(qǐng)要求,則從“設(shè)各類(lèi)表”中得到該類(lèi)設(shè)備的設(shè)備表起始地

5、址,然后找到“設(shè) 備表”中該類(lèi)設(shè)備的起始地址,依次查詢(xún)?cè)擃?lèi)設(shè)備的每一個(gè)登記項(xiàng),找出“好的且 末分配”的設(shè)備分配給該作業(yè).分配后要修改設(shè)備類(lèi)表中的現(xiàn)存臺(tái)數(shù),把分配給該 作業(yè)的設(shè)備狀態(tài)改為“已分配”,且填.上占用該設(shè)備的作業(yè)的作業(yè)名和程序中定義 的相對(duì)號(hào),最后,把設(shè)備的絕對(duì)號(hào)與相對(duì)號(hào)的對(duì)應(yīng)關(guān)系通知用戶(hù).當(dāng)作業(yè)運(yùn)行完回收設(shè)備時(shí),首先要查設(shè)備表,比較每一項(xiàng),找到占用作業(yè)名 與運(yùn)行完作業(yè)的作業(yè)名的一欄,將這一欄的“已/未分配”置為“未分配”.然后將設(shè)備表中對(duì)應(yīng)設(shè)備類(lèi)的“現(xiàn)存臺(tái)數(shù)”增L實(shí)驗(yàn)中,首先要建立“設(shè)備類(lèi)表''和“設(shè)備表”,假設(shè)系統(tǒng)的模擬設(shè)備如下表:設(shè)備類(lèi)表設(shè)備類(lèi)擁有設(shè)備臺(tái)數(shù)現(xiàn)存好的

6、設(shè)備設(shè)備表相對(duì)地址輸入機(jī)220打印機(jī)332磁盤(pán)445磁帶機(jī)119設(shè)備表絕對(duì)號(hào)好/壞已/未分配占用作業(yè)名相對(duì)號(hào)0好未分配1好未分配2好未分配3好未分配4好未分配5好未分配6好未分配7好未分配8好未分配9好未分配分配設(shè)備要求輸入作業(yè)名、設(shè)備類(lèi)名和相對(duì)號(hào),回收設(shè)備要求輸入作業(yè)名和 設(shè)備類(lèi)名。(3)測(cè)試(運(yùn)行時(shí)屏幕顯示,紅色字表示從鍵盤(pán)輸入)0一退出,1 一分配,2一回收,3顯示選擇功能項(xiàng)(03): 3輸出設(shè)備類(lèi)表:設(shè)備類(lèi)型 設(shè)備總量空閑好設(shè)備input22printer33disk44tape11輸出設(shè)備表:占用作業(yè)名相對(duì)號(hào)絕對(duì)號(hào)好/壞 已/未分配01021003100410051006100710

7、081009100一退出,1 一分配,2一回收,3一顯示選擇功能項(xiàng)(0-3): 10輸人作業(yè)名、作業(yè)所需設(shè)備類(lèi)和設(shè)備相對(duì)號(hào)JIddd 2無(wú)該類(lèi)設(shè)備,設(shè)備分配失敗0一退出,1一分配,2一回收,3顯示選擇功能項(xiàng)(0-3): 1輸人作業(yè)名、作業(yè)所需設(shè)各類(lèi)和設(shè)備相對(duì)號(hào)JI input 1分配成功0-退出,1一分配,2一回收,3一顯示選擇功能項(xiàng)(0-3): 1輸入作業(yè)名、作業(yè)所需設(shè)備類(lèi)和設(shè)備相對(duì)號(hào)J2 input 3分圍成功0一退出,1 一分配,2一回收,3一顯示選擇功能項(xiàng)(0-3): 1輸人作業(yè)名、作業(yè)所需設(shè)各類(lèi)和設(shè)備相對(duì)號(hào)JI input 2 該類(lèi)設(shè)備不足,分配失敗0一退出,1 一分配,2一回收,3

8、一顯示選擇功能項(xiàng)(0-3): 1輸入作業(yè)名、作業(yè)所需設(shè)備類(lèi)和設(shè)備相對(duì)號(hào)JI Printer 1 分配成功0一退出,1 一分配,2一回收,3一顯示選擇功能項(xiàng)(03): 1輸入作業(yè)名、作業(yè)所需設(shè)備類(lèi)和設(shè)備相對(duì)號(hào)JI Printer 2 分配成功0一退出,1 一分配,2一回收,3顯示選擇功能項(xiàng)(0-3): 1輸入作業(yè)名、作業(yè)所需設(shè)備類(lèi)和設(shè)備相對(duì)號(hào)J4 disk 1 分配成功0一退出,1 一分配,2一回收,3一顯示選擇功能項(xiàng)(03): 3輸出設(shè)備類(lèi)表:設(shè)備類(lèi)型設(shè)備總量空閑好設(shè)備input20printer31disk43tape11輸出設(shè)備表:絕對(duì)號(hào)好/壞已/未分配占用作業(yè)名相對(duì)號(hào)011J11111J

9、23211J11311J124100511J4161007100810091000一退出,1 一分配,2一回收,3一顯示選擇功能項(xiàng)(0-3): 2輸入作業(yè)名和作業(yè)歸還的設(shè)備類(lèi)JI disk 該作業(yè)沒(méi)有使用該類(lèi)設(shè)備0一退出,1 一分配,2一回收,3顯示選擇功能項(xiàng)(0-3): 2輸入作業(yè)名和作業(yè)歸還的設(shè)備類(lèi)JI ddf 無(wú)該類(lèi)設(shè)備,設(shè)備回收失敗0一退出,1 一分配,2一回收,3一顯示選擇功能項(xiàng)(0-3): 2輸人作業(yè)名和作業(yè)歸還的設(shè)備類(lèi)JI printer 回收成功0一退出,1分配,2回收,3顯示選擇功能項(xiàng)(0-3): 2輸人作業(yè)名和作業(yè)歸還的設(shè)備類(lèi)JI input回收成功0退出,回一分配,2一回

10、收,3一顯示選擇功能項(xiàng)(0-3): 2輸人作業(yè)名和作業(yè)歸還的設(shè)備類(lèi)M disk 回收成功0一退出,1 一分配,2一回收,3一顯示選擇功能項(xiàng)(0-3): 3輸出設(shè)備類(lèi)表:設(shè)備類(lèi)型設(shè)備總量空閑好設(shè)備input21printer32disk44tape11輸出設(shè)備表:絕對(duì)號(hào) 好/壞已/未分配占用作業(yè)名相對(duì)號(hào)010J111 11J23210J11311J124100510J41610071000一退出,1 一分配,2一回收,3一顯示選擇功能項(xiàng)S3): 0五.實(shí)驗(yàn)源代碼#include<stdio.h>#include<string.h>#include<stdlib.h&

11、gt;#define false 0#define true 1#define n 4#define m 10struct/*設(shè)備類(lèi)名7擁有設(shè)備臺(tái)/*現(xiàn)存的可用/*該類(lèi)設(shè)備在 char type10;int count;數(shù)7int remain;設(shè)備臺(tái)數(shù)*/int address;設(shè)備表中的起始地址*/) equiptypen;/*設(shè)備絕對(duì)號(hào)*/*設(shè)備好壞狀態(tài)/*設(shè)備是否已/*占有設(shè)備的/*設(shè)備相對(duì)號(hào)7設(shè)備表定義,/設(shè)備類(lèi)表定義,假定系統(tǒng)有n個(gè)設(shè)備類(lèi)型/struct(int number;int status;*/int remain;分配*/char jobname4;作業(yè)名7int Inu

12、mber;)equipmentm;假定系統(tǒng)有m個(gè)設(shè)備/allocate(char *J,char *type,int cc)int/*查詢(xún)?cè)擃?lèi)設(shè)備7i=0;while(i<n&&strcmp(equiptypei.type,type)!=O)i+;if(i>=n)/* 沒(méi)有找到該類(lèi)設(shè)備7(printf("無(wú)該類(lèi)設(shè)備,設(shè)備分配失敗巧;return(false);)if(equiptypei.remain<1)/*所需設(shè)備現(xiàn)存可用臺(tái)數(shù)不足7(printf("該類(lèi)設(shè)備不足,分配失敗!”);return(false);)t=equiptypei.a

13、ddress;/*取出該類(lèi)設(shè)備在設(shè)備表中的起始地址,/while(!(equipmentt.status=1 && equipmentt.remain=O)t+;/*填寫(xiě)作業(yè)名、相對(duì)號(hào),狀態(tài)改為已分配/equiptypei.remain-;equipmentt.remain=1;strcpy(equipmentt.jobname,J);equipmentt.lnumber=cc;)/*設(shè)備分配函數(shù)結(jié)束*/reclaim(char *J,char *type)int i,t,j,k,nn;i=0;while(i<n&&strcmp(equiptypei.ty

14、pe,type)!=O)i+;if(i>=n)沒(méi)有找到該類(lèi)設(shè)備7(printf("無(wú)該類(lèi)設(shè)備,設(shè)備回收失敗!)retum(false);/取出該類(lèi)t=equiptypei.address;設(shè)備在設(shè)備表中的起始地址/j=equiptypei.count;/* 取出該類(lèi)設(shè)備的數(shù)量*/k=0;nn=t+j;for(;t<nn;t+)if(strcmp(equipmentt jobname, J)=0&&equipmentt.remain=1)(equipmentt.remain=O;k+;)equiptypei.remain= equiptypei.remain

15、+k;if(k=O)printf(nThe jop havenft use this kind of equitmenttype!/nH);)/*設(shè)備回收函數(shù)結(jié)束*/void main()char J4;char type10;printf("設(shè)備類(lèi)初始化:(請(qǐng)輸入相應(yīng)設(shè)備的數(shù)量,當(dāng)前空閑設(shè)備數(shù)量,設(shè)備表起始地址八n ”);for(i=0;i<4;i+)設(shè)備類(lèi)表初始化:*/printf("請(qǐng)輸入相應(yīng)設(shè)備名稱(chēng):”);scanf("%s",&equiptypei.type);printf(”請(qǐng)輸入相應(yīng)設(shè)備的數(shù)量:");scanf(&q

16、uot;%d",&equiptypei.count);printf(”請(qǐng)輸入當(dāng)前空閑設(shè)備數(shù)量:scanf("%d",&equiptypei.remain);printf("請(qǐng)輸入設(shè)備表起始地址:");scanf("%d",&equiptypei.address);for(i=0;i<10;i+)/* 設(shè)備表初始化:*/(equipment。.number二i;equipmenti.status=1;equipmenti.remain=O;while(1)printf”nO 退出,1 分配2回收,

17、3 顯示”);printf("n 選擇功能項(xiàng)。3):");scanf(',%d',&a);switch(a)(case 0 :/*a=0程序結(jié)束7exit(O);case 1 :/*a=1分配設(shè)備”/printf("輸入作業(yè)名、作業(yè)所需設(shè)備類(lèi)和設(shè)備相對(duì)號(hào)n”);scanf("%s%s%d"JJ,type,&mm);allocated,type,mm);/* 分配設(shè)備/break;case 2/*a=2回收設(shè)備7printf("輸入作業(yè)名和作業(yè)歸還的設(shè)備類(lèi)n");scanf("%s%sM,J,type);輸入要回收的作業(yè)名及對(duì)應(yīng)的設(shè)備類(lèi)*/設(shè)備/reclaim(J,type);/回收break;3:case/七二3輸出設(shè)備類(lèi)表和設(shè)備表的內(nèi)容7printf(“輸出設(shè)備類(lèi)表!n");/輸出設(shè)備類(lèi)表內(nèi))phntf(n設(shè)備類(lèi)型設(shè)備總量空閑好設(shè)備n“);for(i=0;i<n;i+)printf(,%9s%16d%22d%14dn,t,equipty

溫馨提示

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

評(píng)論

0/150

提交評(píng)論