操作系統(tǒng)課程設(shè)計(jì) 報(bào)告

上傳人:1888****888 文檔編號(hào):36108196 上傳時(shí)間:2021-10-29 格式:DOC 頁(yè)數(shù):42 大小:395.03KB
收藏 版權(quán)申訴 舉報(bào) 下載
操作系統(tǒng)課程設(shè)計(jì) 報(bào)告_第1頁(yè)
第1頁(yè) / 共42頁(yè)
操作系統(tǒng)課程設(shè)計(jì) 報(bào)告_第2頁(yè)
第2頁(yè) / 共42頁(yè)
操作系統(tǒng)課程設(shè)計(jì) 報(bào)告_第3頁(yè)
第3頁(yè) / 共42頁(yè)

下載文檔到電腦,查找使用更方便

15 積分

下載資源

還剩頁(yè)未讀,繼續(xù)閱讀

資源描述:

《操作系統(tǒng)課程設(shè)計(jì) 報(bào)告》由會(huì)員分享,可在線閱讀,更多相關(guān)《操作系統(tǒng)課程設(shè)計(jì) 報(bào)告(42頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。

1、操作系統(tǒng)程序設(shè)計(jì)操作系統(tǒng)程序設(shè)計(jì) 院 系: 計(jì)算機(jī)科學(xué)技術(shù)學(xué)院軟件工程系 班 級(jí): 軟件 08 1 班 姓 名: X X X 學(xué) 號(hào): X 號(hào) 指導(dǎo)教師: X X X 2010 年 6 月 26 日操作系操作系統(tǒng)統(tǒng)模模擬實(shí)現(xiàn)擬實(shí)現(xiàn)操作系統(tǒng)程序設(shè)計(jì)任務(wù)書操作系統(tǒng)程序設(shè)計(jì)任務(wù)書一、題目:一、題目:操作系統(tǒng)模擬實(shí)現(xiàn)二、設(shè)計(jì)要求二、設(shè)計(jì)要求(1)獨(dú)立完成(2)良好的交流、溝通能力(3)充分運(yùn)用前序課所學(xué)的軟件工程、程序設(shè)計(jì)等相關(guān)知識(shí)(4)充分運(yùn)用調(diào)試和排錯(cuò)技術(shù)(5)簡(jiǎn)單測(cè)試驅(qū)動(dòng)模塊和樁模塊的編寫 (6)查閱相關(guān)資料,自學(xué)具體課題中涉及到的新知識(shí)。(7)按要求寫出課程設(shè)計(jì)報(bào)告,并于設(shè)計(jì)結(jié)束后 1 周內(nèi)提

2、交。其主要內(nèi)容包括:封皮、課程設(shè)計(jì)任務(wù)書,指導(dǎo)教師評(píng)語(yǔ)與成績(jī)、目錄、概述、軟件需求分析、總體設(shè)計(jì)、詳細(xì)設(shè)計(jì)、程序的調(diào)試與測(cè)試、總結(jié)與體會(huì)、結(jié)束語(yǔ)、程序清單(帶中文注釋) 、參考文獻(xiàn)等。三、三、設(shè)計(jì)內(nèi)容及步驟設(shè)計(jì)內(nèi)容及步驟1.根據(jù)設(shè)計(jì)題目的要求,充分地分析和理解問(wèn)題,明確問(wèn)題要求做什么。具體要求至少實(shí)現(xiàn)進(jìn)程管理模擬、存儲(chǔ)器管理模擬、文件管理模擬,并將幾個(gè)模塊較好地集成一個(gè)整體,給出一個(gè)較好的用戶界面。2.根據(jù)實(shí)現(xiàn)的功能,劃分出合理的模塊,明確模塊間的關(guān)系。3.編程實(shí)現(xiàn)所設(shè)計(jì)的模塊。4.程序調(diào)試與測(cè)試。5.結(jié)果分析。程序運(yùn)行結(jié)果包括正確的輸入及其輸出結(jié)果和含有錯(cuò)誤的輸入及其輸出結(jié)果。6.編寫課程設(shè)

3、計(jì)報(bào)告;四、課程設(shè)計(jì)工作計(jì)劃四、課程設(shè)計(jì)工作計(jì)劃2010 年 6 月 12 日前,指導(dǎo)教師講課,學(xué)生根據(jù)題目準(zhǔn)備資料,需求分析;2010 年 6 月 13 日,提交軟件總體模塊結(jié)構(gòu)圖和分工方案;2010 年 6 月 13 日2009 年 6 月 16 日,完成程序模塊并通過(guò)獨(dú)立編譯;2010 年 6 月 17 日2010 年 6 月 20 日,將各模塊集成為一個(gè)完整的系統(tǒng),并錄入足夠的數(shù)據(jù)進(jìn)行調(diào)試運(yùn)行,數(shù)據(jù)必須存儲(chǔ)到磁盤文件中,已備驗(yàn)收;2010 年 6 月 22 日,驗(yàn)收、開始撰寫課程設(shè)計(jì)報(bào)告;2010 年 6 月 24 日前,提交課程設(shè)計(jì)報(bào)告,并將軟件的源文件及報(bào)告的word 文檔打印交到

4、老師辦公室里。 指導(dǎo)教師簽章: 教研室主任簽章 操作系統(tǒng)導(dǎo)教師評(píng)語(yǔ)與成績(jī)指導(dǎo)教師評(píng)語(yǔ):課程設(shè)計(jì)表現(xiàn)成績(jī): 課程設(shè)計(jì)驗(yàn)收成績(jī): 課程設(shè)計(jì)報(bào)告成績(jī): 課程設(shè)計(jì) 總成績(jī): 指導(dǎo)教師簽章 2010 年 7 月 日I目目 錄錄目目 錄錄I一、需求分析一、需求分析 11.1 功能需求11.2 背景描述11.3 具體設(shè)計(jì)內(nèi)容分析1二、總體概要設(shè)計(jì)二、總體概要設(shè)計(jì) 32.1 系統(tǒng)的特點(diǎn)32.2 抽象數(shù)據(jù)整合32.3 系統(tǒng)模塊圖5三、詳細(xì)設(shè)計(jì)三、詳細(xì)設(shè)計(jì) 63.1 基本操作63.2 進(jìn)程調(diào)度之時(shí)間片輪轉(zhuǎn)詳細(xì)設(shè)計(jì)73.3 模擬文件-改變目錄流程10四、程序的調(diào)試與測(cè)試四、程序的調(diào)試與測(cè)試 134.1 調(diào)試分析13

5、4.2 測(cè)試結(jié)果14五、用戶使用說(shuō)明五、用戶使用說(shuō)明 19六、總結(jié)與體會(huì)六、總結(jié)與體會(huì) 20參考文獻(xiàn)參考文獻(xiàn) 21附錄附錄:程序清單程序清單221一、一、需求分析需求分析1.1 功能需求操作系統(tǒng)原理課程設(shè)計(jì)是軟件工程專業(yè)實(shí)踐性環(huán)節(jié)之一,是學(xué)習(xí)完操作系統(tǒng)原理課程后進(jìn)行的一次較全面的綜合練習(xí)。其目的在于加深對(duì)操作系統(tǒng)的理論、方法和基礎(chǔ)知識(shí)的理解,掌握操作系統(tǒng)結(jié)構(gòu)、實(shí)現(xiàn)機(jī)理和各種典型算法,進(jìn)程調(diào)度、內(nèi)存管理、文件管理、等各種調(diào)度管理算法模擬,系統(tǒng)地了解操作系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn)思路,培養(yǎng)學(xué)生的系統(tǒng)設(shè)計(jì)能力,并了解操作系統(tǒng)的發(fā)展動(dòng)向和趨勢(shì)。1.2 背景描述經(jīng)過(guò)一個(gè)學(xué)期的操作系統(tǒng)原理 、 操作系統(tǒng)實(shí)驗(yàn)教程課程

