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

操作系統(tǒng)課程設(shè)計(jì)操作系統(tǒng)課程設(shè)計(jì)操作系統(tǒng)課程設(shè)計(jì)資料僅供參考文件編號(hào):2022年4月操作系統(tǒng)課程設(shè)計(jì)版本號(hào):A修改號(hào):1頁(yè)次:1.0審核:批準(zhǔn):發(fā)布日期:任務(wù)一、進(jìn)程創(chuàng)建、控制與撤消目的:通過(guò)進(jìn)程的創(chuàng)建和控制的設(shè)計(jì)來(lái)達(dá)到如下目的:加深對(duì)進(jìn)程概念的理解,明確進(jìn)程和程序的區(qū)別;進(jìn)一步認(rèn)識(shí)并發(fā)執(zhí)行的概念,區(qū)別順序執(zhí)行和并發(fā)執(zhí)行;分析進(jìn)程爭(zhēng)用臨界資源的現(xiàn)象,學(xué)習(xí)解決進(jìn)程互斥的方法;內(nèi)容:在WINDOWS環(huán)境下模擬實(shí)驗(yàn):編寫(xiě)一程序,來(lái)模擬進(jìn)程的創(chuàng)建和撤消,要求通過(guò)終端鍵盤(pán)輸入三、四作業(yè)的名稱、大小、優(yōu)先級(jí)等。系統(tǒng)為它創(chuàng)建進(jìn)程,并把進(jìn)程控制塊PCB的內(nèi)容送到終端顯示器上輸出。同時(shí)模擬內(nèi)存空間為作業(yè)分配內(nèi)存空間,并把結(jié)果用圖形形象地表示出來(lái),同樣通過(guò)終端輸出。按進(jìn)程的優(yōu)先級(jí)的順序撤消進(jìn)程,同時(shí)通過(guò)終端顯示PCB的撤消過(guò)程和內(nèi)存的釋放過(guò)程程序流程圖:源代碼如下:#include<iostream>;usingnamespacestd;structPCB{ intpid; intpriority; intsize; intdetail; intisrun;};PCBrunning[20],ready[20];intsum=0,pid_1;voidchoose();voidmenu();intcreate(){ if(sum>=20) { cout<<"內(nèi)存已滿,請(qǐng)先結(jié)束或換出進(jìn)程"<<endl; } else { cout<<"請(qǐng)輸入第"<<sum+1<<"個(gè)進(jìn)程"<<endl; cout<<"請(qǐng)輸入進(jìn)程的pid"<<endl;cin>>running[sum+1].pid; cout<<"請(qǐng)輸入新的進(jìn)程的優(yōu)先級(jí)"<<endl; cin>>running[sum+1].priority; cout<<"請(qǐng)輸入新的進(jìn)程的大小"<<endl; cin>>running[sum+1].size; cout<<"請(qǐng)輸入新的進(jìn)程的詳情"<<endl; cin>>running[sum+1].detail; running[sum+1].isrun=1;sum++; } returnrunning[sum-1].isrun; choose();}voiddisplay(){ intpid; cout<<"請(qǐng)輸入進(jìn)程的pid"<<endl; cin>>pid; if(pid>0&&pid<=20&&running[pid].isrun==1) { cout<<"進(jìn)程的pid是:"<<running[pid].pid<<endl; cout<<"進(jìn)程的優(yōu)先級(jí)是:"<<running[pid].priority<<endl; cout<<"進(jìn)程的大小是:"<<running[pid].size<<endl; cout<<"進(jìn)程的相關(guān)信息:"<<running[pid].detail<<endl; } else { cout<<"所查看運(yùn)行進(jìn)程不存在"<<endl; } choose();}voidreplace(){ intpid1,pid2; cout<<"請(qǐng)輸入第一個(gè)替換進(jìn)程的pid"<<endl; cin>>pid1; cout<<"請(qǐng)輸入第二個(gè)替換進(jìn)程的pid"<<endl; cin>>pid2; if(pid1>0&&pid1<=20&&running[pid1].isrun==1) { if(running[pid1].priority>running[pid2].priority) { ready[20].pid=running[pid1].pid; ready[20].priority=running[pid1].priority; ready[20].size=running[pid1].size; ready[20].detail=running[pid1].detail; running[pid1].pid=running[pid2].pid; running[pid1].priority=running[pid2].priority; running[pid1].size=running[pid2].size; running[pid1].detail=running[pid2].detail; running[pid2].pid=ready[20].pid; running[pid2].priority=ready[20].priority; running[pid2].size=ready[20].size; running[pid2].detail=ready[20].detail; cout<<"替換完成"<<endl; cout<<"被替換進(jìn)程的pid是:"<<ready[20].pid<<endl; cout<<"被替換進(jìn)程的優(yōu)先級(jí)是:",ready[20].priority; cout<<"被替換進(jìn)程的大小是:"<<ready[20].size<<endl; cout<<"被替換進(jìn)程的詳情是:"<<ready[20].detail<<endl; } else { cout<<"進(jìn)程優(yōu)先級(jí)不夠大"<<endl; } } else {cout<<"所查看運(yùn)行進(jìn)程不存在"<<endl; } choose();}voidkill(){ intkpid; cout<<"請(qǐng)輸入進(jìn)程的pid:"; cin>>kpid; if(kpid>0&&kpid<20&&running[kpid].isrun==1) { running[kpid].isrun=0; } choose();}voidchoose(){ intchoose; cout<<"是否繼續(xù)操作繼續(xù),請(qǐng)輸入1,退出:按任意鍵"<<endl; cout<<"請(qǐng)輸入你的選擇:"; cin>>choose; if(choose=1){ menu(); } else{ exit(0); }}voidmenu(){ intn,i; n=1; while(n==1) { system("cls"); cout<<"進(jìn)程模擬"<<endl; cout<<"1.創(chuàng)建進(jìn)程2.查看進(jìn)程信息"<<endl; cout<<"3.撤銷(xiāo)進(jìn)程4.終止進(jìn)程"<<endl; cout<<"5.退出"<<endl; cout<<"請(qǐng)輸入你的選擇:"; cin>>i; switch(i) { case1:create();break; case2:display();break; case3:replace();break; case4:kill();break; case5:exit(0); default:n=0; } }}intmain(){ menu(); return0;}運(yùn)行結(jié)果如下:任務(wù)三、基本存儲(chǔ)器管理目的:一個(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)主存的分配和回收。內(nèi)容:從下兩種存儲(chǔ)管理方式的主存分配和回收中,選擇一種管理方式來(lái)實(shí)現(xiàn)本次實(shí)驗(yàn)任務(wù):1、在可變(動(dòng)態(tài))分區(qū)管理方式下,采用最先適應(yīng)算法。2、在分頁(yè)式管理方式下,采用位示圖來(lái)表示主存的分配情況和回收情況。程序流程圖:源代碼如下:#include<>#include<iostream>#definen10ize>=xk&&frees[i].flag==1)if(k==-1||frees[i].size<frees[k].size)k=i;if(k==-1){cout<<"無(wú)可用空閑區(qū)"<<endl;return;}if(frees[k].size-xk<=minisize){frees[k].flag=0;ad=frees[k].addr;xk=frees[k].size;}else{frees[k].size=frees[k].size-xk;ad=frees[k].addr+frees[k].size;}i=0;while(useed[i].flag!=0&&i<n)i++;if(i>=n){cout<<"error,未初始化"<<endl;if(frees[k].flag==0)frees[k].flag=1;else{frees[k].size=frees[k].size+xk;return;}}else{useed[i].addr=ad;useed[i].size=xk;useed[i].flag=a;}return;}voidfindc(charx){inti,k,a,s,t;floatS,L;s=0;while((useed[s].flag!=x||useed[s].flag==0)&&s<n)s++;if(s>=n){cout<<"沒(méi)有找到該作業(yè)"<<endl;return;}useed[s].flag=0;S=useed[s].addr;L=useed[s].size;a=-1;k=-1;i=0;while(i<maxsize&&(a==-1||k==-1)){if(frees[i].flag==1){if(frees[i].addr+frees[i].size==S)k=i;if(frees[i].addr==S+L)a=i;}i++;}if(k!=-1)if(a!=-1){frees[k].size=frees[a].size+frees[k].size+L;frees[a].flag=0;}elsefrees[k].size=frees[k].size+L;elseif(a!=-1){frees[a].addr=S;frees[a].size=frees[a].size+L;}else{t=0;while(frees[t].flag==1&&t<maxsize)t++;if(t>=maxsize){cout<<"內(nèi)存空閑表沒(méi)有空間,回收空間失敗"<<endl;useed[s].flag=a;return;}frees[t].addr=S;frees[t].size=L;frees[t].flag=1;}return;}intmain(){inti,a;floatxk;frees[0].addr=10240;frees[0].size=10240;frees[0].flag=1;for(i=1;i<maxsize;i++)frees[i].flag=0;for(i=0;i<n;i++)useed[i].flag=0;while(1){cout<<"選擇操作:"<<endl<<"0-退出"<<endl<<"1-分配內(nèi)存"<<endl<<"2-回收已分配內(nèi)存"<<endl<<"3-顯示內(nèi)存信息"<<endl;cout<<"請(qǐng)輸入你的選擇:";cin>>a;switch(a){case0:exit(0);case1:cout<<"輸入作業(yè)名:"; cin>>a; cout<<"請(qǐng)輸入作業(yè)大?。?; cin>>xk;allo(a,xk);break;case2:cout<<"輸入要回收分區(qū)的作業(yè)名";cin>>a;findc(a);break;case3:cout<<"輸出空閑分區(qū):"<<endl<<"起始地址分區(qū)長(zhǎng)度標(biāo)志"<<endl;for(i=0;i<maxsize;i++)cout<<frees[i].addr<<""<<frees[i].size<<""<<frees[i].flag<<endl;cout<<"按任意鍵,輸出已分配信息"<<endl;getch();cout<<"查看已分配分區(qū):"<<endl<<"起始地址分區(qū)長(zhǎng)度標(biāo)志"<<endl;for(i=0;i<n;i++)if(useed[i].flag!=0)cout<<useed[i].addr<<""<<useed[i].size<<""<<useed[i].flag<<endl;elsecout<<useed[i].addr<<""<<useed[i].size<<""<<useed[i].flag<<endl;break;default:cout<<"輸入有誤?。。?!"<<endl;}}return1;}任務(wù)五、死鎖的避免一、目的在多道程序系統(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)性能。二、內(nèi)容利用銀行家算法來(lái)避免死鎖的發(fā)生#include<iostream>#include<iomanip>#definemax_s20#definemax_p100intavailable[max_s];intmax[max_p][max_s];intallocation[max_p][max_s];intneed[max_p][max_s];intrequest[max_s];intrequestPID;intsource;intprocess;usingnamespacestd;3456345630871332開(kāi)始把A[s]塊內(nèi)容復(fù)制到專用塊A[0]:=A[s]i:=MA[0]把專用塊內(nèi)容自制到主存MA:=A[0]MA[0]≤1MA[0]=1MA[1]=0S:=MA[i]空閑塊數(shù)減1MA[0]:=MA[0]-1顯示分配的塊號(hào)sS:=MA[i]顯示:系統(tǒng)無(wú)空閑塊結(jié)束開(kāi)始J:=歸還塊號(hào)MA[0]=3i:=MA[0]MA[i]:=jMA[0]:=MA[0]+1MA[j]:=MAMA[0]:=1MA[1]:=j結(jié)束 while(select=='y'||select=='Y') { cout<<"請(qǐng)輸入柱面號(hào):"; cin>>cyd; cout<<"請(qǐng)輸入磁道號(hào):"; cin>>tra; cout<<"請(qǐng)輸入物理地址號(hào):"; cin>>sor; disk[cyd][4*tra+sor]=1; cout<<"是否繼續(xù)Y|N"<<endl; cout<<"請(qǐng)輸入你的選擇:"; getchar(); cin>>select; }}voidloca(intdisk[8][8]){ inti,j; intflag=0; intcyd,tra,sor; for(i=0;i<8;i++) { for(j=0;j<8;j++)if(disk[i][j]==0){disk[i][j]=1;flag=1;break;}if(flag==1)break; } if(flag==1) { cyd=i;tra=j/4; sor=j%4; cout<<"分配到的柱面號(hào)、磁道號(hào)、物理地址分別如下:"<<endl; cout<<cyd<<tra<<sor; cout<<""<<endl; } elsecout<<"分配失敗,請(qǐng)檢查剩余空間"<<endl;}voidreclaim(intdisk[8][8]){ intcyd,tra,sor;

溫馨提示

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