實(shí)驗(yàn)五(獨(dú)占設(shè)備的分配和回收模擬)_第1頁(yè)
實(shí)驗(yàn)五(獨(dú)占設(shè)備的分配和回收模擬)_第2頁(yè)
實(shí)驗(yàn)五(獨(dú)占設(shè)備的分配和回收模擬)_第3頁(yè)
實(shí)驗(yàn)五(獨(dú)占設(shè)備的分配和回收模擬)_第4頁(yè)
實(shí)驗(yàn)五(獨(dú)占設(shè)備的分配和回收模擬)_第5頁(yè)
已閱讀5頁(yè),還剩5頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上實(shí)驗(yàn)五獨(dú)占設(shè)備的分配和回收模擬一. 目的要求通過(guò)模擬獨(dú)占設(shè)備的分配和回收,了解操作系統(tǒng)對(duì)設(shè)備資源組織管理和分配、回收過(guò)程,掌握設(shè)備管理的思想。二實(shí)驗(yàn)任務(wù)編程模擬滿足設(shè)備獨(dú)立性的獨(dú)占設(shè)備的分配和回收。三實(shí)驗(yàn)環(huán)境、設(shè)備vc+ 6.0 pc機(jī)四.實(shí)驗(yàn)指導(dǎo)(一)數(shù)據(jù)結(jié)構(gòu)及算法 操作系統(tǒng)設(shè)置“設(shè)備分配表”,用來(lái)記錄計(jì)算機(jī)系統(tǒng)所配置的獨(dú)占設(shè)備類型、臺(tái)數(shù)以及分配情況等。為了實(shí)現(xiàn)設(shè)備分配的獨(dú)立性,一般設(shè)備分配表可以由“設(shè)備類表”和“設(shè)備表”兩部分組成。設(shè)備類表記錄系統(tǒng)中的各類設(shè)備,每類設(shè)備占用一個(gè)登記欄,登記該類設(shè)備的總臺(tái)數(shù)、當(dāng)前有幾臺(tái)設(shè)備空閑以及該類設(shè)備在設(shè)備表中的起始地址。每一臺(tái)

2、設(shè)備在“設(shè)備表”中占用一個(gè)登記項(xiàng),同類的若干臺(tái)設(shè)備連續(xù)登記在設(shè)備表中。設(shè)備表中登記每一臺(tái)設(shè)備的絕對(duì)號(hào)(物理設(shè)備名)、設(shè)備的好壞情況、設(shè)備是否分配、設(shè)備被哪一個(gè)作業(yè)占用和設(shè)備相對(duì)號(hào)(邏輯設(shè)備名)。設(shè)備類表設(shè)備類擁有設(shè)備臺(tái)數(shù)現(xiàn)存好的設(shè)備設(shè)備表相對(duì)地址輸入機(jī)220打印機(jī)332磁盤445磁帶機(jī)119設(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è)備類表的數(shù)據(jù)結(jié)構(gòu)定義如下: #define n 4 st

3、ruct char type4;/*設(shè)備類名*/ int count;/*擁有設(shè)備臺(tái)數(shù)*/ int remain;/*某類設(shè)備現(xiàn)存可用的臺(tái)數(shù)*/ int address;/*該類設(shè)備在設(shè)備表中的起始地址*/ equiptypen/*設(shè)備類表定義,假定系統(tǒng)有 n個(gè)設(shè)備類型* 設(shè)備表的數(shù)據(jù)結(jié)構(gòu)定義如下: #define m 10 struct Int number;/*設(shè)備絕對(duì)號(hào)*/ int status;/*設(shè)備好環(huán)狀態(tài),“o”表示設(shè)備壞;用“ l”表示設(shè)備好*/ int remain;/*設(shè)備是否已分配,用“ l”介表示已分配,用“o”表示末分配*/ char jobname4;/*占有設(shè)備的

4、作業(yè)名*/ int inumber;/*設(shè)備相對(duì)號(hào)*/ equipmentm/*設(shè)備表定義,假定系統(tǒng)有m個(gè)設(shè)備*/ 當(dāng)作業(yè)申請(qǐng)某類設(shè)備時(shí),系統(tǒng)先查“設(shè)備類表”,如果該設(shè)備的現(xiàn)存臺(tái)數(shù)可以滿足申請(qǐng)要求,則從“設(shè)各類表”中得到該類設(shè)備的設(shè)備表起始地址,然后找到“設(shè)備表”中該類設(shè)備的起始地址,依次查詢?cè)擃愒O(shè)備的每一個(gè)登記項(xiàng),找出“好的且末分配”的設(shè)備分配給該作業(yè).分配后要修改設(shè)備類表中的現(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)系通知用戶. 當(dāng)作業(yè)運(yùn)行完回收設(shè)備時(shí),首先要查設(shè)備表,比較每一項(xiàng),找到占用作業(yè)名

