




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
課程設(shè)計(jì)題目:獨(dú)占設(shè)備的分配與回收問(wèn)題描述:為了使系統(tǒng)有條不紊地工作,系統(tǒng)在分配設(shè)備是,應(yīng)考慮這樣幾個(gè)因素:①設(shè)備的固有屬性;②設(shè)備分配算法;③設(shè)備分配時(shí)的安全性④設(shè)備獨(dú)立性;系統(tǒng)也要通過(guò)回收,實(shí)現(xiàn)設(shè)備的再分配。要求:設(shè)備分配在計(jì)算機(jī)系統(tǒng)中,設(shè)備、控制器和通道等資源是有限的,并不是每個(gè)進(jìn)程隨時(shí)都可以得到這些資源。進(jìn)程首先要向設(shè)備管理程序提出申請(qǐng),然后由設(shè)備管理程序按照一定的分配算法給進(jìn)程分配必要的資源。如果進(jìn)程的申請(qǐng)沒(méi)有成功,就要在資源的等待隊(duì)列中排隊(duì)等待,直到獲得所需的資源??紤]設(shè)備的特性和安全性。設(shè)備的特性是設(shè)備本身固有的屬性,一般分為獨(dú)占、共享和虛擬設(shè)備等。1、設(shè)計(jì)任務(wù)分析:獨(dú)占設(shè)備的分配與虛擬設(shè)備獨(dú)占設(shè)備每次只能分配給一個(gè)進(jìn)程使用使用特性隱含著死鎖的必要條件,所以在考慮獨(dú)占設(shè)備的分配時(shí),一定要結(jié)合有關(guān)防止和避免死鎖的安全算法。2、設(shè)計(jì)方案論證:為了提高OS的可適應(yīng)性和可擴(kuò)展性O(shè)S中毫無(wú)例外地實(shí)現(xiàn)了設(shè)備的獨(dú)立性,即使應(yīng)用程序獨(dú)立于具體使用的物理設(shè)備。在實(shí)現(xiàn)了設(shè)備獨(dú)立性的功能后,可以帶來(lái)兩方面的好處:(1)設(shè)備分配時(shí)的靈活性;(2)易于實(shí)現(xiàn)I/O重定向。3、詳細(xì)設(shè)計(jì)通過(guò)此系統(tǒng)可以實(shí)現(xiàn)如下功能:分配,回收,顯示,退出。選擇獨(dú)占設(shè)備,通過(guò)執(zhí)行功能項(xiàng),輸出設(shè)備表,實(shí)現(xiàn)設(shè)備的分配與回收。4、源代碼清單:#definefalse0#definetrue1#definen4#definem10struct{chartype[10];/*設(shè)備類(lèi)名*/intcount;/*擁有設(shè)備臺(tái)數(shù)*/intremain;/*現(xiàn)存的可用設(shè)備臺(tái)數(shù)*/intaddress;/*該類(lèi)設(shè)備在設(shè)備表中的起始地址*/}equiptype[n];/*設(shè)備類(lèi)表定義,假定系統(tǒng)有n個(gè)設(shè)備類(lèi)型*/struct{intnumber;/*設(shè)備絕對(duì)號(hào)*/intstatus;/*設(shè)備好壞狀態(tài)*/intremain;/*設(shè)備是否已分配*/charjobname[4]占有設(shè)備的作業(yè)名*/intlnumber;/*設(shè)備相對(duì)號(hào)*/}equipment[m];/*設(shè)備表定義,假定系統(tǒng)有m個(gè)設(shè)備*/allocate(J,type,mm)char*Jtype;intmm;{inti,t,j;/*查詢(xún)?cè)擃?lèi)設(shè)備*/i=0;while(i<n&&strcmp(equiptype[i].type,type)!=0)i++;if(i>=n)/*沒(méi)有找到該類(lèi)設(shè)備*/{printf("無(wú)該類(lèi)設(shè)備,設(shè)備分配失敗");return(false);}if(equiptype[i].remain<1)/*所需設(shè)備現(xiàn)存可用臺(tái)數(shù)不足*/{printf("該類(lèi)設(shè)備不足,分配失敗");return(false);}t=equiptype[i].address;/*取出該類(lèi)設(shè)備在設(shè)備表中的起始地址*/while(!(equipment[t].status==1&&equipment[t].remain==0t++;/*填寫(xiě)作業(yè)名、相對(duì)號(hào),狀態(tài)改為已分配*/equiptype[i].remain--;equipment[t].remain=1;strcpy(equipment[t].jobname,J);equipment[t].lnumber=mm;}/*設(shè)備分配函數(shù)結(jié)束*/reclaim,type)charJ,type;{inti,t,j,k,nn;i=0;while(i<n&&strcmp(equiptype[.type,type)!=0)i++;if(i>=n)/*沒(méi)有找到該類(lèi)設(shè)備*/{printf("無(wú)該類(lèi)設(shè)備,設(shè)備回收失敗");return(false);}t=equiptype[i].address;/*取出該類(lèi)設(shè)備在設(shè)備表中的起始地址*/j=equiptype[i].count;/*取出該類(lèi)設(shè)備的數(shù)量*/k=0;nn=t+j;for(;t<nn;t++)if(strcmp(equipment[t].jobname,J)==0&&equipment[t].remain==1){equipment[t].remain=0;k++;}equiptype[i].remain=equiptype[i].remain+k;if(k==0)printf("該作業(yè)沒(méi)有使用該類(lèi)設(shè)備\n}/*設(shè)備回收函數(shù)結(jié)束*/main(){charJ[4];inti,mm,a;chartype[10];/*設(shè)備類(lèi)表初始化:*/strcpy(equiptype[0].type,"input");輸入機(jī)*/equiptype[0].count=2;equiptype[0].remain=2;equiptype[0].address=0;strcpy(equiptype[1].type,"printer");/*打印機(jī)*/equiptype[1].count=3;equiptype[1].remain=3;equiptype[1].address=2;strcpy(equiptype[2].type,"disk");磁盤(pán)機(jī)*/equiptype[2].count=4;equiptype[2].remain=4;equiptype[2].address=5;strcpy(equiptype[3].type,"tape磁帶機(jī)*/equiptype[3].count=1;equiptype[3].remain=1;equiptype[3].address=9;/*設(shè)備表初始化:*/for(i=0;i<10;i++){equipment[i].number=i;equipment[i].status=1;equipment[i].remain=0;}while(1){printf("\n0-退出,1-分配,2-回收,3-顯示");printf("\n選擇功能項(xiàng)(0~3):");scanf("%d",&a);switch(a){case0:/*a=0程序結(jié)束*/exit(0);case1:/*a=1分配設(shè)備*/printf("輸入作業(yè)名、作業(yè)所需設(shè)備類(lèi)和設(shè)備相對(duì)號(hào)");scanf("%s%s%d",J,type,&mm);allocate(J,type,mm);/*分配設(shè)備*/break;case2:/*a=2回收設(shè)備*/printf("輸入作業(yè)名和作業(yè)歸還的設(shè)備類(lèi)");scanf("%s%s",J,type);reclaim(J,type);/*回收設(shè)備*/break;case3:/*a=3輸出設(shè)備類(lèi)表和設(shè)備表的內(nèi)容*/printf("\n輸出設(shè)備類(lèi)表\nprintf("設(shè)備類(lèi)型設(shè)備總量空閑好設(shè)備\n");for(i=0;i<n;i++)printf("%9s%8d%9d\n"quiptype[i].type,equiptype[i].count,equiptype[i].remain);printf("輸出設(shè)備表:\n");printf("絕對(duì)號(hào)好壞已未分配占用作業(yè)名相對(duì)號(hào);for(i=0;i<m;i++)printf("%3d%8d%9d%12s%8d\n",equipment[.number,equipment[i].statusipment[i].remaiquipment[i].jobname,equipment[i].lnumber);}}}運(yùn)行結(jié)果:該程序模擬獨(dú)占設(shè)備的分配和回收,其中,獨(dú)占設(shè)備分別為input(輸入機(jī)printer(打印機(jī)disk(磁盤(pán)機(jī)tape(磁帶機(jī))輸出設(shè)備類(lèi)表:23412341tape注:設(shè)備總量為10輸出設(shè)備表:絕對(duì)號(hào)好壞已未分配占用作業(yè)名相對(duì)號(hào)01234567891111111111000000000000000000000000000000注:⑴絕對(duì)號(hào)為設(shè)備的標(biāo)號(hào),根據(jù)設(shè)備類(lèi)型的不同與數(shù)量,其中,0~1為input,2~4為printer,5~8為disk,9為tape⑵默認(rèn)1為設(shè)備狀態(tài)“好”0為該設(shè)備未分配0為默認(rèn)的作業(yè)名0為設(shè)備的相對(duì)號(hào)程序運(yùn)行后可以看到如下要求:0-退出,1-分配,2-回收,3-顯示選擇功能項(xiàng)(0~3此時(shí)要求輸入相應(yīng)的功能選項(xiàng),此處我使用disk(磁盤(pán)機(jī))分配和回收做演示:(以下為程序調(diào)試結(jié)果頁(yè)面)0退出,1-分配,2-回收,3-顯示選擇功能項(xiàng)(0~31輸入作業(yè)名,作業(yè)所需設(shè)備類(lèi)和設(shè)備相對(duì)號(hào)xyzDisk2(注:設(shè)備類(lèi)只能是程序所提供的四種獨(dú)占設(shè)備,當(dāng)輸入不合法或不存在的設(shè)備類(lèi)后,會(huì)提示“無(wú)該類(lèi)設(shè)備,設(shè)備分配失敗輸入時(shí)使用回車(chē)分隔,設(shè)備相對(duì)號(hào)只是一種邏輯上的劃分,可以重復(fù),前提是該類(lèi)獨(dú)占設(shè)備還有空閑資源)0退出,1-分配,2-回收,3-顯示選擇功能項(xiàng)(0~33輸出設(shè)備類(lèi)表:設(shè)備類(lèi)型設(shè)備總量空閑好設(shè)備Input23412301Printertape輸出設(shè)備表:絕對(duì)號(hào)好壞已未分配占用作業(yè)名相對(duì)號(hào)012345678911111111110000010000000000213200000CcyTtHbJl00退出,1-分配,2-回收,3-顯示選擇功能項(xiàng)(0~31輸入作業(yè)名,作業(yè)所需設(shè)備類(lèi)和設(shè)備相對(duì)號(hào)xbDisk2該類(lèi)設(shè)備不足,分配失敗0退出,1-分配,2-回收,3-顯示選擇功能項(xiàng)(0~32輸入作業(yè)名和作業(yè)歸還的設(shè)備類(lèi)jlDisk0退出,1-分配,2-回收,3-顯示選擇功能項(xiàng)(0~33輸出設(shè)備類(lèi)表:設(shè)備類(lèi)型設(shè)備總量空閑好設(shè)備Input23412311PrinterDisktape輸出設(shè)備表:絕對(duì)號(hào)好壞已未分配占用作業(yè)名相對(duì)號(hào)012345678911111111110000010000000000213200000CcyTtHbJl00退出,1-分配,2-回收,3-顯示選擇功能項(xiàng)(0~31輸入作業(yè)名,作業(yè)所需設(shè)備類(lèi)和設(shè)備相對(duì)號(hào)xbDisk20退出,1-分配,2-回收,3-顯示選擇功能項(xiàng)(0~33輸出設(shè)備類(lèi)表:23412301Printertape輸出設(shè)備表:絕對(duì)號(hào)好壞已未分配占用作業(yè)名相對(duì)號(hào)012345678911111111110000010000000000213200000CcyTtHbXb0以上的演示實(shí)現(xiàn)了disk獨(dú)占設(shè)備的分配,由于設(shè)備不足無(wú)法分配后,通過(guò)設(shè)備的回收,再實(shí)現(xiàn)設(shè)備的分配。其余的獨(dú)占設(shè)備也類(lèi)似disk磁盤(pán)演示。在本次設(shè)計(jì)中,要求重點(diǎn)掌握獨(dú)
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025福建三明清流縣金星園建設(shè)發(fā)展有限公司招聘消防員2人模擬試卷及一套答案詳解
- 2025湖南省中南林業(yè)科技大學(xué)第一批招聘21人考前自測(cè)高頻考點(diǎn)模擬試題及一套參考答案詳解
- 2025福建省康輝國(guó)際旅行社股份有限公司招聘5人模擬試卷附答案詳解
- 2025貴陽(yáng)農(nóng)商銀行“超享聘·旭日計(jì)劃”大學(xué)生招聘20人模擬試卷及完整答案詳解
- 2025年河北滄州泊頭市中醫(yī)醫(yī)院招聘專(zhuān)業(yè)技術(shù)人員29名考前自測(cè)高頻考點(diǎn)模擬試題附答案詳解(完整版)
- 2025遼寧撫順新?lián)徜撚邢挢?zé)任公司招聘擬聘用人員模擬試卷參考答案詳解
- 2025金華市技師學(xué)院公開(kāi)招聘高層次人才2人模擬試卷及答案詳解(各地真題)
- 2025年長(zhǎng)江工程職業(yè)技術(shù)學(xué)院人才引進(jìn)24人模擬試卷及答案詳解1套
- 2025年南安市部分公辦學(xué)校專(zhuān)項(xiàng)招聘編制內(nèi)新任教師58人(二)考前自測(cè)高頻考點(diǎn)模擬試題及答案詳解(歷年真題)
- 2025福建億力集團(tuán)有限公司所屬單位校園招聘98人模擬試卷參考答案詳解
- 2025年及未來(lái)5年中國(guó)定制手機(jī)行業(yè)市場(chǎng)調(diào)查研究及投資前景預(yù)測(cè)報(bào)告
- 2025年學(xué)法普法綜合知識(shí)競(jìng)賽答題題庫(kù)(附答案)
- 北控水務(wù)集團(tuán)2026屆校園招聘120人筆試模擬試題及答案解析
- 2025年河北唐山市蘆臺(tái)經(jīng)濟(jì)開(kāi)發(fā)區(qū)公開(kāi)招聘區(qū)屬?lài)?guó)有企業(yè)工作人員18人筆試模擬試題及答案解析
- 酒店突發(fā)事件應(yīng)急預(yù)案2025優(yōu)化版
- 2024年新高考Ⅰ卷英語(yǔ)真題(原卷+答案)
- 2025年注冊(cè)安全工程師考試沖刺押題:安全生產(chǎn)管理實(shí)務(wù)專(zhuān)項(xiàng)訓(xùn)練試卷
- 外貿(mào)會(huì)計(jì)自學(xué)課件
- 高質(zhì)量臨床護(hù)理服務(wù)實(shí)施路徑
- 煙花爆竹經(jīng)營(yíng)培訓(xùn)試題及答案
- 車(chē)位退還協(xié)議書(shū)
評(píng)論
0/150
提交評(píng)論