操作系統(tǒng)課程設(shè)計小型的操作系統(tǒng)_第1頁
操作系統(tǒng)課程設(shè)計小型的操作系統(tǒng)_第2頁
操作系統(tǒng)課程設(shè)計小型的操作系統(tǒng)_第3頁
操作系統(tǒng)課程設(shè)計小型的操作系統(tǒng)_第4頁
操作系統(tǒng)課程設(shè)計小型的操作系統(tǒng)_第5頁
免費預(yù)覽已結(jié)束,剩余20頁可下載查看

下載本文檔

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

文檔簡介

1、操作系統(tǒng)課程設(shè)計報告題目:一個小型的操作系統(tǒng)班級:計122(杏)學(xué)號:1213023075姓名:賈蘇日期:2014/06/231 .實驗平臺(1)軟件平臺:開發(fā)系統(tǒng)平臺:Windows7(64)Microsoftvisualc+6.0測試系統(tǒng)平臺:Windows7(64)(2)硬件平臺:cpu:AMDA6-3420APU內(nèi)存:4GB硬盤:500G2 .所需實現(xiàn)的功能及相應(yīng)的闡述:(1)進(jìn)程調(diào)度管理為了貼切現(xiàn)實中的os,采用RR(輪轉(zhuǎn)調(diào)度算法),且不提供用戶顯式的選擇調(diào)度算法,即對用戶是透明的?,F(xiàn)實中的處理器主頻為1Ghz3Ghz,選取中間點為1.5Ghz,得時間片大小為0.7ns,為方便計算*

2、10,則時間片大小定為7ns。假設(shè)進(jìn)程之間的調(diào)度和切換不耗費cpu時間。(2)死鎖的檢測與處理檢測當(dāng)然采用的是銀行家算法處理:讓用戶選擇kill一個進(jìn)程,釋放他所占有的所有資源。(3)虛擬分頁調(diào)度管理虛擬分頁:給出的是邏輯值訪問磁盤將那個數(shù)據(jù)塊放入到內(nèi)存中內(nèi)存中的地址采用一定的算法相對應(yīng)于磁盤的地址。特規(guī)定訪存采用的是按字節(jié)尋址內(nèi)存的大小128KB外存的大小1MB即整個系統(tǒng)可以提供1MB的邏輯地址空間供進(jìn)程進(jìn)行訪問(在地址總線足夠掃描內(nèi)存的情況下)。虛擬地址映射采用:直接映射法規(guī)定的8kB為一個頁面,故內(nèi)存有16個頁面,外存有128個頁面。如果產(chǎn)生了內(nèi)存已滿,便會產(chǎn)生缺頁中斷,淘汰采用FIFO

3、算法,利用一個隊列來做部分內(nèi)外存的對應(yīng)表00,128,2*128+0.11,129,2*128+1.22,130,2*128+2.*33333333333333316127,128+16,2*128+16(4) I/O中斷處理設(shè)中斷來自兩個方面:1 .DMA輸送開始和結(jié)束時的中斷設(shè)定一個宏定義為DMA一次傳輸?shù)臄?shù)據(jù)量的大小->DmaNum假定為10kb每次DMA開始:耗費1nscpu時間進(jìn)行中斷處理DMA結(jié)束:耗費2nscpu時間進(jìn)行中斷處理由操作系統(tǒng)課程知,DMA傳輸數(shù)據(jù)時不需要CPU的干預(yù)2 .隨機的中斷發(fā)生外部隨機中斷,cpu無條件的立即響應(yīng),并執(zhí)行中斷處理程序,同樣的假設(shè)中斷處理

