操作系統(tǒng)原理上機(jī)實(shí)踐指南Nachos_第1頁(yè)
操作系統(tǒng)原理上機(jī)實(shí)踐指南Nachos_第2頁(yè)
操作系統(tǒng)原理上機(jī)實(shí)踐指南Nachos_第3頁(yè)
操作系統(tǒng)原理上機(jī)實(shí)踐指南Nachos_第4頁(yè)
操作系統(tǒng)原理上機(jī)實(shí)踐指南Nachos_第5頁(yè)
已閱讀5頁(yè),還剩42頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

操作系統(tǒng)原理上機(jī)實(shí)踐指南操作系統(tǒng)原理上機(jī)實(shí)踐指南

南開(kāi)大學(xué)機(jī)器智能爭(zhēng)論所InstituteofMachineIntelligence二零零七年十月2of472of47Nachos平臺(tái)操作系統(tǒng)上機(jī)實(shí)踐指南 修訂記錄修訂記錄日期本修訂說(shuō)明作者20051013日V0.7提綱完成孫鵬、趙玉娟、安琪、史廣順20051017日V0.8內(nèi)容添加孫鵬、趙玉娟、安琪20051018日V0.9內(nèi)容添加孫鵬、趙玉娟、安琪2006922日V0.99內(nèi)容添加史廣順2007101日V0.999內(nèi)容修訂史廣順Nachos平臺(tái)操作系統(tǒng)上機(jī)實(shí)踐指南Nachos平臺(tái)操作系統(tǒng)上機(jī)實(shí)踐指南內(nèi)容名目2of472of47目 錄第一章試驗(yàn)環(huán)境介紹 4引言 4Nachos平臺(tái)的功能特點(diǎn)簡(jiǎn)介 4什么是Nachos. 4Nachos的特點(diǎn)功能介紹 4Nachos平臺(tái)的搭建與配置 5Nachos試驗(yàn)環(huán)境文件列表 5Nachos試驗(yàn)環(huán)境搭建步驟 6Nachos的功能模塊組成構(gòu)造 22Nachos的編譯運(yùn)行開(kāi)發(fā)環(huán)境 22其次章2.1

Nachos平臺(tái)技術(shù)實(shí)現(xiàn)說(shuō)明 24Nachos的機(jī)器模擬機(jī)制概述 24Sysdep模塊實(shí)現(xiàn)機(jī)制分析 24中斷處理模塊實(shí)現(xiàn)機(jī)制分析 27時(shí)鐘中斷模塊實(shí)現(xiàn)機(jī)制分析 28終端設(shè)備模塊實(shí)現(xiàn)機(jī)制分析 29磁盤(pán)設(shè)備模塊實(shí)現(xiàn)機(jī)制分析 29系統(tǒng)運(yùn)行狀況統(tǒng)計(jì) 30Nachos中的進(jìn)程/線程治理 30相關(guān)學(xué)問(wèn)點(diǎn)回憶 30功能概述 30具體模塊實(shí)現(xiàn)介紹 31Nachos中的文件系統(tǒng)治理 33相關(guān)學(xué)問(wèn)點(diǎn)回憶 33功能概述 34具體模塊實(shí)現(xiàn)介紹 34Nachos中的存儲(chǔ)系統(tǒng)治理 36相關(guān)學(xué)問(wèn)點(diǎn)回憶 36功能概述 36具體模塊實(shí)現(xiàn)介紹 37Nachos中的網(wǎng)絡(luò)系統(tǒng)治理 37相關(guān)學(xué)問(wèn)點(diǎn)回憶 37現(xiàn)有功能分析 37具體模塊實(shí)現(xiàn)介紹 38Nachos平臺(tái)操作系統(tǒng)上機(jī)實(shí)踐指南Nachos平臺(tái)操作系統(tǒng)上機(jī)實(shí)踐指南內(nèi)容名目3of47第三章3.1

Nachos平臺(tái)上機(jī)實(shí)踐工程設(shè)置 40實(shí)踐工程1:Nachos的線程治理模塊升級(jí) 40上機(jī)實(shí)踐具體要求 40實(shí)踐的過(guò)程和步驟 40實(shí)踐結(jié)果驗(yàn)證方式 41實(shí)踐工程2:Nachos的文件治理模塊升級(jí) 錯(cuò)誤!未定義書(shū)簽。上機(jī)實(shí)踐具體要求 錯(cuò)誤!未定義書(shū)簽。實(shí)踐的過(guò)程和步驟 錯(cuò)誤!未定義書(shū)簽。實(shí)踐結(jié)果驗(yàn)證說(shuō)明 錯(cuò)誤!未定義書(shū)簽。實(shí)踐工程3:Nachos的內(nèi)存治理模塊升級(jí) 錯(cuò)誤!未定義書(shū)簽。上機(jī)實(shí)踐具體要求 錯(cuò)誤!未定義書(shū)簽。實(shí)踐的過(guò)程和步驟 錯(cuò)誤!未定義書(shū)簽。實(shí)踐結(jié)果驗(yàn)證說(shuō)明 錯(cuò)誤!未定義書(shū)簽。第四章4.1