6、的學(xué)習(xí),我們學(xué)到了很多理論上的知識(shí),對(duì)操作系統(tǒng)及其各方面的功能有了深刻的認(rèn)識(shí),但這是遠(yuǎn)遠(yuǎn)不夠的,我們要講理論編程實(shí)踐,雖然我們學(xué)習(xí)期間做過(guò)很多的實(shí)驗(yàn),但是都是針對(duì)操作系統(tǒng)的某一塊具體的功能的,我們對(duì)了解了每塊具體的功能的實(shí)現(xiàn),但是,整體說(shuō)來(lái)還是模糊,所以,很有必要將各個(gè)模塊整合起來(lái),也就是模擬一個(gè)操作系統(tǒng),這樣,不僅跟深入學(xué)習(xí)了各個(gè)模塊,更認(rèn)識(shí)了一個(gè)完整的 OS,對(duì)我們來(lái)說(shuō)受益匪。1.3 具體設(shè)計(jì)內(nèi)容分析 本次課程設(shè)計(jì)所用環(huán)境:VC+6.0,采用控制臺(tái)界面至少實(shí)現(xiàn)進(jìn)程管理模擬、存儲(chǔ)器管理模擬、文件管理模擬,并將幾個(gè)模塊較好地集成一個(gè)整體,實(shí)現(xiàn)各個(gè)管理調(diào)度算法的功能,并給出一個(gè)較好的用戶界面。進(jìn)