4、程序的調(diào)度和切換不耗費cpu時間。(5)內(nèi)存地址越界或內(nèi)存不足進(jìn)程訪問內(nèi)存時超過了進(jìn)程所要的最大值,此時發(fā)生中斷,已達(dá)到內(nèi)存保護的功能。內(nèi)存不足時即為當(dāng)前的動態(tài)地址重定位寄存器中的值+進(jìn)程所需的內(nèi)存大小超過了內(nèi)存的上限,此時進(jìn)行內(nèi)存緊湊,同時修改被移動的進(jìn)程中的各個有關(guān)參數(shù)。3 .總體設(shè)計開始4 .程序所需的數(shù)據(jù)結(jié)構(gòu)及其抽象過程先定義本次操作系統(tǒng)外設(shè)的資源,假設(shè)有A類資源10個,B類資源5個,C類資源6個->NeedRescourse;作業(yè)中的各個進(jìn)程都需要一個代號->ProcessName各個進(jìn)程到來的時間不同,故需要記錄一下->ArriveTime,每個進(jìn)程所需要的cpu

5、時間是不夠的->NeedCpuTime,每個進(jìn)程所需的內(nèi)存空間大小是不一樣的->NeedMem。各個進(jìn)程中的任務(wù)是不同的故需要預(yù)先設(shè)定本進(jìn)程中所要執(zhí)行的操作類型->OpKind,如果是計算型的直接給出所需要的cpu時間即可,如果是I/O型的還需要給出所傳輸?shù)臄?shù)據(jù)量的大小->NeedTranDataNum,在止匕可以給OpKind做一個union型的結(jié)構(gòu)。多道程序程序在運行的過程中需要對進(jìn)程所需內(nèi)存的地址進(jìn)行動態(tài)地址重定位,故在系統(tǒng)之中需要設(shè)置一個動態(tài)地址重定位寄存器,其中的內(nèi)容是下次進(jìn)程可以使用的內(nèi)存始址->DynReg。抽象結(jié)果:structProcesscha

6、rProcessName10;/進(jìn)程的名字intArriveTime;/ns級另UintNeedCpuTime;此進(jìn)程所需要的時間intNeedMem;/所需要的cpu時間FlagForOpOpKind;用于指示是何種操作intNeedTranDataNum;給IO用的數(shù)據(jù)塊intOpCpus;計算類型的操作所需的cpu時間intNeedRescourse3,需要資源的數(shù)目NULL代表不需要使用Process*next;5 .詳細(xì)設(shè)計1 .進(jìn)程信息查看依次遍歷全部的鏈表,并將它們的信息依次打印出來。實現(xiàn)函數(shù)名:voidShowProcessInfo()2 .死鎖的檢測和解除假定本系統(tǒng)中的各個所

7、需資源均是獨占型資源,在進(jìn)程運行的過程中不再釋放,故只需要遍歷鏈表將各個進(jìn)程中所需的資源統(tǒng)計出來,只要不大于系統(tǒng)中預(yù)設(shè)的即可,一旦進(jìn)程所需的資源大于系統(tǒng)中的最大量,給予用戶選擇kill一進(jìn)程,已達(dá)到釋放資源的目的。死鎖檢測函數(shù):voidDeedLock()voidDeedLock_LookNeedRescourse()死鎖解除函數(shù):voidDeedLock_KillProcess()3 .內(nèi)存空間查看查看各個進(jìn)程所占用的內(nèi)存的空間,借助于DynReg這個全局變量實行內(nèi)存空間的動態(tài)重定位。實現(xiàn)函數(shù):voidLookMem()4 .查看CPU運行以CPU的角度,查看作業(yè)的運行情況,實現(xiàn)函數(shù):voi

8、dLookCpu()voidLookCpu_ShowRunningProcess()5 .外存空間查看外存空間是用戶的工作區(qū)間,故只要遍歷整個進(jìn)程鏈表,統(tǒng)計出所有進(jìn)程占有的全部空間即可。實現(xiàn)函數(shù):voidLookDiskMem()6 .查看運行查看系統(tǒng)運行中各個資源的使用情況:實現(xiàn)函數(shù):voidShowRunningProcess()voidShowRunningProcess_CalculateCpuNeed(int*,int)7 .內(nèi)存管理缺頁調(diào)度算法:FIFO(借助于循環(huán)隊列實現(xiàn))實現(xiàn)函數(shù):voidMemToDiskMem()8 .程序運行和調(diào)試1.打開程序的初始界面:按系統(tǒng)提示輸入進(jìn)程