Windows平臺(tái)上機(jī)實(shí)踐工程設(shè)置 錯(cuò)誤!未定義書(shū)簽。實(shí)踐工程1:進(jìn)程治理思想與方法的系統(tǒng)仿真 錯(cuò)誤!未定義書(shū)簽。上機(jī)實(shí)踐具體要求 錯(cuò)誤!未定義書(shū)簽。實(shí)踐的過(guò)程和步驟 錯(cuò)誤!未定義書(shū)簽。實(shí)踐結(jié)果驗(yàn)證方式 錯(cuò)誤!未定義書(shū)簽。第五章附錄 42Unix常用命令介紹 42名目及文件操作命令 42設(shè)備治理命令 44系統(tǒng)及用戶(hù)治理命令 44其他命令 45Nachos的系統(tǒng)調(diào)用介紹 45Nachos的核心源代碼分析 46南開(kāi)大學(xué)信息技術(shù)科學(xué)學(xué)院操作系統(tǒng)原理上機(jī)實(shí)踐指南南開(kāi)大學(xué)信息技術(shù)科學(xué)學(xué)院操作系統(tǒng)原理上機(jī)實(shí)踐指南10of47引言操作系統(tǒng)上機(jī)實(shí)踐環(huán)節(jié)是操作系統(tǒng)課程的重要組成局部Nachos平臺(tái)的操作系統(tǒng)上機(jī)實(shí)踐指南。Nachos平臺(tái)的功能特點(diǎn)簡(jiǎn)介什么是NachosNachosNotAnotherCompletelyHeuristicOperatingSyste修改和跟蹤的操作系統(tǒng)教學(xué)軟件。它給出了一個(gè)支持多線程和虛擬存儲(chǔ)的操作系統(tǒng)骨了解。Nachos的特點(diǎn)功能介紹Nachos作為操作系統(tǒng)課程的教學(xué)實(shí)踐平臺(tái)。Nachos是美國(guó)加州大學(xué)伯克萊分校在操作系統(tǒng)課統(tǒng)教學(xué)方面具有以下幾個(gè)突出的優(yōu)點(diǎn):承受通用虛擬機(jī)Nachos是建立在一個(gè)軟件模擬的虛擬機(jī)之上的,模擬了MIPSR2/3000的指令集、機(jī)可以在運(yùn)行時(shí)報(bào)告詳盡的出錯(cuò)信息,更重要的是承受虛擬機(jī)使Nachos的移植變得格外簡(jiǎn)潔,在不同機(jī)器上移植Nachos,只需對(duì)虛擬機(jī)局部作移植即可。承受R2/3000指令集的緣由是該指令集為RISCNachos63R2/3000指令集是一個(gè)比較常用的指令集,很多現(xiàn)有的編譯器如gc++能夠直接將C或C++源程序編譯成該指令集的目標(biāo)代碼,于是就不必編寫(xiě)編譯器,讀者就可以直接用C/C++語(yǔ)言編寫(xiě)應(yīng)用程序,使得在Nachos上開(kāi)發(fā)大型的應(yīng)用程序也成為可能。使用并實(shí)現(xiàn)了操作系統(tǒng)中的一些的概念隨著計(jì)算機(jī)技術(shù)和操作系統(tǒng)技術(shù)的不斷進(jìn)展,產(chǎn)生了很多的概念。Nachos將這些概念融入操作系統(tǒng)教學(xué)中,包括網(wǎng)絡(luò)、線程和分布式應(yīng)用。而且Nachos以線程作為一個(gè)根本概念表達(dá),取代了進(jìn)程在以前操作系統(tǒng)教學(xué)中的地位。NachosMINIX不同,Nachos只是一個(gè)在宿主機(jī)上運(yùn)行的一個(gè)進(jìn)程。在同一個(gè)宿主機(jī)上可以運(yùn)行多個(gè)Nachos進(jìn)程,各個(gè)進(jìn)程可以相互通訊,作為一個(gè)全互連網(wǎng)絡(luò)的一個(gè)節(jié)點(diǎn);進(jìn)程之間通過(guò)Socket進(jìn)展通訊,模擬了一個(gè)全互連網(wǎng)絡(luò)。確定性調(diào)試比較便利,隨機(jī)因素使系統(tǒng)運(yùn)行更加真實(shí)由于操作系統(tǒng)的不確定性,所以在一個(gè)實(shí)際的系統(tǒng)中進(jìn)展多線程調(diào)試是比較困難Nachos是在宿主機(jī)上運(yùn)行的進(jìn)程,它供給了確定性調(diào)試的手段。所謂確定性調(diào)試,就是在同樣的輸入挨次、輸入?yún)?shù)的狀況下,Nachos運(yùn)行的結(jié)果是完全一樣的。干擾。另外,不確定性是操作系統(tǒng)所必需具有的特征,Nachos承受了隨機(jī)因子模擬了真實(shí)操作系統(tǒng)的不確定性。簡(jiǎn)潔而易于擴(kuò)展Nachos是一個(gè)教學(xué)用操作系統(tǒng)平臺(tái),它必需簡(jiǎn)潔而且有肯定的擴(kuò)展余地。Nachos不是向讀者展現(xiàn)一個(gè)成功的操作系統(tǒng)擴(kuò)展。例如一個(gè)完整的類(lèi)似于UNIX的文件系統(tǒng)是很簡(jiǎn)單的,但是對(duì)于文件系統(tǒng)來(lái)說(shuō),無(wú)非是需要實(shí)現(xiàn)文件的規(guī)律地址到物理地址的映射以及實(shí)現(xiàn)文件inode線程翻開(kāi)文件表等重要的數(shù)據(jù)構(gòu)造以及維護(hù)它們之間的關(guān)系。Nachos中具有全部這些Nachos在每一局部給出很多課程作業(yè),作為讀者進(jìn)展系統(tǒng)擴(kuò)展的提示和檢查對(duì)系統(tǒng)擴(kuò)展的結(jié)果。面對(duì)對(duì)象性Nachos的主體是用C++的一個(gè)子集來(lái)實(shí)現(xiàn)的。目前面對(duì)對(duì)象語(yǔ)言日漸流行,它能夠清楚地描述操作系統(tǒng)各個(gè)局部的接口。Nachos沒(méi)有用到面對(duì)對(duì)象語(yǔ)言的全部特征,如繼承性、多態(tài)性等,所以它的代碼就更簡(jiǎn)潔閱讀和理解。Nachos共有五個(gè)功能模塊,分別是機(jī)器模擬、線程治理、文件系統(tǒng)治理、用戶(hù)程序和虛擬存儲(chǔ)以及網(wǎng)絡(luò)系統(tǒng)。它們的具體實(shí)現(xiàn)會(huì)在其次章中進(jìn)展具體介紹。Nachos平臺(tái)的搭建與配置Nachos試驗(yàn)環(huán)境文件列表在我們的教學(xué)網(wǎng)站可以下載到搭建nachos試驗(yàn)平臺(tái)的全部軟件,下面就將搭建nachos試驗(yàn)環(huán)境所需的軟件作一個(gè)簡(jiǎn)要的描述:code-linux.tar.gz:nachoslinux下可以用gzip、tarwindows下直接使用winrarnachos的全部源代碼,另一個(gè)名目是nachos的穿插編譯工具。emacs-21.3.tar.gz:emacslinux下編輯、調(diào)試、調(diào)試nachos代碼的集成環(huán)境,emacs-21.3.tar.gz包是emacs的源代碼包,用于在linux系統(tǒng)中編譯安裝emacs。.emacs:我們制作的emacs的啟動(dòng)配置文件,它實(shí)現(xiàn)了f1-f12的功能鍵與emacs的命令的綁定,可以加速我們的編輯、編譯、調(diào)試過(guò)程。使用這個(gè)文件時(shí)只要把它放在用戶(hù)home名目下就可以了〔比方root用戶(hù)的/root名目下。VMware-workstation-5.0.0-13124.exe:VmwareWindows安裝上vmware。Vmwar可以在一個(gè)物理機(jī)器上模擬出虛擬的硬件機(jī)器,進(jìn)而我們就可以在這些虛擬的硬件機(jī)器上安裝我們的操作系統(tǒng)了〔具體使用參見(jiàn)后面的試驗(yàn)環(huán)境搭建〕VMware-mount-3.1.0-9089.exe:Vmware-mountvmwarevmware的硬盤(pán)文件掛載到windowswindows系統(tǒng)的一個(gè)硬盤(pán)。這樣以來(lái)就便利了虛擬機(jī)和真實(shí)機(jī)器之間的數(shù)據(jù)傳輸。(具體使用參見(jiàn)后面的試驗(yàn)環(huán)境搭建)sourceinsight35.zip:windowsnachos代碼閱讀的工具,使用他供給的一些功能可以加快代碼的閱讀速度。Nachos試驗(yàn)環(huán)境搭建步驟Nachos最初由美國(guó)加州大學(xué)伯克利分校為其操作系統(tǒng)課程的教學(xué)實(shí)習(xí)而開(kāi)發(fā)。這個(gè)操作系統(tǒng)一開(kāi)頭就設(shè)計(jì)成只能在unixlike的操作系統(tǒng)下運(yùn)行,并沒(méi)有針對(duì)windows平臺(tái)的移植。有鑒于國(guó)內(nèi)教學(xué)實(shí)習(xí)中普遍使用windows平臺(tái),所以我們需要通過(guò)安裝虛擬機(jī)軟件,創(chuàng)立linux虛擬機(jī)來(lái)最終實(shí)現(xiàn)我們的nachos體的描述nachos試驗(yàn)環(huán)境的搭建。Vmware的安裝Vmware是一個(gè)虛擬機(jī)軟件,它可以在windows平臺(tái)上虛擬出真實(shí)機(jī)器的硬件環(huán)境的,使得我們可以在不購(gòu)置機(jī)器的狀況下就可以在一個(gè)機(jī)器上運(yùn)行多個(gè)操作系統(tǒng)。Vmware的安裝和一般的windows應(yīng)用程序安裝沒(méi)有太大的差異,是一個(gè)相當(dāng)“傻瓜”的過(guò)程,只要依據(jù)提示,依次點(diǎn)擊“下一步”就可順當(dāng)?shù)赝瓿蓈mware的安裝了。虛擬機(jī)的創(chuàng)立這一步的主要任務(wù)就是要告知vmware的方式一步步地講解虛擬機(jī)的創(chuàng)立:vmware1-1所示的菜單1-1VMWare程序啟動(dòng)或是點(diǎn)擊home-tabnewvirturalmachine〔1-2〕就可開(kāi)頭虛擬機(jī)的創(chuàng)立過(guò)程。1-2VMWare程序啟動(dòng)〔二〕在接下來(lái)的對(duì)話(huà)框中選擇定制創(chuàng)立虛擬機(jī)點(diǎn)擊下一步按鈕〔如圖1-3〕1-3定制虛擬機(jī)在接下來(lái)的虛擬機(jī)格式中選擇系統(tǒng)默認(rèn)的new-workstation5格式即可,這樣我們可以獲得一些好處比方可以抓圖,但是也有一些害處那就是創(chuàng)立的虛擬機(jī)文件不能在老版本的vmware上翻開(kāi)。linux-redhatlinux就行了。據(jù)自己的狀況答復(fù)就行了〔如圖1-4〕圖1-4選擇虛擬機(jī)名稱(chēng)和安放路徑vmware需要給我們的虛擬機(jī)器模擬多大的內(nèi)存,在我們的試驗(yàn)環(huán)境中256M〔1-5〕1-5虛擬機(jī)定制內(nèi)存〔1-6〕1-6虛擬機(jī)網(wǎng)絡(luò)設(shè)置點(diǎn)擊下一步,進(jìn)入選擇I/O適配器類(lèi)型,這一步不需要我們干預(yù)承受默認(rèn)值,點(diǎn)擊下一〔1-7〕1-7網(wǎng)絡(luò)適配器設(shè)置接下來(lái)就進(jìn)入了硬盤(pán)創(chuàng)立的步驟了,選擇創(chuàng)立IDE的硬盤(pán),系統(tǒng)就會(huì)彈出對(duì)話(huà)框,要求答復(fù)硬盤(pán)的大小,在我們的試驗(yàn)環(huán)境中有4G〔1-8,1-9,1-10〕1-8創(chuàng)立虛擬磁盤(pán)1-9選擇磁盤(pán)種類(lèi)1-10選擇磁盤(pán)大小答復(fù)這個(gè)名稱(chēng)點(diǎn)擊完成,整個(gè)虛擬機(jī)的創(chuàng)立過(guò)程就完畢了〔1-11〕1-11指定硬盤(pán)文件名稱(chēng)虛擬機(jī)創(chuàng)立完成后vmware〔1-12〕1-12建虛擬機(jī)信息點(diǎn)擊標(biāo)簽頁(yè)上的“startthisvirtualmachine”就可以啟動(dòng)我們剛剛創(chuàng)立的虛擬機(jī),但是由于我們只是讓vmwareBIOS所以我們需要進(jìn)展下一步,向虛擬機(jī)上安裝OS和應(yīng)用程序。虛擬機(jī)上linux的安裝虛擬機(jī)創(chuàng)立好了,vmware只是依據(jù)我們的要求模擬出了一個(gè)硬件機(jī)器,到目前位置這器上安裝linux操作系統(tǒng),進(jìn)而安裝其他應(yīng)用程序。在虛擬機(jī)上安裝linux和在真實(shí)機(jī)器上由光驅(qū)安裝linux是一樣的過(guò)程。首先需要把安裝光盤(pán)放到光驅(qū)中,雙擊主界面上的CD-ROM,彈出如圖1-13對(duì)話(huà)框:1-13CD-ROM對(duì)話(huà)框假設(shè)你有光驅(qū),也有l(wèi)inuxUsephysicaldrivlinux的ISOUseISOimag就可以啟動(dòng)虛擬機(jī)器進(jìn)展安裝了。1-14的畫(huà)面:1-14安裝Linux啟動(dòng)畫(huà)面只有鼠標(biāo)點(diǎn)擊只有鼠標(biāo)點(diǎn)擊vmware的窗口之后,全部的鼠標(biāo)和鍵盤(pán)輸入才能定向到虛擬機(jī)Ctrl+AltvmwarevmwareCtrl+Altvmwarevmware的環(huán)境回到windows可以使用這個(gè)熱鍵;假設(shè)要從全屏方式回到窗口方式,也需要點(diǎn)擊這個(gè)熱鍵安裝過(guò)程其實(shí)是很簡(jiǎn)潔的大多狀況下只要點(diǎn)擊“next”按鈕就可以了,下面僅就比較關(guān)鍵的步驟進(jìn)展一下描述:圖1-15 定制安裝Linux1-15安裝我們所需要的東西。〔如圖1-16〕1-16選擇分區(qū)方式接下來(lái)的假設(shè)干步只要點(diǎn)擊“next”就行了,其中有的步驟詢(xún)問(wèn)是否要?jiǎng)h除磁盤(pán)上的數(shù)據(jù)這是只要答復(fù)“Yes”就行了,我們是裝操作系統(tǒng),磁盤(pán)上沒(méi)有什么有用的數(shù)據(jù),也不用擔(dān)憂(yōu)本機(jī)的數(shù)據(jù)會(huì)喪失,VMWare。當(dāng)安裝程序如以下圖所示要求我們答復(fù)root密碼時(shí)我們就要依據(jù)自己的狀況答復(fù)這個(gè)密碼,但是肯定要記住,由于這個(gè)密碼是超級(jí)用戶(hù)的密碼,對(duì)于系統(tǒng)特別重要〔如圖1-17〕nex”直到包的選擇步驟〔如圖1-1〕1-17設(shè)置超級(jí)用戶(hù)密碼1-18軟件包的選擇我們只需要依據(jù)自己的需要選擇自己所需要的包就可以了磁盤(pán)的使用量就自然會(huì)大一些。是我們編譯nachos系統(tǒng)所需要的虛擬機(jī)重啟的時(shí)候不要遺忘點(diǎn)擊F2BIOS虛擬機(jī)重啟的時(shí)候不要遺忘點(diǎn)擊F2BIOS盤(pán)啟動(dòng),這樣我們啟動(dòng)的速度能加快一點(diǎn)虛擬機(jī)和本機(jī)之間的數(shù)據(jù)傳遞我們?cè)谔摂M的linux下編譯調(diào)試我們的nachos,但是在交作業(yè)等狀況下我們需要將虛擬機(jī)下的數(shù)據(jù)拿出來(lái)。這就需要我們首先將虛擬linux的數(shù)據(jù)傳輸?shù)奖緳C(jī)windows下;然后再?gòu)谋緳C(jī)windows下將數(shù)據(jù)導(dǎo)出到可移動(dòng)存儲(chǔ)設(shè)備或是通過(guò)網(wǎng)絡(luò)傳輸出去。然而虛擬機(jī)是虛擬機(jī)軟件模擬出的機(jī)器環(huán)境和本機(jī)系統(tǒng)相對(duì)隔離需要一些特別的方法;虛擬機(jī)和本機(jī)的數(shù)據(jù)傳遞有很多種,大致分為三類(lèi):通過(guò)網(wǎng)絡(luò)進(jìn)展數(shù)據(jù)傳遞Vmware支持虛擬機(jī)的直接上網(wǎng),就如同一個(gè)真實(shí)機(jī)器一樣,虛擬機(jī)上了網(wǎng)我們就可以用ftp或是samba等方式進(jìn)展數(shù)據(jù)交換了。但是這種方式需要獨(dú)立的IP地址,在機(jī)房IP地址緊缺的狀況下是不太適合的。通過(guò)共享文件夾進(jìn)展數(shù)據(jù)傳遞這種方式就如同windows下兩個(gè)機(jī)器之間共享文件夾一樣,但是這種方法只適合虛擬的windows和本機(jī)windowslinux和本windows之間的數(shù)據(jù)交換是不適合的。通過(guò)硬盤(pán)文件進(jìn)展數(shù)據(jù)傳遞這種方式就是我們推舉使用的方式。它的原理是創(chuàng)立一個(gè)fat32格式的vmware文件,這個(gè)文件可以?huà)燧d到本機(jī)windows成為本機(jī)的一個(gè)硬盤(pán),也可以?huà)燧d到虛擬linux下成為虛擬linux下的一個(gè)名目,這樣就可以實(shí)現(xiàn)數(shù)據(jù)的雙向傳輸了。下面將要具體描述一下這種方式的實(shí)現(xiàn)步驟:vmware的硬盤(pán)創(chuàng)建vmware硬盤(pán)時(shí)需要在虛擬機(jī)未啟動(dòng)時(shí)點(diǎn)擊HardDiskad,答復(fù)一系列的問(wèn)題后就添加成功了。這個(gè)過(guò)程中答復(fù)的問(wèn)題和虛擬機(jī)創(chuàng)立過(guò)程中所遇到的關(guān)于硬盤(pán)的問(wèn)題是一樣的里就不再具體說(shuō)明白。1-19創(chuàng)立VMWare硬盤(pán)linux下分區(qū)、格式化為fat32格式這一步,我們需要啟動(dòng)我們的虛擬機(jī)進(jìn)入linux。Linux啟動(dòng)用戶(hù)登錄后,首先需要分區(qū),分區(qū)時(shí)的命令如下:fdisk/dev/hdbfdisk方式在fdisk方式下依據(jù)提示敲入如下命令就可以實(shí)現(xiàn)正確的分區(qū)np1enterentert1bwquit依據(jù)挨次敲完命令后,我們的分區(qū)工作就完成了,他在創(chuàng)立的硬盤(pán)上創(chuàng)立了一fat32分區(qū),下一步的任務(wù)就是將這個(gè)分區(qū)格式化,格式化時(shí)的命令為:mkdosfsF32/dev/hdb1到目前位置我們的fat32格式的硬盤(pán)分區(qū)就創(chuàng)立好了。windows下的掛載/卸載windows下掛載vmware硬盤(pán)文件需要安裝一個(gè)名為vmware-mount的軟件,的下載。軟件的安裝是很簡(jiǎn)潔的點(diǎn)擊setup就可以了。掛載硬盤(pán)文件時(shí)需要在windows的命令提示符下輸入如下的命令:vmware-moutg:fat32.vmdk其中g(shù):為盤(pán)符,假設(shè)硬盤(pán)文件掛載成功windows下就會(huì)多一個(gè)硬盤(pán),硬盤(pán)的盤(pán)符就是我們這里指定的gfat32.vmdk是我們所創(chuàng)立的硬盤(pán)文件的名稱(chēng)。要卸載這個(gè)硬盤(pán)文件就輸入如下的命令就可以了:卸載時(shí)肯定要觀點(diǎn)和生成的硬盤(pán)(我們例子中的g卸載時(shí)肯定要觀點(diǎn)和生成的硬盤(pán)(我們例子中的g:)相關(guān)的窗口,否則卸載會(huì)失敗linux下的掛載/卸載假設(shè)在linux下把它掛載到文件系統(tǒng)中就使用如下命令:mount/dev/hdb1/mnt運(yùn)行這個(gè)命令后這個(gè)fat32分區(qū)就掛載到了/mnt下,假設(shè)要掛載到其他地方就將/mnt改成自己想要的路徑就可以了。Linux下的命令和文件命是區(qū)分大小寫(xiě)的,在windows命令提示符下是不區(qū)分大小寫(xiě)的想要卸載這個(gè)fat32Linux下的命令和文件命是區(qū)分大小寫(xiě)的,在windows命令提示符下是不區(qū)分大小寫(xiě)的emacs21.3的安裝配置emacs是我們?cè)趌inux下開(kāi)發(fā)、編譯、調(diào)試nachos的主要集成環(huán)境。所以我們需要我們emacs是最最穩(wěn)定的。我們?cè)诎惭blinux的時(shí)候可能已經(jīng)安裝了emacs但是那個(gè)版本的emacsemacs21.3“:///“網(wǎng)站隨時(shí)關(guān)注版本的變化。emacs步所講的本機(jī)與虛擬機(jī)之間的數(shù)據(jù)交換方法將emacs-21.3.tar.gz文件傳輸?shù)教摂Mlinux中。emacs-21.3.tar.gz是一個(gè)eamcs源代碼的壓縮包,依據(jù)如下的命令來(lái)解壓、編譯、安裝emacs21.3。gzip–demacs-21.3.tar.gz //解壓縮tar–xfemacs-21.3.tarcdemacs-21.3./configuremakemakeinstall

