




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
操作系統(tǒng)課程設計操作系統(tǒng)課程設計操作系統(tǒng)課程設計資料僅供參考文件編號:2022年4月操作系統(tǒng)課程設計版本號:A修改號:1頁次:1.0審核:批準:發(fā)布日期:任務一、進程創(chuàng)建、控制與撤消目的:通過進程的創(chuàng)建和控制的設計來達到如下目的:加深對進程概念的理解,明確進程和程序的區(qū)別;進一步認識并發(fā)執(zhí)行的概念,區(qū)別順序執(zhí)行和并發(fā)執(zhí)行;分析進程爭用臨界資源的現(xiàn)象,學習解決進程互斥的方法;內容:在WINDOWS環(huán)境下模擬實驗:編寫一程序,來模擬進程的創(chuàng)建和撤消,要求通過終端鍵盤輸入三、四作業(yè)的名稱、大小、優(yōu)先級等。系統(tǒng)為它創(chuàng)建進程,并把進程控制塊PCB的內容送到終端顯示器上輸出。同時模擬內存空間為作業(yè)分配內存空間,并把結果用圖形形象地表示出來,同樣通過終端輸出。按進程的優(yōu)先級的順序撤消進程,同時通過終端顯示PCB的撤消過程和內存的釋放過程程序流程圖:源代碼如下:#include<iostream>;usingnamespacestd;structPCB{ intpid; intpriority; intsize; intdetail; intisrun;};PCBrunning[20],ready[20];intsum=0,pid_1;voidchoose();voidmenu();intcreate(){ if(sum>=20) { cout<<"內存已滿,請先結束或換出進程"<<endl; } else { cout<<"請輸入第"<<sum+1<<"個進程"<<endl; cout<<"請輸入進程的pid"<<endl;cin>>running[sum+1].pid; cout<<"請輸入新的進程的優(yōu)先級"<<endl; cin>>running[sum+1].priority; cout<<"請輸入新的進程的大小"<<endl; cin>>running[sum+1].size; cout<<"請輸入新的進程的詳情"<<endl; cin>>running[sum+1].detail; running[sum+1].isrun=1;sum++; } returnrunning[sum-1].isrun; choose();}voiddisplay(){ intpid; cout<<"請輸入進程的pid"<<endl; cin>>pid; if(pid>0&&pid<=20&&running[pid].isrun==1) { cout<<"進程的pid是:"<<running[pid].pid<<endl; cout<<"進程的優(yōu)先級是:"<<running[pid].priority<<endl; cout<<"進程的大小是:"<<running[pid].size<<endl; cout<<"進程的相關信息:"<<running[pid].detail<<endl; } else { cout<<"所查看運行進程不存在"<<endl; } choose();}voidreplace(){ intpid1,pid2; cout<<"請輸入第一個替換進程的pid"<<endl; cin>>pid1; cout<<"請輸入第二個替換進程的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<<"被替換進程的pid是:"<<ready[20].pid<<endl; cout<<"被替換進程的優(yōu)先級是:",ready[20].priority; cout<<"被替換進程的大小是:"<<ready[20].size<<endl; cout<<"被替換進程的詳情是:"<<ready[20].detail<<endl; } else { cout<<"進程優(yōu)先級不夠大"<<endl; } } else {cout<<"所查看運行進程不存在"<<endl; } choose();}voidkill(){ intkpid; cout<<"請輸入進程的pid:"; cin>>kpid; if(kpid>0&&kpid<20&&running[kpid].isrun==1) { running[kpid].isrun=0; } choose();}voidchoose(){ intchoose; cout<<"是否繼續(xù)操作繼續(xù),請輸入1,退出:按任意鍵"<<endl; cout<<"請輸入你的選擇:"; cin>>choose; if(choose=1){ menu(); } else{ exit(0); }}voidmenu(){ intn,i; n=1; while(n==1) { system("cls"); cout<<"進程模擬"<<endl; cout<<"1.創(chuàng)建進程2.查看進程信息"<<endl; cout<<"3.撤銷進程4.終止進程"<<endl; cout<<"5.退出"<<endl; cout<<"請輸入你的選擇:"; 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;}運行結果如下:任務三、基本存儲器管理目的:一個好的計算機系統(tǒng)不僅要有一個足夠容量的、存取速度高的、穩(wěn)定可靠的主存儲器,而且要能合理地分配和使用這些存儲空間。當用戶提出申請存儲器空間時,存儲管理必須根據(jù)申請者的要求,按一定的策略分析主存空間的使用情況,找出足夠的空閑區(qū)域分配給申請者。當作業(yè)撤離或主動歸還主存資源時,則存儲管理要收回作業(yè)占用的主存空間或歸還部分主存空間。主存的分配和回收的實現(xiàn)與主存儲器的管理方式有關的,通過本實驗幫助學生理解在不同的存儲管理方式下怎樣實現(xiàn)主存的分配和回收。內容:從下兩種存儲管理方式的主存分配和回收中,選擇一種管理方式來實現(xiàn)本次實驗任務:1、在可變(動態(tài))分區(qū)管理方式下,采用最先適應算法。2、在分頁式管理方式下,采用位示圖來表示主存的分配情況和回收情況。程序流程圖:源代碼如下:#include<>#include<iostream>#definen10ize>=xk&&frees[i].flag==1)if(k==-1||frees[i].size<frees[k].size)k=i;if(k==-1){cout<<"無可用空閑區(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<<"沒有找到該作業(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<<"內存空閑表沒有空間,回收空間失敗"<<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-分配內存"<<endl<<"2-回收已分配內存"<<endl<<"3-顯示內存信息"<<endl;cout<<"請輸入你的選擇:";cin>>a;switch(a){case0:exit(0);case1:cout<<"輸入作業(yè)名:"; cin>>a; cout<<"請輸入作業(yè)大小:"; cin>>xk;allo(a,xk);break;case2:cout<<"輸入要回收分區(qū)的作業(yè)名";cin>>a;findc(a);break;case3:cout<<"輸出空閑分區(qū):"<<endl<<"起始地址分區(qū)長度標志"<<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ū)長度標志"<<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;}任務五、死鎖的避免一、目的在多道程序系統(tǒng)中,多個進程的并發(fā)執(zhí)行來改善系統(tǒng)的資源利用率,提高系統(tǒng)的吞吐量,但可能發(fā)生一種危險——死鎖。所謂死鎖(Deadlock),是指多個進程在運行過程中因爭奪資源而造成的一種僵局(DeadlyEmbrace),當進程處于這種狀態(tài)時,若無外力作用,他們都無法在向前推進。我們可以在分配資源時加上限制條件就可以預防死鎖,但是,在每一種預防死鎖的方法之中,都施加了較強的限制條件;而在避免死鎖的方法中,所施加的限制條件較弱,有可能獲得令人滿意的系統(tǒng)性能。二、內容利用銀行家算法來避免死鎖的發(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開始把A[s]塊內容復制到專用塊A[0]:=A[s]i:=MA[0]把專用塊內容自制到主存MA:=A[0]MA[0]≤1MA[0]=1MA[1]=0S:=MA[i]空閑塊數(shù)減1MA[0]:=MA[0]-1顯示分配的塊號sS:=MA[i]顯示:系統(tǒng)無空閑塊結束開始J:=歸還塊號MA[0]=3i:=MA[0]MA[i]:=jMA[0]:=MA[0]+1MA[j]:=MAMA[0]:=1MA[1]:=j結束 while(select=='y'||select=='Y') { cout<<"請輸入柱面號:"; cin>>cyd; cout<<"請輸入磁道號:"; cin>>tra; cout<<"請輸入物理地址號:"; cin>>sor; disk[cyd][4*tra+sor]=1; cout<<"是否繼續(xù)Y|N"<<endl; cout<<"請輸入你的選擇:"; 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<<"分配到的柱面號、磁道號、物理地址分別如下:"<<endl; cout<<cyd<<tra<<sor; cout<<""<<endl; } elsecout<<"分配失敗,請檢查剩余空間"<<endl;}voidreclaim(intdisk[8][8]){ intcyd,tra,sor;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 【正版授權】 ISO 11901-1:2025 EN Tools for pressing - Gas springs - Part 1: General specifications
- 【正版授權】 ISO 9466:2025 EN Railway applications - Coating of passenger rail vehicles
- 【正版授權】 ISO/IEC 15045-4-2:2024 EN Information technology - Home Electronic System (HES) gateway - Part 4-2: Structure - Simple gateway
- 2025年物流運輸項目融資擔保合同匯編
- 2025年度綠色能源項目融資居間合作協(xié)議范本
- 幼兒園健康教育教學計劃
- 林業(yè)行業(yè)會計個人工作計劃
- 財務信息化建設方案計劃
- 學習成果與展示活動計劃
- 前臺工作中的情緒管理技巧計劃
- 2025年中華工商時報社事業(yè)單位招聘12人歷年高頻重點模擬試卷提升(共500題附帶答案詳解)
- 2025年初中語文:春晚觀后感三篇
- 《教育強國建設規(guī)劃綱要(2024-2035年)》解讀講座
- 預算績效評價管理機構入圍投標文件(技術方案)
- 非物質文化遺產拓印 課件
- 當代世界經濟與政治 第八版 課件 第四章 發(fā)展中國家的經濟與政治
- 平面構成(普通高等院校藝術設計專業(yè))全套教學課件
- 中小學課件人造衛(wèi)星課件
- 新版冀教版(冀人版)科學五年級下冊全冊教案
- 采礦權抵押擔保細則
- 臨床試驗中經常遇到的100個問題
評論
0/150
提交評論