9、數(shù),及其相關(guān)的各個參數(shù)2.輸入完成后的主界面:用戶可以按下相關(guān)的選擇鍵實施有關(guān)的各個操作。3.按下1查看各個進(jìn)程的信息可以看到剛剛輸入的各個進(jìn)程的有關(guān)信息4.按下2MauvJDhIe口kFMaqIkKkF*1謂性任堇聯(lián)世特.5.按下3查看運行時CPU的使用情況可見此時系統(tǒng)是安全的。系統(tǒng)出差提示按下1顯示當(dāng)前各個進(jìn)程所需的資源然后kill進(jìn)程1后在查看一下作業(yè)中的進(jìn)程,發(fā)現(xiàn)被kill的進(jìn)程沒有的,實現(xiàn)了此功能。6.按下4查看內(nèi)存的使用情況7.按下5查看外存空間JO(E1AIale-二4。nt卡片.8.按下6查看運行情況9 .按下7產(chǎn)看內(nèi)存使用情況(1)沒有產(chǎn)生缺頁若.1TTrUM-1西便占用!F

10、fDE«13QJIdEUlHMT?UK-11ItUMtLDHIa貝版占用!t*岐頁睥或過疆te-vtrri-JncFrjHuansILrm-Ldun-更費占閏fnsKi=JdniilhmmayiichtltHditInns更值占用Enic*-s«e麟質(zhì)調(diào)度立粗;¥H.FDEHi.13jIaxijZiM«dWM1e1«-Mljdng.rncBri4jxulm-iJjmhic1-i-id.ing_to*v>rvi二JifluuixdlmnJtIwvdLlriy:.(2)產(chǎn)生缺頁10 .按下9退出此系統(tǒng)日"一日收,rhis$口b

11、71;slarMIF嶺fGndjFle-Mec&llyJlwnViSiri*t=3時PW-55-RJIy融E«0"1刖育7 .遇到的問題(1)自己編寫映射表相當(dāng)?shù)睦щy,一度想改用Java語言,在于對C+語言的了解不夠。(2)出錯處理沒有完全做完,做的不夠精細(xì),很多地方直接結(jié)束(3)對用戶輸入的數(shù)據(jù)做的類型檢查不夠充分(4)deletejob時總是出現(xiàn)系統(tǒng)錯誤,后debug發(fā)現(xiàn),由于對象之中存在不為空的指針,導(dǎo)致出錯,故再釋放指針?biāo)伎臻g后系統(tǒng)正常運行。8 .源代碼#include<iostream>#include<cstring>#incl

12、ude<windows.h>#include<cstdlib>循環(huán)隊列的頭文件#include"CirQueue.h"/usingnamespacestd;#defineMAXMEM128/定義本次操作系統(tǒng)的最大內(nèi)存容量#defineMAXDISKMEM1024/定義本次操作系統(tǒng)的最大外存容量#defineYE10/定義本次操作系統(tǒng)的分頁大小并以此實現(xiàn)虛擬存儲intUsedMAXMEM=0;intUsedMAXDISKMEM=0;/定義進(jìn)程可能用到的外部資源#defineA10#defineB5#defineC6/cpu# defineRR7/定義時

13、間片大小為7ns# defineBEFOREDMA1/DMA之前所需的cpu時間# defineAFTERDMA2/DMA之后所需的cpu時間# defineONEDMANUM10/DMA一次最多傳送10kb的數(shù)據(jù)enumFlagForOpIO,Calculate,others);intDynReg=0;/定義用于描述動態(tài)地址重定位寄存器的全局變量structProcesscharProcessName10;/進(jìn)程的名字intArriveTime;/ns級別intNeedCpuTime;/此進(jìn)程所需要的時間intNeedMem;/所需要的cpu時間FlagForOpOpKind;/用于指示是何

14、種操作intNeedTranDataNum;/給IO用的數(shù)據(jù)塊intOpCpus;/計算類型的操作所需的cpu時間/假設(shè)others不需要其他的各個操作。intNeedRescourse3;/需要資源的數(shù)目NULL代表不需要使用0a.Process*next;);classJOBProcess*p;Process*head;Process*head1;/建立一個備用的鏈表/Process*wait,*runing;/wait為等待鏈表running是正在運行的進(jìn)程public:JOB()head1二p二head=NULL;/初始化為空cout<<"Pleasewaitin