5、與運(yùn)行完作業(yè)的作業(yè)名的一欄,將這一欄的“已未分配”置為“未分配”.然后將設(shè)備表中對(duì)應(yīng)設(shè)備類的“現(xiàn)存臺(tái)數(shù)”增1. 實(shí)驗(yàn)中,首先要建立“設(shè)備類表”和“設(shè)備表”,假設(shè)系統(tǒng)的模擬設(shè)備如下表:設(shè)備類表設(shè)備類擁有設(shè)備臺(tái)數(shù)現(xiàn)存好的設(shè)備設(shè)備表相對(duì)地址輸入機(jī)220打印機(jī)332磁盤445磁帶機(jī)119設(shè)備表絕對(duì)號(hào)好/壞已/未分配占用作業(yè)名相對(duì)號(hào)0好未分配1好未分配2好未分配3好未分配4好未分配5好未分配6好未分配7好未分配8好未分配9好未分配分配設(shè)備要求輸入作業(yè)名、設(shè)備類名和相對(duì)號(hào),回收設(shè)備要求輸入作業(yè)名和設(shè)備類名。五實(shí)驗(yàn)源代碼#include<stdio.h>#include<string.h&

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

7、e4; /*占有設(shè)備的作業(yè)名*/int lnumber; /*設(shè)備相對(duì)號(hào)*/equipmentm; /*設(shè)備表定義,假定系統(tǒng)有m個(gè)設(shè)備*/ allocate(char *J,char *type,int cc)int i,t,j; /*查詢?cè)擃愒O(shè)備*/i=0;while(i<n&&strcmp(equiptypei.type,type)!=0)i+;if(i>=n) /*沒(méi)有找到該類設(shè)備*/ printf("無(wú)該類設(shè)備,設(shè)備分配失敗!"); return(false); if(equiptypei.remain<1) /*所需設(shè)備現(xiàn)存可用臺(tái)

8、數(shù)不足*/ printf("該類設(shè)備不足,分配失敗!"); return(false); t=equiptypei.address; /* 取出該類設(shè)備在設(shè)備表中的起始地址*/while(!(equipmentt.status=1 && equipmentt.remain=0)t+; /*填寫作業(yè)名、相對(duì)號(hào),狀態(tài)改為已分配*/equiptypei.remain-;equipmentt.remain=1;strcpy(equipmentt.jobname,J);equipmentt.lnumber=cc; /*設(shè)備分配函數(shù)結(jié)束*/ reclaim(char *

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

10、mp;&equipmentt.remain=1)equipmentt.remain=0;k+;equiptypei.remain= equiptypei.remain+k;if(k=0)printf("The jop haven't use this kind of equitmenttype!/n"); /*設(shè)備回收函數(shù)結(jié)束*/void main( )char J4;int i,mm,a;char type10;printf("設(shè)備類初始化:(請(qǐng)輸入相應(yīng)設(shè)備的數(shù)量,當(dāng)前空閑設(shè)備數(shù)量,設(shè)備表起始地址)n ");for(i=0;i<4

11、;i+) /*設(shè)備類表初始化:*/printf("請(qǐng)輸入相應(yīng)設(shè)備類名稱:"); scanf("%s",&equiptypei.type); printf("請(qǐng)輸入相應(yīng)設(shè)備的數(shù)量:"); scanf("%d",&equiptypei.count); printf("請(qǐng)輸入當(dāng)前空閑設(shè)備數(shù)量:"); scanf("%d",&equiptypei.remain); printf("請(qǐng)輸入設(shè)備表起始地址:"); scanf("%d&

12、quot;,&equiptypei.address);for(i=0;i<10;i+) /*設(shè)備表初始化:*/equipmenti.number=i;equipmenti.status=1;equipmenti.remain=0;while(1)printf("n0-退出,1-分配,2-回收,3-顯示"); printf("n選擇功能項(xiàng)(0-3):"); scanf("%d",&a); switch(a) case 0 : /*a=0程序結(jié)束*/ exit(0); case 1 : /*a=1分配設(shè)備*/ pri

13、ntf("輸入作業(yè)名、作業(yè)所需設(shè)備類和設(shè)備相對(duì)號(hào)n"); scanf("%s%s%d",J,type,&mm); allocate(J,type,mm); /*分配設(shè)備*/ break; case 2: /*a=2回收設(shè)備*/ printf("輸入作業(yè)名和作業(yè)歸還的設(shè)備類n"); scanf("%s%s",J,type); /*輸入要回收的作業(yè)名及對(duì)應(yīng)的設(shè)備類*/ reclaim(J,type); /*回收設(shè)備*/ break; case 3: /*a=3 輸出設(shè)備類表和設(shè)備表的內(nèi)容*/ printf(&q

14、uot;輸出設(shè)備類表!n"); /*輸出設(shè)備類表內(nèi)容*/ printf(" 設(shè)備類型 設(shè)備總量 空閑好設(shè)備n"); for(i=0;i<n;i+)printf("%9s%16d%22d%14dn",equiptypei.type,equiptypei.count,equiptypei.remain,equiptypei.address); printf("輸出設(shè)備表:n"); /*輸出設(shè)備表內(nèi)容*/ printf("絕對(duì)號(hào) 好/壞 已/未分配 占用作業(yè)名 相對(duì)號(hào)n"); for(i=0;i<m

15、;i+)printf("%3d%11d%15d%15s%9dn",equipmenti.number,equipmenti.status,equipmenti.remain,equipmenti.jobname,equipmenti.lnumber); 測(cè)試(運(yùn)行時(shí)屏幕顯示,紅色字表示從鍵盤輸入) 0一退出,l一分配,2一回收,3一顯示 選擇功能項(xiàng)(0一3):3輸出設(shè)備類表: 設(shè)備類型 設(shè)備總量 空閑好設(shè)備 input 2 2 printer 3 3 disk 4 4 tape 1 1 輸出設(shè)備表: 絕對(duì)號(hào) 好壞 已未分配 占用作業(yè)名 相對(duì)號(hào) 0 1 0 0 1 1 0 0

16、 2 1 0 0 3 1 0 0 4 1 0 0 5 1 0 0 6 1 0 0 7 1 0 0 8 1 0 0 9 1 0 0 0一退出,l一分配,2一回收,3一顯示 選擇功能項(xiàng)(0-3):l輸人作業(yè)名、作業(yè)所需設(shè)備類和設(shè)備相對(duì)號(hào)J1 ddd 2無(wú)該類設(shè)備,設(shè)備分配失敗0一退出,l一分配,2一回收,3一顯示選擇功能項(xiàng)(0-3):l輸人作業(yè)名、作業(yè)所需設(shè)各類和設(shè)備相對(duì)號(hào)J1 input 1分配成功0-退出,l一分配,2一回收,3一顯示選擇功能項(xiàng)(0-3):l輸入作業(yè)名、作業(yè)所需設(shè)備類和設(shè)備相對(duì)號(hào)J2 input 3分配成功0一退出,l一分配,2一回收,3一顯示選擇功能項(xiàng)(0-3):l輸人作業(yè)名

17、、作業(yè)所需設(shè)各類和設(shè)備相對(duì)號(hào)J1 input 2該類設(shè)備不足,分配失敗0一退出,l一分配,2一回收,3一顯示選擇功能項(xiàng)(0-3):l輸入作業(yè)名、作業(yè)所需設(shè)備類和設(shè)備相對(duì)號(hào)J1 Printer l分配成功0一退出,l一分配,2一回收,3一顯示選擇功能項(xiàng)(0一3):1輸入作業(yè)名、作業(yè)所需設(shè)備類和設(shè)備相對(duì)號(hào)J1 Printer 2分配成功0一退出,l一分配,2一回收,3一顯示選擇功能項(xiàng)(0-3):1輸入作業(yè)名、作業(yè)所需設(shè)備類和設(shè)備相對(duì)號(hào)J4 disk 1分配成功0一退出, l一分配,2一回收,3一顯示選擇功能項(xiàng)(0一3):3輸出設(shè)備類表: 設(shè)備類型 設(shè)備總量 空閑好設(shè)備 input 2 0 prin

18、ter 3 1 disk 4 3 tape 1 1 輸出設(shè)備表:絕對(duì)號(hào) 好壞 已未分配 占用作業(yè)名 相對(duì)號(hào) 0 1 1 J1 1 1 1 1 J2 3 2 1 1 J1 1 3 1 1 J1 2 4 1 0 0 5 1 1 J4 1 6 1 0 0 7 1 0 0 8 1 0 0 9 1 0 0 0一退出,l一分配,2一回收,3一顯示選擇功能項(xiàng)(0一3):2輸入作業(yè)名和作業(yè)歸還的設(shè)備類J1 disk該作業(yè)沒(méi)有使用該類設(shè)備0一退出,l一分配,2一回收,3一顯示選擇功能項(xiàng)(0一3):2輸入作業(yè)名和作業(yè)歸還的設(shè)備類J1 ddf無(wú)該類設(shè)備,設(shè)備回收失敗0一退出,l一分配,2一回收,3一顯示選擇功能項(xiàng)(0-3):2輸人作業(yè)名和作業(yè)歸還的設(shè)備類J1 printer回收成功0一退出,l一分配,2一回收,3一顯示選擇功能項(xiàng)(0-3):2輸人作業(yè)名和作業(yè)歸還的設(shè)備類J1 input回收成功0一退出,回一分配,2一回收,3一顯示選擇功能

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論