操作系統(tǒng)課程設計 報告
《操作系統(tǒng)課程設計 報告》由會員分享,可在線閱讀,更多相關《操作系統(tǒng)課程設計 報告(42頁珍藏版)》請在裝配圖網上搜索。
1、操作系統(tǒng)程序設計操作系統(tǒng)程序設計 院 系: 計算機科學技術學院軟件工程系 班 級: 軟件 08 1 班 姓 名: X X X 學 號: X 號 指導教師: X X X 2010 年 6 月 26 日操作系操作系統(tǒng)統(tǒng)模模擬實現擬實現操作系統(tǒng)程序設計任務書操作系統(tǒng)程序設計任務書一、題目:一、題目:操作系統(tǒng)模擬實現二、設計要求二、設計要求(1)獨立完成(2)良好的交流、溝通能力(3)充分運用前序課所學的軟件工程、程序設計等相關知識(4)充分運用調試和排錯技術(5)簡單測試驅動模塊和樁模塊的編寫 (6)查閱相關資料,自學具體課題中涉及到的新知識。(7)按要求寫出課程設計報告,并于設計結束后 1 周內提
2、交。其主要內容包括:封皮、課程設計任務書,指導教師評語與成績、目錄、概述、軟件需求分析、總體設計、詳細設計、程序的調試與測試、總結與體會、結束語、程序清單(帶中文注釋) 、參考文獻等。三、三、設計內容及步驟設計內容及步驟1.根據設計題目的要求,充分地分析和理解問題,明確問題要求做什么。具體要求至少實現進程管理模擬、存儲器管理模擬、文件管理模擬,并將幾個模塊較好地集成一個整體,給出一個較好的用戶界面。2.根據實現的功能,劃分出合理的模塊,明確模塊間的關系。3.編程實現所設計的模塊。4.程序調試與測試。5.結果分析。程序運行結果包括正確的輸入及其輸出結果和含有錯誤的輸入及其輸出結果。6.編寫課程設
3、計報告;四、課程設計工作計劃四、課程設計工作計劃2010 年 6 月 12 日前,指導教師講課,學生根據題目準備資料,需求分析;2010 年 6 月 13 日,提交軟件總體模塊結構圖和分工方案;2010 年 6 月 13 日2009 年 6 月 16 日,完成程序模塊并通過獨立編譯;2010 年 6 月 17 日2010 年 6 月 20 日,將各模塊集成為一個完整的系統(tǒng),并錄入足夠的數據進行調試運行,數據必須存儲到磁盤文件中,已備驗收;2010 年 6 月 22 日,驗收、開始撰寫課程設計報告;2010 年 6 月 24 日前,提交課程設計報告,并將軟件的源文件及報告的word 文檔打印交到
4、老師辦公室里。 指導教師簽章: 教研室主任簽章 操作系統(tǒng)導教師評語與成績指導教師評語:課程設計表現成績: 課程設計驗收成績: 課程設計報告成績: 課程設計 總成績: 指導教師簽章 2010 年 7 月 日I目目 錄錄目目 錄錄I一、需求分析一、需求分析 11.1 功能需求11.2 背景描述11.3 具體設計內容分析1二、總體概要設計二、總體概要設計 32.1 系統(tǒng)的特點32.2 抽象數據整合32.3 系統(tǒng)模塊圖5三、詳細設計三、詳細設計 63.1 基本操作63.2 進程調度之時間片輪轉詳細設計73.3 模擬文件-改變目錄流程10四、程序的調試與測試四、程序的調試與測試 134.1 調試分析13
5、4.2 測試結果14五、用戶使用說明五、用戶使用說明 19六、總結與體會六、總結與體會 20參考文獻參考文獻 21附錄附錄:程序清單程序清單221一、一、需求分析需求分析1.1 功能需求操作系統(tǒng)原理課程設計是軟件工程專業(yè)實踐性環(huán)節(jié)之一,是學習完操作系統(tǒng)原理課程后進行的一次較全面的綜合練習。其目的在于加深對操作系統(tǒng)的理論、方法和基礎知識的理解,掌握操作系統(tǒng)結構、實現機理和各種典型算法,進程調度、內存管理、文件管理、等各種調度管理算法模擬,系統(tǒng)地了解操作系統(tǒng)的設計和實現思路,培養(yǎng)學生的系統(tǒng)設計能力,并了解操作系統(tǒng)的發(fā)展動向和趨勢。1.2 背景描述經過一個學期的操作系統(tǒng)原理 、 操作系統(tǒng)實驗教程課程
6、的學習,我們學到了很多理論上的知識,對操作系統(tǒng)及其各方面的功能有了深刻的認識,但這是遠遠不夠的,我們要講理論編程實踐,雖然我們學習期間做過很多的實驗,但是都是針對操作系統(tǒng)的某一塊具體的功能的,我們對了解了每塊具體的功能的實現,但是,整體說來還是模糊,所以,很有必要將各個模塊整合起來,也就是模擬一個操作系統(tǒng),這樣,不僅跟深入學習了各個模塊,更認識了一個完整的 OS,對我們來說受益匪。1.3 具體設計內容分析 本次課程設計所用環(huán)境:VC+6.0,采用控制臺界面至少實現進程管理模擬、存儲器管理模擬、文件管理模擬,并將幾個模塊較好地集成一個整體,實現各個管理調度算法的功能,并給出一個較好的用戶界面。進
7、程管理模擬:在多道程序運行環(huán)境下,進程數目一般多于處理機數目,是的進程要通過競爭來使用處理機。這就要求系統(tǒng)能按某種屬案發(fā),動態(tài)的把處理機分配給就緒隊列中的一個進程,使之運行。進程調度包括常用的:先來先服務、時間片輪轉、優(yōu)先權等因為以前已經實現,所以這次 模擬整合到一起不算很難。存儲器管理模擬:主存是中央處理器直接存取指令和數據的存儲器,能否合理的利用主存,在很大程度上將影響到整個計算機系統(tǒng)的性能。在多道作業(yè)和多進程環(huán)境下,共享主存空間。當作業(yè)執(zhí)行完畢或進程運行結束后將主存空2間歸還系統(tǒng)。這次模擬包括:貯存分配與回收、基于分頁的內存調度算法。有于模擬的比較簡單,僅實現了最先適應算法、和先來先服務
8、、最近你最久未使用的調度算法,實現比較簡單。文件管理模擬:用于用戶界面和操作命令在操作系統(tǒng)中的作用,實現操作系統(tǒng)中對文件的管理。文件中建立一個雙向鏈表,每個聊表節(jié)點又是單鏈表的頭結點,對目錄、文件操作比較簡單。 3二、總體概要設計二、總體概要設計2.1 系統(tǒng)的特點本次可設主要是簡單的模擬一個操作系統(tǒng),包括一個主界面,實現了銀行家算法、模擬文件管理、主存空間的分配與回收、進程調度等功能。模擬了操作系統(tǒng)的進程管理、文件管理、存儲器管理。銀行家算法,包括了新加作業(yè)、申請資源、撤銷作業(yè)、查看資源情況四個模塊。如果申請資源后系統(tǒng)進入不安全狀態(tài),則申請失敗。進程調度實現了調度進程的三個主要算法優(yōu)先數、先來
9、先服務、時間片輪轉法。其中,優(yōu)先數算法中優(yōu)先數的確定為(50-進程的服務時間) ,每輪一次優(yōu)先數-3。時間片輪轉法的時間片由用戶自己輸入。存儲器管理實現了申請空間、撤銷作業(yè)、顯示空閑表等功能。如果空閑空間不足則申請失敗。模擬文件管理很全面,包含了創(chuàng)建目錄、刪除目錄、改變目錄、創(chuàng)建文件、刪除文件、顯示目錄的功能。另外,我還加了回到根目錄的功能。2.2 抽象數據整合銀行家算法:const int MAX_P=20; / 進程的最大容量const int MAXA=10; / A 類資源的最大數量const int MAXB=5; /B 類資源的最大數量const int MAXC=7; /C 類資
10、源的最大數量typedef struct anode int a,b,c,/*三種資源總數*/remain_a,remain_b,remain_c/*三種資源剩余數*/; bank;typedef struct node1 char name20; int a,b,c,need_a,need_b,need_c; process; / 進程的結構體結點模擬文件管:4typedef struct bnode char name50; int type;/*0 代表目錄,1 代表普通文件*/ struct bnode *next,/* 兄弟節(jié)點*/*sub,/*第一個子節(jié)點*/*father/*父節(jié)
11、點*/; int size; /*文件的大小*/dirnode;dirnode *workdir;/當前工作目錄 dirnode root;/根目錄 char path100;/定義路徑信息 const int MAXJOB = 100;/定義最大記錄數存儲器管理:首先需要建立空閑區(qū)數據文件,空閑區(qū)數據文件包括若干行,每行有兩個字段:起始地址,內存塊大?。ň鶠檎麛担?,各自段一逗號隔開??臻e區(qū)數據文件:0,1010,0818,1028,0634,1044,09空閑表的結構:typedef struct cnodeint start;int length;char tag20;job; job
12、freesMAXJOB;/定義空閑區(qū)表 int free_quantity;job occupysMAXJOB;int occupy_quantity;進程調度:進程存在的標識是進程控制塊(PCB) ,進程控制塊結構如下:typedef struct dnode char name10;5 int prio; int round; int cputime; int needtime; int count; char state; struct dnode *next;PCB; / 進程的 PCBPCB *finish,*ready,*run,*r;2.3 系統(tǒng)模塊圖圖 1 系統(tǒng)模塊圖進程調度存
13、儲器管理模擬文件管理主界面新加作業(yè)銀行家算法申請資源撤銷資源申請資源優(yōu)先數調度時間片輪轉先來先服務申請空間撤銷作業(yè)顯示空閑表改變目錄創(chuàng)建目錄創(chuàng)建文件刪除文件顯示目錄申請資源申請資源申請資源6三、詳細設計三、詳細設計3.1 基本操作1)銀行家算法:銀行家算法主要由 5 個函數實現了四大功能,即新加作業(yè)、為作業(yè)申請資源、撤銷作業(yè)、查看資源情況。void yinitial() /初始化函數void add() / 新加作業(yè)函數void bid() /為作業(yè)申請資源void yfinished()/撤銷作業(yè)void yview()/查看資源情況2)模擬文件管理:模擬文件管理實現了很多功能,當然也有很多
14、函數,每一個文件和目錄都是用一個節(jié)點來描述的,用 type 來控制,有兩個值,0 和1,0 代表目錄,1 代表普通文件void minitial() /初始化目錄函數dirnode * init() /初始化新節(jié)點的函數void CD(char dirname) /改變目錄void CREATE(char filename,int filesize) /創(chuàng)建文件void DEL(char filename)/刪除文件void dir(dirnode *p) /現實所有目錄,本目錄下所有兄弟目錄和文件void dirs(dirnode *p,char str)/顯示由目錄下子目錄中的文件和目錄v
15、oid LSALL()/顯示所有目錄void MD(char dirname)/創(chuàng)建目錄void RD(char dirname)/刪除目錄3)存儲器管理:void initial()/初始化函數int readData()/讀數據函數void sort()/將空閑塊按照從小到大的順序排序void zview()/顯示函數void earlist()/最先適應分配算法void zfinished()/撤銷作業(yè)4)進程調度:void firstin()/調度進程使之運行void prt1(char a)/*void prt2(char a ,PCB *q)7void prt(char algo)
16、*/上面的三本分主要是顯示出來進程的調度情況void insert1(PCB *q)/插入新的進程void creat1(char alg)/*void creat2(char alg)*/以上兩個實現進程的創(chuàng)建void priority(char alg)/優(yōu)先數算法的實現void roundrun(char alg)/時間片輪轉法的實現void FCFSrun(char alg)/先來先服務算法的實現void xianshi()/顯示主界面的函數void yinhangjia()/主函數掉該函數實現銀行家算法void wenjianguanli()/主函數調度該函數實現文件管理void z
17、hucunkongjian()/主函數調度該函數實現存儲器管理void jinchengdiaodu()/主函數調度該函數實現進程調度3.2 進程調度之時間片輪轉詳細設計進程調度中對于先來先服務調度原理簡單、實現也很簡單、對于優(yōu)先數調度來講,每次調度的就是優(yōu)先權最高的,所以每次只要找到優(yōu)先權最高的就能實現,用到 2 個單鏈表:一個等待服務、一個連接完成。在這里就不多說了。對于時間片輪轉,可以設定時間片大小、中途不能改變,我就建立一個循環(huán)鏈表來存放等待進程,一個單鏈表來連接完成的進程。這個實現的時候,費了不少勁兒,但最終能沒有 bug 的顯示出來。這個調度有一個缺陷:要求進程必須是同時到達,由于
18、時間倉促,我就沒設計這個內容。如果涉及的話,我感覺能整出來無非是多加個標記,標簽來判斷進程的到達及服務。忘了說了,對于時間片算法,進程我是按順序進行插入的。主要核心代碼:void creat2(char alg) PCB *p; int i,time,round; char na10; ready = NULL; finish = NULL; run = NULL; printf(請輸入時間片:); scanf(%d,&round); printf(輸入進程號和運行時間:n);8 for(i = 1; i name,na); p-cputime = 0; p-needtime = time;
19、p-state = W; p-count = 0; p-round = round; p-next = NULL; if(i = 1)/*按順序插入到 ready 鏈表中*/ r = ready = p; else r-next = p; r = p; /clrscr(); printf( 時間片輪轉算法輸出信息:n); printf(*n); prt(alg);void roundrun(char alg)bool flag;/當 ready 列里只有一個時做標記 while(N) flag = 1;/初始化為 1 run = ready;/run 每次運行 ready 的隊頭 run-co
20、unt+;/沒運行一次計數器加 1 if(run-needtime round)/當剩余時間小于時間片輪轉時間時的情況 run-cputime += run-needtime; run-needtime = 0; else run-cputime += run-round;9 run-needtime -= run-round; run-state = W;/變?yōu)榈却?if(ready-next != NULL) ready = ready-next; else flag = 0;/當 ready 剩一個時做標記 if(run-needtime = 0)/當 run 結束時放入 finish
21、隊列里 run-next = finish; finish = run; run-state = F; N-;/進程數少 1 else if(flag)/執(zhí)行完如果不是剩一個的話,就把 run 放到隊尾 r-next = run; r = run; r-next = NULL; if(N)ready-state = R;/結束時不應該有R else ready = NULL;/結束時應該為空 prt(alg);/輸出 截圖顯示:圖 A、B、C。圖 A 時間片輪轉算法界面10圖 B 時間片輪轉算法開始圖 C 時間片輪轉運行結束3.3 模擬文件-改變目錄流程由于模擬文件管理采用雙向鏈表,可以來回搜
22、索。進入子目錄后還可以回到根目錄,所以就在程序加了返回到上一級目錄的功能,就是在 CD()函數里加個條件,控制回到子目錄還是上級目錄。主要代碼:void CD(char dirname) dirnode *p; int flag=0; if(strcmp(dirname,.) p=workdir-sub; if(p=NULL) cout錯誤,dirname子目錄不存在type=0) 11 if(!strcmp(p-name ,dirname) flag=1; break; p=p-next; if(flag=1) workdir=p; strcat(path,); strcat(path,p-
23、name); cout工作目錄已進入dirnameendl; else cout錯誤,dirname子目錄不存在name,root) workdir = workdir-father; for(int i = strlen(path)-1; i = 0; i-) if(pathi =) pathi = 0;break; cout工作目錄已進入pathendl; else cout錯誤,當前已是根目錄subP!=nulllp = p-next進入子目錄子目錄不存在已是根目錄結束NYYNNY圖 2 改變目錄流程13四、程序的調試與測試四、程序的調試與測試4.1 調試分析(1)在試驗過程中遇到了很多
24、錯誤,最開始的時候,在將各個模塊連接起來的時候幾個函數的名字一樣,出現了錯誤,如圖:圖 3 錯誤顯示后來將函數的名字都改變了一下。(2)在主函數中將各個模塊的主函數連起來的時候,退出來的時候整個程序就結束了,而我是想推出來的時候是退回到主界面,后來又給改了一下,加了一個 while 循環(huán),還有變量 flag,有 flag 來控制,當 flag=0 的時候就跳出 while 循環(huán),然后清屏,掉一個編好的顯示函數,顯示主界面,這樣就退回了主界面,后來又發(fā)現主函數有很多東西,很亂,我又將每個模塊的主函數部分又分出去一個函數,這樣主函數掉每個模塊的原來的主函數部分就好了。(3)在內存調度算法中由于 w
25、indows 里面沒有 getpid()函數不了解 rand()就用結果造成卻也計算率也來小。如圖:圖 4 內存調度算法 FIFO 中無 getpid()錯誤144.2 測試結果可設主界面:如圖 圖 5 設計主界面銀行家算法:圖 6 銀行界算法主界面新加作業(yè):圖 7 添加作業(yè)查看資源情況:15圖 8 資源使用情況為作業(yè)申請資源:圖 9 申請資源撤銷作業(yè):圖 10 撤銷作業(yè)模擬文件管理:如圖創(chuàng)建目錄:圖 11 模擬文件管理界面改變目錄:16圖 12 改變目錄回到上一級目錄:圖 13 返回上一級目錄顯示目錄:圖 14 顯示所有目錄存儲器管理模擬:如圖顯示空閑表:17圖 15 顯示空閑區(qū)分配表申請空
26、間:圖 16 申請空間進程調度模擬:優(yōu)先數算法:圖 17 優(yōu)先數算法時間片輪轉法:18圖 18 時間片輪轉法先來先服務算法:圖 19 先來先服務算法19五、用戶使用說明五、用戶使用說明這次的課程設計實驗主要是模擬一個操作系統(tǒng)的各個功能算法,重點在于算法的描述,應用。當運行的時候會出現一個主界面,上面列出了該系統(tǒng)主要實現的功能,可以根據提示選擇 1.、進程調度 2、貯存空間分配與回收 3、模擬文件管理 4、內存調度算法 5、銀行家算法 6、 退出系統(tǒng)。選擇完后就進入該模塊,如果選擇的是 1 即銀行家算法,進去后界面也會有提示,1、新加作業(yè),2,、為作業(yè)申請資源 3、撤銷作業(yè) 4、查看資源情況、0
27、 退出系統(tǒng),選擇你想要操作的。會提示你相應的操作。如果選擇的是 2 即模擬文件管理,進入后也有界面給予提示,但是這個模塊有先后順序,即應該先創(chuàng)建目錄,之后在進行其他操作,我還加入了一個額外的功能,如果輸入 cd . 就會回到上一級目錄里。如果選擇的是 3,即存儲器管理,這個模塊首先要在改程序在同一目錄下建立一個空閑表,進入該模塊后首先要輸入改空閑表,例如,input.txt,如果該空閑表存在的話就會繼續(xù)往下進行,根據提示做想要實現的操作。如果選擇的是4,即進程調度,進入后可以選擇 P、優(yōu)先數算法,R、時間片輪轉法 F、先來先服務算法、E 退出時間片輪轉法的時間片由用戶來定。這些模塊中的退出都是
28、退到主界面的,要想退出本系統(tǒng),在主界面里有一個退出。20六、總結與體會六、總結與體會這次課程設計對我來說獲益很大、體會很深,通過這次課程設計將所學的操作系統(tǒng)課程的知識用于實踐,對所學的知識有了系統(tǒng)的了解、更深刻。在將各個模塊連起來過正中首先要對各個模塊都深入了解,不僅復習了所學的,以前不明白的現在明白了好多,而且對“操作系統(tǒng)”不再陌生,但是“操作系統(tǒng)“所要做的絕不是這么少的,所學的這些是遠遠不夠的,希望還能有更深的了解。這次課程設計讓我我熟練的練習了 VC+6.0 環(huán)境,更讓那個我了解和運用 了 linux 操作系統(tǒng),了解了 OS 內核結構,核心操作,以及最基本的 OS 管理。對以后學習有很大
29、幫助。這次課程設計給我了很大的啟示:無論學什么都要一步一個腳印,不能前面開始學很有勁頭,后面就松懈了,要持之以恒。感謝老師耐心的教導,您認真的態(tài)度對我們很有幫助、很親切,但對我來說是提升自身,我想我的 IT 之路還沒走完,會有更深入的學習。再次感謝老師!2122參考文獻參考文獻1 李登實,徐宏云,計算機操作系統(tǒng)實驗,北京,清華大學出版社,2000 年 9 月。2湯小丹,梁紅兵,計算機操作系統(tǒng),西安,西安電子科技大學出版社,2007 年 5 月。23附錄附錄:程序清單程序清單源碼附錄:#include#include#includeusing namespace std;#include#inc
30、lude#includeconst int MAX_P=20;const int MAXA=10;const int MAXB=5;const int MAXC=7;typedef struct anode int a,b,c,/*三種資源總數*/remain_a,remain_b,remain_c/*三種資源剩余數*/; bank;typedef struct node1 char name20; int a,b,c,need_a,need_b,need_c; process;bank banker;process processesMAX_P;int quantity;/作業(yè)的數量 typ
31、edef struct bnode char name50; int type;/*0 代表目錄,1 代表普通文件*/ struct bnode *next,/* 兄弟節(jié)點*/*sub,/*第一個子節(jié)點*/*father/*父節(jié)點*/; int size; /*文件的大小*/dirnode;dirnode *workdir;/當前工作目錄 dirnode root;/根目錄 char path100;/定義路徑信息 24const int MAXJOB = 100;/定義最大記錄數typedef struct cnodeint start;int length;char tag20;job;
32、job freesMAXJOB;/定義空閑區(qū)表 int free_quantity;job occupysMAXJOB;int occupy_quantity;typedef struct dnode char name10; int prio; int round; int cputime; int needtime; int count; char state; struct dnode *next;PCB;PCB *finish,*ready,*run,*r;int N;/銀行家算法 /初始化函數void yinitial() int i; banker.a=MAXA; banker.b
33、=MAXB; banker.c=MAXC; banker.remain_a=MAXA; banker.remain_b=MAXB; banker.remain_c=MAXC; for(i=0;iMAX_P;i+) strcpy(processesi.name,); processesi.a=0; processesi.b=0; 25 processesi.c=0; processesi.need_a=0; processesi.need_b=0; processesi.need_c=0; /新加作業(yè)void add() char name20; int flag=0,t,need_a,need
34、_b,need_c,i; coutendl; cout新加作業(yè) endl; cout-endl; coutname; for(i=0;iquantity;i+) if(!strcmp(processesi.name,name) flag=1;break; if(flag) cout錯誤,作業(yè)以存在endl; else coutneed_a; coutneed_b; coutneed_c; t=1; if(need_abanker.remain_a ) 26 cout錯誤,所需 A 類資源大于銀行家所剩 A 類資源banker.remain_b ) cout錯誤,所需 B 類資源大于銀行家所剩
35、B 類資源banker.remain_c ) cout錯誤,所需 C 類資源大于銀行家所剩 C 類資源endl; t=0; if(t) strcpy(processesquantity.name,name); processesquantity.need_a=need_a; processesquantity.need_b=need_b; processesquantity.need_c=need_c; quantity+; cout新加作業(yè)成功endl; else cout新加作業(yè)失敗endl; /為作業(yè)申請資源void bid() char name20; int i,p,a,b,c,fl
36、ag; coutendl為作業(yè)申請資源endl;/輸出 cout- endl; coutname;/輸入27 p=-1; for(i=0;iquantity;i+) if(!strcmp(processesi.name,name) p=i;break; if(p!= -1) couta; coutb; coutc; flag=1; if(abanker.remain_a)|(aprocessesp.need_a-processesp.a) cout錯誤,所申請 A 類資源大于銀行家所剩 A 類資源或該進程還需數量banker.remain_b)|(bprocessesp.need_b-proc
37、essesp.b) cout錯誤,所申請 B 類資源大于銀行家所剩 A 類資源或該進程還需數量banker.remain_c)|(cprocessesp.need_c-processesp.c) cout錯誤,所申請 A 類資源大于銀行家所剩 A 類資源或該進程還需數量endl; flag=0; if(flag) banker.remain_a-=a; banker.remain_b-=b; banker.remain_c-=c; 28 processesp.a+=a; processesp.b+=b; processesp.c+=c; cout為作業(yè)申請資源成功endl; else cout
38、為作業(yè)申請資源失敗endl; else cout改作業(yè)不存在endl;/撤銷作業(yè)void yfinished() char name20; int i,p; coutendl撤銷作業(yè)endl; cout- endl; coutname; p=-1; for(i=0;iquantity;i+) if(!strcmp(processesi.name,name) p=i;break; if(p!=-1) banker.remain_a+=processesp.a; banker.remain_b+=processesp.b; banker.remain_c+=processesp.c; for(i=
39、p;iquantity-1;i+) processesi=processesi+1; strcpy(processesquantity-1.name,); processesquantity-1.a=0; processesquantity-1.b=0; 29 processesquantity-1.c=0; processesquantity-1.need_a=0; processesquantity-1.need_b=0; processesquantity-1.need_c=0; quantity-; cout撤銷作業(yè)成功endl; else cout撤銷作業(yè)失敗endl; /查看資源情
40、況void yview() int i; cout查看資源情況endl; cout- endl; cout銀行家所剩資源(剩余資源/總共資源)endl; coutA 類:banker.remain_a/banker.a ; coutB 類:banker.remain_b/banker.b ; coutC 類:banker.remain_c/banker.c; coutendlendl作業(yè)占用情況(已占用資源/所需資源)endl0) for(i=0;iquantity;i+) cout作業(yè)名:processesi.nameendl; coutA 類:processesi.a/processesi
41、.need_a ; coutB 類:processesi.b/processesi.need_b ; coutC 類:processesi.c/processesi.need_c ; coutendl; else cout當前沒有作業(yè)sub; if(p=NULL) cout錯誤,dirname子目錄不存在type=0) if(!strcmp(p-name ,dirname) flag=1; break; p=p-next; if(flag=1) workdir=p; strcat(path,); strcat(path,p-name); cout工作目錄已進入dirnameendl; else
42、 cout錯誤,dirname子目錄不存在name,root) workdir = workdir-father; for(int i = strlen(path)-1; i = 0; i-) if(pathi =) pathi = 0;break; cout工作目錄已進入pathendl; else cout錯誤,當前已是根目錄name ,filename); q-sub=NULL; q-type=1; q-next=NULL; q-father=workdir; q-size=filesize; p=workdir-sub; if(p=NULL) workdir-sub=q; coutfi
43、lename文件創(chuàng)建成功type=1) if(!strcmp(p-name,filename) flag=1; cout錯誤,filename文件已存在next; if(flag=0) p=workdir-sub; while(p-next) 33 p=p-next; p-next=q; coutfilename文件創(chuàng)建成功sub; if(p=NULL) cout錯誤,filename文件不存在type=1) if(!strcmp(p-name,filename) flag=1; break; p=p-next; if(flag=1) if(p=workdir-sub) workdir-sub
44、=p-next; else q=workdir-sub; while(q-next!=p) 34 q=q-next; q-next=p-next; delete p; coutfilename文件已刪除endl; else cout錯誤,filename文件不存在type=0) cout name endl; else cout name sizenext; /顯示由目錄下子目錄中的文件和目錄 void dirs(dirnode *p,char str) char newstr100; dirnode *q; coutstr下子目錄及文件:sub)/子 strcpy(newstr,); str
45、cat(newstr,str); strcat(newstr,); strcat(newstr,q-name); dirs(q-sub,newstr); q=p; while(q-next)/兄弟 if(q-next-sub) strcpy(newstr,); strcat(newstr,str); strcat(newstr,); strcat(newstr,q-next-name); dirs(q-next-sub,newstr); q=q-next; /顯示所有目錄void LSALL() dirnode *p; cout顯示所有目錄結構; coutendl-endl; p=root.s
46、ub; if(p!=NULL) dirs(p,root); else cout目錄為空name,dirname); q-sub=NULL; q-type=0; q-next=NULL; q-father=workdir; q-size=0; p=workdir-sub; if(p=NULL) workdir-sub=q; coutdirname子目錄創(chuàng)建成功type=0) if(!strcmp(p-name,dirname) flag=1; cout錯誤,dirname子目錄已存在next; if(flag=0) p=workdir-sub; while(p-next) p=p-next; p
47、-next=q; coutdirname子目錄創(chuàng)建成功sub; if(p=NULL) cout錯誤,dirname子目錄已存在type=0) if(!strcmp(p-name,dirname) flag=1; break; p=p-next; if(flag=1) if(p=workdir-sub) workdir-sub=p-next; else q=workdir-sub; while(q-next!=p) q=q-next; 38 q-next=p-next; delete p; coutdirname子目錄已刪除endl; else cout錯誤,dirname子目錄不存在endl;
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
5. 裝配圖網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 川渝旅游日記成都重慶城市介紹推薦景點美食推薦
- XX國有企業(yè)黨委書記個人述責述廉報告及2025年重點工作計劃
- 世界濕地日濕地的含義及價值
- 20XX年春節(jié)節(jié)后復工安全生產培訓人到場心到崗
- 大唐女子圖鑒唐朝服飾之美器物之美繪畫之美生活之美
- 節(jié)后開工第一課輕松掌握各要點節(jié)后常見的八大危險
- 廈門城市旅游介紹廈門景點介紹廈門美食展示
- 節(jié)后開工第一課復工復產十注意節(jié)后復工十檢查
- 傳統(tǒng)文化百善孝為先孝道培訓
- 深圳城市旅游介紹景點推薦美食探索
- 節(jié)后復工安全生產培訓勿忘安全本心人人講安全個個會應急
- 預防性維修管理
- 常見閥門類型及特點
- 設備預防性維修
- 2.乳化液泵工理論考試試題含答案