15、g.TheSystemisinitial.”<<endl;Sleep(2000);/暫停一秒maybeSleep()cout<<"Systemisalready.Nowyoushouldenterinformationofyoujob.”<<endl;intn;cout<<"enteryourjob'sprocessnum.”<<endl;cin>>n;while(n)p=newProcess();cout<<"pleaseenterthenameofprocess.”&l

16、t;<endl;cin>>p->ProcessName;cout<<"pleaseenterthearrivetimeofprocess.”<<endl;cin>>p->ArriveTime;cout<<"pleaseentertheNeedCpuTimeofprocess.”<<endl;cin>>p->NeedCpuTime;cout<<"pleaseentertheNeedMemofprocess.”<<endl;cin>

17、>p->NeedMem;while(p->NeedMem>128)cout<<"ThisSystemcan'tnotacceptyourjob!Maybeyourjobistoolarge!Pleaseenteranum<128”<<endl;cin>>p->NeedMem;cout<<"pleaseentertheoperationofprocess.0toTranDiskNum,1tocpu”<<endl;intnn;cin>>nn;if(nn=0)cou

18、t<<"pleaseentertheNeedTranDataNum.”<<endl;cin>>p->NeedTranDataNum;p->OpKind=IO;elsecout<<"pleaseentertheOpCpus.”<<endl;cin>>p->OpCpus;p->OpKind=Calculate;cout<<"PLeaseentertheA,BorCyouneed”<<endl;for(inti=0;i<3;i+)cin>&

19、gt;p->NeedRescoursei;p->next=NULL;/尾結(jié)點為空表示一個節(jié)點的完成下面進(jìn)行插入鏈表的工作head=SortLinkTable(head,p);n-;/whileLinkCopy();/將本次整理好的鏈表依次賦值賦給備用鏈表Provide_Same_Process_Name();/檢查重名現(xiàn)象voidProvide_Same_Process_Name();voidVisitLinkTable();Process*SortLinkTable(Process*,Process*);voidBeginRunning();voidShowProcessInfo

20、();voidDeedLock();voidDeedLock_KillProcess();voidDeedLock_LookNeedRescourse();voidLookCpu();voidLookCpu_ShowRunningProcess();voidLookMem();voidShowRunningProcess();voidShowRunningProcess_CalculateCpuNeed(int*,int);voidLookDiskMem();voidLookMem_ChangeMem();boolCheckMem();voidLookDiskMem_Change();void

21、LinkCopy();voidMemToDiskMem();JOB()deletehead;deletehead1;deletep;JOB*job;/設(shè)置全局變量voidJOB:Provide_Same_Process_Name()system("cls");charbuffer10;Process*temp=head1;Process*temp1=head1;while(temp)temp1=temp->next;while(temp1)if(strcmp(temp->ProcessName,temp1->ProcessName)=0)yourcout&

22、lt;<"Mini_OperationSystemhaddetectthesamenameprocessinyourjob!"<<endl;cout<<"ThisSystemcan'tacceptthissitution.PleaseRenameyourProcess!nThanksforcorporation!"<<endl;cout<<"ThisisALLyourprocessname:"<<endl;VisitLinkTable();cout<<

