版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
圖1-3GeekOS系統(tǒng)主目錄圖1-4項(xiàng)目文件結(jié)構(gòu)圖在build文件夾中,包含系統(tǒng)編譯后的可執(zhí)行文件的文件、軟盤鏡像fd.img(project1等項(xiàng)目中還包含有磁盤鏡像diskc.img)、makefile項(xiàng)目管理文件。在Include文件夾中有g(shù)eekos和libc兩個(gè)子目錄,在geekos子目錄中有kthread.h、keyboard.h等頭文件,在libc中包含有GeekOS支持的C語言標(biāo)準(zhǔn)函數(shù)string.h頭文件。在scripts文件夾中是項(xiàng)目編譯時(shí)要用到的一些腳本文件。src文件夾中存放系統(tǒng)內(nèi)核源代碼,用戶修改GeekOS系統(tǒng)時(shí)要修改的源代碼如main.c等都位于這個(gè)目錄中。在User子目錄中一般是用來存放用戶的測(cè)試文件,在tools子目錄中的代碼是用來建立pfat測(cè)試文件系統(tǒng)的。在提供的GeekOS內(nèi)核系統(tǒng)的基礎(chǔ)上,為學(xué)生設(shè)計(jì)了7個(gè)由易到難的設(shè)計(jì)項(xiàng)目用于GeekOS的改進(jìn)。這些項(xiàng)目分別涵蓋了操作系統(tǒng)內(nèi)核的各個(gè)基本模塊:系統(tǒng)啟動(dòng)、進(jìn)程管理、存儲(chǔ)管理、文件系統(tǒng)、訪問控制以及進(jìn)程間網(wǎng)絡(luò)通信。7個(gè)項(xiàng)目都規(guī)定了改進(jìn)的目標(biāo),并提供了一些設(shè)計(jì)指導(dǎo)性的意見,但沒有提供源代碼,所以學(xué)生首先必須熟悉GeekOS的基本工作原理,才能開展各個(gè)項(xiàng)目的設(shè)計(jì)與實(shí)現(xiàn)。項(xiàng)目0:主要是讓學(xué)生熟悉GeekOS的編譯、運(yùn)行過程,了解計(jì)算機(jī)系統(tǒng)的啟動(dòng)原理。項(xiàng)目0要求實(shí)現(xiàn)一個(gè)內(nèi)核進(jìn)程,功能是實(shí)現(xiàn)從鍵盤接收一個(gè)按鍵,并在屏幕上顯示。項(xiàng)目1:主要讓學(xué)生熟悉可執(zhí)行鏈接文件(ELF文件)的結(jié)構(gòu),并學(xué)會(huì)加載和運(yùn)行可執(zhí)行文件。項(xiàng)目要求學(xué)生熟悉ELF文件格式,并編寫代碼對(duì)ELF文件進(jìn)行分析,并將分析結(jié)果傳送給加載器。項(xiàng)目2:要求學(xué)生實(shí)現(xiàn)對(duì)用戶態(tài)進(jìn)程的支持。在項(xiàng)目2實(shí)現(xiàn)之前,GeekOS一直使用內(nèi)核進(jìn)程。對(duì)用戶態(tài)進(jìn)程執(zhí)行的支持包括用戶態(tài)進(jìn)程結(jié)構(gòu)的初始化、用戶進(jìn)程空間的初始化、用戶進(jìn)程切換和用戶程序?qū)氲?。該?xiàng)目中,存儲(chǔ)分配依然使用分段分配方式。實(shí)現(xiàn)項(xiàng)目2后,用戶就可以使用GeekOS提供的命令行解釋器Shell運(yùn)行一些命令來執(zhí)行PFAT文件系統(tǒng)內(nèi)的用戶測(cè)試程序。項(xiàng)目3:要求學(xué)生改進(jìn)GeekOS的調(diào)度程序,實(shí)現(xiàn)基于4級(jí)反饋隊(duì)列的調(diào)度算法(初始GeekOS系統(tǒng)僅提供了FIFO進(jìn)程調(diào)度算法),并實(shí)現(xiàn)信號(hào)量,支持進(jìn)程間通信。項(xiàng)目4:要求學(xué)生實(shí)現(xiàn)分頁虛存管理,以替代在項(xiàng)目1和項(xiàng)目2中采用的分段存儲(chǔ)管理。實(shí)現(xiàn)分頁虛存管理后。系統(tǒng)在內(nèi)存不夠的情況下就可以將部分頁調(diào)到硬盤,以釋放內(nèi)存實(shí)現(xiàn)虛擬存儲(chǔ)技術(shù)。項(xiàng)目5:要求實(shí)現(xiàn)GOSFS文件系統(tǒng)。由于GeekOS使用了虛擬文件系統(tǒng),可以加載不同的文件系統(tǒng),而系統(tǒng)默認(rèn)加載的是PFAT只讀文件系統(tǒng)。在這個(gè)項(xiàng)目中,需要實(shí)現(xiàn)一個(gè)多極目錄的、可讀寫的文件系統(tǒng)。項(xiàng)目6:要求為文件系統(tǒng)增加訪問控制列表,并使用匿名半雙工管道實(shí)現(xiàn)進(jìn)程間通信。在某種程度上,GeekOS就是一個(gè)簡(jiǎn)單的C程序,有功能函數(shù)、線程、內(nèi)存分配等。但與在裝有Linux或Windows操作系統(tǒng)中運(yùn)行的C語言程序不同,一般C語言程序是運(yùn)行在用戶態(tài)的,而GeekOS是運(yùn)行在核態(tài)的(也稱系統(tǒng)態(tài))。在核態(tài)運(yùn)行的程序可以完全控制計(jì)算機(jī)的CPU、內(nèi)存和外部設(shè)備,所以編寫運(yùn)行于核態(tài)的程序時(shí)有一些需要特別注意的問題,修改GeekOS內(nèi)核代碼時(shí)要特別注意GeekOS內(nèi)核運(yùn)行環(huán)境的一些限制。1.有限庫函數(shù)因?yàn)椴僮飨到y(tǒng)是計(jì)算機(jī)中最底層的軟件,內(nèi)核使用的所有功能函數(shù)必須能在內(nèi)核執(zhí)行。這與用戶程序不同,用戶程序可與一系列包含常用函數(shù)的標(biāo)準(zhǔn)庫連接。GeekOS中唯一能使用的標(biāo)準(zhǔn)C語言庫函數(shù)是字符串函數(shù)的一個(gè)子集(strcpy()、memcpy()函數(shù))和snprintf()函數(shù),這些函數(shù)的原型定義在<GeekOS/string.h>頭文件中。除標(biāo)準(zhǔn)C語言庫函數(shù)外,GeekOS內(nèi)核還有一些與C語言庫函數(shù)類似的函數(shù),如Print()函數(shù)(函數(shù)原型定義在<GeekOS/screen.h>中),是標(biāo)準(zhǔn)C函數(shù)printf()函數(shù)的功能子集;Malloc()和Free()函數(shù)則相當(dāng)于標(biāo)準(zhǔn)C的malloc()和free()函數(shù)(函數(shù)原型定義在<GeekOS/malloc.h>中)。2.有限??臻gGeekOS內(nèi)核中的每個(gè)線程可以使用大小為4KB的棧。如果某個(gè)線程堆棧溢出將導(dǎo)致系統(tǒng)內(nèi)核崩潰。因此,在編程時(shí)應(yīng)謹(jǐn)慎使用??臻g:不要用棧分配大的數(shù)據(jù)結(jié)構(gòu),使用棧時(shí)盡量使用堆棧分配函數(shù)Malloc()和Free();程序中不要使用遞歸,避免函數(shù)深層次的調(diào)用。3.存儲(chǔ)器保護(hù)限制一旦系統(tǒng)內(nèi)核開始運(yùn)行,沒有任何存儲(chǔ)器保護(hù),內(nèi)核的每次存儲(chǔ)器訪問都是對(duì)物理內(nèi)存單元的訪問,即使是引用空指針系統(tǒng)也無法捕獲(trapped)。因此,系統(tǒng)在核態(tài)運(yùn)行比在用戶態(tài)運(yùn)行時(shí)指針引用更容易出問題。要調(diào)試運(yùn)行于核態(tài)的程序是比較難的,所以用戶必須仔細(xì)檢查編寫的代碼,確保沒有內(nèi)存訪問錯(cuò)誤。如果用戶為GeekOS內(nèi)核增加虛擬內(nèi)存管理功能,那內(nèi)核將獲得較好的內(nèi)存訪問保護(hù),但用戶在編寫內(nèi)核代碼時(shí)仍然要仔細(xì)檢查,避免一些不易調(diào)試的錯(cuò)誤發(fā)生。4.異步中斷當(dāng)有重要事件發(fā)生的時(shí)候,許多硬件設(shè)備都用中斷來通知CPU:如定時(shí)器定時(shí)到、I/O請(qǐng)求完成等。中斷發(fā)生時(shí),控制權(quán)異步傳送給中斷處理程序,當(dāng)中斷處理結(jié)束時(shí),控制返回到中斷點(diǎn)繼續(xù)執(zhí)行。值得注意的是,中斷處理可能會(huì)引起線程交換,這就意味著在控制返回到被中斷的線程前,系統(tǒng)可能會(huì)執(zhí)行其他線程。如果用戶遵守上述的限制,在內(nèi)核模式下編程會(huì)相對(duì)容易。不僅如此,為使用戶更順利地深入內(nèi)核編程,還建議用戶養(yǎng)成下列編程習(xí)慣。使用斷點(diǎn)。在頭文件<GeekOS/kassert.h>中,有一個(gè)宏定義KASSERT(),參數(shù)是一個(gè)布爾表達(dá)式。如果表達(dá)式的值是false時(shí),就打印出一條信息,并暫停內(nèi)核運(yùn)行。舉例如下:voidMy_Function(structThread_Queue*queue){KASSERT(!Interrupts_Enabled()); /*必須禁止中斷*/KASSERT(queue!=0); /*隊(duì)列不能為空*/...}用戶應(yīng)盡可能多地用斷點(diǎn)檢查函數(shù)執(zhí)行的前提條件、后繼條件和數(shù)據(jù)結(jié)構(gòu)的特性等。使用斷點(diǎn)有兩個(gè)好處:第一,若程序執(zhí)行出錯(cuò),斷點(diǎn)可以在內(nèi)核崩潰前,精確快速的幫助程序員定位程序中的出錯(cuò)代碼;第二,斷點(diǎn)還可以幫助程序員檢測(cè)代碼正確性。使用Print語句。在<GeekOS/screen.h>頭文件定義了Print()函數(shù),它支持標(biāo)準(zhǔn)C語言函數(shù)printf()的大部分功能。Print是最常用也是最有效的用于調(diào)試內(nèi)核代碼的語句,因?yàn)檎{(diào)試時(shí),用戶采用的策略都是先作假設(shè),然后再
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度房產(chǎn)租賃轉(zhuǎn)租轉(zhuǎn)合同協(xié)議3篇
- 二零二五年度房屋租賃合同水電費(fèi)智能分?jǐn)偱c管理協(xié)議3篇
- 雙聯(lián)雙管規(guī)章制度(3篇)
- 粘土浮雕造型課程設(shè)計(jì)
- 2025年度夏令營(yíng)課程資源代理商合作協(xié)議范本3篇
- 2025版家電產(chǎn)品租賃服務(wù)合同示范文本3篇
- 宿舍安全防火管理制度(2篇)
- 二零二五年度房屋所有權(quán)買賣及配套設(shè)施安裝合同3篇
- 2025年北師大新版八年級(jí)科學(xué)下冊(cè)階段測(cè)試試卷含答案
- 車輛安全管理制度范文(二篇)
- 2024助貸委托服務(wù)協(xié)議合同模板
- 醫(yī)療質(zhì)量信息數(shù)據(jù)內(nèi)部驗(yàn)證制度
- 子宮內(nèi)膜間質(zhì)肉瘤的畫像組學(xué)研究
- 福建省廈門市2022-2023學(xué)年高一年級(jí)上冊(cè)期末質(zhì)量檢測(cè)物理試題(含答案)
- 2023年公路養(yǎng)護(hù)工知識(shí)考試題庫附答案
- 高警示(高危)藥品考試試題與答案
- 42山東省棗莊市薛城區(qū)2023-2024學(xué)年七年級(jí)上學(xué)期期末考試生物試題
- 部編版六年級(jí)語文下冊(cè)第三單元大單元教學(xué)設(shè)計(jì)
- 成人教育培訓(xùn)方案
- 食品安全企業(yè)標(biāo)準(zhǔn)模板
- 全麻病人蘇醒期躁動(dòng)的原因及處理課件
評(píng)論
0/150
提交評(píng)論