7、程管理模擬:在多道程序運(yùn)行環(huán)境下,進(jìn)程數(shù)目一般多于處理機(jī)數(shù)目,是的進(jìn)程要通過(guò)競(jìng)爭(zhēng)來(lái)使用處理機(jī)。這就要求系統(tǒng)能按某種屬案發(fā),動(dòng)態(tài)的把處理機(jī)分配給就緒隊(duì)列中的一個(gè)進(jìn)程,使之運(yùn)行。進(jìn)程調(diào)度包括常用的:先來(lái)先服務(wù)、時(shí)間片輪轉(zhuǎn)、優(yōu)先權(quán)等因?yàn)橐郧耙呀?jīng)實(shí)現(xiàn),所以這次 模擬整合到一起不算很難。存儲(chǔ)器管理模擬:主存是中央處理器直接存取指令和數(shù)據(jù)的存儲(chǔ)器,能否合理的利用主存,在很大程度上將影響到整個(gè)計(jì)算機(jī)系統(tǒng)的性能。在多道作業(yè)和多進(jìn)程環(huán)境下,共享主存空間。當(dāng)作業(yè)執(zhí)行完畢或進(jìn)程運(yùn)行結(jié)束后將主存空2間歸還系統(tǒng)。這次模擬包括:貯存分配與回收、基于分頁(yè)的內(nèi)存調(diào)度算法。有于模擬的比較簡(jiǎn)單,僅實(shí)現(xiàn)了最先適應(yīng)算法、和先來(lái)先服務(wù)

8、、最近你最久未使用的調(diào)度算法,實(shí)現(xiàn)比較簡(jiǎn)單。文件管理模擬:用于用戶界面和操作命令在操作系統(tǒng)中的作用,實(shí)現(xiàn)操作系統(tǒng)中對(duì)文件的管理。文件中建立一個(gè)雙向鏈表,每個(gè)聊表節(jié)點(diǎn)又是單鏈表的頭結(jié)點(diǎn),對(duì)目錄、文件操作比較簡(jiǎn)單。 3二、總體概要設(shè)計(jì)二、總體概要設(shè)計(jì)2.1 系統(tǒng)的特點(diǎn)本次可設(shè)主要是簡(jiǎn)單的模擬一個(gè)操作系統(tǒng),包括一個(gè)主界面,實(shí)現(xiàn)了銀行家算法、模擬文件管理、主存空間的分配與回收、進(jìn)程調(diào)度等功能。模擬了操作系統(tǒng)的進(jìn)程管理、文件管理、存儲(chǔ)器管理。銀行家算法,包括了新加作業(yè)、申請(qǐng)資源、撤銷作業(yè)、查看資源情況四個(gè)模塊。如果申請(qǐng)資源后系統(tǒng)進(jìn)入不安全狀態(tài),則申請(qǐng)失敗。進(jìn)程調(diào)度實(shí)現(xiàn)了調(diào)度進(jìn)程的三個(gè)主要算法優(yōu)先數(shù)、先來(lái)