23、;"Enter1torenametheformer,。torenamethelater!"<<endl;intn=0;cin>>n;"<<endl;cout<<"NowEnternewNameif(n=0)cin>>buffer;strcpy(temp1->ProcessName,buffer);elsecin>>buffer;strcpy(temp->ProcessName,buffer);/endiftemp1=temp1->next;/endwhiletemp

24、1temp=temp->next;/whilevoidAgainEnterJOB()system("cls");deletejob;job=newJOB();voidJOB:VisitLinkTable()/不加JOB前綴的時候編譯不過加上代表此函數(shù)是JOBclass之中的while(head1)cout<<head1->ProcessName<<endl;head1=head1->next;cout<<"nNow,YoucanseeTheListtocheckout."<<endl;vo

25、idJOB:LinkCopy()Process*temp=NULL,*temp2=head;if(head1二二NULL)cout<<"LinkCopy()isHere!"<<endl;if(head1)/不為空時將其下一個置為空head1->next=NULL;head1=NULL;while(temp2)/applyanewnodetemp=newProcess();strcpy(temp->ProcessName,temp2->ProcessName);temp->ArriveTime=temp2->ArriveT

26、ime;temp->NeedCpuTime=temp2->NeedCpuTime;temp->NeedMem=temp2->NeedMem;if(temp2->OpKind=IO)temp->OpKind=IO;temp->NeedTranDataNum=temp2->NeedTranDataNum;elsetemp->OpKind=Calculate;temp->OpCpus=temp2->OpCpus;for(inti=0;i<3;i+)temp->NeedRescoursei=temp2->NeedRes

27、coursei;/applyendtemp->next=NULL;cout<<"copyisright!"<<endl;if(head1二二NULL)head1=temp;elseProcess*k=head1;while(k->next)/尋找到最后一個節(jié)點不斷的循環(huán)退不出去k=k->next;k->next=temp;/cout<<"copyisright!"<<endl;temp2=temp2->next;/whileif(head1二二NULL)cout<<

28、"LinkCopy()isout!"<<endl;system("pause");voidJOB:MemToDiskMem()system("cls");CirQueue<int>q(16);/一共定義的16個頁面q.EnQueue(e);int*Mem;intcount=0;/記錄下進(jìn)程的數(shù)目Process*temp_head1=head1;while(temp_head1)count+;temp_head1=temp_head1->next;temp_head1=head1;Mem=newintcou

29、nt;inttemp_count=0;while(temp_head1)intBegin=0;cout<<"Process:"<<temp_head1->ProcessName<<"memeryusesituation:"<<endl;Begin+=temp_head1->NeedMem;intk=0;/所需的頁面數(shù)目if(Begin%YE=0)k二Begin/YE;elsek二Begin/YE+1;Memtemp_count+=k;cout<<k<<"頁被占用

30、!"<<endl;temp_head1=temp_head1->next;/endwhilecout<<endl;temp_head1=head1;cout<<"Wanttosee缺頁調(diào)度過程Y/N."<<endl;charoption;inttotal=0,AllTotal=0;cin>>option;if(option='y'|option='Y')for(inti=0;i<count;i+)AllTotal+=Memi;for(intj=0;j<Me

