已閱讀5頁(yè),還剩21頁(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ì)報(bào)告 題目:一個(gè)小型的操作系統(tǒng) 班級(jí):計(jì)122(杏) 學(xué)號(hào):1213023075 姓名:賈蘇 日期:2014/06/231. 實(shí)驗(yàn)平臺(tái)(1)軟件平臺(tái): 開(kāi)發(fā)系統(tǒng)平臺(tái):Windows 7 (64) Microsoft visual c+ 6.0 測(cè)試系統(tǒng)平臺(tái):Windows 7 (64)(2) 硬件平臺(tái): cpu:AMD A6-3420 APU 內(nèi)存:4GB 硬盤(pán):500G2.所需實(shí)現(xiàn)的功能及相應(yīng)的闡述:(1)進(jìn)程調(diào)度管理 為了貼切現(xiàn)實(shí)中的os,采用RR(輪轉(zhuǎn)調(diào)度算法),且不提供用戶顯式的選擇調(diào)度算法,即對(duì)用戶是透明的。 現(xiàn)實(shí)中的處理器主頻為1Ghz3Ghz,選取中間點(diǎn)為1.5Ghz,得時(shí)間片大小為0.7ns ,為方便計(jì)算*10,則時(shí)間片大小定為7ns。 假設(shè)進(jìn)程之間的調(diào)度和切換不耗費(fèi)cpu時(shí)間。(2)死鎖的檢測(cè)與處理 檢測(cè)當(dāng)然采用的是 銀行家算法 處理:讓用戶選擇kill一個(gè)進(jìn)程,釋放他所占有的所有資源。(3)虛擬分頁(yè)調(diào)度管理 虛擬分頁(yè):給出的是邏輯值 訪問(wèn)磁盤(pán) 將那個(gè)數(shù)據(jù)塊放入到內(nèi)存中內(nèi)存中的地址采用一定的算法相對(duì)應(yīng)于磁盤(pán)的地址。 特規(guī)定 訪存采用的是 按字節(jié)尋址 內(nèi)存的大小 128KB 外存的大小 1MB 即整個(gè)系統(tǒng)可以提供1MB的邏輯地址空間供進(jìn)程進(jìn)行訪問(wèn)(在地址總線足夠掃描內(nèi)存的情況下)。虛擬地址映射采用:直接映射法規(guī)定的8kB為一個(gè)頁(yè)面,故內(nèi)存有16個(gè)頁(yè)面,外存有128個(gè)頁(yè)面。如果產(chǎn)生了內(nèi)存已滿,便會(huì)產(chǎn)生缺頁(yè)中斷,淘汰采用FIFO算法,利用一個(gè)隊(duì)列來(lái)做。部分內(nèi)外存的對(duì)應(yīng)表00,128,2*128+0.11,129,2*128+1.22,130,2*128+2.16127,128+16,2*128+16.(4)I/O中斷處理 設(shè)中斷來(lái)自兩個(gè)方面: 1.DMA輸送開(kāi)始和結(jié)束時(shí)的中斷 設(shè)定一個(gè)宏 定義為DMA一次傳輸?shù)臄?shù)據(jù)量的大小-DmaNum假定為10kb每次 DMA開(kāi)始:耗費(fèi)1ns cpu時(shí)間進(jìn)行中斷處理 DMA結(jié)束:耗費(fèi)2ns cpu時(shí)間進(jìn)行中斷處理 由操作系統(tǒng)課程知,DMA傳輸數(shù)據(jù)時(shí)不需要CPU的干預(yù)。2. 隨機(jī)的中斷 發(fā)生外部隨機(jī)中斷,cpu無(wú)條件的立即響應(yīng),并執(zhí)行中斷處理程序,同樣的假設(shè)中斷處理程序的調(diào)度和切換不耗費(fèi)cpu時(shí)間。(5)內(nèi)存地址越界或內(nèi)存不足進(jìn)程訪問(wèn)內(nèi)存時(shí)超過(guò)了進(jìn)程所要的最大值,此時(shí)發(fā)生中斷,已達(dá)到內(nèi)存保護(hù)的功能。內(nèi)存不足時(shí)即為當(dāng)前的動(dòng)態(tài)地址重定位寄存器中的值+進(jìn)程所需的內(nèi)存大小超過(guò)了內(nèi)存的上限,此時(shí)進(jìn)行內(nèi)存緊湊,同時(shí)修改被移動(dòng)的進(jìn)程中的各個(gè)有關(guān)參數(shù)。3.總體設(shè)計(jì) 開(kāi)始 內(nèi)存管理查看運(yùn)行情況開(kāi)始運(yùn)行外存空間查看查看cpu運(yùn)行內(nèi)存空間查看死鎖檢測(cè)與解除進(jìn)程信息查看4.程序所需的數(shù)據(jù)結(jié)構(gòu)及其抽象過(guò)程 先定義本次操作系統(tǒng)外設(shè)的資源,假設(shè)有A類資源10個(gè),B類資源5個(gè),C類資源6個(gè)-NeedRescourse; 作業(yè)中的各個(gè)進(jìn)程都需要一個(gè)代號(hào)-ProcessName,各個(gè)進(jìn)程到來(lái)的時(shí)間不同,故需要記錄一下-ArriveTime,每個(gè)進(jìn)程所需要的cpu時(shí)間是不夠的-NeedCpuTime,每個(gè)進(jìn)程所需的內(nèi)存空間大小是不一樣的-NeedMem。 各個(gè)進(jìn)程中的任務(wù)是不同的故需要預(yù)先設(shè)定本進(jìn)程中所要執(zhí)行的操作類型-OpKind,如果是計(jì)算型的直接給出所需要的cpu時(shí)間即可,如果是I/O型的還需要給出所傳輸?shù)臄?shù)據(jù)量的大小-NeedTranDataNum,在此可以給OpKind做一個(gè)union型的結(jié)構(gòu)。 多道程序程序在運(yùn)行的過(guò)程中需要對(duì)進(jìn)程所需內(nèi)存的地址進(jìn)行動(dòng)態(tài)地址重定位,故在系統(tǒng)之中需要設(shè)置一個(gè)動(dòng)態(tài)地址重定位寄存器,其中的內(nèi)容是下次進(jìn)程可以使用的內(nèi)存始址-DynReg。抽象結(jié)果: struct Processchar ProcessName10;/進(jìn)程的名字 int ArriveTime; / ns級(jí)別int NeedCpuTime; /此進(jìn)程所需要的時(shí)間int NeedMem; /所需要的cpu時(shí)間 FlagForOp OpKind; /用于指示是何種操作 int NeedTranDataNum; /給IO用的數(shù)據(jù)塊int OpCpus; /計(jì)算類型的操作所需的cpu時(shí)間int NeedRescourse3 ;/需要資源的數(shù)目 NULL代表不需要使用Process *next;5.詳細(xì)設(shè)計(jì)1.進(jìn)程信息查看依次遍歷全部的鏈表,并將它們的信息依次打印出來(lái)。實(shí)現(xiàn)函數(shù)名:void ShowProcessInfo()2.死鎖的檢測(cè)和解除假定本系統(tǒng)中的各個(gè)所需資源均是獨(dú)占型資源,在進(jìn)程運(yùn)行的過(guò)程中不再釋放,故只需要遍歷鏈表將各個(gè)進(jìn)程中所需的資源統(tǒng)計(jì)出來(lái),只要不大于系統(tǒng)中預(yù)設(shè)的即可,一旦進(jìn)程所需的資源大于系統(tǒng)中的最大量,給予用戶選擇kill一進(jìn)程,已達(dá)到釋放資源的目的。死鎖檢測(cè)函數(shù):void DeedLock() void DeedLock_LookNeedRescourse()死鎖解除函數(shù):void DeedLock_KillProcess()3. 內(nèi)存空間查看查看各個(gè)進(jìn)程所占用的內(nèi)存的空間,借助于DynReg這個(gè)全局變量實(shí)行內(nèi)存空間的動(dòng)態(tài)重定位。實(shí)現(xiàn)函數(shù):void LookMem()4. 查看CPU運(yùn)行以CPU的角度,查看作業(yè)的運(yùn)行情況,實(shí)現(xiàn)函數(shù):void LookCpu() void LookCpu_ShowRunningProcess()5. 外存空間查看外存空間是用戶的工作區(qū)間,故只要遍歷整個(gè)進(jìn)程鏈表,統(tǒng)計(jì)出所有進(jìn)程占有的全部空間即可。實(shí)現(xiàn)函數(shù):void LookDiskMem()6. 查看運(yùn)行查看系統(tǒng)運(yùn)行中各個(gè)資源的使用情況:實(shí)現(xiàn)函數(shù):void ShowRunningProcess() void ShowRunningProcess_CalculateCpuNeed(int*,int)7. 內(nèi)存管理缺頁(yè)調(diào)度算法:FIFO(借助于循環(huán)隊(duì)列實(shí)現(xiàn))實(shí)現(xiàn)函數(shù):void MemToDiskMem()6.程序運(yùn)行和調(diào)試1.打開(kāi)程序的初始界面:按系統(tǒng)提示輸入進(jìn)程數(shù),及其相關(guān)的各個(gè)參數(shù)2.輸入完成后的主界面:用戶可以按下相關(guān)的選擇鍵實(shí)施有關(guān)的各個(gè)操作。3. 按下1 查看各個(gè)進(jìn)程的信息可以看到剛剛輸入的各個(gè)進(jìn)程的有關(guān)信息4.按下25. 按下3 查看運(yùn)行時(shí)CPU的使用情況可見(jiàn)此時(shí)系統(tǒng)是安全的。系統(tǒng)出差提示按下1顯示當(dāng)前各個(gè)進(jìn)程所需的資源然后kill進(jìn)程1后在查看一下作業(yè)中的進(jìn)程,發(fā)現(xiàn)被kill的進(jìn)程沒(méi)有的,實(shí)現(xiàn)了此功能。6. 按下4 查看內(nèi)存的使用情況7. 按下5 查看外存空間8. 按下6 查看運(yùn)行情況9. 按下7 產(chǎn)看內(nèi)存使用情況(1) 沒(méi)有產(chǎn)生缺頁(yè) (2) 產(chǎn)生缺頁(yè) 10.按下9 退出此系統(tǒng)7.遇到的問(wèn)題(1) 自己編寫(xiě)映射表相當(dāng)?shù)睦щy,一度想改用Java語(yǔ)言,在于對(duì)C+語(yǔ)言的了解不夠。(2) 出錯(cuò)處理沒(méi)有完全做完,做的不夠精細(xì),很多地方直接結(jié)束(3) 對(duì)用戶輸入的數(shù)據(jù)做的類型檢查不夠充分(4) delete job時(shí)總是出現(xiàn)系統(tǒng)錯(cuò)誤,后debug發(fā)現(xiàn),由于對(duì)象之中存在不為空的指針,導(dǎo)致出錯(cuò),故再釋放指針?biāo)伎臻g后系統(tǒng)正常運(yùn)行。8. 源代碼#include#include#include#include#includeCirQueue.h /循環(huán)隊(duì)列的頭文件using namespace std;#define MAXMEM 128 /定義本次操作系統(tǒng)的最大內(nèi)存容量#define MAXDISKMEM 1024 /定義本次操作系統(tǒng)的最大外存容量 #define YE 10 /定義本次操作系統(tǒng)的分頁(yè)大小 并 以此實(shí)現(xiàn) 虛擬存儲(chǔ)int UsedMAXMEM=0;int UsedMAXDISKMEM=0;/定義進(jìn)程可能用到的外部資源 #define A 10#define B 5#define C 6 /cpu #define RR 7 /定義時(shí)間片大小為7ns#define BEFOREDMA 1 /DMA之前所需的cpu時(shí)間 #define AFTERDMA 2 /DMA之后所需的cpu時(shí)間 #define ONEDMANUM 10/DMA一次最多傳送10kb的數(shù)據(jù) enum FlagForOpIO,Calculate,others; int DynReg=0;/定義用于描述動(dòng)態(tài)地址重定位寄存器的全局變量 struct Processchar ProcessName10;/進(jìn)程的名字 int ArriveTime;/ ns級(jí)別int NeedCpuTime;/此進(jìn)程所需要的時(shí)間int NeedMem;/所需要的cpu時(shí)間 FlagForOp OpKind;/用于指示是何種操作 int NeedTranDataNum;/給IO用的數(shù)據(jù)塊int OpCpus;/計(jì)算類型的操作所需的cpu時(shí)間/假設(shè)others不需要其他的各個(gè)操作。 int NeedRescourse3;/需要資源的數(shù)目 NULL代表不需要使用 0a. Process *next;class JOBProcess *p;Process *head;Process *head1;/建立一個(gè)備用的鏈表/Process *wait,*runing; /wait 為等待鏈表 running是正在運(yùn)行的進(jìn)程 public:JOB()head1=p=head=NULL;/初始化為空 coutPlease waiting .The System is initial.endl;Sleep(2000);/暫停一秒 maybe Sleep() coutSystem is already. Now you should enter information of you job.endl;int n;coutenter your jobs process num.n;while(n)p=new Process();coutplease enter the name of process.p-ProcessName;coutplease enter the arrivetime of process.p-ArriveTime;coutplease enter the NeedCpuTime of process.p-NeedCpuTime;coutplease enter the NeedMem of process.p-NeedMem;while(p-NeedMem128)coutThis System cant not accept your job! Maybe your job is too large! Please enter a num 128p-NeedMem;coutplease enter the operation of process.0 to TranDiskNum ,1 to cpunn;if(nn=0)coutplease enter the NeedTranDataNum.p-NeedTranDataNum;p-OpKind=IO;elsecoutplease enter the OpCpus.p-OpCpus;p-OpKind=Calculate;coutPLease enter the A,B or C you needendl;for(int i=0;ip-NeedRescoursei;p-next=NULL;/尾結(jié)點(diǎn)為空 表示 一個(gè)節(jié)點(diǎn)的完成 下面進(jìn)行插入鏈表的工作 head=SortLinkTable(head,p);n-; /whileLinkCopy();/將本次整理好的鏈表依次賦值賦給備用鏈表Provide_Same_Process_Name();/檢查重名現(xiàn)象void Provide_Same_Process_Name();void VisitLinkTable();Process* SortLinkTable(Process*,Process*);void BeginRunning();void ShowProcessInfo();void DeedLock();void DeedLock_KillProcess();void DeedLock_LookNeedRescourse();void LookCpu();void LookCpu_ShowRunningProcess();void LookMem();void ShowRunningProcess();void ShowRunningProcess_CalculateCpuNeed(int*,int);void LookDiskMem();void LookMem_ChangeMem();bool CheckMem();void LookDiskMem_Change();void LinkCopy(); void MemToDiskMem(); JOB() delete head; delete head1; delete p; ;JOB *job;/設(shè)置全局變量 void JOB:Provide_Same_Process_Name() system(cls); char buffer10; Process *temp=head1; Process *temp1=head1; while(temp) temp1=temp-next; while(temp1) if(strcmp(temp-ProcessName,temp1-ProcessName)=0) coutMini_OperationSystem had detect the same name process in your job!endl; coutThis System cant accept this sitution.Please Rename your Process! nThanks for your corporation!endl; coutThis is ALL your process name:endl; VisitLinkTable(); coutEnter 1 to rename the former,0 to rename the later!n; coutNow Enter new Name:buffer; strcpy(temp1-ProcessName,buffer); else cinbuffer; strcpy(temp-ProcessName,buffer); /end if temp1=temp1-next; /end while temp1 temp=temp-next; /whilevoid AgainEnterJOB()system(cls);delete job;job=new JOB(); void JOB:VisitLinkTable()/不加JOB前綴的時(shí)候編譯不過(guò) 加上代表此函數(shù)是JOBclass之中的 while(head1)coutProcessNamenext; coutnNow , You can see The List to checkout.endl;void JOB:LinkCopy() Process *temp=NULL,*temp2=head; if(head1=NULL) coutLinkCopy() is Here!next=NULL; head1=NULL; while(temp2) /apply a new node temp=new Process(); strcpy(temp-ProcessName,temp2-ProcessName); temp-ArriveTime=temp2-ArriveTime; temp-NeedCpuTime=temp2-NeedCpuTime; temp-NeedMem=temp2-NeedMem; if(temp2-OpKind=IO) temp-OpKind=IO; temp-NeedTranDataNum=temp2-NeedTranDataNum; else temp-OpKind=Calculate; temp-OpCpus=temp2-OpCpus; for(int i=0;iNeedRescoursei=temp2-NeedRescoursei; /apply end temp-next=NULL; /coutcopy is right!next)/尋找到最后一個(gè)節(jié)點(diǎn) 不斷的循環(huán)退不出去k=k-next;k-next=temp; / coutcopy is right!next; /while if(head1=NULL) coutLinkCopy() is out!endl; system(pause);void JOB:MemToDiskMem()system(cls); CirQueue q(16); /一共定義的16個(gè)頁(yè)面 q.EnQueue(e); int *Mem;int count=0; /記錄下進(jìn)程的數(shù)目Process *temp_head1=head1;while(temp_head1) count+; temp_head1=temp_head1-next; temp_head1=head1; Mem=new intcount; int temp_count=0;while(temp_head1) int Begin=0; coutProcess: ProcessName memery use situation:NeedMem; int k=0; /所需的頁(yè)面數(shù)目 if(Begin%YE=0) k=Begin/YE; else k=Begin/YE+1; Memtemp_count+=k; coutk頁(yè)被占用!next;/end while coutendl;temp_head1=head1;coutWant to see 缺頁(yè)調(diào)度過(guò)程 Y/N. option;if(option=y|option=Y)for(int i=0;icount;i+)AllTotal+=Memi;for(int j=0;jMemi;j+) if(q.EnQueue(true) temp_count=0; while(temp_countnext; temp_count+; coutProcess :ProcessName need mem is loading.okendl; temp_head1=head1;else temp_count=0; while(temp_countnext; temp_count+; coutProcess :ProcessName need mem is loading error 缺頁(yè)調(diào)度endl; temp_head1=head1;total+; bool flag=q.DeQueue();if(q.EnQueue(true) coutProcess :ProcessName need mem is loading ok 缺頁(yè)調(diào)度endl; /for2coutendl; /for1 cout一共產(chǎn)生了:total 次缺頁(yè)中斷. n缺頁(yè)中斷率為:(float)total/AllTotal%next;run=head1;/還原運(yùn)行鏈表/建立一個(gè)映射表char *Run_Process_Name=new char*count;/申請(qǐng)一個(gè)動(dòng)態(tài)的二維表for(int i=0;iProcessName); run=run-next;run=NULL; int *Run_Process_CpuNeed=new intcount;/映射表建立完畢 /計(jì)算各個(gè)進(jìn)程中所需的cpu時(shí)間ShowRunningProcess_CalculateCpuNeed(Run_Process_CpuNeed,count);Process *priorNode=NULL;/Process *tail=head;while(true)/int time11=wait-ArriveTime;if(wait&NowTime=wait-ArriveTime)if(run=NULL)run=wait;priorNode=run;else/連接到尾部 Process *temp=run;while(temp-next!=priorNode)/尋找到前驅(qū)節(jié)點(diǎn)temp=temp-next;temp-next=wait;/將結(jié)點(diǎn)連接上鏈表priorNode=wait;/wait-next=run;wait=wait-next;/釋放一個(gè)結(jié)點(diǎn)priorNode-next=run;/連接上頭部形成 循環(huán)鏈表 if(run)run=run-next; /重新調(diào)度coutNowTimeNowTime+RR Process :ProcessName is Runningendl;coutcpu 調(diào)度下一個(gè)運(yùn)行的進(jìn)程。endl;NowTime+=RR;/依據(jù)上面建設(shè)的映射 按名取出所需運(yùn)行的時(shí)間 int ALLNeedCpu;for(int i=0;iProcessName)=0)break;ALLNeedCpu=Run_Process_CpuNeedi; ALLNeedCpu-=RR;/減去本次運(yùn)行的時(shí)間if(ALLNeedCpu0)Run_Process_CpuNeedi=ALLNeedCpu;/重新寫(xiě)回到數(shù)組中 保持一致性else /此節(jié)點(diǎn)已經(jīng)做完了 請(qǐng)直接釋放 if(run-next=run)run=NULL;elseProcess *k=run;while(k-next!=run)/尋找當(dāng)前運(yùn)行節(jié)點(diǎn)的前一個(gè)結(jié)點(diǎn) k=k-next;k-next=k-next-next; run=k;/ end if(run)if(wait=NULL&run=NULL)/沒(méi)有等待CPU的進(jìn)程了 和 沒(méi)有正在運(yùn)行的進(jìn)程 滿足退出的要求 -退出break;NowTime+;/whilesystem(pause);LinkCopy();/ /將受損的鏈表修復(fù) void JOB:ShowRunningProcess()system(cls);int NowTime=0;Process *run=head1;/臨時(shí)試用一下 最終需要?dú)w還為NULLProcess *wait=head1;/ dsvrfgvregrefswgvregegsdgreint count=0;while(run)/計(jì)算等待運(yùn)行的進(jìn)程的個(gè)數(shù) count+; run=run-next;run=head1;/還原運(yùn)行鏈表/建立一個(gè)映射表char *Run_Process_Name=new char*count;/申請(qǐng)一個(gè)動(dòng)態(tài)的二維表for(int i=0;iProcessName); run=run-next;run=NULL; int *Run_Process_CpuNeed=new intcount;/映射表建立完畢ShowRunningProcess_CalculateCpuNeed(Run_Process_CpuNeed,count);Process *priorNode=NULL;while(true)/int time11=wait-ArriveTime;if(wait&NowTime=wait-ArriveTime)if(run=NULL)run=wait;priorNode=run;else/連接到尾部 Process *temp=run;while(temp-next!=priorNode)/尋找到前驅(qū)節(jié)點(diǎn)temp=temp-next;temp-next=wait;/將結(jié)點(diǎn)連接上鏈表priorNode=wait;/wait-next=run;wait=wait-next;/釋放一個(gè)結(jié)點(diǎn)priorNode-next=run;/連接上頭部形成 循環(huán)鏈表 if(run)run=run-next; /重新調(diào)度coutNowTimeNowTime+RR Process :ProcessName is Runningendl;coutNeedRescourse: ANeedRescourse0 BNeedRescourse1 cNeedRescourse2 is using.endl;coutcpu 調(diào)度下一個(gè)運(yùn)行的進(jìn)程。endl;NowTime+=RR;/依據(jù)上面建設(shè)的映射 按名取出所需運(yùn)行的時(shí)間 int ALLNeedCpu;for(int i=0;iProcessName)=0)break;ALLNeedCpu=Run_Process_CpuNeedi; ALLNeedCpu-=RR;/減去本次運(yùn)行的時(shí)間if(ALLNeedCpu0)Run_Process_CpuNeedi=ALLNeedCpu;/重新寫(xiě)回到數(shù)組中 保持一致性else /此節(jié)點(diǎn)已經(jīng)做完了 請(qǐng)直接釋放 if(run-next=run)run=NULL;elseProcess *k=run;while(k-next!=run)/尋找當(dāng)前運(yùn)行節(jié)點(diǎn)的前一個(gè)結(jié)點(diǎn) k=k-next;k-next=k-next-next; run=k;/ end if(run)if(wait=NULL&run=NULL)/沒(méi)有等待CPU的進(jìn)程了 和 沒(méi)有正在運(yùn)行的進(jìn)程 滿足退出的要求 -退出break;NowTime+;/whilesystem(pause);LinkCopy();/ /將受損的鏈表修復(fù) void JOB:ShowRunningProcess_CalculateCpuNeed(int*Run_Process_CpuNeed,int count) Process *temp=head1; for(int i=0;iNeedCpuTime;if(temp-OpKind=IO)if(temp-NeedTranDataNum%ONEDMANUM=0)ALLNeedCpu+=(temp-NeedTranDataNum/ONEDMANUM)*(BEFOREDMA+AFTERDMA);elseALLNeedCpu+=(temp-NeedTranDataNum/ONEDMANUM+1)*(BEFOREDMA+AFTERDMA);elseALLNeedCpu+=temp-OpCpus;Run_Process_CpuNeedi=ALLNeedCpu;temp=temp-next; void JOB:ShowProcessInfo() system(cls);Process *temp=head1;int count=0;while(temp)cout-The count+1 process infoendl;cout Name: ProcessName.endl;cout ArriveTime: ArriveTime.endl;cout NeedCpuTime: NeedCpuTime.endl;cout NeedMem: NeedMem.endl;cout OpKind: OpKind.endl;cout NeedRescourse: A: NeedRescourse0,B: NeedRescourse1,C: NeedRescourse2next;coutn;count+;coutenter anykey return main() .NeedRescourse0; LocalB+=temp-NeedRescourse1; LocalB+=temp-NeedRescourse2; temp=temp-next;if(LocalAA|LocalBB|LocalCC) coutNeedRescourse is over!endl; coutEnter 1 to See NeedRescourse, else to main()!n; if(n=1) DeedLock_LookNeedRescourse(); else coutYour JOb is ok! System Now is safe!endl;system(pause);void JOB:DeedLock_LookNeedRescourse() Process* temp=head1;coutnNeedRescourse: A B Cn; while(temp) coutProcessName NeedRescourse0 NeedRescourse1 NeedRescourse2next;system(pause);coutAre you want to Kill one Process to Release NeedRescourse.Y/Noption;if(option=Y|option=y) DeedLock_KillProcess(); void JOB:DeedLock_KillProcess() Process *temp=head; coutEnter 1,2,.to Kill 1th,2th,.Process.n; int count=1; while(countnext; if(count=1) head=head-next; else Process *temp2
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025陜西省建筑安全員知識(shí)題庫(kù)及答案
- 2025海南省建筑安全員-A證考試題庫(kù)附答案
- 2025河南建筑安全員知識(shí)題庫(kù)附答案
- 《A期中沖刺復(fù)習(xí)》課件
- 下肢深靜脈血栓的形成
- 物質(zhì)的量完整課件
- 《醫(yī)院火災(zāi)培訓(xùn)課件》課件
- 房地產(chǎn)行業(yè)定期報(bào)告:鄭州出臺(tái)容積率新規(guī)一線新房成交環(huán)比與9.6
- 《技術(shù)必修》課件
- 單位管理制度展示合集職員管理篇十篇
- 月日上午王一凡把問(wèn)題當(dāng)做教育的資源 優(yōu)秀獎(jiǎng)
- 脊柱四肢及肛門直腸檢查
- 高中政治期末綜合檢測(cè)部編版選修1
- 鑄造基礎(chǔ)知識(shí)及常見(jiàn)鑄造缺陷簡(jiǎn)介課件
- 歷史(中職)PPT全套教學(xué)課件
- 藥物分離技術(shù)教材吳昊課后參考答案
- 我和外公的戰(zhàn)爭(zhēng)
- 浙人美2011版二年級(jí)美術(shù)上冊(cè)《淘氣堡》教案及教學(xué)反思
- 提高屋面防水合格率QC成果演示文稿
- 【招標(biāo)控制價(jià)編制研究文獻(xiàn)綜述(論文)4800字】
- 肝硬化護(hù)理教學(xué)查房
評(píng)論
0/150
提交評(píng)論