9、先服務(wù)、時(shí)間片輪轉(zhuǎn)法。其中,優(yōu)先數(shù)算法中優(yōu)先數(shù)的確定為(50-進(jìn)程的服務(wù)時(shí)間) ,每輪一次優(yōu)先數(shù)-3。時(shí)間片輪轉(zhuǎn)法的時(shí)間片由用戶自己輸入。存儲(chǔ)器管理實(shí)現(xiàn)了申請(qǐng)空間、撤銷作業(yè)、顯示空閑表等功能。如果空閑空間不足則申請(qǐng)失敗。模擬文件管理很全面,包含了創(chuàng)建目錄、刪除目錄、改變目錄、創(chuàng)建文件、刪除文件、顯示目錄的功能。另外,我還加了回到根目錄的功能。2.2 抽象數(shù)據(jù)整合銀行家算法:const int MAX_P=20; / 進(jìn)程的最大容量const int MAXA=10; / A 類資源的最大數(shù)量const int MAXB=5; /B 類資源的最大數(shù)量const int MAXC=7; /C 類資

10、源的最大數(shù)量typedef struct anode int a,b,c,/*三種資源總數(shù)*/remain_a,remain_b,remain_c/*三種資源剩余數(shù)*/; bank;typedef struct node1 char name20; int a,b,c,need_a,need_b,need_c; process; / 進(jìn)程的結(jié)構(gòu)體結(jié)點(diǎn)模擬文件管:4typedef struct bnode char name50; int type;/*0 代表目錄,1 代表普通文件*/ struct bnode *next,/* 兄弟節(jié)點(diǎn)*/*sub,/*第一個(gè)子節(jié)點(diǎn)*/*father/*父節(jié)

11、點(diǎn)*/; int size; /*文件的大小*/dirnode;dirnode *workdir;/當(dāng)前工作目錄 dirnode root;/根目錄 char path100;/定義路徑信息 const int MAXJOB = 100;/定義最大記錄數(shù)存儲(chǔ)器管理:首先需要建立空閑區(qū)數(shù)據(jù)文件,空閑區(qū)數(shù)據(jù)文件包括若干行,每行有兩個(gè)字段:起始地址,內(nèi)存塊大?。ň鶠檎麛?shù)) ,各自段一逗號(hào)隔開。空閑區(qū)數(shù)據(jù)文件:0,1010,0818,1028,0634,1044,09空閑表的結(jié)構(gòu):typedef struct cnodeint start;int length;char tag20;job; job

12、freesMAXJOB;/定義空閑區(qū)表 int free_quantity;job occupysMAXJOB;int occupy_quantity;進(jìn)程調(diào)度:進(jìn)程存在的標(biāo)識(shí)是進(jìn)程控制塊(PCB) ,進(jìn)程控制塊結(jié)構(gòu)如下:typedef struct dnode char name10;5 int prio; int round; int cputime; int needtime; int count; char state; struct dnode *next;PCB; / 進(jìn)程的 PCBPCB *finish,*ready,*run,*r;2.3 系統(tǒng)模塊圖圖 1 系統(tǒng)模塊圖進(jìn)程調(diào)度存

13、儲(chǔ)器管理模擬文件管理主界面新加作業(yè)銀行家算法申請(qǐng)資源撤銷資源申請(qǐng)資源優(yōu)先數(shù)調(diào)度時(shí)間片輪轉(zhuǎn)先來(lái)先服務(wù)申請(qǐng)空間撤銷作業(yè)顯示空閑表改變目錄創(chuàng)建目錄創(chuàng)建文件刪除文件顯示目錄申請(qǐng)資源申請(qǐng)資源申請(qǐng)資源6三、詳細(xì)設(shè)計(jì)三、詳細(xì)設(shè)計(jì)3.1 基本操作1)銀行家算法:銀行家算法主要由 5 個(gè)函數(shù)實(shí)現(xiàn)了四大功能,即新加作業(yè)、為作業(yè)申請(qǐng)資源、撤銷作業(yè)、查看資源情況。void yinitial() /初始化函數(shù)void add() / 新加作業(yè)函數(shù)void bid() /為作業(yè)申請(qǐng)資源void yfinished()/撤銷作業(yè)void yview()/查看資源情況2)模擬文件管理:模擬文件管理實(shí)現(xiàn)了很多功能,當(dāng)然也有很多