31、mi;j+)if(q.EnQueue(true)temp_count=0;while(temp_count<i)temp_head1=temp_head1->next;temp_count+;cout<<"Process:"<<temp_head1->ProcessName<<"needmemisloading.ok"<<endl;temp_head1=head1;elsetemp_count=0;while(temp_count<i)temp_head1=temp_head1-&g

32、t;next;temp_count+;cout<<"Process:"<<temp_head1->ProcessName<<"needmemisloadingerror缺頁調(diào)度"<<endl;temp_head1=head1;total+;boolflag=q.DeQueue();if(q.EnQueue(true)缺頁調(diào)度"<<endl;cout<<"Process:"<<temp_head1->ProcessName<&

33、lt;"needmemisloadingok/for2cout<<endl;/for1cout<<"一共產(chǎn)生了:"<<total<<"次缺頁中斷.n"<<"缺頁中斷率為:"<<(float)total/AllTotal<<"%"<<endl;system("pause");voidJOB:LookCpu_ShowRunningProcess()system("cls");

34、intNowTime=0;Process*run=headl;/臨時試用一下最終需要3還為NULLProcess*wait=headl;/dsvrfgvregrefswgvregegsdgreintcount=0;while(run)計算等待運行的進(jìn)程的個數(shù)count+;run=run->next;run=headl;/還原運行鏈表/建立一個映射表char*Run_Process_Name=newchar*count;/申請一個動態(tài)的二維表for(inti=0;i<count;i+)/響應(yīng)的二維空間申請完畢Run_Process_Namei=newchar10;strcpy(Run

35、_Process_Namei,run->ProcessName);run=run->next;run=NULL;int*Run_Process_CpuNeed=newintcount;/映射表建立完畢/計算各個進(jìn)程中所需的cpu時間ShowRunningProcess_CalculateCpuNeed(Run_Process_CpuNeed,count);Process*priorNode=NULL;/Process*tail=head;while(true)/inttimell=wait->ArriveTime;if(wait&&NowTime>=wa

36、it->ArriveTime)if(run二二NULL)run=wait;priorNode=run;else/連接到尾部Process*temp=run;while(temp->next!=priorNode)/尋找到前驅(qū)節(jié)點temp=temp->next;temp->next=wait;/將結(jié)點連接上鏈表priorNode=wait;wait->next=run;wait=wait->next;釋放一個結(jié)點priorNode->next=run;/連接上頭部形成循環(huán)鏈表if(run)run=run->next;/重新調(diào)度cout<<

37、;NowTime<<"->"<<NowTime+RR<<"Process:"<<run->ProcessName<<"isRunning"<<endl;cout<<"cpu調(diào)度下一個運行的進(jìn)程。"<<endl;NowTime+=RR;/依據(jù)上面建設(shè)的映射按名取出所需運行的時間intALLNeedCpu;for(inti=0;i<count;i+)if(strcmp(Run_Process_Namei,r

38、un->ProcessName)=0)break;ALLNeedCpu=Run_Process_CpuNeedi;ALLNeedCpu-=RR;/減去本次運行的時間if(ALLNeedCpu>0)Run_Process_CpuNeedi=ALLNeedCpu;/重新寫回到數(shù)組中保持一致性else/此節(jié)點已經(jīng)做完了請直接釋放if(run->next=run)run=NULL;elseProcess*k=run;while(k->next!=run)/尋找當(dāng)前運行節(jié)點的前一個結(jié)點k=k->next;k->next=k->next->next;run=

39、k;/endif(run)if(wait二二NULL&&run=二NULL)/沒有等待CPU的進(jìn)程了和沒有正在運行的進(jìn)程滿足退出的要求->退出break;NowTime+;/whilesystem("pause");LinkCopy();/將受損的鏈表修復(fù)voidJOB:ShowRunningProcess()system("cls");intNowTime=0;Process*run=head1;/臨時試用一下最終需要3還為NULLProcess*wait=head1;/dsvrfgvregrefswgvregegsdgreint

40、count=0;while(run)/計算等待運行的進(jìn)程的個數(shù)count+;run=run->next;run=head1;/還原運行鏈表/建立一個映射表char*Run_Process_Name=newchar*count;/申請一個動態(tài)的二維表for(inti=0;i<count;i+)/響應(yīng)的二維空間申請完畢Run_Process_Namei=newchar10;strcpy(Run_Process_Namei,run->ProcessName);run=run->next;run=NULL;int*Run_Process_CpuNeed=newintcount;

41、/映射表建立完畢ShowRunningProcess_CalculateCpuNeed(Run_Process_CpuNeed,count);Process*priorNode=NULL;while(true)/inttime11=wait->ArriveTime;if(wait&&NowTime>=wait->ArriveTime)if(run=NULL)run=wait;priorNode=run;else/連接到尾部Process*temp=run;while(temp->next!=priorNode)/尋找到前驅(qū)節(jié)點temp=temp->

42、next;temp->next=wait;/將結(jié)點連接上鏈表priorNode=wait;/wait->next=run;wait=wait->next;/釋放一個結(jié)點priorNode->next=run;/連接上頭部形成循環(huán)鏈表)if(run)run=run->next;/重新調(diào)度cout<<NowTime<<"->"<<NowTime+RR<<"Process:"<<run->ProcessName<<"isRunning”&

43、lt;<endl;cout<<"NeedRescourse:A"<<run->NeedRescourse0<<"B"<<run->NeedRescourse1<<"c"<<run->NeedRescourse2<<"isusing.”<<endl;cout<<"cpu調(diào)度下一個運行的進(jìn)程。"<<endl;NowTime+=RR;/依據(jù)上面建設(shè)的映射按名取出所需運行

44、的時間intALLNeedCpu;for(inti=0;i<count;i+)if(strcmp(Run_Process_Namei,run->ProcessName)=0)break;)ALLNeedCpu=Run_Process_CpuNeedi;ALLNeedCpu-=RR;/減去本次運行的時間if(ALLNeedCpu>0)Run_Process_CpuNeedi=ALLNeedCpu;/重新寫回到數(shù)組中保持一致性else/此節(jié)點已經(jīng)做完了請直接釋放if(run->next=run)run=NULL;elseProcess*k=run;while(k->n

45、ext!=run)/尋找當(dāng)前運行節(jié)點的前一個結(jié)點k=k->next;k->next=k->next->next;run=k;/endif(run)if(wait二二NULL&&run=二NULL)/沒有等待CPU的進(jìn)程了和沒有正在運行的進(jìn)程滿足退出的要求->退出break;NowTime+;/whilesystem("pause");LinkCopy();/將受損的鏈表修復(fù)voidJOB:ShowRunningProcess_CalculateCpuNeed(int*Run_Process_CpuNeed,intcount)Pr