//解包//進(jìn)入源代碼子名目//make腳本//編譯鏈接//安裝emacs安裝完畢了,我們可以使用emacs–verison命令來(lái)看一看emacs版本是不是我們21.3,假設(shè)是那么我們就安裝成功了。emacs安裝成功后,要想使它用起來(lái)便利我們還需要依據(jù)個(gè)人狀況進(jìn)展定制,eamcs的定制是很簡(jiǎn)單的,需要寫(xiě)elisp程序,網(wǎng)上也有特地的專(zhuān)著來(lái)描述emacs的定制。我們?yōu)榱舜蠹医虒W(xué)實(shí)習(xí)的便利依據(jù)MSVC++的使用習(xí)慣對(duì)emacs進(jìn)展了配置,大家只要把教學(xué)網(wǎng)站上的.emacs文件復(fù)制到自己的home〔roothome名目就是/root〕名目下就可以了。我們的配置將f1-f121-2所示:功能鍵功能鍵功能F1F2F3F4F5F6F7F8F9F10F11F12分窗口方式下縮小窗口分窗口方式下不同窗格之間切換編譯調(diào)試調(diào)試模式下的continue將源代碼注釋掉將源代碼注釋回來(lái)返回上一個(gè)標(biāo)簽在源代碼上設(shè)置斷點(diǎn)調(diào)試模式下的next調(diào)試模式下的stepinto分窗口方式下的框格擴(kuò)大表1-2 emacs快捷鍵定義Windows下代碼閱讀軟件的安裝雖然在linux我們可以高效地完成全部開(kāi)發(fā)所需的任務(wù),但是對(duì)于剛剛開(kāi)頭接觸unix/linux的同學(xué),一下子用熟那么多的工具還是有些困難的。正是基于這一點(diǎn)我們的教學(xué)windowsSourceInsight,借助于它我們可以加快代碼閱讀速度。這個(gè)軟件的安裝是個(gè)很簡(jiǎn)潔的過(guò)程只要運(yùn)行setup一路next下去就可以了。代碼閱讀時(shí)要先建工程,點(diǎn)擊project-newproject,然后依據(jù)要求答復(fù)源代碼的位置,定的符號(hào)上點(diǎn)右鍵就會(huì)彈出菜單,選擇相應(yīng)的命令就可以了。Nachos的功能模塊組成構(gòu)造編譯后的nachos在我們的linux的一個(gè)操作系統(tǒng)內(nèi)核。它的構(gòu)造就是一個(gè)完整的操作系統(tǒng)構(gòu)造。以下圖標(biāo)出了nachos操作系統(tǒng)的構(gòu)造。圖1-20 nachos系統(tǒng)構(gòu)造Nachos的編譯運(yùn)行開(kāi)發(fā)環(huán)境nachos雖說(shuō)是一個(gè)操作系統(tǒng)但是他在linux下運(yùn)行,也就相當(dāng)與linux的一個(gè)一般進(jìn)程,nachos的編譯、調(diào)試、運(yùn)行和一般的linux程序的調(diào)試連接運(yùn)行是沒(méi)有什么兩樣的。下面我們就從編輯、編譯、編輯、代碼閱讀等方面對(duì)linux下的程序開(kāi)發(fā)環(huán)境做一下闡述:程序編輯在我們的環(huán)境下使用emacsemacs是一個(gè)功能強(qiáng)大的集成環(huán)就可以了。假設(shè)我們只使用最根本的功能那么emacswindows下的notepad使用方法差不多。程序編譯linux下的nachos代碼是借助makemake工具是一個(gè)工程治理工具,make是依據(jù)MakefileNachos的Makefienachos代碼后直接使用make命令就可以編譯連接我們的程序了,而不再需要其他額外的工作。程序調(diào)試linux下調(diào)試我們一般使用gdb作為調(diào)試工具。gdb使用過(guò)程大致如下:?jiǎn)?dòng)gdb:>gdb gdb啟動(dòng)后就進(jìn)入了gdb的使用file命令加載要調(diào)試的可執(zhí)行程序:>filenachos斷點(diǎn)設(shè)置:>breakmain 在main函數(shù)上設(shè)置斷點(diǎn)程序運(yùn)行一步:>next next命令不跟到函數(shù)里面去程序跟進(jìn):>step step命令可以跟跟到函數(shù)里面去顯示變量的值:>printtemp temp是變量命,這個(gè)命令將顯示temp的值顯示源代碼:>list 這個(gè)命令可以列出所調(diào)試程序的源代碼gdb令,更簡(jiǎn)單的使用可以參照gdb的手冊(cè)或是聯(lián)機(jī)文檔。代碼閱讀我們?cè)诖a閱讀過(guò)程中常用的也是最重要的功能就是能夠跳轉(zhuǎn)到函數(shù)或變量的定義處,然后還能跳轉(zhuǎn)回來(lái)連續(xù)原來(lái)的閱讀流程。linuxemacsemacs下實(shí)現(xiàn)代碼的導(dǎo)航需要etagsEtags庫(kù)中記錄的信息找到想要的標(biāo)識(shí)符。標(biāo)識(shí)符數(shù)據(jù)庫(kù)創(chuàng)立:>find./--name*.h --or--name*.cc--or--name*.s|etags–運(yùn)行完這個(gè)命令后就會(huì)生成一個(gè)TAGSemacs環(huán)境中要想使用代碼導(dǎo)航功能只需要運(yùn)行Alt+xvisit-tags-table命令就可以了。要想在程序閱讀過(guò)程中跳轉(zhuǎn)到某個(gè)標(biāo)識(shí)符只要使用Alt+.回去使用alt+*命令就可以了〔假設(shè)使用了我們供給的.emacsf8可以實(shí)現(xiàn)一樣的功能。Nachos平臺(tái)技術(shù)實(shí)現(xiàn)說(shuō)明Nachos的機(jī)器模擬機(jī)制概述Sysdep模塊實(shí)現(xiàn)機(jī)制分析本模塊主要在文件sysdep.ccsysdep.h中實(shí)現(xiàn)。Nachos的運(yùn)行環(huán)境可以是多種操作系統(tǒng),由于每種操作系統(tǒng)所供給的系統(tǒng)調(diào)用或函數(shù)調(diào)用在形式和內(nèi)容上可能有微小的差異。sysdep模塊的作用是屏蔽掉這些差異。下面就主要的函數(shù)功能進(jìn)展一下說(shuō)明:PoolFile函數(shù)語(yǔ)法:boolPoolFile(intfd)參數(shù):fd:文件描述符,也可以是一個(gè)套接字(socket)fdTRUFALS。當(dāng)NachosIDLE狀態(tài)時(shí),測(cè)試過(guò)程有一個(gè)延時(shí),也就是在肯定時(shí)間范圍內(nèi)假設(shè)有內(nèi)容可讀的話(huà),同樣返回TRUE。OpenForWrite函數(shù)語(yǔ)法:intOpenForWrite(char*name)參數(shù):name:文件名則將該文件原有的內(nèi)容刪除。OpenForReadWrite函數(shù)語(yǔ)法:intOpenForReadWrite(char*name,boolcrashOnError)參數(shù):name::文件名;crashOnError:crash標(biāo)志功能:為讀寫(xiě)操作翻開(kāi)一個(gè)文件。當(dāng)crashOnError標(biāo)志設(shè)置而文件不能讀寫(xiě)翻開(kāi)時(shí),系統(tǒng)出錯(cuò)退出。Read函數(shù)語(yǔ)法:voidRead(intfd,char*buffer,intnBytes)參數(shù):fd:翻開(kāi)文件描述符;buffer:讀取內(nèi)容的緩沖區(qū);nBytes:需要讀取的字節(jié)數(shù)fd中讀取nBytes的內(nèi)容到buffer退出。留意:這和系統(tǒng)調(diào)用read不完全一樣。readRead函數(shù)則必需讀出nBytesread系統(tǒng)調(diào)用相對(duì)應(yīng)的函數(shù),請(qǐng)用ReadPartial。ReadPartial函數(shù)語(yǔ)法:intReadPartial(intfd,char*buffer,intnBytes)參數(shù):fd:翻開(kāi)文件描述符;buffer:讀取內(nèi)容的緩沖區(qū);nBytes:需要讀取的最大字節(jié)數(shù)功能:從一個(gè)翻開(kāi)文件fd中讀取nBytes的內(nèi)容到buffer緩沖區(qū)。WriteFile函數(shù)語(yǔ)法:voidWriteFile(intfd,char*buffer,intnBytes)參數(shù):fd:翻開(kāi)文件描述符;buffer:需要寫(xiě)的內(nèi)容所在的緩沖區(qū);nBytes:需要寫(xiě)的內(nèi)容最大字節(jié)數(shù)功能:將buffer緩沖區(qū)中的內(nèi)容寫(xiě)nBytes到一個(gè)翻開(kāi)文件fd中。留意:這和系統(tǒng)調(diào)用write不完全一樣。write系統(tǒng)調(diào)用返回的是實(shí)際寫(xiě)入的字節(jié)數(shù),而WriteFile函數(shù)則必需寫(xiě)入nBytes,否則系統(tǒng)將退出。Lseek函數(shù)語(yǔ)法:voidLseek(intfd,intoffset,intwhence)參數(shù):fd:文件描述符;offset:偏移量;whence:指針移動(dòng)的起始點(diǎn)功能:移動(dòng)一個(gè)翻開(kāi)文件的讀寫(xiě)指針,含義同lseek系統(tǒng)調(diào)用;出錯(cuò)則退出系統(tǒng)。Tell函數(shù)語(yǔ)法:intTell(intfd)參數(shù):fd:文件描述符功能:指出當(dāng)前讀寫(xiě)指針位置Close函數(shù)語(yǔ)法:voidClose(intfd)參數(shù):fd:文件描述符功能:關(guān)閉當(dāng)前翻開(kāi)文件fd,假設(shè)出錯(cuò)則退出系統(tǒng)。Unlink函數(shù)語(yǔ)法:boolUnlink(char*name)參數(shù):name:文件名功能:刪除文件。OpenSocket函數(shù)語(yǔ)法:intOpenSocket參數(shù):無(wú)功能:申請(qǐng)一個(gè)socket。CloseSocket函數(shù)語(yǔ)法:voidCloseSocket(intsockID)參數(shù):sockID:socket標(biāo)識(shí)功能:釋放一個(gè)socket。AssignNameToSocket函數(shù)語(yǔ)法:voidAssignNameToSocket(char*socketName,intsockID)參數(shù):socketName:socket文件名;sockID:socket標(biāo)識(shí)功能:將一個(gè)文件名和一個(gè)socket標(biāo)識(shí)聯(lián)系起來(lái),于是將一個(gè)SOCKET文件同一個(gè)Nachos進(jìn)程連接起來(lái),使宿主機(jī)上該Nachos進(jìn)程成為一個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)。DeAssignNameToSocket函數(shù)語(yǔ)法:voidDeAssignNameToSocket(char*socketName)參數(shù):socketName::socket文件名功能:將一個(gè)文件名刪除,實(shí)際上是和相應(yīng)的socket標(biāo)識(shí)脫離關(guān)系。PoolSocket函數(shù)語(yǔ)法:boolPoolSocket(intsockID)參數(shù):socketID:socket標(biāo)識(shí)功能:查詢(xún)一個(gè)socket是否有內(nèi)容可以讀取。ReadFromSocket函數(shù)語(yǔ)法:voidReadFromSocket(intsockID,char*buffer,intpacketSize)參數(shù):socketID:socket標(biāo)識(shí);buffer:讀取內(nèi)容的暫存空間;packetSize:讀取數(shù)據(jù)包的大小功能:從一個(gè)socket標(biāo)識(shí)中讀取packetSize大小的數(shù)據(jù)包,放在buffer緩沖中。SendToSocket函數(shù)語(yǔ)法:voidSendToSocket(intsockID,char*buffer,intpacketSize,char*toName)參數(shù):socketID:socket標(biāo)識(shí);buffer:發(fā)送內(nèi)容的暫存空間;packetSize:發(fā)送數(shù)據(jù)包的大??;toName:要接收數(shù)據(jù)包的Nachos虛擬機(jī)模擬網(wǎng)絡(luò)文件的文件名功能:向socket標(biāo)識(shí)中發(fā)送packetSize大小的數(shù)據(jù)包。CallOnUserAbort函數(shù)語(yǔ)法:voidCallOnUserAbort(VoidNoArgFunctionPtrfunc)參數(shù):func:函數(shù)指針功能:設(shè)定一個(gè)函數(shù),在用戶(hù)強(qiáng)制退出系統(tǒng)時(shí)調(diào)用。Delay函數(shù)語(yǔ)法:voidDelay(intseconds)參數(shù):seconds:需要延遲的秒數(shù)功能:系統(tǒng)延遲肯定的時(shí)間。Abort函數(shù)語(yǔ)法:voidAbort參數(shù):無(wú)功能:退出系統(tǒng)(非正常退出)。Exit函數(shù)語(yǔ)法:voidExit(intexitCode)參數(shù):exitCod:向系統(tǒng)的返回值功能:退出系統(tǒng)。RandomInit函數(shù)語(yǔ)法:voidRandomInit(unsignedseed)參數(shù):seed:隨機(jī)數(shù)產(chǎn)生魔數(shù)功能:初始化隨機(jī)數(shù)發(fā)生器。Random函數(shù)語(yǔ)法:intRandomInit參數(shù):無(wú)功能:產(chǎn)生一個(gè)隨機(jī)整數(shù)。AllocBoundedArray函數(shù)語(yǔ)法:char*AllocBoundedArray(intsize)參數(shù):size:需要申請(qǐng)的空間大小功能:申請(qǐng)一個(gè)受保護(hù)的存儲(chǔ)空間。DeallocBoundedArray函數(shù)語(yǔ)法:voidDeallocBoundedArray(char*ptr,intsize)參數(shù):ptr:要釋放空間的指針;size:申請(qǐng)的空間大小功能:將受保護(hù)的存儲(chǔ)空間釋放。中斷處理模塊實(shí)現(xiàn)機(jī)制分析本模塊主要在文件interrupt.ccinterrupt.h中實(shí)現(xiàn)。中斷模塊的主要作用是模擬底層的中斷機(jī)制。可以通過(guò)該模擬機(jī)制來(lái)啟動(dòng)和制止中斷(SetLevel);該中斷機(jī)制模擬了Nachos系統(tǒng)需要處理的全部的中斷,包括時(shí)鐘中斷、磁盤(pán)中斷、終端讀/終端寫(xiě)中斷以及網(wǎng)絡(luò)接收/網(wǎng)絡(luò)發(fā)送中斷。了實(shí)現(xiàn)簡(jiǎn)潔和便于統(tǒng)計(jì)各種活動(dòng)所占用的時(shí)間起見(jiàn),Nachos規(guī)定系統(tǒng)時(shí)間在以下三種狀況下前進(jìn):執(zhí)行用戶(hù)態(tài)指令執(zhí)行用戶(hù)態(tài)指令,時(shí)鐘前進(jìn)是顯而易見(jiàn)的。我們認(rèn)為,Nachos執(zhí)行每條指令所需時(shí)間是固定的,為一個(gè)時(shí)鐘單位(Tick)。重翻開(kāi)中斷的時(shí)候,加上一個(gè)中斷處理所需時(shí)間的平均值。就緒隊(duì)列中沒(méi)有進(jìn)程Idle時(shí)間,以免不必要的等待。當(dāng)前面兩種狀況需要時(shí)鐘前進(jìn)時(shí),調(diào)用OneTick方法。OneTick方法將系統(tǒng)態(tài)和用戶(hù)態(tài)的時(shí)間分開(kāi)進(jìn)展處理,這是由于用戶(hù)態(tài)的時(shí)間計(jì)算是依據(jù)用戶(hù)指令為單位的;而在系統(tǒng)態(tài),沒(méi)為一個(gè)固定值,假設(shè)為一條用戶(hù)指令執(zhí)行時(shí)間的10倍。雖然Nachos模擬了中斷的發(fā)生,但是到底不能與實(shí)際硬件一樣,中斷發(fā)生的時(shí)機(jī)可以是任意的。比方當(dāng)系統(tǒng)中沒(méi)有就緒進(jìn)程時(shí),時(shí)鐘直接跳到未處理中斷隊(duì)列的第一項(xiàng)的時(shí)間。Idel斷發(fā)生。由于中斷發(fā)生的時(shí)機(jī)不是完全隨機(jī)的,所以在Nachos系統(tǒng)中運(yùn)行的程序,不正確的同步程序也可能正常運(yùn)行,我們?cè)诖诵枰H熱留意。Nachos線程運(yùn)行有三種狀態(tài):Idle狀態(tài)系統(tǒng)CPU處于空閑狀態(tài),沒(méi)有就緒線程可以運(yùn)行。假設(shè)中斷等待隊(duì)列中有需要處理的中斷處理;否則認(rèn)為系統(tǒng)完畢全部的工作,退出。系統(tǒng)態(tài)NachosNachosNachos系統(tǒng)程序本身的運(yùn)行不是在該模擬內(nèi)存中,而是利用宿主機(jī)的存儲(chǔ)資源。這是Nachos操作系統(tǒng)同真正操作系統(tǒng)的重要區(qū)分。用戶(hù)態(tài)系統(tǒng)執(zhí)行用戶(hù)程序。當(dāng)執(zhí)行用戶(hù)程序時(shí),每條指令占用空間是Nachos的模擬內(nèi)存。Nachos需要處理的中斷種類(lèi)主要有:TimerInt:時(shí)鐘中斷DiskInt:磁盤(pán)〔讀/寫(xiě)〕中斷ConsoleWriteInt:終端寫(xiě)中斷ConsoleReadInt:終端讀終端NetworkSentInt:網(wǎng)絡(luò)發(fā)送中斷NetworkRecvInt:網(wǎng)絡(luò)接收中斷Nachos虛擬機(jī)最重要的數(shù)據(jù)構(gòu)造之一,它記錄了當(dāng)前虛擬機(jī)可以推測(cè)說(shuō),先發(fā)生的中斷將優(yōu)先得處處理。當(dāng)時(shí)鐘前進(jìn)或者系統(tǒng)處于Idle狀態(tài)時(shí),Nachos會(huì)推斷中斷等待隊(duì)列中是否有要發(fā)生的進(jìn)展處理。中斷處理程序是在某種特定的中斷發(fā)生時(shí)被調(diào)用的模擬硬件的根底上建立更高層次的抽象。比方現(xiàn)有的模擬網(wǎng)絡(luò)是有喪失幀的擔(dān)憂(yōu)全網(wǎng)絡(luò),在中斷處理程序中可以參加懇求重發(fā)機(jī)制來(lái)實(shí)現(xiàn)一個(gè)安全網(wǎng)絡(luò)。在該局部模塊中比較重要的兩個(gè)類(lèi)是PendingInterrupt類(lèi)和Interrupt類(lèi),具體實(shí)現(xiàn)可以參考interrupt.cc和interrupt.h文件。時(shí)鐘中斷模塊實(shí)現(xiàn)機(jī)制分析本模塊主要在文件timer.cctimer.h中實(shí)現(xiàn)。Nacho間會(huì)發(fā)生一次時(shí)鐘中斷。這是一個(gè)可選項(xiàng),目前Nachos還沒(méi)有充分發(fā)揮時(shí)鐘中斷的作用,只有在Nachos指定線程隨機(jī)切換時(shí)啟動(dòng)時(shí)鐘中斷,在每次的時(shí)鐘中斷處理的最終,參加了線程的切換。實(shí)際上,時(shí)鐘中斷在線程治理中的作用遠(yuǎn)不止這些,時(shí)鐘中斷還可以用作:是由該線程是否的時(shí)間片是否已經(jīng)用完來(lái)打算;分時(shí)系統(tǒng)線程優(yōu)先級(jí)的計(jì)算;線程進(jìn)入睡眠狀態(tài)時(shí)的時(shí)間計(jì)算,可以通過(guò)時(shí)鐘中斷機(jī)制來(lái)實(shí)現(xiàn)sleep系統(tǒng)調(diào)用,在時(shí)要喚醒它們。Nachos利用其模擬的中斷機(jī)制來(lái)模擬時(shí)鐘中斷TimerTicks〔100倍Tick的時(shí)間。在系統(tǒng)模擬時(shí)有一個(gè)缺陷,假設(shè)系統(tǒng)就緒進(jìn)程不止一個(gè)的話(huà),每次時(shí)鐘中斷都肯定會(huì)發(fā)生進(jìn)程的切換〔可參考system.ccTimerInterruptHandler函數(shù)。所以運(yùn)行Nachos時(shí),假設(shè)以同樣的方式提交進(jìn)程,系統(tǒng)的結(jié)果將是一樣的。這不符合操作系統(tǒng)的像真正的操作系統(tǒng)那樣通過(guò)時(shí)鐘中斷來(lái)計(jì)算時(shí)間等等選項(xiàng)(-rs)來(lái)實(shí)現(xiàn)。終端設(shè)備模塊實(shí)現(xiàn)機(jī)制分析本模塊主要在文件console.ccconsole.h中實(shí)現(xiàn)。該模塊的作用是模擬實(shí)現(xiàn)終端的輸入和輸出待中斷發(fā)生后才是真正完成了整個(gè)過(guò)程。Nachos的終端模擬借助了Console類(lèi)中的兩個(gè)成員函數(shù)readFile和writeFile。這兩個(gè)文件分別模擬鍵盤(pán)輸入和屏幕顯示。當(dāng)readFile為NULL時(shí),Nachos以標(biāo)準(zhǔn)輸入作為終端輸入;當(dāng)writeFile為NULL時(shí),Nachos以標(biāo)準(zhǔn)輸出作為終端輸出。兩個(gè)成員函數(shù)ConsoleReadPoll以及ConsoleWriteDone的作用同Timer模擬中的TimerHandler成員函數(shù)。Nachos需要以肯定的時(shí)間間隔檢查終端是否有字符供讀?。还倘辉谶@些中斷處理程序中,還包括了一些統(tǒng)計(jì)的工作。系統(tǒng)的終端操作有嚴(yán)格的工作挨次,對(duì)讀終端來(lái)說(shuō):CheckCharAvail->GetChar->CheckCharAvail->GetChar->...系統(tǒng)通過(guò)定期的讀終端中斷來(lái)推斷終端是否有內(nèi)容供讀取,假設(shè)有則讀出;假設(shè)沒(méi)有,下一次讀終端中斷連續(xù)推斷。讀出的內(nèi)容將始終保存到GetChar將其讀走。對(duì)寫(xiě)終端來(lái)說(shuō):PutChar->WriteDone->PutChar->WriteDone->...系統(tǒng)發(fā)出一個(gè)寫(xiě)終端命令PutChar,模擬系統(tǒng)將直接向終端輸出文件寫(xiě)入要寫(xiě)的內(nèi)容,但是對(duì)Nachos來(lái)說(shuō),整個(gè)寫(xiě)的過(guò)程并沒(méi)有完畢,只有當(dāng)寫(xiě)終端中斷來(lái)到后整個(gè)寫(xiě)過(guò)程才算完畢。磁盤(pán)設(shè)備模塊實(shí)現(xiàn)機(jī)制分析本模塊主要在文件文件disk.cc和disk.h中實(shí)現(xiàn)。磁盤(pán)設(shè)備模擬了一個(gè)物理磁盤(pán)。Nachos用宿主機(jī)中的一個(gè)文件來(lái)模擬一個(gè)單面物理磁盤(pán),該磁盤(pán)由道組成,每個(gè)道由扇區(qū)組成,而每個(gè)扇區(qū)的大小是固定的。和實(shí)際的物理磁盤(pán)一樣,Nachos以扇區(qū)為物理讀取/寫(xiě)入的最小單位,每個(gè)扇區(qū)有唯一的扇區(qū)地址,具體的計(jì)算方法是:track*SectorsPerTrack+offset懇求,馬上返回,只有具體的磁盤(pán)終端到來(lái)的時(shí)候,整個(gè)過(guò)程才算完畢。Nachos對(duì)物理磁盤(pán)的模擬和對(duì)網(wǎng)絡(luò)、終端等的模擬格外類(lèi)似,所承受的手段也很類(lèi)似。這里就不具體表達(dá),需要說(shuō)明的有以下幾點(diǎn):和其它的模擬不同的是,每次磁盤(pán)懇求到磁盤(pán)中斷發(fā)生之間的時(shí)間間隔是不一樣的,這取決于兩次磁盤(pán)訪問(wèn)磁道和扇區(qū)的距離。為了和實(shí)際狀況更加接近,Nachos的物理磁盤(pán)設(shè)置有trackbuffer高速緩沖區(qū)。其中存放的是最終一次訪問(wèn)的磁道中的全部?jī)?nèi)容trackbuffer讀訪問(wèn),固然寫(xiě)磁盤(pán)則多了向trackbuffer寫(xiě)入的步驟。磁盤(pán)模擬文件開(kāi)頭四個(gè)字節(jié)的值為MagicNumber,其作用是為了不讓Nachos磁盤(pán)模擬文件同其它文件混淆。時(shí)間。比方在有些文件系統(tǒng)的設(shè)計(jì)中,承受了多inode區(qū)。目的是使一個(gè)文件的inode同文件內(nèi)容所在的磁盤(pán)扇區(qū)比較接近,從而削減磁頭移動(dòng)的時(shí)間。系統(tǒng)運(yùn)行狀況統(tǒng)計(jì)在本節(jié)的最終局部,我們要說(shuō)明的是對(duì)Nachos運(yùn)行狀況進(jìn)展統(tǒng)計(jì)的類(lèi)Statistics。這并不屬于機(jī)器模擬的一局部,但是為了幫助讀者了解自己設(shè)計(jì)的操作系統(tǒng)的各種運(yùn)行狀況。Statistics類(lèi)中包含的各種統(tǒng)計(jì)項(xiàng)是格外有價(jià)值的。Statistics類(lèi)中主要包括:Nachos運(yùn)行的時(shí)間;NachosIdle態(tài)的時(shí)間;Nachos在系統(tǒng)態(tài)運(yùn)行的時(shí)間;Nachos發(fā)出的讀磁盤(pán)懇求次數(shù);Nachos發(fā)出的寫(xiě)磁盤(pán)懇求次數(shù);Nachos讀取的終端字符數(shù);Nachos輸出的字符數(shù);等等。Nachos中的進(jìn)程/線程治理相關(guān)學(xué)問(wèn)點(diǎn)回憶進(jìn)程進(jìn)程定義及特征進(jìn)程狀態(tài)及轉(zhuǎn)換進(jìn)程的組成:程序段、數(shù)據(jù)段、堆棧、進(jìn)程掌握塊進(jìn)程治理:創(chuàng)立、調(diào)度、堵塞、撤銷(xiāo)、掛起進(jìn)程的同步與互斥線程線程概念線程與進(jìn)程的聯(lián)系功能概述Nachos供給了一個(gè)根本的線程治理系統(tǒng)和一個(gè)同步互斥機(jī)制信號(hào)量的實(shí)現(xiàn)Nachos,可以一條指令一條指令地跟蹤線程序。這個(gè)簡(jiǎn)化的線程治理與實(shí)際的進(jìn)程治理的不同在于:不存在系統(tǒng)中全部線程的列表在一般的操作系統(tǒng)中,進(jìn)程的數(shù)目總是有限的,但是Nachos中的線程數(shù)目可以是無(wú)限的〔固然,用戶(hù)進(jìn)程的數(shù)目應(yīng)當(dāng)也是有限的。當(dāng)虛擬機(jī)內(nèi)存以及虛擬內(nèi)存都耗盡時(shí),就不能產(chǎn)生的用戶(hù)線程。能夠開(kāi)多少線程完全由宿主機(jī)條件限制,理論上是無(wú)限的。線程的調(diào)度比較簡(jiǎn)潔必需進(jìn)展線程切換;當(dāng)沒(méi)有啟動(dòng)時(shí)鐘中斷的狀況下,Nachos使用非搶占式調(diào)度。沒(méi)有實(shí)現(xiàn)父子線程的關(guān)系可以說(shuō),全部的Nachos線程都是Nachos的一個(gè)子線程。但是Nachos線程之間的父子狀況對(duì)以后進(jìn)一步進(jìn)展系統(tǒng)擴(kuò)大是不利的。具體模塊實(shí)現(xiàn)介紹工具模塊〔文件list.cclist.hutility.ccutility.h〕功能:定義了一個(gè)鏈表構(gòu)造及其操作線程啟動(dòng)和調(diào)度模塊〔文件switch.sswitch.h〕.1功能概述在NachosNachos的線程切換借助于宿主機(jī)的正文切換,由于這局部?jī)?nèi)容與機(jī)器親熱相關(guān),而且直接同宿主機(jī)的存放器進(jìn)展交道,所以這局部是用匯編來(lái)實(shí)現(xiàn)的。由于Nachos可以運(yùn)行在多種機(jī)switch.s中針對(duì)不同的機(jī)器進(jìn)展了不同的處理。假設(shè)需要將Nachos移植到其它機(jī)器上,就需要修改這局部的內(nèi)容。.2核心函數(shù)介紹ThreadRoot函數(shù)語(yǔ)法:ThreadRoot(intInitialPC,intInitialArg,intWhenDonePC,intStartupPC)參數(shù):InitialPC