14、函數(shù),每一個(gè)文件和目錄都是用一個(gè)節(jié)點(diǎn)來(lái)描述的,用 type 來(lái)控制,有兩個(gè)值,0 和1,0 代表目錄,1 代表普通文件void minitial() /初始化目錄函數(shù)dirnode * init() /初始化新節(jié)點(diǎn)的函數(shù)void CD(char dirname) /改變目錄void CREATE(char filename,int filesize) /創(chuàng)建文件void DEL(char filename)/刪除文件void dir(dirnode *p) /現(xiàn)實(shí)所有目錄,本目錄下所有兄弟目錄和文件void dirs(dirnode *p,char str)/顯示由目錄下子目錄中的文件和目錄v

15、oid LSALL()/顯示所有目錄void MD(char dirname)/創(chuàng)建目錄void RD(char dirname)/刪除目錄3)存儲(chǔ)器管理:void initial()/初始化函數(shù)int readData()/讀數(shù)據(jù)函數(shù)void sort()/將空閑塊按照從小到大的順序排序void zview()/顯示函數(shù)void earlist()/最先適應(yīng)分配算法void zfinished()/撤銷作業(yè)4)進(jìn)程調(diào)度:void firstin()/調(diào)度進(jìn)程使之運(yùn)行void prt1(char a)/*void prt2(char a ,PCB *q)7void prt(char algo)

16、*/上面的三本分主要是顯示出來(lái)進(jìn)程的調(diào)度情況void insert1(PCB *q)/插入新的進(jìn)程void creat1(char alg)/*void creat2(char alg)*/以上兩個(gè)實(shí)現(xiàn)進(jìn)程的創(chuàng)建void priority(char alg)/優(yōu)先數(shù)算法的實(shí)現(xiàn)void roundrun(char alg)/時(shí)間片輪轉(zhuǎn)法的實(shí)現(xiàn)void FCFSrun(char alg)/先來(lái)先服務(wù)算法的實(shí)現(xiàn)void xianshi()/顯示主界面的函數(shù)void yinhangjia()/主函數(shù)掉該函數(shù)實(shí)現(xiàn)銀行家算法void wenjianguanli()/主函數(shù)調(diào)度該函數(shù)實(shí)現(xiàn)文件管理void z

17、hucunkongjian()/主函數(shù)調(diào)度該函數(shù)實(shí)現(xiàn)存儲(chǔ)器管理void jinchengdiaodu()/主函數(shù)調(diào)度該函數(shù)實(shí)現(xiàn)進(jìn)程調(diào)度3.2 進(jìn)程調(diào)度之時(shí)間片輪轉(zhuǎn)詳細(xì)設(shè)計(jì)進(jìn)程調(diào)度中對(duì)于先來(lái)先服務(wù)調(diào)度原理簡(jiǎn)單、實(shí)現(xiàn)也很簡(jiǎn)單、對(duì)于優(yōu)先數(shù)調(diào)度來(lái)講,每次調(diào)度的就是優(yōu)先權(quán)最高的,所以每次只要找到優(yōu)先權(quán)最高的就能實(shí)現(xiàn),用到 2 個(gè)單鏈表:一個(gè)等待服務(wù)、一個(gè)連接完成。在這里就不多說(shuō)了。對(duì)于時(shí)間片輪轉(zhuǎn),可以設(shè)定時(shí)間片大小、中途不能改變,我就建立一個(gè)循環(huán)鏈表來(lái)存放等待進(jìn)程,一個(gè)單鏈表來(lái)連接完成的進(jìn)程。這個(gè)實(shí)現(xiàn)的時(shí)候,費(fèi)了不少勁兒,但最終能沒(méi)有 bug 的顯示出來(lái)。這個(gè)調(diào)度有一個(gè)缺陷:要求進(jìn)程必須是同時(shí)到達(dá),由于