46、ocess*temp=head1;for(inti=0;i<count;i+)intALLNeedCpu=temp->NeedCpuTime;if(temp->OpKind=IO)if(temp->NeedTranDataNum%ONEDMANUM=0)ALLNeedCpu+=(temp->NeedTranDataNum/ONEDMANUM)*(BEFOREDMA+AFTERDMA);elseALLNeedCpu+=(temp->NeedTranDataNum/ONEDMANUM+1)*(BEFOREDMA+AFTERDMA);elseALLNeedCpu+

47、=temp->OpCpus;Run_Process_CpuNeedi=ALLNeedCpu;temp=temp->next;voidJOB:ShowProcessInfo()system("cls");Process*temp=head1;intcount=0;while(temp)cout<<"The"<<count+1<<"processinfo"<<endl;cout<<"Name:"<<temp->ProcessNam

48、e<<'.'<<endl;cout<<"ArriveTime:"<<temp->ArriveTime<<'.'<<endl;cout<<"NeedCpuTime:"<<temp->NeedCpuTime<<'.'<<endl;cout<<"NeedMem:"<<temp->NeedMem<<'.'&l

49、t;<endl;cout<<"OpKind:"<<temp->OpKind<<'.'<<endl;cout<<"NeedRescourse:"<<"A:"<<temp->NeedRescourse0<<",B:"<<p->NeedRescourse1<<",C:"<<p->NeedRescourse2<<en