指明生成線程的入口函數(shù)地址InitialArg 是該入口函數(shù)的參數(shù)StartupPC 是在運(yùn)行該線程是需要作的一些初始化工作,比方開(kāi)中斷WhenDonePC 是當(dāng)該線程運(yùn)行完畢時(shí)需要作的一些后續(xù)工作功能:Nachos中,除了main線程外,全部其它線程都是從ThreadRoot入口運(yùn)行的。在Nachos的源代碼中,沒(méi)有任何一個(gè)函數(shù)和方法顯式地調(diào)用ThreadRoot函數(shù),ThreadRoot函數(shù)只有在線程切換時(shí)才被調(diào)用到。由ThreadRoot入口可以轉(zhuǎn)而運(yùn)行線程所需要運(yùn)行的函數(shù),從而到達(dá)生成線程的目的。SWITCH函數(shù)語(yǔ)法:voidSWITCH(Thread*t1,Thread*t2)參數(shù):t1 是原運(yùn)行線程指針t2 是需要切換到的線程指針功能:完成線程切換線程定義模塊〔文件thread.ccthread.h〕.1功能概述定義了相當(dāng)于線程掌握塊的Thread類(lèi),與PCB(ProcessControlBlock)有相像之處。Thread線程掌握類(lèi)較PCB為簡(jiǎn)潔的多,它沒(méi)有線程標(biāo)識(shí)(pid)、實(shí)際用戶(hù)標(biāo)識(shí)(uid)等和線程操作不是格外有聯(lián)系的局部,也沒(méi)有將PCB分成proc構(gòu)造和user構(gòu)造。這是由于一個(gè)NachosThread線程掌握類(lèi)的實(shí)例都生成在宿主機(jī)而不是生成在虛擬機(jī)上。所以不存在實(shí)際操作系統(tǒng)中proc構(gòu)造常駐內(nèi)存,而user構(gòu)造可以存放在盤(pán)交換區(qū)上的狀況,將原有的兩個(gè)構(gòu)造合并是Nachos作的一種簡(jiǎn)化。Nachos對(duì)線程的另一個(gè)簡(jiǎn)化是每個(gè)線程棧段的大小是固定的,為4096-5個(gè)字(word)且是不能動(dòng)態(tài)擴(kuò)展的。所以Nachos中的系統(tǒng)線程中不能使用很大的棧空間,比方:voidfoo{intbuff[10000];...}可能會(huì)不能正常執(zhí)行,假設(shè)需要使用很大空間,可以在Nachos的運(yùn)行堆中申請(qǐng):voidfoo{int*buf=newint[10000];...}假設(shè)系統(tǒng)線程需要使用的??臻g大于規(guī)定棧空間的大小,可以修改StackSize宏定義。核心函數(shù)介紹Fork方法語(yǔ)法:voidFork(VoidFunctionPtrfunc,intarg)參數(shù):func:線程運(yùn)行的函數(shù);arg:func函數(shù)的參數(shù)功能:線程初始化之后將線程設(shè)置成可運(yùn)行的。StackAllocate方法語(yǔ)法:voidStackAllocate(VoidFunctionPtrfunc,intarg)參數(shù):func:線程運(yùn)行的函數(shù);arg:func函數(shù)的參數(shù)功能:為一個(gè)線程申請(qǐng)??臻g,并設(shè)置好預(yù)備運(yùn)行線程的條件。Yield方法語(yǔ)法:voidYield參數(shù):無(wú)功能:當(dāng)前運(yùn)行強(qiáng)制切換到另一個(gè)就緒線程運(yùn)行Sleep方法語(yǔ)法:voidSleep參數(shù):無(wú)功能:線程由于某種緣由進(jìn)入堵塞狀態(tài)等待一個(gè)大事的發(fā)生〔V操作、開(kāi)鎖或者條件變量的設(shè)置〕。當(dāng)這些條件得到滿(mǎn)足,該線程又可以恢復(fù)就緒狀態(tài)。線程調(diào)度算法模塊〔文件scheduler.ccscheduler.h〕.1功能概述該模塊的作用是進(jìn)展線程的調(diào)度。在Nachos系統(tǒng)中,有一個(gè)線程就緒隊(duì)列,其中是全部Nachos中線程沒(méi)有優(yōu)先級(jí),所以線程就緒隊(duì)列是沒(méi)有優(yōu)先級(jí)的。核心函數(shù)介紹Run方法語(yǔ)法:voidRun(Thread*nextThread)參數(shù):nextThread:需要切換運(yùn)行的線程功能:當(dāng)前運(yùn)行強(qiáng)制切換到nextThread就緒線程運(yùn)行Nachos主控模塊〔文件main.ccsystem.ccsystem.h〕.1功能概述該模塊是整個(gè)NachosNachos不同功能的初始化設(shè)置。選項(xiàng)的設(shè)置如下所示:一般選項(xiàng):-d:顯示特定的調(diào)試信息-rs:使得線程可以隨機(jī)切換-z:打印版權(quán)信息和用戶(hù)進(jìn)程有關(guān)的選項(xiàng):-s:使用戶(hù)進(jìn)程進(jìn)入單步調(diào)試模式-x:執(zhí)行一個(gè)用戶(hù)程序-c:測(cè)試終端輸入輸出和文件系統(tǒng)有關(guān)的選項(xiàng):-f:格式化模擬磁盤(pán)-cp:將一個(gè)文件從宿主機(jī)拷貝到Nachos模擬磁盤(pán)上-p:將Nachos磁盤(pán)上的文件顯示出來(lái)-r:將一個(gè)文件從Nachos模擬磁盤(pán)上刪除-l:列出Nachos模擬磁盤(pán)上的文件-D:打印出Nachos文件系統(tǒng)的內(nèi)容-t:測(cè)試Nachos文件系統(tǒng)的效率和網(wǎng)絡(luò)有關(guān)的選項(xiàng):-n:設(shè)置網(wǎng)絡(luò)的牢靠度〔在0-1之間的一個(gè)小數(shù)〕-m:設(shè)置自己的HostID-o:執(zhí)行網(wǎng)絡(luò)測(cè)試程序核心函數(shù)介紹mainintmain(intargc,char**argv){對(duì)命令行參數(shù)進(jìn)展處理,并且初始化相應(yīng)的功能currentThread->Finish;return(0);//此行執(zhí)行不到。}在main函數(shù)的最終,是currentThread->Finish語(yǔ)句。為什么不直接退出呢?這是由于Nachos是在宿主機(jī)上運(yùn)行的一個(gè)一般的進(jìn)程,當(dāng)main函數(shù)退出時(shí),整個(gè)占用的空間要釋放,Nachos中,mainmain函數(shù)作為Nachos中一個(gè)特別線程進(jìn)展處理,該線程完畢只是作為一個(gè)線程的完畢,系統(tǒng)并不會(huì)退出。Nachos中的文件系統(tǒng)治理相關(guān)學(xué)問(wèn)點(diǎn)回憶文件文件構(gòu)造:規(guī)律構(gòu)造、物理構(gòu)造文件訪問(wèn)方式:挨次訪問(wèn)、隨機(jī)訪問(wèn)文件類(lèi)型、文件屬性文件操作名目名目構(gòu)造:?jiǎn)渭?jí)名目、兩級(jí)名目、多級(jí)名目路徑名名目項(xiàng)工作名目功能概述Nachos是在其模擬磁盤(pán)上實(shí)現(xiàn)的文件系統(tǒng)。它包括一般文件系統(tǒng)的全部的特性,可以:依據(jù)用戶(hù)的要求創(chuàng)立文件和刪除文件依據(jù)用戶(hù)要求對(duì)文件進(jìn)展讀寫(xiě)操作對(duì)存放文件的存儲(chǔ)空間進(jìn)展治理,為各個(gè)文件自動(dòng)安排必要的物理存儲(chǔ)空間,并為文件的規(guī)律構(gòu)造以及它在存儲(chǔ)空間中的物理位置建立映照關(guān)系。用戶(hù)只需要通過(guò)文件名就可以對(duì)文件進(jìn)展存放,文件的物理組織對(duì)用戶(hù)是透亮的。相比實(shí)際的操作系統(tǒng),存在的缺乏:現(xiàn)有的文件系統(tǒng)沒(méi)有實(shí)現(xiàn)互斥訪問(wèn),所以每次只允許一個(gè)線程訪問(wèn)文件系統(tǒng)。的文件數(shù)是有限的。文件索引構(gòu)造承受的都是直接索引,所以Nachos的最大文件長(zhǎng)度不能大于4K必需在文件生成時(shí)創(chuàng)立索引表。所以Nachos在創(chuàng)立一個(gè)文件時(shí),必需給出文件的大??;而且當(dāng)文件生成后,就不能轉(zhuǎn)變文件的大小。目前該文件系統(tǒng)沒(méi)有Cache機(jī)制保證正確。具體模塊實(shí)現(xiàn)介紹同步磁盤(pán)〔文件synchdisk.ccsynchdisk.h〕功能概述和其它設(shè)備一樣,Nachos當(dāng)從磁盤(pán)讀出或?qū)懭霐?shù)據(jù)完畢后,發(fā)出磁盤(pán)中斷,說(shuō)明一次磁盤(pán)訪問(wèn)真正完畢。Nachos是一個(gè)多線程的系統(tǒng),假設(shè)多個(gè)線程同時(shí)對(duì)磁盤(pán)進(jìn)展訪問(wèn),會(huì)引起系統(tǒng)的混亂。所以必需作出這樣的限制:同時(shí)只能有一個(gè)線程訪問(wèn)磁盤(pán)當(dāng)發(fā)出磁盤(pán)訪問(wèn)懇求后,必需等待訪問(wèn)的真正完畢。這兩個(gè)限制就是實(shí)現(xiàn)同步磁盤(pán)的目的。此模塊定義了SynchDisk類(lèi),模擬同步磁盤(pán)的實(shí)現(xiàn)。位圖模塊〔文件bitmap.ccbitmap.h〕.1功能概述在NachosNachos的物理磁盤(pán)是以扇區(qū)為訪問(wèn)單位的,將扇區(qū)從0開(kāi)頭編號(hào)。所謂位圖治理,就是將這些編號(hào)填入一張表,表中為0的地方說(shuō)明該扇區(qū)沒(méi)有被占用,而非0位置說(shuō)明該扇區(qū)已被占用。此模塊定義了BitMap類(lèi)來(lái)模擬位圖治理。文件系統(tǒng)模塊〔文件filesys.ccfilesys.h〕.1功能概述此模塊模擬了創(chuàng)立文件、刪除文件、翻開(kāi)文件操作。在Nachos中,實(shí)現(xiàn)了兩套文件系FILESYS_STUB,它是建立在UNIX文件系統(tǒng)之上的,而不使用Nachos的模擬磁盤(pán),它主要用于先實(shí)現(xiàn)了用戶(hù)程序和虛擬內(nèi)存,然后再NachosNachos的虛擬磁盤(pán)上的。當(dāng)整個(gè)系統(tǒng)完成之后,只能使用其次套文件系統(tǒng)的實(shí)現(xiàn)。.2核心函數(shù)介紹Create方法語(yǔ)法:boolCreate(char*name,intinitialSize)參數(shù):name:需要?jiǎng)?chuàng)立的文件名initialSize:需要?jiǎng)?chuàng)立的文件的初始大小功能:在當(dāng)前的文件系統(tǒng)中創(chuàng)立一個(gè)固定大小的文件Open方法語(yǔ)法:OpenFile*Open(char*name)參數(shù):name:需要翻開(kāi)的文件名功能:在當(dāng)前的文件系統(tǒng)中翻開(kāi)一個(gè)已有的文件Remove方法語(yǔ)法:boolRemove(char*name)參數(shù):name:需要?jiǎng)h除的文件名功能:在當(dāng)前的文件系統(tǒng)中刪除一個(gè)已有的文件文件頭模塊〔文件filehdr.ccfilehdr.h〕.1功能概述文件頭實(shí)際上就是UNIX文件系統(tǒng)中所說(shuō)的inode構(gòu)造,它給出一個(gè)文件除了文件名之外〔文件名屬性在名目中給出是文件的規(guī)律地址和實(shí)際的物理地址的對(duì)應(yīng)關(guān)系。通過(guò)文件頭可以獵取文件的全部信息。Nachos的文件頭可以存放在磁盤(pán)上,也可以存放在宿主機(jī)內(nèi)存中,在磁盤(pán)上存放時(shí)一個(gè)文件頭占用一個(gè)獨(dú)立的扇區(qū)。此模塊定義了文件頭類(lèi),具體實(shí)現(xiàn)請(qǐng)查看源代碼。翻開(kāi)文件構(gòu)造〔文件openfile.ccopenfile.h〕功能概述文件操作的方法同UNIX操作系統(tǒng)中的系統(tǒng)調(diào)用。核心函數(shù)介紹針對(duì)FileSystem構(gòu)造中的兩套實(shí)現(xiàn),這里給出的函數(shù)皆屬于建立立在Nachos上的一套實(shí)現(xiàn)。Read語(yǔ)法:intRead(char*into,intnumBytes)參數(shù):into:讀出內(nèi)容存放的緩沖numBytes:需要讀出的字節(jié)數(shù)功能:從文件中讀出numByte到into緩沖Write語(yǔ)法:intWrite(char*from,intnumBytes)參數(shù):from:存放需寫(xiě)入內(nèi)容的緩沖numBytes:需寫(xiě)入的字節(jié)數(shù)功能:將from緩沖中寫(xiě)入numBytes個(gè)字節(jié)到文件中Seek語(yǔ)法:voidSeek(intposition)參數(shù):position:要到達(dá)的文件位置功能:從文件頭開(kāi)頭,移動(dòng)文件位置指針至position處ReadAt方法語(yǔ)法:intReadAt(char*into,intnumBytes,intposition)參數(shù):into:讀出內(nèi)容存放的緩沖numBytes:需要讀出的字節(jié)數(shù)position:需讀出內(nèi)容的開(kāi)頭位置功能:將從position開(kāi)頭的numBytes讀入into緩沖WriteAt方法語(yǔ)法:intWriteAt(char*from,intnumBytes,intposition)參數(shù):from:存放需寫(xiě)入內(nèi)容的緩沖numBytes:需寫(xiě)入的字節(jié)數(shù)position:需寫(xiě)入內(nèi)容的開(kāi)頭位置功能:將from緩沖中的numberBytes字節(jié)從position開(kāi)頭的位置寫(xiě)入文件注:實(shí)際上,對(duì)文件的一次寫(xiě)操作應(yīng)當(dāng)是原子操作,否則會(huì)消滅兩個(gè)線程穿插寫(xiě)的狀況。比方A線程和B線程都需要對(duì)扇區(qū)a和bA〔寫(xiě)a〕B〔寫(xiě)a〕B〔寫(xiě)b〕A〔寫(xiě)b〕這樣扇區(qū)b中的內(nèi)容是A線程寫(xiě)的,而扇區(qū)a的內(nèi)容是B線程寫(xiě)的。這樣,數(shù)據(jù)的全都性不能得到保證。但是目前Nachos沒(méi)有對(duì)此進(jìn)展處理。名目模塊〔文件directory.ccdirectory.h〕功能概述每個(gè)名目都對(duì)應(yīng)一個(gè)名目文件,名目文件由名目項(xiàng)組成,名目項(xiàng)使得字符形式的文件名與實(shí)際相關(guān)操作,具體實(shí)現(xiàn)請(qǐng)參考源代碼。Nachos中的存儲(chǔ)系統(tǒng)治理相關(guān)學(xué)問(wèn)點(diǎn)回憶連續(xù)安排存儲(chǔ)治理方式安排方式:?jiǎn)我贿B續(xù)安排、固定分區(qū)、動(dòng)態(tài)分區(qū)分區(qū)安排數(shù)據(jù)構(gòu)造、分區(qū)安排算法分頁(yè)存儲(chǔ)治理方式頁(yè)表、地址變換兩級(jí)頁(yè)表、多級(jí)頁(yè)表反置頁(yè)表、快表分段存儲(chǔ)治理方式段表、地址變換段頁(yè)式存儲(chǔ)治理方式虛擬存儲(chǔ)器虛擬存儲(chǔ)器定義及特征缺頁(yè)中斷頁(yè)面安排算法、頁(yè)面置換算法功能概述Nachos目前實(shí)現(xiàn)的存儲(chǔ)系統(tǒng),一次只能執(zhí)行一個(gè)用戶(hù)程序,且可執(zhí)行程序的大小必需小于物理內(nèi)存,否則無(wú)法正常執(zhí)行。要到達(dá)對(duì)現(xiàn)代操作系統(tǒng)中存儲(chǔ)系統(tǒng)的支持多道程序、程序可用空間不受限制的目標(biāo)還是有差距的,有待改進(jìn)。具體模塊實(shí)現(xiàn)介紹相關(guān)文件介紹machine.h:包含了內(nèi)存的相關(guān)定義machine.cc:包含了對(duì)內(nèi)存和頁(yè)表的初始化translate.h:定義了頁(yè)表構(gòu)造translate.cc:包含了地址轉(zhuǎn)換的實(shí)現(xiàn)以及讀、寫(xiě)內(nèi)存的操作address.cc:包含了用戶(hù)程序頁(yè)表的操作函數(shù)介紹ReadMem函數(shù)語(yǔ)法:boolReadMem(intaddr,intsize,int*value)參數(shù):addr:用戶(hù)程序規(guī)律地址;size:需要讀出的字節(jié)數(shù);value:讀出的內(nèi)容暫存地功能:從用戶(hù)規(guī)律地址讀出size個(gè)字節(jié),轉(zhuǎn)換成相應(yīng)的類(lèi)型,存放在value所指向的空間WriteMem函數(shù)語(yǔ)法:boolWriteMem(intaddr,intsize,intvalue)參數(shù):addr:用戶(hù)程序規(guī)律地址;size:需要寫(xiě)入的字節(jié)數(shù);value:需要寫(xiě)入的內(nèi)容功能:將value表示的數(shù)值依據(jù)size大小轉(zhuǎn)換成相應(yīng)的機(jī)器類(lèi)型存放在add用戶(hù)規(guī)律地址Translate函數(shù)語(yǔ)法:ExceptionTranslate(intvirtAddr,int*physAddr,intsize,boolwriting)參數(shù):virtAddr:用戶(hù)程序的規(guī)律地址physAddr:轉(zhuǎn)換后的實(shí)際地址size:數(shù)據(jù)類(lèi)型的大小writing:讀/寫(xiě)內(nèi)存標(biāo)志功能:將用戶(hù)的規(guī)律地址轉(zhuǎn)換成實(shí)際的物理地址,同時(shí)需要檢查對(duì)齊。Nachos中的網(wǎng)絡(luò)系統(tǒng)治理相關(guān)學(xué)問(wèn)點(diǎn)回憶網(wǎng)絡(luò)操作系統(tǒng)ISO七層協(xié)議Socket網(wǎng)絡(luò)端口號(hào)郵局協(xié)議現(xiàn)有功能分析Nachos網(wǎng)絡(luò)系統(tǒng)治理模塊模擬了和一個(gè)Nachos有如下特點(diǎn):數(shù)據(jù)報(bào)發(fā)送是有序的;是正確的,所以并不需要校驗(yàn);網(wǎng)絡(luò)之間的連接是全互連的。每個(gè)NachosNachos啟動(dòng)時(shí)在命令行中給出。Nachos實(shí)現(xiàn)時(shí)用一個(gè)SOCKET文件模擬了和自己相連接的網(wǎng)絡(luò)局部。該文件名的格式SOCKET_網(wǎng)絡(luò)地址。一個(gè)網(wǎng)絡(luò)數(shù)據(jù)包由數(shù)據(jù)包頭和數(shù)據(jù)局部?jī)删植拷M成者的地址信息和數(shù)據(jù)報(bào)文內(nèi)容的長(zhǎng)度。每個(gè)數(shù)據(jù)包的長(zhǎng)度是固定的,為64個(gè)字節(jié)。Nachos在根本物理網(wǎng)絡(luò)的根底上建立了一個(gè)郵局協(xié)議。在每個(gè)Nachos模擬機(jī)上,有一下來(lái)分發(fā)給特定的郵箱;郵局對(duì)象同時(shí)還負(fù)責(zé)將本機(jī)的郵件發(fā)送給其它Nachos模擬機(jī)。由于Nachos是一個(gè)多線程的系統(tǒng),每個(gè)線程都可以獨(dú)立地利用網(wǎng)絡(luò),這些線程在使用網(wǎng)絡(luò)的時(shí)候如何不相互干擾呢?這里實(shí)際上借用了網(wǎng)絡(luò)端口號(hào)的概念,每個(gè)線程需要進(jìn)展網(wǎng)絡(luò)通個(gè)線程。這里的網(wǎng)絡(luò)端口就是郵箱。具體模塊實(shí)現(xiàn)介紹物理網(wǎng)絡(luò)的模擬Nachos的物理網(wǎng)絡(luò)主要由 machine名目下的network.cc和network.h文件中的PacketHeader類(lèi)和Network類(lèi)進(jìn)展模擬。和機(jī)器模擬局部終端模擬實(shí)現(xiàn)相類(lèi)似,兩個(gè)內(nèi)部函數(shù)NetworkReadPoll和NetworkSendDone作為網(wǎng)絡(luò)讀寫(xiě)的中斷處理函數(shù)這兩個(gè)內(nèi)部函數(shù)通過(guò)CheckPktAvail和SendDone兩個(gè)內(nèi)部方法調(diào)用真正的中斷處理函數(shù)這樣Nachos可以以肯定的時(shí)間間隔檢查是否存在發(fā)給自己的數(shù)據(jù)包固然在這些網(wǎng)絡(luò)中斷處理程序中還包括了一些統(tǒng)計(jì)的工作。系統(tǒng)的網(wǎng)絡(luò)讀寫(xiě)操作同樣有嚴(yán)格的工作挨次,對(duì)網(wǎng)絡(luò)讀來(lái)說(shuō):CheckPktAvail->Receive->CheckPktAvail->Receive->CheckPktAvail->Receive->...系統(tǒng)通過(guò)定期的網(wǎng)絡(luò)讀中斷來(lái)推斷是否有發(fā)給自己的數(shù)據(jù)包下一次讀網(wǎng)絡(luò)中斷連續(xù)推斷。讀出的內(nèi)容將始終保存到Receive將其讀走。對(duì)寫(xiě)網(wǎng)絡(luò)來(lái)說(shuō):Send->SendDone->Send->SendDone->Send->SendDone->Send->SendDone->...系統(tǒng)發(fā)出一個(gè)向網(wǎng)絡(luò)發(fā)送數(shù)據(jù)包的指令Send,模擬系統(tǒng)將直接向和目標(biāo)機(jī)相連接的網(wǎng)絡(luò)模擬文件發(fā)送數(shù)據(jù)包,但是對(duì)Nachos來(lái)說(shuō),整個(gè)寫(xiě)的過(guò)程并沒(méi)有完畢,只有當(dāng)寫(xiě)網(wǎng)絡(luò)中斷來(lái)到后整個(gè)寫(xiě)過(guò)程才算完畢。其中核心函數(shù)Send的主要功能就是向一個(gè)目標(biāo)地址發(fā)送一個(gè)數(shù)據(jù)包voidSend(PacketHeaderhdr,char*data)。其中參數(shù)hdr表示發(fā)送數(shù)據(jù)包頭,data表示發(fā)送數(shù)據(jù)包數(shù)據(jù)內(nèi)容。Send函數(shù)發(fā)送一個(gè)數(shù)據(jù)報(bào),Send函數(shù)到網(wǎng)絡(luò)發(fā)送中斷到達(dá)之前,與接收節(jié)點(diǎn)相連的網(wǎng)絡(luò)Socket文件中已經(jīng)有內(nèi)容,接收節(jié)點(diǎn)完全有可能探測(cè)到數(shù)據(jù)報(bào)內(nèi)容的存在并且將內(nèi)容讀走和接收同步問(wèn)題的隱患。需要說(shuō)明為什么用socket機(jī)制來(lái)模擬網(wǎng)絡(luò),而不選用一般的文件?我們知道,通過(guò)socket和文件連接,這樣的文件擁有這樣的性質(zhì):已經(jīng)讀走的內(nèi)容不行再現(xiàn)。于是對(duì)于這樣到達(dá)同樣的效果。郵局協(xié)議的模擬networkpost.ccpost.h文件中,Nachos實(shí)現(xiàn)了在根本物理網(wǎng)絡(luò)根底上的模擬郵局協(xié)議,而nettest.cc文件對(duì)該協(xié)議的運(yùn)作做了一個(gè)簡(jiǎn)潔測(cè)試。的收發(fā)地址,以及數(shù)據(jù)報(bào)的長(zhǎng)度。實(shí)現(xiàn)PostOffice協(xié)議時(shí),網(wǎng)絡(luò)數(shù)據(jù)報(bào)又有兩個(gè)局部組成:郵件的頭部和郵件的內(nèi)容。而具體的郵件頭部構(gòu)造和郵件構(gòu)造在類(lèi)MailHeaderMail中實(shí)現(xiàn)。Mail中實(shí)現(xiàn)。中斷到來(lái)時(shí),整個(gè)處理完畢。在郵局對(duì)象生成方法中,生成了一個(gè)Demon線程,特地同步監(jiān)測(cè)傳給自己的郵件,分析郵件頭部并將郵件放入特定的郵箱中。郵局的構(gòu)造主要在類(lèi)PostOffice中實(shí)現(xiàn)。其中比較核心的兩個(gè)函數(shù)功能說(shuō)明如下:PostalDelivery函數(shù)語(yǔ)法:voidPostalDelivery參數(shù):無(wú)功能:監(jiān)測(cè)網(wǎng)絡(luò)上是否有郵件到來(lái),并將到來(lái)的郵件分發(fā)給各個(gè)郵箱。這就是郵局生成的demon線程執(zhí)行的程序。Send方法語(yǔ)法:voidSend(PacketHeaderpktHdr,MailHeadermailHdr,char*data)參數(shù):無(wú)功能:將郵件發(fā)出去,接收郵件的地址由pktHdr中的接收地址和mailHdr中的接收郵箱打算。Nachos平臺(tái)上機(jī)實(shí)踐工程設(shè)置1:Nachos的線程治理模塊升級(jí)上機(jī)實(shí)踐具體要求【背景描述】在Nachos平臺(tái)中,線程是作業(yè)調(diào)度的根本單位,除了線程和進(jìn)程的概念差異之外,可Nachos平臺(tái)所使用的是非搶占式調(diào)度,線程一旦占用CPU,就會(huì)始終運(yùn)行到完畢或者被堵塞〔等待I/O大事Nachos平臺(tái)中的線程數(shù)據(jù)構(gòu)造定義格外簡(jiǎn)潔,并無(wú)用戶(hù)ID、線程ID等數(shù)據(jù)成員,也就是說(shuō),無(wú)法基于線程的ID來(lái)實(shí)現(xiàn)通信、同步互斥等機(jī)制。Nachos平臺(tái)中并無(wú)全局性的線程治理機(jī)制,并未限制線程的數(shù)目,也無(wú)法了解有多少線程存在?!緦?shí)踐要求】本實(shí)習(xí)工程期望通過(guò)修改Nachos系統(tǒng)平臺(tái)的底層源代碼來(lái)實(shí)現(xiàn)以下目標(biāo):修改擴(kuò)大Nachos中線程調(diào)度的機(jī)制,將其轉(zhuǎn)變?yōu)樽裱皶r(shí)間片輪轉(zhuǎn)”的可剝奪式調(diào)度。在時(shí)鐘中斷發(fā)生時(shí),檢查占用CPU的線程是否用完時(shí)間片,假設(shè)用完就將其放入“就緒隊(duì)列”中,調(diào)度“就緒隊(duì)列”中的第一個(gè)線程占用CPUNachos的線程治理模塊增加通過(guò)“公共信箱”進(jìn)展通信的機(jī)制,由Nachos系統(tǒng)核心維護(hù)一個(gè)預(yù)定大小的Mailbo4128個(gè)用戶(hù)線程之間通過(guò)這個(gè)“公共信箱”進(jìn)展通信?!咎峤恍问健酷槍?duì)以上實(shí)踐要求,實(shí)踐小組必需提交符合以下標(biāo)準(zhǔn)的實(shí)踐成果。工程實(shí)踐文檔一份Word或PDF格式的文檔,在文檔中說(shuō)明以下內(nèi)容:實(shí)踐小組的人員組成、各自的分工;對(duì)實(shí)踐要求的滿(mǎn)足程度,本工程有四項(xiàng)要求,請(qǐng)注明共滿(mǎn)足了幾項(xiàng)。對(duì)實(shí)踐過(guò)程的具體說(shuō)明,針對(duì)已經(jīng)滿(mǎn)足的實(shí)踐要求,承受了何種算法或思想,Nachos平臺(tái)的哪些代碼進(jìn)展了什么樣的修改。修改后的Nachos平臺(tái)源碼備份本文檔

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論