18、時(shí)間倉(cāng)促,我就沒(méi)設(shè)計(jì)這個(gè)內(nèi)容。如果涉及的話,我感覺(jué)能整出來(lái)無(wú)非是多加個(gè)標(biāo)記,標(biāo)簽來(lái)判斷進(jìn)程的到達(dá)及服務(wù)。忘了說(shuō)了,對(duì)于時(shí)間片算法,進(jìn)程我是按順序進(jìn)行插入的。主要核心代碼:void creat2(char alg) PCB *p; int i,time,round; char na10; ready = NULL; finish = NULL; run = NULL; printf(請(qǐng)輸入時(shí)間片:); scanf(%d,&round); printf(輸入進(jìn)程號(hào)和運(yùn)行時(shí)間: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( 時(shí)間片輪轉(zhuǎn)算法輸出信息:n); printf(*n); prt(alg);void roundrun(char alg)bool flag;/當(dāng) ready 列里只有一個(gè)時(shí)做標(biāo)記 while(N) flag = 1;/初始化為 1 run = ready;/run 每次運(yùn)行 ready 的隊(duì)頭 run-co

20、unt+;/沒(méi)運(yùn)行一次計(jì)數(shù)器加 1 if(run-needtime round)/當(dāng)剩余時(shí)間小于時(shí)間片輪轉(zhuǎn)時(shí)間時(shí)的情況 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;/當(dāng) ready 剩一個(gè)時(shí)做標(biāo)記 if(run-needtime = 0)/當(dāng) run 結(jié)束時(shí)放入 finish

21、隊(duì)列里 run-next = finish; finish = run; run-state = F; N-;/進(jìn)程數(shù)少 1 else if(flag)/執(zhí)行完如果不是剩一個(gè)的話,就把 run 放到隊(duì)尾 r-next = run; r = run; r-next = NULL; if(N)ready-state = R;/結(jié)束時(shí)不應(yīng)該有R else ready = NULL;/結(jié)束時(shí)應(yīng)該為空 prt(alg);/輸出 截圖顯示:圖 A、B、C。圖 A 時(shí)間片輪轉(zhuǎn)算法界面10圖 B 時(shí)間片輪轉(zhuǎn)算法開始圖 C 時(shí)間片輪轉(zhuǎn)運(yùn)行結(jié)束3.3 模擬文件-改變目錄流程由于模擬文件管理采用雙向鏈表,可以來(lái)回搜

22、索。進(jìn)入子目錄后還可以回到根目錄,所以就在程序加了返回到上一級(jí)目錄的功能,就是在 CD()函數(shù)里加個(gè)條件,控制回到子目錄還是上級(jí)目錄。主要代碼:void CD(char dirname) dirnode *p; int flag=0; if(strcmp(dirname,.) p=workdir-sub; if(p=NULL) cout錯(cuò)誤,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工作目錄已進(jìn)入dirnameendl; else cout錯(cuò)誤,dirname子目錄不存在name,root) workdir = workdir-father; for(int i = strlen(path)-1; i = 0; i-) if(pathi =) pathi = 0;break; cout工作目錄已進(jìn)入pathendl; else cout錯(cuò)誤,當(dāng)前已是根目錄subP!=nulllp = p-next進(jìn)入子目錄子目錄不存在已是根目錄結(jié)束NYYNNY圖 2 改變目錄流程13四、程序的調(diào)試與測(cè)試四、程序的調(diào)試與測(cè)試4.1 調(diào)試分析(1)在試驗(yàn)過(guò)程中遇到了很多

24、錯(cuò)誤,最開始的時(shí)候,在將各個(gè)模塊連接起來(lái)的時(shí)候幾個(gè)函數(shù)的名字一樣,出現(xiàn)了錯(cuò)誤,如圖:圖 3 錯(cuò)誤顯示后來(lái)將函數(shù)的名字都改變了一下。(2)在主函數(shù)中將各個(gè)模塊的主函數(shù)連起來(lái)的時(shí)候,退出來(lái)的時(shí)候整個(gè)程序就結(jié)束了,而我是想推出來(lái)的時(shí)候是退回到主界面,后來(lái)又給改了一下,加了一個(gè) while 循環(huán),還有變量 flag,有 flag 來(lái)控制,當(dāng) flag=0 的時(shí)候就跳出 while 循環(huán),然后清屏,掉一個(gè)編好的顯示函數(shù),顯示主界面,這樣就退回了主界面,后來(lái)又發(fā)現(xiàn)主函數(shù)有很多東西,很亂,我又將每個(gè)模塊的主函數(shù)部分又分出去一個(gè)函數(shù),這樣主函數(shù)掉每個(gè)模塊的原來(lái)的主函數(shù)部分就好了。(3)在內(nèi)存調(diào)度算法中由于 w

25、indows 里面沒(méi)有 getpid()函數(shù)不了解 rand()就用結(jié)果造成卻也計(jì)算率也來(lái)小。如圖:圖 4 內(nèi)存調(diào)度算法 FIFO 中無(wú) getpid()錯(cuò)誤144.2 測(cè)試結(jié)果可設(shè)主界面:如圖 圖 5 設(shè)計(jì)主界面銀行家算法:圖 6 銀行界算法主界面新加作業(yè):圖 7 添加作業(yè)查看資源情況:15圖 8 資源使用情況為作業(yè)申請(qǐng)資源:圖 9 申請(qǐng)資源撤銷作業(yè):圖 10 撤銷作業(yè)模擬文件管理:如圖創(chuàng)建目錄:圖 11 模擬文件管理界面改變目錄:16圖 12 改變目錄回到上一級(jí)目錄:圖 13 返回上一級(jí)目錄顯示目錄:圖 14 顯示所有目錄存儲(chǔ)器管理模擬:如圖顯示空閑表:17圖 15 顯示空閑區(qū)分配表申請(qǐng)空

26、間:圖 16 申請(qǐng)空間進(jìn)程調(diào)度模擬:優(yōu)先數(shù)算法:圖 17 優(yōu)先數(shù)算法時(shí)間片輪轉(zhuǎn)法:18圖 18 時(shí)間片輪轉(zhuǎn)法先來(lái)先服務(wù)算法:圖 19 先來(lái)先服務(wù)算法19五、用戶使用說(shuō)明五、用戶使用說(shuō)明這次的課程設(shè)計(jì)實(shí)驗(yàn)主要是模擬一個(gè)操作系統(tǒng)的各個(gè)功能算法,重點(diǎn)在于算法的描述,應(yīng)用。當(dāng)運(yùn)行的時(shí)候會(huì)出現(xiàn)一個(gè)主界面,上面列出了該系統(tǒng)主要實(shí)現(xiàn)的功能,可以根據(jù)提示選擇 1.、進(jìn)程調(diào)度 2、貯存空間分配與回收 3、模擬文件管理 4、內(nèi)存調(diào)度算法 5、銀行家算法 6、 退出系統(tǒng)。選擇完后就進(jìn)入該模塊,如果選擇的是 1 即銀行家算法,進(jìn)去后界面也會(huì)有提示,1、新加作業(yè),2,、為作業(yè)申請(qǐng)資源 3、撤銷作業(yè) 4、查看資源情況、0

27、 退出系統(tǒng),選擇你想要操作的。會(huì)提示你相應(yīng)的操作。如果選擇的是 2 即模擬文件管理,進(jìn)入后也有界面給予提示,但是這個(gè)模塊有先后順序,即應(yīng)該先創(chuàng)建目錄,之后在進(jìn)行其他操作,我還加入了一個(gè)額外的功能,如果輸入 cd . 就會(huì)回到上一級(jí)目錄里。如果選擇的是 3,即存儲(chǔ)器管理,這個(gè)模塊首先要在改程序在同一目錄下建立一個(gè)空閑表,進(jìn)入該模塊后首先要輸入改空閑表,例如,input.txt,如果該空閑表存在的話就會(huì)繼續(xù)往下進(jìn)行,根據(jù)提示做想要實(shí)現(xiàn)的操作。如果選擇的是4,即進(jìn)程調(diào)度,進(jìn)入后可以選擇 P、優(yōu)先數(shù)算法,R、時(shí)間片輪轉(zhuǎn)法 F、先來(lái)先服務(wù)算法、E 退出時(shí)間片輪轉(zhuǎn)法的時(shí)間片由用戶來(lái)定。這些模塊中的退出都是

28、退到主界面的,要想退出本系統(tǒng),在主界面里有一個(gè)退出。20六、總結(jié)與體會(huì)六、總結(jié)與體會(huì)這次課程設(shè)計(jì)對(duì)我來(lái)說(shuō)獲益很大、體會(huì)很深,通過(guò)這次課程設(shè)計(jì)將所學(xué)的操作系統(tǒng)課程的知識(shí)用于實(shí)踐,對(duì)所學(xué)的知識(shí)有了系統(tǒng)的了解、更深刻。在將各個(gè)模塊連起來(lái)過(guò)正中首先要對(duì)各個(gè)模塊都深入了解,不僅復(fù)習(xí)了所學(xué)的,以前不明白的現(xiàn)在明白了好多,而且對(duì)“操作系統(tǒng)”不再陌生,但是“操作系統(tǒng)“所要做的絕不是這么少的,所學(xué)的這些是遠(yuǎn)遠(yuǎn)不夠的,希望還能有更深的了解。這次課程設(shè)計(jì)讓我我熟練的練習(xí)了 VC+6.0 環(huán)境,更讓那個(gè)我了解和運(yùn)用 了 linux 操作系統(tǒng),了解了 OS 內(nèi)核結(jié)構(gòu),核心操作,以及最基本的 OS 管理。對(duì)以后學(xué)習(xí)有很大

29、幫助。這次課程設(shè)計(jì)給我了很大的啟示:無(wú)論學(xué)什么都要一步一個(gè)腳印,不能前面開始學(xué)很有勁頭,后面就松懈了,要持之以恒。感謝老師耐心的教導(dǎo),您認(rèn)真的態(tài)度對(duì)我們很有幫助、很親切,但對(duì)我來(lái)說(shuō)是提升自身,我想我的 IT 之路還沒(méi)走完,會(huì)有更深入的學(xué)習(xí)。再次感謝老師!2122參考文獻(xiàn)參考文獻(xiàn)1 李登實(shí),徐宏云,計(jì)算機(jī)操作系統(tǒng)實(shí)驗(yàn),北京,清華大學(xué)出版社,2000 年 9 月。2湯小丹,梁紅兵,計(jì)算機(jī)操作系統(tǒng),西安,西安電子科技大學(xué)出版社,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,/*三種資源總數(shù)*/remain_a,remain_b,remain_c/*三種資源剩余數(shù)*/; 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è)的數(shù)量 typ