50、dl;temp=temp->next;cout<<'n'count+;cout<<"enteranykeyreturnmain()."<<endl;getchar();getchar();voidJOB:DeedLock()system("cls");Process*temp=head1;intLocalA=0,LocalB=0,LocalC=0;while(temp)LocalA+=temp->NeedRescourse0;LocalB+=temp->NeedRescourse1;L

51、ocalB+=temp->NeedRescourse2;temp=temp->next;if(LocalA>A|LocalB>B|LocalC>C)cout<<"NeedRescourseisover!”<<endl;cout<<"Enter1toSeeNeedRescourse,elsetomain()!”<<endl;intn;cin>>n;if(n=1)DeedLock_LookNeedRescourse();elsecout<<"YourJObisok!S

52、ystemNowissafe!"<<endl;system("pause");voidJOB:DeedLock_LookNeedRescourse()Process*temp=head1;cout<<"nNeedRescourse:ABC'n"'<<temp->NeedRescourse1<<"while(temp)cout<<temp->ProcessName<<""<<temp->NeedRes

53、course0<<"“<<temp->NeedRescourse2<<endl;temp=temp->next;system("pause");cout<<"AreyouwanttoKilloneProcesstoReleaseNeedRescourse.Y/N"<<endl;charoption;cin>>option;if(option='Y'|option='y')DeedLock_KillProcess();voidJOB

54、:DeedLock_KillProcess()Process*temp=head;cout<<"Enter1,2,.toKill1th,2th,.Process."<<endl;intn;cin>>n;intcount=1;while(count<n)count+;temp=temp->next;if(count=1)head=head->next;elseProcess*temp2=head;n=1;while(n+1)<count)n+;temp2=temp2->next;)temp2->next=

55、temp->next;/刪除temp結(jié)點)LinkCopy();)voidJOB:LookCpu()system("cls");LookCpu_ShowRunningProcess();)voidJOB:LookMem()intMem128;intDiskMem1024;memset(Mem,0,128);memset(DiskMem,0,1024);DynReg=0;Process*temp=head1;while(temp&&DynReg<=128)cout<<"MemeryFrom"<<DynRe

56、g<<"to"<<DynReg+temp->NeedMem-1<<"giveto"<<temp->ProcessName<<endl;DynReg+=temp->NeedMem;temp=temp->next;)cout<<"EnterAnyKeytoReturnMain()."<<endl;getchar();getchar();)boolJOB:CheckMem()/檢查虛擬存儲器是否可以接納intsum=0;Process

57、*temp=head;while(temp)sum+=temp->NeedMem;)if(sum>=1024)returnfalse;elsereturntrue;)voidJOB:LookDiskMem()intsum=0;Process*temp=head;while(temp)sum+=temp->NeedMem;temp=temp->next;)if(sum>1024)cout<<"ThissystemDiskMemeryisout!npleaseenter1tochangeyouprocessNeedMemnelsesystemma

58、yhavesomethingwrong”<<endl;intn;cout<<"Enter1toChangeMemerysizeelseSystemwillexit.”<<endl;cin>>n;if(n=1)LookDiskMem_Change();elseexit(0);elsecout<<"nJOBtotaluse:"<<sum<<"Memery!"<<endl;cout<<"enteranykeyreturnmain().

59、”<<endl;getchar();getchar();voidJOB:LookDiskMem_Change()Process*temp=head;while(temp)cout<<"Process:"<<temp->ProcessName<<"need"<<temp->NeedMem<<endl;temp=temp->next;temp=head;while(temp)charn;cout<<"Change"<<temp

60、->ProcessName<<"NeedMem?Y/N(y/n)"<<endl;cin>>n;if(n='Y'|n='y')cout<<"EnteryouNewNeedMem:"<<endl;cin>>temp->NeedMem;elseif(n='N'|n='n')elsecout<<"Error!Enteraundefinedcharacter.”<<endl;temp=temp->next;deletehead1;LinkCopy();/保持鏈表的一致性Process*JOB:SortLinkTable(Process*head,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論