計(jì)算機(jī)操作系統(tǒng)課程設(shè)計(jì).doc_第1頁(yè)
計(jì)算機(jī)操作系統(tǒng)課程設(shè)計(jì).doc_第2頁(yè)
計(jì)算機(jī)操作系統(tǒng)課程設(shè)計(jì).doc_第3頁(yè)
計(jì)算機(jī)操作系統(tǒng)課程設(shè)計(jì).doc_第4頁(yè)
計(jì)算機(jī)操作系統(tǒng)課程設(shè)計(jì).doc_第5頁(yè)
已閱讀5頁(yè),還剩38頁(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)介

景德鎮(zhèn)陶瓷學(xué)院計(jì)算機(jī)操作系統(tǒng)課程設(shè)計(jì)學(xué)院:信息工程學(xué)院專業(yè):計(jì)算機(jī)科學(xué)與技術(shù)班級(jí):13級(jí)二班學(xué)號(hào):201310510112姓名:張旸任務(wù)一、進(jìn)程創(chuàng)建、控制與撤消一、實(shí)驗(yàn)?zāi)康模和ㄟ^(guò)進(jìn)程的創(chuàng)建和控制的設(shè)計(jì)來(lái)達(dá)到如下目的:1、加深對(duì)進(jìn)程概念的理解,明確進(jìn)程和程序的區(qū)別2、進(jìn)一步認(rèn)識(shí)并發(fā)執(zhí)行的概念,區(qū)別順序執(zhí)行和并發(fā)執(zhí)行3、分析進(jìn)程爭(zhēng)用臨界資源的現(xiàn)象,學(xué)習(xí)解決進(jìn)程互斥的方法二、實(shí)驗(yàn)內(nèi)容:在WINDOWS環(huán)境下模擬實(shí)驗(yàn):1、編寫一程序,來(lái)模擬進(jìn)程的創(chuàng)建和撤消,要求通過(guò)終端鍵盤輸入三、四作業(yè)的名稱、大小、優(yōu)先級(jí)等。系統(tǒng)為它創(chuàng)建進(jìn)程,并把進(jìn)程控制塊PCB的內(nèi)容送到終端顯示器上輸出2、同時(shí)模擬內(nèi)存空間為作業(yè)分配內(nèi)存空間,并把結(jié)果用圖形形象地表示出來(lái),同樣通過(guò)終端輸出3、按進(jìn)程的優(yōu)先級(jí)的順序撤消進(jìn)程,同時(shí)通過(guò)終端顯示PCB的撤消過(guò)程和內(nèi)存的釋放過(guò)程三、結(jié)構(gòu)框圖:開(kāi)始主函數(shù)main ()查看進(jìn)程viewrun()撤銷進(jìn)程kill()創(chuàng)建進(jìn)程create()替換進(jìn)程huanchu()結(jié)束退出exit(0)四、實(shí)驗(yàn)代碼:#include #include #include struct jincheng int pid;int youxian;int daxiao;int msg;int live;struct jincheng neicun20,waicun;int shumu=1;create()if(shumu=20)printf(n 內(nèi)存已滿,請(qǐng)先結(jié)束或換出進(jìn)程n);elseprintf(n 請(qǐng)創(chuàng)建第%d個(gè)進(jìn)程,shumu);printf(n 請(qǐng)輸入新進(jìn)程的 pidn); scanf(%d,&neicunshumu.pid);printf(n 請(qǐng)輸入新的進(jìn)程的優(yōu)先級(jí)n); scanf(%d,&neicunshumu.youxian);printf(n 請(qǐng)輸入新的進(jìn)程的大小n); scanf(%d,&neicunshumu.daxiao);printf(n 請(qǐng)輸入新的進(jìn)程的消息n);scanf(%d,&neicunshumu.msg); neicunshumu.live=1; shumu+;return neicunshumu-1.live;void viewrun()int vpid;printf(n 請(qǐng)輸入想顯示第幾個(gè)創(chuàng)建的進(jìn)程n); scanf(%d,&vpid);if(vpid0&vpid0&pid1neicunpid2.youxian) waicun.pid=neicunpid1.pid;waicun.youxian=neicunpid1.youxian;waicun.daxiao=neicunpid1.daxiao;waicun.msg=neicunpid1.msg;neicunpid1.pid=neicunpid2.pid;neicunpid1.youxian=neicunpid2.youxian;neicunpid1.daxiao=neicunpid2.daxiao;neicunpid1.msg=neicunpid2.msg;neicunpid2.pid=waicun.pid; neicunpid2.youxian=waicun.youxian; neicunpid2.daxiao=waicun.daxiao; neicunpid2.msg=waicun.msg;printf(n 替換完成n);printf(n 被替換進(jìn)程的pid是:%dn,waicun.pid);printf(n 被替換進(jìn)程的youxian是:%dn,waicun.youxian);printf(n 被替換進(jìn)程的daxiao是:%dn,waicun.daxiao);printf(n 被替換進(jìn)程的msg是:%dn,waicun.msg);elseprintf(n進(jìn)程優(yōu)先級(jí)不夠大);elseprintf(所查看運(yùn)行進(jìn)程不存在); printf(請(qǐng)按回車退出換出進(jìn)程n);c=getche();void kill()int kpid; printf(n 請(qǐng)輸入要撤銷第幾個(gè)創(chuàng)建的進(jìn)程n); scanf(%d,&kpid);if(kpid0&kpid20&neicunkpid.live=1)neicunkpid.live=0;printf(n 已撤銷第%d個(gè)創(chuàng)建的進(jìn)程,kpid);else printf(n 所查看運(yùn)行進(jìn)程不存在n);printf(請(qǐng)按回車退出查看n);kpid=getch();void main ()int n,m,i;char a;n=1;while(n=1)system(cls);printf(n*); printf(n* 進(jìn)程演示系統(tǒng) *);printf(n*);printf(n 1.創(chuàng)建新的進(jìn)程 2.查看運(yùn)行進(jìn)程 );printf(n 3.換出某個(gè)進(jìn)程 4.殺死運(yùn)行進(jìn)程 ); printf(n 5.退出 ); printf(n*);printf(n請(qǐng)選擇(15)); a=getch();switch(a) case1:create();break;case2:viewrun();break;case3:huanchu();break;case4:kill();break;case5:exit(0);default:n=0; 五:實(shí)驗(yàn)結(jié)果:任務(wù)二、單處理機(jī)系統(tǒng)的進(jìn)程調(diào)度一、實(shí)驗(yàn)?zāi)康模?、加深對(duì)進(jìn)程概念的理解,明確進(jìn)程和程序的區(qū)別2、深入了解系統(tǒng)如何組織進(jìn)程,創(chuàng)建進(jìn)程3、進(jìn)一步認(rèn)識(shí)如何實(shí)現(xiàn)處理機(jī)調(diào)度二、實(shí)驗(yàn)內(nèi)容:從下面四個(gè)調(diào)度算法中,選擇一個(gè)調(diào)度算法來(lái)實(shí)現(xiàn)進(jìn)程調(diào)度:1、先來(lái)先服務(wù)調(diào)度算法2、優(yōu)先數(shù)調(diào)度算法3、時(shí)間片輪法調(diào)度算法4、多級(jí)反饋隊(duì)列輪轉(zhuǎn)調(diào)度算法三、結(jié)構(gòu)框圖:While循環(huán)遍歷就緒隊(duì)列調(diào)用check()函數(shù),打印所有隊(duì)列將就緒隊(duì)列中的首進(jìn)程由“就緒狀態(tài)”轉(zhuǎn)為執(zhí)行狀態(tài)調(diào)用running()函數(shù)調(diào)用destroy()函數(shù),釋放進(jìn)程調(diào)用input()函數(shù);用戶輸入測(cè)試數(shù)據(jù)輸入的同時(shí)建立好就緒序列初始化運(yùn)行時(shí)間是否等于服務(wù)開(kāi)始結(jié)束四、實(shí)驗(yàn)代碼:#include stdio.h #include #include #define getpch(type) (type*)malloc(sizeof(type) #define NULL 0 struct pcb /* 定義進(jìn)程控制塊PCB */ char name10; char state; int super; int ntime; int rtime; struct pcb* link; *ready=NULL,*p; typedef struct pcb PCB; void sort() /* 建立對(duì)進(jìn)程進(jìn)行優(yōu)先級(jí)排列函數(shù)*/ PCB *first, *second; int insert=0; if(ready=NULL)|(p-super)(ready-super) /*優(yōu)先級(jí)最大者,插入隊(duì)首*/ p-link=ready; ready=p; else /* 進(jìn)程比較優(yōu)先級(jí),插入適當(dāng)?shù)奈恢弥?/ first=ready; second=first-link; while(second!=NULL) if(p-super)(second-super) /*若插入進(jìn)程比當(dāng)前進(jìn)程優(yōu)先數(shù)大,*/ /*插入到當(dāng)前進(jìn)程前面*/ p-link=second; first-link=p; second=NULL; insert=1; else /* 插入進(jìn)程優(yōu)先數(shù)最低,則插入到隊(duì)尾*/ first=first-link; second=second-link; if(insert=0) first-link=p; void input() /* 建立進(jìn)程控制塊函數(shù)*/ int i,num; printf(n請(qǐng)輸入進(jìn)程數(shù)量:); scanf(%d,&num); for(i=1;iname); 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-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 show()printf(nqnametstatetsupertndtimetruntimen); void disp(PCB * pr) /*建立進(jìn)程顯示函數(shù),用于顯示當(dāng)前進(jìn)程*/ printf( %st,pr-name); printf( %ct,pr-state); printf( %dt,pr-super); printf( %dt,pr-ntime); printf( %dt,pr-rtime); printf(n); void check() /* 建立進(jìn)程查看函數(shù) */ PCB* pr; printf(n*當(dāng)前正在運(yùn)行的進(jìn)程是:%s,p-name); /*顯示當(dāng)前運(yùn)行進(jìn)程*/ show();disp(p); pr=ready; if(pr=NULL)printf(n*當(dāng)前就緒隊(duì)列為空!);else printf(n*當(dāng)前就緒隊(duì)列狀態(tài)為:); /*顯示就緒隊(duì)列狀態(tài)*/show();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-super)-; 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 當(dāng)前運(yùn)行次數(shù)為:%d n,h); p=ready; ready=p-link; p-link=NULL; p-state=R; check(); running(); printf(n 按任一鍵繼續(xù).); ch=getchar(); printf(nn 進(jìn)程已經(jīng)完成.n); ch=getchar(); 五:實(shí)驗(yàn)結(jié)果:任務(wù)三、基本存儲(chǔ)器管理一、實(shí)驗(yàn)?zāi)康模阂粋€(gè)好的計(jì)算機(jī)系統(tǒng)不僅要有一個(gè)足夠容量的、存取速度高的、穩(wěn)定可靠的主存儲(chǔ)器,而且要能合理地分配和使用這些存儲(chǔ)空間。當(dāng)用戶提出申請(qǐng)存儲(chǔ)器空間時(shí),存儲(chǔ)管理必須根據(jù)申請(qǐng)者的要求,按一定的策略分析主存空間的使用情況,找出足夠的空閑區(qū)域分配給申請(qǐng)者。當(dāng)作業(yè)撤離或主動(dòng)歸還主存資源時(shí),則存儲(chǔ)管理要收回作業(yè)占用的主存空間或歸還部分主存空間。主存的分配和回收的實(shí)現(xiàn)與主存儲(chǔ)器的管理方式有關(guān)的,通過(guò)本實(shí)驗(yàn)幫助學(xué)生理解在不同的存儲(chǔ)管理方式下怎樣實(shí)現(xiàn)主存的分配和回收二、實(shí)驗(yàn)內(nèi)容:從下兩種存儲(chǔ)管理方式的主存分配和回收中,選擇一種管理方式來(lái)實(shí)現(xiàn)本次實(shí)驗(yàn)任務(wù):1、在可變(動(dòng)態(tài))分區(qū)管理方式下,采用最先適應(yīng)算法2、在分頁(yè)式管理方式下,采用位示圖來(lái)表示主存的分配情況和回收情況開(kāi)始j:=0j:=j+1查看空閑區(qū)說(shuō)明表的第j個(gè)登記欄狀態(tài)為“未分配”嗎?申請(qǐng)xk主存區(qū)輸出分配情況長(zhǎng)度:=長(zhǎng)度-xk;起址:=起址+xk;置狀態(tài)為“空表目”長(zhǎng)度xk嗎?j為空閑區(qū)說(shuō)明表的最末一欄嗎?結(jié)束輸出作業(yè)不能裝入三、結(jié)構(gòu)框圖:四、實(shí)驗(yàn)代碼:#include#includestruct linkkint size;int addr;struct linkk *next;struct jobtabint jno;int size;int addr;int flag;struct linkk *PL,*p,*q,*p1;struct jobtab tab20;int l,m,n,t,addr,length;void printlink()if (PL!=NULL)printf(n 進(jìn)程內(nèi)存大小 剩余內(nèi)存n);printf(-n);q=PL;while(q!=NULL)printf( %d %dn,q-addr,q-size);q=q-next; printf(-n);return;void printtab()int i; int flag=0;for (i=0;i20&flag=0;i+)if (tabi.flag=1)flag=1;if (flag=0)printf(n 無(wú)進(jìn)程!);return;printf(n 進(jìn)程編號(hào) 進(jìn)程起始地址 進(jìn)程內(nèi)存大小n);printf(-n);for (i=0;isize=l)tabn.addr=q-addr;p1=q;if (p1=PL) PL=q-next;else p-next=q-next;free(p1);return;if (q-sizel)tabn.addr=q-addr;q-size=q-size-l; q-addr=q-addr+l;return;p=q; q=q-next;tabn.flag=0;printf(n 沒(méi)有內(nèi)存剩余!n);return;void freem()printf(n 輸入進(jìn)程編號(hào):); scanf(%d,&n); if(tabn.flag=0)printf(n 不是該進(jìn)程!); return; addr=tabn.addr; length=tabn.size; tabn.flag=0; q=PL;if (q=NULL)|(addr+lengthaddr)p1=(struct linkk *)malloc(sizeof(struct linkk); p1-size=length; p1-addr=addr; p1-next=q; PL=p1;return;if(addr+length=q-addr)q-addr=addr; q-size=q-size+length; return;p=q; q=q-next;while (q!=NULL)if(p-addr+p-size=addr)p-size=p-size+length;if (addr+length=q-addr)p-size=p-size+q-size;p1=q; p-next=q-next;free(p1);return;if(addr+length=q-addr)q-addr=addr; q-size=q-size+length; return; if(addr+lengthaddr)p1=(struct linkk *)malloc(sizeof(struct linkk); p1-size=length; p1-addr=addr; p1-next=q; p-next=p1; return;p=q; q=q-next; if(p-addr+p-size=addr)p-size=p-size+length; return; p1=(struct linkk *)malloc(sizeof(struct linkk); p1-addr=addr; p1-size=length; p1-next=NULL; p1-next=p1; return; main()PL=(struct linkk *)malloc(sizeof(struct linkk); PL-addr=0; PL-next=NULL; printf(n輸入內(nèi)存大小:); scanf(%d,&n); PL-size=n; for(int i=0;i20;i+)tabi.jno=i; tabi.flag=0; t=0; doprintf(n-n); printf( 1-分配內(nèi)存 2-釋放內(nèi)存n); printf( 3-鏈接進(jìn)程號(hào) 4-輸出_TAB n); printf( 5-Quitn); printf(n-n); printf( Select bb); scanf(%d,&m); switch(m)case 1: allocm();break;case 2: freem();break;case 3: printlink();break;case 4: printtab();break;case 5: t=1;while (!t);五:實(shí)驗(yàn)結(jié)果:任務(wù)四、請(qǐng)求分頁(yè)存儲(chǔ)管理(虛擬存儲(chǔ))一、實(shí)驗(yàn)?zāi)康模和ㄟ^(guò)請(qǐng)求分頁(yè)存儲(chǔ)管理的設(shè)計(jì),讓學(xué)生了解虛擬存儲(chǔ)器的概念和實(shí)現(xiàn)方法。進(jìn)行運(yùn)行時(shí)不需要將所有的頁(yè)面都調(diào)入內(nèi)存,只需將部分調(diào)入內(nèi)存,即可運(yùn)行,在運(yùn)行的過(guò)程中若要訪問(wèn)的頁(yè)面不在內(nèi)存時(shí),則需求有請(qǐng)求調(diào)入的功能將其調(diào)入。假如此時(shí)若內(nèi)存沒(méi)有空白物理塊,則通過(guò)頁(yè)面置換的功能將一個(gè)老的不用的頁(yè)面淘汰出來(lái),其中淘汰的算法有多種二、實(shí)驗(yàn)內(nèi)容:模擬仿真請(qǐng)求分頁(yè)調(diào)度算法,其中淘汰的算法可選下列其一1、先進(jìn)先出算法2、最近最久算法3、CLOCK算法三、結(jié)構(gòu)框圖:結(jié)束開(kāi)始主函數(shù)main()初始化頁(yè)框Init()LRU算法LRU()FIFO算法FIFO()輸出OutPut()四、實(shí)驗(yàn)代碼:#include#includeusing namespace std;const int MaxNum=320;const int M=5;int PageOrderMaxNum;int SimulateMaxNumM;int PageCountM,LackNum;float PageRate;int PageCount132;bool IsExit(int i)bool f=false;for(int j=0;jM;j+)if(Simulatei-1j=PageOrderi)f=true;return f;int IsExitLRU(int i)int f=-1;for(int j=0;jM;j+)if(Simulatei-1j=PageOrderi)f=j;return f;int Compare() int p,q;p=PageCount0;q=0;for(int i=1;iM;i+)if(pPageCounti)p=PageCounti;q=i;return q;void Init() for(int k=0;kMaxNum;k+)int n=rand()%320;PageOrderk=n/10;for(int i=0;iMaxNum;i+)for(int j=0;jM;j+)Simulateij=-1;for(int q=0;qM;q+)PageCountq=0;void OutPut()int i,j;cout頁(yè)面訪問(wèn)序列:endl;for(j=0;jMaxNum;j+)coutPageOrderj ;coutendl;cout頁(yè)面訪問(wèn)過(guò)程(只顯示前10個(gè)):endl;for(i=0;i10;i+)for(j=0;jM;j+)if(Simulateij=-1)cout ;elsecoutSimulateij ;coutendl;cout缺頁(yè)數(shù)= LackNumendl;cout命中率= PageRateendl;cout-endl; void FIFO()int j,x=0,y=0;LackNum=0,Init();for(j=0;jM;j+)for(int k=0;k=j;k+)if(j=k)Simulatejk=PageOrderj;elseSimulatejk=Simulatej-1k; ;for(x=M;xMaxNum;x+)for(int t=0;tM;t+)Simulatext=Simulatex-1t;if(!IsExit(x)LackNum+;Simulatexy%M=PageOrderx;y+;PageRate=1-(float)LackNum/(float)MaxNum);OutPut();void LRU()int j,x=0,y=0;LackNum=0,Init();for(j=0;jM;j+)for(int k=0;k=j;k+)PageCountk+;if(j=k)Simulatejk=PageOrderj;elseSimulatejk=Simulatej-1k; LackNum+;for(x=M;xMaxNum;x+)for(int t=0;tM;t+)Simulatext=Simulatex-1t;int p=IsExitLRU(x);if(p=-1)int k;k=Compare();for(int w=0;wM;w+)if(w!=k)PageCountw+;elsePageCountk=1;Simulatexk=PageOrderx;LackNum+;elsefor(int w=0;wM;w+)if(w!=p)PageCountw+;elsePageCountp=1;PageRate=1-(float)LackNum/(float)MaxNum);OutPut();void YourChoice(int choice)switch(choice)case 1:cout-endl; coutFIFO算法結(jié)果如下:endl;FIFO();break;case 2:cout-endl; coutLRU算法結(jié)果如下:endl;LRU();break;case 5:break;default:cout重新選擇算法:1-FIFO 2-LRU 5-退出 choice;YourChoice(choice);void main()int choice,i=1;while(i)cout請(qǐng)選擇算法:1-FIFO 2-LRU 5-退出 choice;if(choice=5)i=0;elseYourChoice(choice);五:實(shí)驗(yàn)結(jié)果:任務(wù)五、死鎖的避免一、實(shí)驗(yàn)?zāi)康模涸诙嗟莱绦蛳到y(tǒng)中,多個(gè)進(jìn)程的并發(fā)執(zhí)行來(lái)改善系統(tǒng)的資源利用率,提高系統(tǒng)的吞吐量,但可能發(fā)生一種危險(xiǎn)死鎖。所謂死鎖(Deadlock),是指多個(gè)進(jìn)程在運(yùn)行過(guò)程中因爭(zhēng)奪資源而造成的一種僵局(DeadlyEmbrace),當(dāng)進(jìn)程處于這種狀態(tài)時(shí),若無(wú)外力作用,他們都無(wú)法在向前推進(jìn)我們可以在分配資源時(shí)加上限制條件就可以預(yù)防死鎖,但是,在每一種預(yù)防死鎖的方法之中,都施加了較強(qiáng)的限制條件;而在避免死鎖的方法中,所施加的限制條件較弱,有可能獲得令人滿意的系統(tǒng)性能二、實(shí)驗(yàn)內(nèi)容:利用銀行家算法來(lái)避免死鎖的發(fā)生開(kāi)始計(jì)算剩余資源量顯示信息show()初始化Init()主函數(shù)main()結(jié)束已分配資源Allocation判斷是否安全Safe程序所需濟(jì)源Need三、結(jié)構(gòu)框圖:四、實(shí)驗(yàn)代碼:#include#include#includeusing namespace std;int Sign100;/標(biāo)記數(shù)組int Progress100;/進(jìn)程執(zhí)行順序標(biāo)記數(shù)組string Number100;/進(jìn)程號(hào)class BankerArithmeticpublic:BankerArithmetic(int a,int b); /構(gòu)造函數(shù)int Safe(int grac);/判斷是否安全void Show();/顯示相關(guān)信息void Bank();/計(jì)算剩余資源量BankerArithmetic();/析構(gòu)函數(shù)private:BankerArithmetic();void Init(int a,int b);/初始化int ID;/記錄成功申請(qǐng)資源的進(jìn)程號(hào)int n; /包含的進(jìn)程數(shù)int m; /資源種類數(shù)int *Available;/可提供的資源總數(shù)int * Allocation;/以分配的資源int * Need;/仍需要的資源int *Left;/剩余的資源;BankerArithmetic:BankerArithmetic(int a,int b):n(a),m(b)Init(n,m);BankerArithmetic:BankerArithmetic()int i;deleteAvailable;deleteLeft;for(i=0;in;i+)deleteAllocationi;deleteAllocation;for(i=0;in;i+)deleteNeedi;deleteNeed;void BankerArithmetic:Init(int a,int b)int i,j;for(i=0;i100;i+)Signi=-1;Available=new intb;/Availablede的申請(qǐng)Left=new intb;/Left的申請(qǐng)Allocation=new int*a;/Allocation的申請(qǐng)for(i=0;ia;i+)Allocationi=new intb;Need=new int*a;/Need的申請(qǐng)for(i=0;ia;i+)Needi=new intb;cout請(qǐng)輸入可用資源Available:endl;for(i=0;iAvailablei;cout請(qǐng)輸入進(jìn)程號(hào):endl;for(i=0;iNumberi;cout請(qǐng)輸入分配資源矩陣Allocation:(a,b)endl; for(i=0;ia;i+)for(j=0;jAllocationij;cout請(qǐng)輸入仍需要資源矩陣Need:(a,b)endl; for(i=0;ia;i+)for(j=0;jNeedij;/計(jì)算剩余的資源for(i=0;im;i+)Lefti=Availablei;j=0;while(jm)for(i=0;in;i+)Leftj-=Allocationij;j+;int BankerArithmetic:Safe(int grac) int i,j,temp;for(i=0;in;i+)if(Signi!=1)temp=1;for(j=0;j=Needij)temp*=1;elsetemp*=0;if(temp=1)break;ID=i;Signi=1;Progressgrac=ID;if(temp)return ID;elsereturn -1;void BankerArithmetic:Bank()for(int i=0;im;i+)Lefti=Lefti+AllocationIDi; void BankerArithmetic:Show()int i,j;cout進(jìn)程 Allocation Need n;for(i=0;in;i+)if(Signi!=1)coutNumberi ;for(j=0;jm;j+)cout Allocationij;cout ;for(j=0;jm;j+)cout Needij;coutendl;coutendl;for(i=0;im;i+)coutLefti ;coutendl;int main()int process,source,result,i=0,sum=1;char ans1,ans2;coutprocess;coutsource;BankerArithmetic banker(process,source);while(iprocess)coutans1;if(ans1=y|ans1=Y)banker.Show();result=banker.Safe(i);if(result=0)Progressi=result;elsesum=0;cout處于不安全狀態(tài)!程序?qū)⑼顺?!n; exit(1);cout按空格鍵程序執(zhí)行一次endl; while(cin.get(ans2)&ans2=n)banker.Bank();i+;if(sum=1)cout進(jìn)程執(zhí)行的順序如下:;for(i=0;iprocess-1;i+)coutNumberProgressi ; coutNumberProgressprocess-1;return 0;五:實(shí)驗(yàn)結(jié)果:任務(wù)六、磁盤空間的分配與回收一、實(shí)驗(yàn)?zāi)康模捍疟P初始化時(shí)把磁盤存儲(chǔ)空間分成許多塊(扇區(qū)),這些空間可以被多個(gè)用戶共享。用戶作業(yè)在執(zhí)行期間常常要在磁盤上建立文件或已經(jīng)建立在磁盤上的文件刪去,這就涉及到磁盤存儲(chǔ)空間的分配和回收。一個(gè)文件存放到磁盤上,可以組織成順序文件(連續(xù)文件)、鏈接文件(串聯(lián)文件)、索引文件等,因此,磁盤存儲(chǔ)空間的分配有兩種方式,一種是分配連續(xù)的存儲(chǔ)空間,另一種是可以分配不連續(xù)的存儲(chǔ)空間。怎樣有效地管理磁盤存儲(chǔ)空間是操作系統(tǒng)應(yīng)解決的一個(gè)重要問(wèn)題,通過(guò)本實(shí)驗(yàn)使學(xué)生掌握磁盤存儲(chǔ)空間的分配和收回算法二、實(shí)驗(yàn)內(nèi)容:模擬磁盤空閑空間的表示方法,以及模擬實(shí)現(xiàn)磁盤空間的分配和回收。從下題目中選擇一題來(lái)實(shí)現(xiàn)設(shè)備的管理:1、連續(xù)的磁盤存儲(chǔ)空間的分配和回收2、用位示圖管理磁盤存儲(chǔ)空間3、模擬UNIX系統(tǒng)的空閑塊組鏈接法,實(shí)現(xiàn)磁盤存儲(chǔ)空間的管理開(kāi)始把As塊內(nèi)容復(fù)制到專用塊A0:=Asi:=MA0把專用塊內(nèi)容自制到主存MA:=A0MA01?MA0=1?MA1=0?S:=MAi空閑塊數(shù)減1MA0:=MA0-1顯示分配的塊號(hào)sS:=MAi顯示:系統(tǒng)無(wú)空閑塊結(jié)束三、結(jié)構(gòu)框圖:分配框圖 否 是 是 否 否 是開(kāi)始J:=歸還塊號(hào)MA0=3?i:=MA0MAi:=jMA

溫馨提示

  • 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)論