31、edef struct bnode char name50; int type;/*0 代表目錄,1 代表普通文件*/ struct bnode *next,/* 兄弟節(jié)點(diǎn)*/*sub,/*第一個(gè)子節(jié)點(diǎn)*/*father/*父節(jié)點(diǎn)*/; int size; /*文件的大小*/dirnode;dirnode *workdir;/當(dāng)前工作目錄 dirnode root;/根目錄 char path100;/定義路徑信息 24const int MAXJOB = 100;/定義最大記錄數(shù)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;/銀行家算法 /初始化函數(shù)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錯(cuò)誤,作業(yè)以存在endl; else coutneed_a; coutneed_b; coutneed_c; t=1; if(need_abanker.remain_a ) 26 cout錯(cuò)誤,所需 A 類資源大于銀行家所剩 A 類資源banker.remain_b ) cout錯(cuò)誤,所需 B 類資源大于銀行家所剩

35、B 類資源banker.remain_c ) cout錯(cuò)誤,所需 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è)申請(qǐng)資源void bid() char name20; int i,p,a,b,c,fl

36、ag; coutendl為作業(yè)申請(qǐng)資源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錯(cuò)誤,所申請(qǐng) A 類資源大于銀行家所剩 A 類資源或該進(jìn)程還需數(shù)量banker.remain_b)|(bprocessesp.need_b-proc

37、essesp.b) cout錯(cuò)誤,所申請(qǐng) B 類資源大于銀行家所剩 A 類資源或該進(jìn)程還需數(shù)量banker.remain_c)|(cprocessesp.need_c-processesp.c) cout錯(cuò)誤,所申請(qǐng) A 類資源大于銀行家所剩 A 類資源或該進(jìn)程還需數(shù)量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è)申請(qǐng)資源成功endl; else cout

38、為作業(yè)申請(qǐng)資源失敗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當(dāng)前沒(méi)有作業(yè)sub; if(p=NULL) cout錯(cuò)誤,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工作目錄已進(jìn)入dirnameendl; else

42、 cout錯(cuò)誤,dirname子目錄不存在name,root) workdir = workdir-father; for(int i = strlen(path)-1; i = 0; i-) if(pathi =) pathi = 0;break; cout工作目錄已進(jìn)入pathendl; else cout錯(cuò)誤,當(dāng)前已是根目錄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錯(cuò)誤,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錯(cuò)誤,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錯(cuò)誤,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顯示所有目錄結(jié)構(gòu); 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錯(cuò)誤,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錯(cuò)誤,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錯(cuò)誤,dirname子目錄不存在endl;

展開閱讀全文
溫馨提示:
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. 裝配圖網(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ì)自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!