版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
操作系統(tǒng)原理上機實踐指南操作系統(tǒng)原理上機實踐指南
南開大學機器智能爭論所InstituteofMachineIntelligence二零零七年十月2of472of47Nachos平臺操作系統(tǒng)上機實踐指南 修訂記錄修訂記錄日期本修訂說明作者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ǒng)上機實踐指南Nachos平臺操作系統(tǒng)上機實踐指南內(nèi)容名目2of472of47目 錄第一章試驗環(huán)境介紹 4引言 4Nachos平臺的功能特點簡介 4什么是Nachos. 4Nachos的特點功能介紹 4Nachos平臺的搭建與配置 5Nachos試驗環(huán)境文件列表 5Nachos試驗環(huán)境搭建步驟 6Nachos的功能模塊組成構(gòu)造 22Nachos的編譯運行開發(fā)環(huán)境 22其次章2.1
Nachos平臺技術(shù)實現(xiàn)說明 24Nachos的機器模擬機制概述 24Sysdep模塊實現(xiàn)機制分析 24中斷處理模塊實現(xiàn)機制分析 27時鐘中斷模塊實現(xiàn)機制分析 28終端設備模塊實現(xiàn)機制分析 29磁盤設備模塊實現(xiàn)機制分析 29系統(tǒng)運行狀況統(tǒng)計 30Nachos中的進程/線程治理 30相關學問點回憶 30功能概述 30具體模塊實現(xiàn)介紹 31Nachos中的文件系統(tǒng)治理 33相關學問點回憶 33功能概述 34具體模塊實現(xiàn)介紹 34Nachos中的存儲系統(tǒng)治理 36相關學問點回憶 36功能概述 36具體模塊實現(xiàn)介紹 37Nachos中的網(wǎng)絡系統(tǒng)治理 37相關學問點回憶 37現(xiàn)有功能分析 37具體模塊實現(xiàn)介紹 38Nachos平臺操作系統(tǒng)上機實踐指南Nachos平臺操作系統(tǒng)上機實踐指南內(nèi)容名目3of47第三章3.1
Nachos平臺上機實踐工程設置 40實踐工程1:Nachos的線程治理模塊升級 40上機實踐具體要求 40實踐的過程和步驟 40實踐結(jié)果驗證方式 41實踐工程2:Nachos的文件治理模塊升級 錯誤!未定義書簽。上機實踐具體要求 錯誤!未定義書簽。實踐的過程和步驟 錯誤!未定義書簽。實踐結(jié)果驗證說明 錯誤!未定義書簽。實踐工程3:Nachos的內(nèi)存治理模塊升級 錯誤!未定義書簽。上機實踐具體要求 錯誤!未定義書簽。實踐的過程和步驟 錯誤!未定義書簽。實踐結(jié)果驗證說明 錯誤!未定義書簽。第四章4.1
Windows平臺上機實踐工程設置 錯誤!未定義書簽。實踐工程1:進程治理思想與方法的系統(tǒng)仿真 錯誤!未定義書簽。上機實踐具體要求 錯誤!未定義書簽。實踐的過程和步驟 錯誤!未定義書簽。實踐結(jié)果驗證方式 錯誤!未定義書簽。第五章附錄 42Unix常用命令介紹 42名目及文件操作命令 42設備治理命令 44系統(tǒng)及用戶治理命令 44其他命令 45Nachos的系統(tǒng)調(diào)用介紹 45Nachos的核心源代碼分析 46南開大學信息技術(shù)科學學院操作系統(tǒng)原理上機實踐指南南開大學信息技術(shù)科學學院操作系統(tǒng)原理上機實踐指南10of47引言操作系統(tǒng)上機實踐環(huán)節(jié)是操作系統(tǒng)課程的重要組成局部Nachos平臺的操作系統(tǒng)上機實踐指南。Nachos平臺的功能特點簡介什么是NachosNachosNotAnotherCompletelyHeuristicOperatingSyste修改和跟蹤的操作系統(tǒng)教學軟件。它給出了一個支持多線程和虛擬存儲的操作系統(tǒng)骨了解。Nachos的特點功能介紹Nachos作為操作系統(tǒng)課程的教學實踐平臺。Nachos是美國加州大學伯克萊分校在操作系統(tǒng)課統(tǒng)教學方面具有以下幾個突出的優(yōu)點:承受通用虛擬機Nachos是建立在一個軟件模擬的虛擬機之上的,模擬了MIPSR2/3000的指令集、機可以在運行時報告詳盡的出錯信息,更重要的是承受虛擬機使Nachos的移植變得格外簡潔,在不同機器上移植Nachos,只需對虛擬機局部作移植即可。承受R2/3000指令集的緣由是該指令集為RISCNachos63R2/3000指令集是一個比較常用的指令集,很多現(xiàn)有的編譯器如gc++能夠直接將C或C++源程序編譯成該指令集的目標代碼,于是就不必編寫編譯器,讀者就可以直接用C/C++語言編寫應用程序,使得在Nachos上開發(fā)大型的應用程序也成為可能。使用并實現(xiàn)了操作系統(tǒng)中的一些的概念隨著計算機技術(shù)和操作系統(tǒng)技術(shù)的不斷進展,產(chǎn)生了很多的概念。Nachos將這些概念融入操作系統(tǒng)教學中,包括網(wǎng)絡、線程和分布式應用。而且Nachos以線程作為一個根本概念表達,取代了進程在以前操作系統(tǒng)教學中的地位。NachosMINIX不同,Nachos只是一個在宿主機上運行的一個進程。在同一個宿主機上可以運行多個Nachos進程,各個進程可以相互通訊,作為一個全互連網(wǎng)絡的一個節(jié)點;進程之間通過Socket進展通訊,模擬了一個全互連網(wǎng)絡。確定性調(diào)試比較便利,隨機因素使系統(tǒng)運行更加真實由于操作系統(tǒng)的不確定性,所以在一個實際的系統(tǒng)中進展多線程調(diào)試是比較困難Nachos是在宿主機上運行的進程,它供給了確定性調(diào)試的手段。所謂確定性調(diào)試,就是在同樣的輸入挨次、輸入?yún)?shù)的狀況下,Nachos運行的結(jié)果是完全一樣的。干擾。另外,不確定性是操作系統(tǒng)所必需具有的特征,Nachos承受了隨機因子模擬了真實操作系統(tǒng)的不確定性。簡潔而易于擴展Nachos是一個教學用操作系統(tǒng)平臺,它必需簡潔而且有肯定的擴展余地。Nachos不是向讀者展現(xiàn)一個成功的操作系統(tǒng)擴展。例如一個完整的類似于UNIX的文件系統(tǒng)是很簡單的,但是對于文件系統(tǒng)來說,無非是需要實現(xiàn)文件的規(guī)律地址到物理地址的映射以及實現(xiàn)文件inode線程翻開文件表等重要的數(shù)據(jù)構(gòu)造以及維護它們之間的關系。Nachos中具有全部這些Nachos在每一局部給出很多課程作業(yè),作為讀者進展系統(tǒng)擴展的提示和檢查對系統(tǒng)擴展的結(jié)果。面對對象性Nachos的主體是用C++的一個子集來實現(xiàn)的。目前面對對象語言日漸流行,它能夠清楚地描述操作系統(tǒng)各個局部的接口。Nachos沒有用到面對對象語言的全部特征,如繼承性、多態(tài)性等,所以它的代碼就更簡潔閱讀和理解。Nachos共有五個功能模塊,分別是機器模擬、線程治理、文件系統(tǒng)治理、用戶程序和虛擬存儲以及網(wǎng)絡系統(tǒng)。它們的具體實現(xiàn)會在其次章中進展具體介紹。Nachos平臺的搭建與配置Nachos試驗環(huán)境文件列表在我們的教學網(wǎng)站可以下載到搭建nachos試驗平臺的全部軟件,下面就將搭建nachos試驗環(huán)境所需的軟件作一個簡要的描述:code-linux.tar.gz:nachoslinux下可以用gzip、tarwindows下直接使用winrarnachos的全部源代碼,另一個名目是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的啟動配置文件,它實現(xiàn)了f1-f12的功能鍵與emacs的命令的綁定,可以加速我們的編輯、編譯、調(diào)試過程。使用這個文件時只要把它放在用戶home名目下就可以了〔比方root用戶的/root名目下。VMware-workstation-5.0.0-13124.exe:VmwareWindows安裝上vmware。Vmwar可以在一個物理機器上模擬出虛擬的硬件機器,進而我們就可以在這些虛擬的硬件機器上安裝我們的操作系統(tǒng)了〔具體使用參見后面的試驗環(huán)境搭建〕VMware-mount-3.1.0-9089.exe:Vmware-mountvmwarevmware的硬盤文件掛載到windowswindows系統(tǒng)的一個硬盤。這樣以來就便利了虛擬機和真實機器之間的數(shù)據(jù)傳輸。(具體使用參見后面的試驗環(huán)境搭建)sourceinsight35.zip:windowsnachos代碼閱讀的工具,使用他供給的一些功能可以加快代碼的閱讀速度。Nachos試驗環(huán)境搭建步驟Nachos最初由美國加州大學伯克利分校為其操作系統(tǒng)課程的教學實習而開發(fā)。這個操作系統(tǒng)一開頭就設計成只能在unixlike的操作系統(tǒng)下運行,并沒有針對windows平臺的移植。有鑒于國內(nèi)教學實習中普遍使用windows平臺,所以我們需要通過安裝虛擬機軟件,創(chuàng)立linux虛擬機來最終實現(xiàn)我們的nachos體的描述nachos試驗環(huán)境的搭建。Vmware的安裝Vmware是一個虛擬機軟件,它可以在windows平臺上虛擬出真實機器的硬件環(huán)境的,使得我們可以在不購置機器的狀況下就可以在一個機器上運行多個操作系統(tǒng)。Vmware的安裝和一般的windows應用程序安裝沒有太大的差異,是一個相當“傻瓜”的過程,只要依據(jù)提示,依次點擊“下一步”就可順當?shù)赝瓿蓈mware的安裝了。虛擬機的創(chuàng)立這一步的主要任務就是要告知vmware的方式一步步地講解虛擬機的創(chuàng)立:vmware1-1所示的菜單1-1VMWare程序啟動或是點擊home-tabnewvirturalmachine〔1-2〕就可開頭虛擬機的創(chuàng)立過程。1-2VMWare程序啟動〔二〕在接下來的對話框中選擇定制創(chuàng)立虛擬機點擊下一步按鈕〔如圖1-3〕1-3定制虛擬機在接下來的虛擬機格式中選擇系統(tǒng)默認的new-workstation5格式即可,這樣我們可以獲得一些好處比方可以抓圖,但是也有一些害處那就是創(chuàng)立的虛擬機文件不能在老版本的vmware上翻開。linux-redhatlinux就行了。據(jù)自己的狀況答復就行了〔如圖1-4〕圖1-4選擇虛擬機名稱和安放路徑vmware需要給我們的虛擬機器模擬多大的內(nèi)存,在我們的試驗環(huán)境中256M〔1-5〕1-5虛擬機定制內(nèi)存〔1-6〕1-6虛擬機網(wǎng)絡設置點擊下一步,進入選擇I/O適配器類型,這一步不需要我們干預承受默認值,點擊下一〔1-7〕1-7網(wǎng)絡適配器設置接下來就進入了硬盤創(chuàng)立的步驟了,選擇創(chuàng)立IDE的硬盤,系統(tǒng)就會彈出對話框,要求答復硬盤的大小,在我們的試驗環(huán)境中有4G〔1-8,1-9,1-10〕1-8創(chuàng)立虛擬磁盤1-9選擇磁盤種類1-10選擇磁盤大小答復這個名稱點擊完成,整個虛擬機的創(chuàng)立過程就完畢了〔1-11〕1-11指定硬盤文件名稱虛擬機創(chuàng)立完成后vmware〔1-12〕1-12建虛擬機信息點擊標簽頁上的“startthisvirtualmachine”就可以啟動我們剛剛創(chuàng)立的虛擬機,但是由于我們只是讓vmwareBIOS所以我們需要進展下一步,向虛擬機上安裝OS和應用程序。虛擬機上linux的安裝虛擬機創(chuàng)立好了,vmware只是依據(jù)我們的要求模擬出了一個硬件機器,到目前位置這器上安裝linux操作系統(tǒng),進而安裝其他應用程序。在虛擬機上安裝linux和在真實機器上由光驅(qū)安裝linux是一樣的過程。首先需要把安裝光盤放到光驅(qū)中,雙擊主界面上的CD-ROM,彈出如圖1-13對話框:1-13CD-ROM對話框假設你有光驅(qū),也有l(wèi)inuxUsephysicaldrivlinux的ISOUseISOimag就可以啟動虛擬機器進展安裝了。1-14的畫面:1-14安裝Linux啟動畫面只有鼠標點擊只有鼠標點擊vmware的窗口之后,全部的鼠標和鍵盤輸入才能定向到虛擬機Ctrl+AltvmwarevmwareCtrl+Altvmwarevmware的環(huán)境回到windows可以使用這個熱鍵;假設要從全屏方式回到窗口方式,也需要點擊這個熱鍵安裝過程其實是很簡潔的大多狀況下只要點擊“next”按鈕就可以了,下面僅就比較關鍵的步驟進展一下描述:圖1-15 定制安裝Linux1-15安裝我們所需要的東西?!踩鐖D1-16〕1-16選擇分區(qū)方式接下來的假設干步只要點擊“next”就行了,其中有的步驟詢問是否要刪除磁盤上的數(shù)據(jù)這是只要答復“Yes”就行了,我們是裝操作系統(tǒng),磁盤上沒有什么有用的數(shù)據(jù),也不用擔憂本機的數(shù)據(jù)會喪失,VMWare。當安裝程序如以下圖所示要求我們答復root密碼時我們就要依據(jù)自己的狀況答復這個密碼,但是肯定要記住,由于這個密碼是超級用戶的密碼,對于系統(tǒng)特別重要〔如圖1-17〕nex”直到包的選擇步驟〔如圖1-1〕1-17設置超級用戶密碼1-18軟件包的選擇我們只需要依據(jù)自己的需要選擇自己所需要的包就可以了磁盤的使用量就自然會大一些。是我們編譯nachos系統(tǒng)所需要的虛擬機重啟的時候不要遺忘點擊F2BIOS虛擬機重啟的時候不要遺忘點擊F2BIOS盤啟動,這樣我們啟動的速度能加快一點虛擬機和本機之間的數(shù)據(jù)傳遞我們在虛擬的linux下編譯調(diào)試我們的nachos,但是在交作業(yè)等狀況下我們需要將虛擬機下的數(shù)據(jù)拿出來。這就需要我們首先將虛擬linux的數(shù)據(jù)傳輸?shù)奖緳Cwindows下;然后再從本機windows下將數(shù)據(jù)導出到可移動存儲設備或是通過網(wǎng)絡傳輸出去。然而虛擬機是虛擬機軟件模擬出的機器環(huán)境和本機系統(tǒng)相對隔離需要一些特別的方法;虛擬機和本機的數(shù)據(jù)傳遞有很多種,大致分為三類:通過網(wǎng)絡進展數(shù)據(jù)傳遞Vmware支持虛擬機的直接上網(wǎng),就如同一個真實機器一樣,虛擬機上了網(wǎng)我們就可以用ftp或是samba等方式進展數(shù)據(jù)交換了。但是這種方式需要獨立的IP地址,在機房IP地址緊缺的狀況下是不太適合的。通過共享文件夾進展數(shù)據(jù)傳遞這種方式就如同windows下兩個機器之間共享文件夾一樣,但是這種方法只適合虛擬的windows和本機windowslinux和本windows之間的數(shù)據(jù)交換是不適合的。通過硬盤文件進展數(shù)據(jù)傳遞這種方式就是我們推舉使用的方式。它的原理是創(chuàng)立一個fat32格式的vmware文件,這個文件可以掛載到本機windows成為本機的一個硬盤,也可以掛載到虛擬linux下成為虛擬linux下的一個名目,這樣就可以實現(xiàn)數(shù)據(jù)的雙向傳輸了。下面將要具體描述一下這種方式的實現(xiàn)步驟:vmware的硬盤創(chuàng)建vmware硬盤時需要在虛擬機未啟動時點擊HardDiskad,答復一系列的問題后就添加成功了。這個過程中答復的問題和虛擬機創(chuàng)立過程中所遇到的關于硬盤的問題是一樣的里就不再具體說明白。1-19創(chuàng)立VMWare硬盤linux下分區(qū)、格式化為fat32格式這一步,我們需要啟動我們的虛擬機進入linux。Linux啟動用戶登錄后,首先需要分區(qū),分區(qū)時的命令如下:fdisk/dev/hdbfdisk方式在fdisk方式下依據(jù)提示敲入如下命令就可以實現(xiàn)正確的分區(qū)np1enterentert1bwquit依據(jù)挨次敲完命令后,我們的分區(qū)工作就完成了,他在創(chuàng)立的硬盤上創(chuàng)立了一fat32分區(qū),下一步的任務就是將這個分區(qū)格式化,格式化時的命令為:mkdosfsF32/dev/hdb1到目前位置我們的fat32格式的硬盤分區(qū)就創(chuàng)立好了。windows下的掛載/卸載windows下掛載vmware硬盤文件需要安裝一個名為vmware-mount的軟件,的下載。軟件的安裝是很簡潔的點擊setup就可以了。掛載硬盤文件時需要在windows的命令提示符下輸入如下的命令:vmware-moutg:fat32.vmdk其中g(shù):為盤符,假設硬盤文件掛載成功windows下就會多一個硬盤,硬盤的盤符就是我們這里指定的gfat32.vmdk是我們所創(chuàng)立的硬盤文件的名稱。要卸載這個硬盤文件就輸入如下的命令就可以了:卸載時肯定要觀點和生成的硬盤(我們例子中的g卸載時肯定要觀點和生成的硬盤(我們例子中的g:)相關的窗口,否則卸載會失敗linux下的掛載/卸載假設在linux下把它掛載到文件系統(tǒng)中就使用如下命令:mount/dev/hdb1/mnt運行這個命令后這個fat32分區(qū)就掛載到了/mnt下,假設要掛載到其他地方就將/mnt改成自己想要的路徑就可以了。Linux下的命令和文件命是區(qū)分大小寫的,在windows命令提示符下是不區(qū)分大小寫的想要卸載這個fat32Linux下的命令和文件命是區(qū)分大小寫的,在windows命令提示符下是不區(qū)分大小寫的emacs21.3的安裝配置emacs是我們在linux下開發(fā)、編譯、調(diào)試nachos的主要集成環(huán)境。所以我們需要我們emacs是最最穩(wěn)定的。我們在安裝linux的時候可能已經(jīng)安裝了emacs但是那個版本的emacsemacs21.3“:///“網(wǎng)站隨時關注版本的變化。emacs步所講的本機與虛擬機之間的數(shù)據(jù)交換方法將emacs-21.3.tar.gz文件傳輸?shù)教摂Mlinux中。emacs-21.3.tar.gz是一個eamcs源代碼的壓縮包,依據(jù)如下的命令來解壓、編譯、安裝emacs21.3。gzip–demacs-21.3.tar.gz //解壓縮tar–xfemacs-21.3.tarcdemacs-21.3./configuremakemakeinstall
//解包//進入源代碼子名目//make腳本//編譯鏈接//安裝emacs安裝完畢了,我們可以使用emacs–verison命令來看一看emacs版本是不是我們21.3,假設是那么我們就安裝成功了。emacs安裝成功后,要想使它用起來便利我們還需要依據(jù)個人狀況進展定制,eamcs的定制是很簡單的,需要寫elisp程序,網(wǎng)上也有特地的專著來描述emacs的定制。我們?yōu)榱舜蠹医虒W實習的便利依據(jù)MSVC++的使用習慣對emacs進展了配置,大家只要把教學網(wǎng)站上的.emacs文件復制到自己的home〔roothome名目就是/root〕名目下就可以了。我們的配置將f1-f121-2所示:功能鍵功能鍵功能F1F2F3F4F5F6F7F8F9F10F11F12分窗口方式下縮小窗口分窗口方式下不同窗格之間切換編譯調(diào)試調(diào)試模式下的continue將源代碼注釋掉將源代碼注釋回來返回上一個標簽在源代碼上設置斷點調(diào)試模式下的next調(diào)試模式下的stepinto分窗口方式下的框格擴大表1-2 emacs快捷鍵定義Windows下代碼閱讀軟件的安裝雖然在linux我們可以高效地完成全部開發(fā)所需的任務,但是對于剛剛開頭接觸unix/linux的同學,一下子用熟那么多的工具還是有些困難的。正是基于這一點我們的教學windowsSourceInsight,借助于它我們可以加快代碼閱讀速度。這個軟件的安裝是個很簡潔的過程只要運行setup一路next下去就可以了。代碼閱讀時要先建工程,點擊project-newproject,然后依據(jù)要求答復源代碼的位置,定的符號上點右鍵就會彈出菜單,選擇相應的命令就可以了。Nachos的功能模塊組成構(gòu)造編譯后的nachos在我們的linux的一個操作系統(tǒng)內(nèi)核。它的構(gòu)造就是一個完整的操作系統(tǒng)構(gòu)造。以下圖標出了nachos操作系統(tǒng)的構(gòu)造。圖1-20 nachos系統(tǒng)構(gòu)造Nachos的編譯運行開發(fā)環(huán)境nachos雖說是一個操作系統(tǒng)但是他在linux下運行,也就相當與linux的一個一般進程,nachos的編譯、調(diào)試、運行和一般的linux程序的調(diào)試連接運行是沒有什么兩樣的。下面我們就從編輯、編譯、編輯、代碼閱讀等方面對linux下的程序開發(fā)環(huán)境做一下闡述:程序編輯在我們的環(huán)境下使用emacsemacs是一個功能強大的集成環(huán)就可以了。假設我們只使用最根本的功能那么emacswindows下的notepad使用方法差不多。程序編譯linux下的nachos代碼是借助makemake工具是一個工程治理工具,make是依據(jù)MakefileNachos的Makefienachos代碼后直接使用make命令就可以編譯連接我們的程序了,而不再需要其他額外的工作。程序調(diào)試linux下調(diào)試我們一般使用gdb作為調(diào)試工具。gdb使用過程大致如下:啟動gdb:>gdb gdb啟動后就進入了gdb的使用file命令加載要調(diào)試的可執(zhí)行程序:>filenachos斷點設置:>breakmain 在main函數(shù)上設置斷點程序運行一步:>next next命令不跟到函數(shù)里面去程序跟進:>step step命令可以跟跟到函數(shù)里面去顯示變量的值:>printtemp temp是變量命,這個命令將顯示temp的值顯示源代碼:>list 這個命令可以列出所調(diào)試程序的源代碼gdb令,更簡單的使用可以參照gdb的手冊或是聯(lián)機文檔。代碼閱讀我們在代碼閱讀過程中常用的也是最重要的功能就是能夠跳轉(zhuǎn)到函數(shù)或變量的定義處,然后還能跳轉(zhuǎn)回來連續(xù)原來的閱讀流程。linuxemacsemacs下實現(xiàn)代碼的導航需要etagsEtags庫中記錄的信息找到想要的標識符。標識符數(shù)據(jù)庫創(chuàng)立:>find./--name*.h --or--name*.cc--or--name*.s|etags–運行完這個命令后就會生成一個TAGSemacs環(huán)境中要想使用代碼導航功能只需要運行Alt+xvisit-tags-table命令就可以了。要想在程序閱讀過程中跳轉(zhuǎn)到某個標識符只要使用Alt+.回去使用alt+*命令就可以了〔假設使用了我們供給的.emacsf8可以實現(xiàn)一樣的功能。Nachos平臺技術(shù)實現(xiàn)說明Nachos的機器模擬機制概述Sysdep模塊實現(xiàn)機制分析本模塊主要在文件sysdep.ccsysdep.h中實現(xiàn)。Nachos的運行環(huán)境可以是多種操作系統(tǒng),由于每種操作系統(tǒng)所供給的系統(tǒng)調(diào)用或函數(shù)調(diào)用在形式和內(nèi)容上可能有微小的差異。sysdep模塊的作用是屏蔽掉這些差異。下面就主要的函數(shù)功能進展一下說明:PoolFile函數(shù)語法:boolPoolFile(intfd)參數(shù):fd:文件描述符,也可以是一個套接字(socket)fdTRUFALS。當NachosIDLE狀態(tài)時,測試過程有一個延時,也就是在肯定時間范圍內(nèi)假設有內(nèi)容可讀的話,同樣返回TRUE。OpenForWrite函數(shù)語法:intOpenForWrite(char*name)參數(shù):name:文件名則將該文件原有的內(nèi)容刪除。OpenForReadWrite函數(shù)語法:intOpenForReadWrite(char*name,boolcrashOnError)參數(shù):name::文件名;crashOnError:crash標志功能:為讀寫操作翻開一個文件。當crashOnError標志設置而文件不能讀寫翻開時,系統(tǒng)出錯退出。Read函數(shù)語法:voidRead(intfd,char*buffer,intnBytes)參數(shù):fd:翻開文件描述符;buffer:讀取內(nèi)容的緩沖區(qū);nBytes:需要讀取的字節(jié)數(shù)fd中讀取nBytes的內(nèi)容到buffer退出。留意:這和系統(tǒng)調(diào)用read不完全一樣。readRead函數(shù)則必需讀出nBytesread系統(tǒng)調(diào)用相對應的函數(shù),請用ReadPartial。ReadPartial函數(shù)語法:intReadPartial(intfd,char*buffer,intnBytes)參數(shù):fd:翻開文件描述符;buffer:讀取內(nèi)容的緩沖區(qū);nBytes:需要讀取的最大字節(jié)數(shù)功能:從一個翻開文件fd中讀取nBytes的內(nèi)容到buffer緩沖區(qū)。WriteFile函數(shù)語法:voidWriteFile(intfd,char*buffer,intnBytes)參數(shù):fd:翻開文件描述符;buffer:需要寫的內(nèi)容所在的緩沖區(qū);nBytes:需要寫的內(nèi)容最大字節(jié)數(shù)功能:將buffer緩沖區(qū)中的內(nèi)容寫nBytes到一個翻開文件fd中。留意:這和系統(tǒng)調(diào)用write不完全一樣。write系統(tǒng)調(diào)用返回的是實際寫入的字節(jié)數(shù),而WriteFile函數(shù)則必需寫入nBytes,否則系統(tǒng)將退出。Lseek函數(shù)語法:voidLseek(intfd,intoffset,intwhence)參數(shù):fd:文件描述符;offset:偏移量;whence:指針移動的起始點功能:移動一個翻開文件的讀寫指針,含義同lseek系統(tǒng)調(diào)用;出錯則退出系統(tǒng)。Tell函數(shù)語法:intTell(intfd)參數(shù):fd:文件描述符功能:指出當前讀寫指針位置Close函數(shù)語法:voidClose(intfd)參數(shù):fd:文件描述符功能:關閉當前翻開文件fd,假設出錯則退出系統(tǒng)。Unlink函數(shù)語法:boolUnlink(char*name)參數(shù):name:文件名功能:刪除文件。OpenSocket函數(shù)語法:intOpenSocket參數(shù):無功能:申請一個socket。CloseSocket函數(shù)語法:voidCloseSocket(intsockID)參數(shù):sockID:socket標識功能:釋放一個socket。AssignNameToSocket函數(shù)語法:voidAssignNameToSocket(char*socketName,intsockID)參數(shù):socketName:socket文件名;sockID:socket標識功能:將一個文件名和一個socket標識聯(lián)系起來,于是將一個SOCKET文件同一個Nachos進程連接起來,使宿主機上該Nachos進程成為一個網(wǎng)絡節(jié)點。DeAssignNameToSocket函數(shù)語法:voidDeAssignNameToSocket(char*socketName)參數(shù):socketName::socket文件名功能:將一個文件名刪除,實際上是和相應的socket標識脫離關系。PoolSocket函數(shù)語法:boolPoolSocket(intsockID)參數(shù):socketID:socket標識功能:查詢一個socket是否有內(nèi)容可以讀取。ReadFromSocket函數(shù)語法:voidReadFromSocket(intsockID,char*buffer,intpacketSize)參數(shù):socketID:socket標識;buffer:讀取內(nèi)容的暫存空間;packetSize:讀取數(shù)據(jù)包的大小功能:從一個socket標識中讀取packetSize大小的數(shù)據(jù)包,放在buffer緩沖中。SendToSocket函數(shù)語法:voidSendToSocket(intsockID,char*buffer,intpacketSize,char*toName)參數(shù):socketID:socket標識;buffer:發(fā)送內(nèi)容的暫存空間;packetSize:發(fā)送數(shù)據(jù)包的大小;toName:要接收數(shù)據(jù)包的Nachos虛擬機模擬網(wǎng)絡文件的文件名功能:向socket標識中發(fā)送packetSize大小的數(shù)據(jù)包。CallOnUserAbort函數(shù)語法:voidCallOnUserAbort(VoidNoArgFunctionPtrfunc)參數(shù):func:函數(shù)指針功能:設定一個函數(shù),在用戶強制退出系統(tǒng)時調(diào)用。Delay函數(shù)語法:voidDelay(intseconds)參數(shù):seconds:需要延遲的秒數(shù)功能:系統(tǒng)延遲肯定的時間。Abort函數(shù)語法:voidAbort參數(shù):無功能:退出系統(tǒng)(非正常退出)。Exit函數(shù)語法:voidExit(intexitCode)參數(shù):exitCod:向系統(tǒng)的返回值功能:退出系統(tǒng)。RandomInit函數(shù)語法:voidRandomInit(unsignedseed)參數(shù):seed:隨機數(shù)產(chǎn)生魔數(shù)功能:初始化隨機數(shù)發(fā)生器。Random函數(shù)語法:intRandomInit參數(shù):無功能:產(chǎn)生一個隨機整數(shù)。AllocBoundedArray函數(shù)語法:char*AllocBoundedArray(intsize)參數(shù):size:需要申請的空間大小功能:申請一個受保護的存儲空間。DeallocBoundedArray函數(shù)語法:voidDeallocBoundedArray(char*ptr,intsize)參數(shù):ptr:要釋放空間的指針;size:申請的空間大小功能:將受保護的存儲空間釋放。中斷處理模塊實現(xiàn)機制分析本模塊主要在文件interrupt.ccinterrupt.h中實現(xiàn)。中斷模塊的主要作用是模擬底層的中斷機制。可以通過該模擬機制來啟動和制止中斷(SetLevel);該中斷機制模擬了Nachos系統(tǒng)需要處理的全部的中斷,包括時鐘中斷、磁盤中斷、終端讀/終端寫中斷以及網(wǎng)絡接收/網(wǎng)絡發(fā)送中斷。了實現(xiàn)簡潔和便于統(tǒng)計各種活動所占用的時間起見,Nachos規(guī)定系統(tǒng)時間在以下三種狀況下前進:執(zhí)行用戶態(tài)指令執(zhí)行用戶態(tài)指令,時鐘前進是顯而易見的。我們認為,Nachos執(zhí)行每條指令所需時間是固定的,為一個時鐘單位(Tick)。重翻開中斷的時候,加上一個中斷處理所需時間的平均值。就緒隊列中沒有進程Idle時間,以免不必要的等待。當前面兩種狀況需要時鐘前進時,調(diào)用OneTick方法。OneTick方法將系統(tǒng)態(tài)和用戶態(tài)的時間分開進展處理,這是由于用戶態(tài)的時間計算是依據(jù)用戶指令為單位的;而在系統(tǒng)態(tài),沒為一個固定值,假設為一條用戶指令執(zhí)行時間的10倍。雖然Nachos模擬了中斷的發(fā)生,但是到底不能與實際硬件一樣,中斷發(fā)生的時機可以是任意的。比方當系統(tǒng)中沒有就緒進程時,時鐘直接跳到未處理中斷隊列的第一項的時間。Idel斷發(fā)生。由于中斷發(fā)生的時機不是完全隨機的,所以在Nachos系統(tǒng)中運行的程序,不正確的同步程序也可能正常運行,我們在此需要親熱留意。Nachos線程運行有三種狀態(tài):Idle狀態(tài)系統(tǒng)CPU處于空閑狀態(tài),沒有就緒線程可以運行。假設中斷等待隊列中有需要處理的中斷處理;否則認為系統(tǒng)完畢全部的工作,退出。系統(tǒng)態(tài)NachosNachosNachos系統(tǒng)程序本身的運行不是在該模擬內(nèi)存中,而是利用宿主機的存儲資源。這是Nachos操作系統(tǒng)同真正操作系統(tǒng)的重要區(qū)分。用戶態(tài)系統(tǒng)執(zhí)行用戶程序。當執(zhí)行用戶程序時,每條指令占用空間是Nachos的模擬內(nèi)存。Nachos需要處理的中斷種類主要有:TimerInt:時鐘中斷DiskInt:磁盤〔讀/寫〕中斷ConsoleWriteInt:終端寫中斷ConsoleReadInt:終端讀終端NetworkSentInt:網(wǎng)絡發(fā)送中斷NetworkRecvInt:網(wǎng)絡接收中斷Nachos虛擬機最重要的數(shù)據(jù)構(gòu)造之一,它記錄了當前虛擬機可以推測說,先發(fā)生的中斷將優(yōu)先得處處理。當時鐘前進或者系統(tǒng)處于Idle狀態(tài)時,Nachos會推斷中斷等待隊列中是否有要發(fā)生的進展處理。中斷處理程序是在某種特定的中斷發(fā)生時被調(diào)用的模擬硬件的根底上建立更高層次的抽象。比方現(xiàn)有的模擬網(wǎng)絡是有喪失幀的擔憂全網(wǎng)絡,在中斷處理程序中可以參加懇求重發(fā)機制來實現(xiàn)一個安全網(wǎng)絡。在該局部模塊中比較重要的兩個類是PendingInterrupt類和Interrupt類,具體實現(xiàn)可以參考interrupt.cc和interrupt.h文件。時鐘中斷模塊實現(xiàn)機制分析本模塊主要在文件timer.cctimer.h中實現(xiàn)。Nacho間會發(fā)生一次時鐘中斷。這是一個可選項,目前Nachos還沒有充分發(fā)揮時鐘中斷的作用,只有在Nachos指定線程隨機切換時啟動時鐘中斷,在每次的時鐘中斷處理的最終,參加了線程的切換。實際上,時鐘中斷在線程治理中的作用遠不止這些,時鐘中斷還可以用作:是由該線程是否的時間片是否已經(jīng)用完來打算;分時系統(tǒng)線程優(yōu)先級的計算;線程進入睡眠狀態(tài)時的時間計算,可以通過時鐘中斷機制來實現(xiàn)sleep系統(tǒng)調(diào)用,在時要喚醒它們。Nachos利用其模擬的中斷機制來模擬時鐘中斷TimerTicks〔100倍Tick的時間。在系統(tǒng)模擬時有一個缺陷,假設系統(tǒng)就緒進程不止一個的話,每次時鐘中斷都肯定會發(fā)生進程的切換〔可參考system.ccTimerInterruptHandler函數(shù)。所以運行Nachos時,假設以同樣的方式提交進程,系統(tǒng)的結(jié)果將是一樣的。這不符合操作系統(tǒng)的像真正的操作系統(tǒng)那樣通過時鐘中斷來計算時間等等選項(-rs)來實現(xiàn)。終端設備模塊實現(xiàn)機制分析本模塊主要在文件console.ccconsole.h中實現(xiàn)。該模塊的作用是模擬實現(xiàn)終端的輸入和輸出待中斷發(fā)生后才是真正完成了整個過程。Nachos的終端模擬借助了Console類中的兩個成員函數(shù)readFile和writeFile。這兩個文件分別模擬鍵盤輸入和屏幕顯示。當readFile為NULL時,Nachos以標準輸入作為終端輸入;當writeFile為NULL時,Nachos以標準輸出作為終端輸出。兩個成員函數(shù)ConsoleReadPoll以及ConsoleWriteDone的作用同Timer模擬中的TimerHandler成員函數(shù)。Nachos需要以肯定的時間間隔檢查終端是否有字符供讀?。还倘辉谶@些中斷處理程序中,還包括了一些統(tǒng)計的工作。系統(tǒng)的終端操作有嚴格的工作挨次,對讀終端來說:CheckCharAvail->GetChar->CheckCharAvail->GetChar->...系統(tǒng)通過定期的讀終端中斷來推斷終端是否有內(nèi)容供讀取,假設有則讀出;假設沒有,下一次讀終端中斷連續(xù)推斷。讀出的內(nèi)容將始終保存到GetChar將其讀走。對寫終端來說:PutChar->WriteDone->PutChar->WriteDone->...系統(tǒng)發(fā)出一個寫終端命令PutChar,模擬系統(tǒng)將直接向終端輸出文件寫入要寫的內(nèi)容,但是對Nachos來說,整個寫的過程并沒有完畢,只有當寫終端中斷來到后整個寫過程才算完畢。磁盤設備模塊實現(xiàn)機制分析本模塊主要在文件文件disk.cc和disk.h中實現(xiàn)。磁盤設備模擬了一個物理磁盤。Nachos用宿主機中的一個文件來模擬一個單面物理磁盤,該磁盤由道組成,每個道由扇區(qū)組成,而每個扇區(qū)的大小是固定的。和實際的物理磁盤一樣,Nachos以扇區(qū)為物理讀取/寫入的最小單位,每個扇區(qū)有唯一的扇區(qū)地址,具體的計算方法是:track*SectorsPerTrack+offset懇求,馬上返回,只有具體的磁盤終端到來的時候,整個過程才算完畢。Nachos對物理磁盤的模擬和對網(wǎng)絡、終端等的模擬格外類似,所承受的手段也很類似。這里就不具體表達,需要說明的有以下幾點:和其它的模擬不同的是,每次磁盤懇求到磁盤中斷發(fā)生之間的時間間隔是不一樣的,這取決于兩次磁盤訪問磁道和扇區(qū)的距離。為了和實際狀況更加接近,Nachos的物理磁盤設置有trackbuffer高速緩沖區(qū)。其中存放的是最終一次訪問的磁道中的全部內(nèi)容trackbuffer讀訪問,固然寫磁盤則多了向trackbuffer寫入的步驟。磁盤模擬文件開頭四個字節(jié)的值為MagicNumber,其作用是為了不讓Nachos磁盤模擬文件同其它文件混淆。時間。比方在有些文件系統(tǒng)的設計中,承受了多inode區(qū)。目的是使一個文件的inode同文件內(nèi)容所在的磁盤扇區(qū)比較接近,從而削減磁頭移動的時間。系統(tǒng)運行狀況統(tǒng)計在本節(jié)的最終局部,我們要說明的是對Nachos運行狀況進展統(tǒng)計的類Statistics。這并不屬于機器模擬的一局部,但是為了幫助讀者了解自己設計的操作系統(tǒng)的各種運行狀況。Statistics類中包含的各種統(tǒng)計項是格外有價值的。Statistics類中主要包括:Nachos運行的時間;NachosIdle態(tài)的時間;Nachos在系統(tǒng)態(tài)運行的時間;Nachos發(fā)出的讀磁盤懇求次數(shù);Nachos發(fā)出的寫磁盤懇求次數(shù);Nachos讀取的終端字符數(shù);Nachos輸出的字符數(shù);等等。Nachos中的進程/線程治理相關學問點回憶進程進程定義及特征進程狀態(tài)及轉(zhuǎn)換進程的組成:程序段、數(shù)據(jù)段、堆棧、進程掌握塊進程治理:創(chuàng)立、調(diào)度、堵塞、撤銷、掛起進程的同步與互斥線程線程概念線程與進程的聯(lián)系功能概述Nachos供給了一個根本的線程治理系統(tǒng)和一個同步互斥機制信號量的實現(xiàn)Nachos,可以一條指令一條指令地跟蹤線程序。這個簡化的線程治理與實際的進程治理的不同在于:不存在系統(tǒng)中全部線程的列表在一般的操作系統(tǒng)中,進程的數(shù)目總是有限的,但是Nachos中的線程數(shù)目可以是無限的〔固然,用戶進程的數(shù)目應當也是有限的。當虛擬機內(nèi)存以及虛擬內(nèi)存都耗盡時,就不能產(chǎn)生的用戶線程。能夠開多少線程完全由宿主機條件限制,理論上是無限的。線程的調(diào)度比較簡潔必需進展線程切換;當沒有啟動時鐘中斷的狀況下,Nachos使用非搶占式調(diào)度。沒有實現(xiàn)父子線程的關系可以說,全部的Nachos線程都是Nachos的一個子線程。但是Nachos線程之間的父子狀況對以后進一步進展系統(tǒng)擴大是不利的。具體模塊實現(xiàn)介紹工具模塊〔文件list.cclist.hutility.ccutility.h〕功能:定義了一個鏈表構(gòu)造及其操作線程啟動和調(diào)度模塊〔文件switch.sswitch.h〕.1功能概述在NachosNachos的線程切換借助于宿主機的正文切換,由于這局部內(nèi)容與機器親熱相關,而且直接同宿主機的存放器進展交道,所以這局部是用匯編來實現(xiàn)的。由于Nachos可以運行在多種機switch.s中針對不同的機器進展了不同的處理。假設需要將Nachos移植到其它機器上,就需要修改這局部的內(nèi)容。.2核心函數(shù)介紹ThreadRoot函數(shù)語法:ThreadRoot(intInitialPC,intInitialArg,intWhenDonePC,intStartupPC)參數(shù):InitialPC
指明生成線程的入口函數(shù)地址InitialArg 是該入口函數(shù)的參數(shù)StartupPC 是在運行該線程是需要作的一些初始化工作,比方開中斷WhenDonePC 是當該線程運行完畢時需要作的一些后續(xù)工作功能:Nachos中,除了main線程外,全部其它線程都是從ThreadRoot入口運行的。在Nachos的源代碼中,沒有任何一個函數(shù)和方法顯式地調(diào)用ThreadRoot函數(shù),ThreadRoot函數(shù)只有在線程切換時才被調(diào)用到。由ThreadRoot入口可以轉(zhuǎn)而運行線程所需要運行的函數(shù),從而到達生成線程的目的。SWITCH函數(shù)語法:voidSWITCH(Thread*t1,Thread*t2)參數(shù):t1 是原運行線程指針t2 是需要切換到的線程指針功能:完成線程切換線程定義模塊〔文件thread.ccthread.h〕.1功能概述定義了相當于線程掌握塊的Thread類,與PCB(ProcessControlBlock)有相像之處。Thread線程掌握類較PCB為簡潔的多,它沒有線程標識(pid)、實際用戶標識(uid)等和線程操作不是格外有聯(lián)系的局部,也沒有將PCB分成proc構(gòu)造和user構(gòu)造。這是由于一個NachosThread線程掌握類的實例都生成在宿主機而不是生成在虛擬機上。所以不存在實際操作系統(tǒng)中proc構(gòu)造常駐內(nèi)存,而user構(gòu)造可以存放在盤交換區(qū)上的狀況,將原有的兩個構(gòu)造合并是Nachos作的一種簡化。Nachos對線程的另一個簡化是每個線程棧段的大小是固定的,為4096-5個字(word)且是不能動態(tài)擴展的。所以Nachos中的系統(tǒng)線程中不能使用很大的??臻g,比方:voidfoo{intbuff[10000];...}可能會不能正常執(zhí)行,假設需要使用很大空間,可以在Nachos的運行堆中申請:voidfoo{int*buf=newint[10000];...}假設系統(tǒng)線程需要使用的??臻g大于規(guī)定??臻g的大小,可以修改StackSize宏定義。核心函數(shù)介紹Fork方法語法:voidFork(VoidFunctionPtrfunc,intarg)參數(shù):func:線程運行的函數(shù);arg:func函數(shù)的參數(shù)功能:線程初始化之后將線程設置成可運行的。StackAllocate方法語法:voidStackAllocate(VoidFunctionPtrfunc,intarg)參數(shù):func:線程運行的函數(shù);arg:func函數(shù)的參數(shù)功能:為一個線程申請??臻g,并設置好預備運行線程的條件。Yield方法語法:voidYield參數(shù):無功能:當前運行強制切換到另一個就緒線程運行Sleep方法語法:voidSleep參數(shù):無功能:線程由于某種緣由進入堵塞狀態(tài)等待一個大事的發(fā)生〔V操作、開鎖或者條件變量的設置〕。當這些條件得到滿足,該線程又可以恢復就緒狀態(tài)。線程調(diào)度算法模塊〔文件scheduler.ccscheduler.h〕.1功能概述該模塊的作用是進展線程的調(diào)度。在Nachos系統(tǒng)中,有一個線程就緒隊列,其中是全部Nachos中線程沒有優(yōu)先級,所以線程就緒隊列是沒有優(yōu)先級的。核心函數(shù)介紹Run方法語法:voidRun(Thread*nextThread)參數(shù):nextThread:需要切換運行的線程功能:當前運行強制切換到nextThread就緒線程運行Nachos主控模塊〔文件main.ccsystem.ccsystem.h〕.1功能概述該模塊是整個NachosNachos不同功能的初始化設置。選項的設置如下所示:一般選項:-d:顯示特定的調(diào)試信息-rs:使得線程可以隨機切換-z:打印版權(quán)信息和用戶進程有關的選項:-s:使用戶進程進入單步調(diào)試模式-x:執(zhí)行一個用戶程序-c:測試終端輸入輸出和文件系統(tǒng)有關的選項:-f:格式化模擬磁盤-cp:將一個文件從宿主機拷貝到Nachos模擬磁盤上-p:將Nachos磁盤上的文件顯示出來-r:將一個文件從Nachos模擬磁盤上刪除-l:列出Nachos模擬磁盤上的文件-D:打印出Nachos文件系統(tǒng)的內(nèi)容-t:測試Nachos文件系統(tǒng)的效率和網(wǎng)絡有關的選項:-n:設置網(wǎng)絡的牢靠度〔在0-1之間的一個小數(shù)〕-m:設置自己的HostID-o:執(zhí)行網(wǎng)絡測試程序核心函數(shù)介紹mainintmain(intargc,char**argv){對命令行參數(shù)進展處理,并且初始化相應的功能currentThread->Finish;return(0);//此行執(zhí)行不到。}在main函數(shù)的最終,是currentThread->Finish語句。為什么不直接退出呢?這是由于Nachos是在宿主機上運行的一個一般的進程,當main函數(shù)退出時,整個占用的空間要釋放,Nachos中,mainmain函數(shù)作為Nachos中一個特別線程進展處理,該線程完畢只是作為一個線程的完畢,系統(tǒng)并不會退出。Nachos中的文件系統(tǒng)治理相關學問點回憶文件文件構(gòu)造:規(guī)律構(gòu)造、物理構(gòu)造文件訪問方式:挨次訪問、隨機訪問文件類型、文件屬性文件操作名目名目構(gòu)造:單級名目、兩級名目、多級名目路徑名名目項工作名目功能概述Nachos是在其模擬磁盤上實現(xiàn)的文件系統(tǒng)。它包括一般文件系統(tǒng)的全部的特性,可以:依據(jù)用戶的要求創(chuàng)立文件和刪除文件依據(jù)用戶要求對文件進展讀寫操作對存放文件的存儲空間進展治理,為各個文件自動安排必要的物理存儲空間,并為文件的規(guī)律構(gòu)造以及它在存儲空間中的物理位置建立映照關系。用戶只需要通過文件名就可以對文件進展存放,文件的物理組織對用戶是透亮的。相比實際的操作系統(tǒng),存在的缺乏:現(xiàn)有的文件系統(tǒng)沒有實現(xiàn)互斥訪問,所以每次只允許一個線程訪問文件系統(tǒng)。的文件數(shù)是有限的。文件索引構(gòu)造承受的都是直接索引,所以Nachos的最大文件長度不能大于4K必需在文件生成時創(chuàng)立索引表。所以Nachos在創(chuàng)立一個文件時,必需給出文件的大?。欢耶斘募珊?,就不能轉(zhuǎn)變文件的大小。目前該文件系統(tǒng)沒有Cache機制保證正確。具體模塊實現(xiàn)介紹同步磁盤〔文件synchdisk.ccsynchdisk.h〕功能概述和其它設備一樣,Nachos當從磁盤讀出或?qū)懭霐?shù)據(jù)完畢后,發(fā)出磁盤中斷,說明一次磁盤訪問真正完畢。Nachos是一個多線程的系統(tǒng),假設多個線程同時對磁盤進展訪問,會引起系統(tǒng)的混亂。所以必需作出這樣的限制:同時只能有一個線程訪問磁盤當發(fā)出磁盤訪問懇求后,必需等待訪問的真正完畢。這兩個限制就是實現(xiàn)同步磁盤的目的。此模塊定義了SynchDisk類,模擬同步磁盤的實現(xiàn)。位圖模塊〔文件bitmap.ccbitmap.h〕.1功能概述在NachosNachos的物理磁盤是以扇區(qū)為訪問單位的,將扇區(qū)從0開頭編號。所謂位圖治理,就是將這些編號填入一張表,表中為0的地方說明該扇區(qū)沒有被占用,而非0位置說明該扇區(qū)已被占用。此模塊定義了BitMap類來模擬位圖治理。文件系統(tǒng)模塊〔文件filesys.ccfilesys.h〕.1功能概述此模塊模擬了創(chuàng)立文件、刪除文件、翻開文件操作。在Nachos中,實現(xiàn)了兩套文件系FILESYS_STUB,它是建立在UNIX文件系統(tǒng)之上的,而不使用Nachos的模擬磁盤,它主要用于先實現(xiàn)了用戶程序和虛擬內(nèi)存,然后再NachosNachos的虛擬磁盤上的。當整個系統(tǒng)完成之后,只能使用其次套文件系統(tǒng)的實現(xiàn)。.2核心函數(shù)介紹Create方法語法:boolCreate(char*name,intinitialSize)參數(shù):name:需要創(chuàng)立的文件名initialSize:需要創(chuàng)立的文件的初始大小功能:在當前的文件系統(tǒng)中創(chuàng)立一個固定大小的文件Open方法語法:OpenFile*Open(char*name)參數(shù):name:需要翻開的文件名功能:在當前的文件系統(tǒng)中翻開一個已有的文件Remove方法語法:boolRemove(char*name)參數(shù):name:需要刪除的文件名功能:在當前的文件系統(tǒng)中刪除一個已有的文件文件頭模塊〔文件filehdr.ccfilehdr.h〕.1功能概述文件頭實際上就是UNIX文件系統(tǒng)中所說的inode構(gòu)造,它給出一個文件除了文件名之外〔文件名屬性在名目中給出是文件的規(guī)律地址和實際的物理地址的對應關系。通過文件頭可以獵取文件的全部信息。Nachos的文件頭可以存放在磁盤上,也可以存放在宿主機內(nèi)存中,在磁盤上存放時一個文件頭占用一個獨立的扇區(qū)。此模塊定義了文件頭類,具體實現(xiàn)請查看源代碼。翻開文件構(gòu)造〔文件openfile.ccopenfile.h〕功能概述文件操作的方法同UNIX操作系統(tǒng)中的系統(tǒng)調(diào)用。核心函數(shù)介紹針對FileSystem構(gòu)造中的兩套實現(xiàn),這里給出的函數(shù)皆屬于建立立在Nachos上的一套實現(xiàn)。Read語法:intRead(char*into,intnumBytes)參數(shù):into:讀出內(nèi)容存放的緩沖numBytes:需要讀出的字節(jié)數(shù)功能:從文件中讀出numByte到into緩沖Write語法:intWrite(char*from,intnumBytes)參數(shù):from:存放需寫入內(nèi)容的緩沖numBytes:需寫入的字節(jié)數(shù)功能:將from緩沖中寫入numBytes個字節(jié)到文件中Seek語法:voidSeek(intposition)參數(shù):position:要到達的文件位置功能:從文件頭開頭,移動文件位置指針至position處ReadAt方法語法:intReadAt(char*into,intnumBytes,intposition)參數(shù):into:讀出內(nèi)容存放的緩沖numBytes:需要讀出的字節(jié)數(shù)position:需讀出內(nèi)容的開頭位置功能:將從position開頭的numBytes讀入into緩沖WriteAt方法語法:intWriteAt(char*from,intnumBytes,intposition)參數(shù):from:存放需寫入內(nèi)容的緩沖numBytes:需寫入的字節(jié)數(shù)position:需寫入內(nèi)容的開頭位置功能:將from緩沖中的numberBytes字節(jié)從position開頭的位置寫入文件注:實際上,對文件的一次寫操作應當是原子操作,否則會消滅兩個線程穿插寫的狀況。比方A線程和B線程都需要對扇區(qū)a和bA〔寫a〕B〔寫a〕B〔寫b〕A〔寫b〕這樣扇區(qū)b中的內(nèi)容是A線程寫的,而扇區(qū)a的內(nèi)容是B線程寫的。這樣,數(shù)據(jù)的全都性不能得到保證。但是目前Nachos沒有對此進展處理。名目模塊〔文件directory.ccdirectory.h〕功能概述每個名目都對應一個名目文件,名目文件由名目項組成,名目項使得字符形式的文件名與實際相關操作,具體實現(xiàn)請參考源代碼。Nachos中的存儲系統(tǒng)治理相關學問點回憶連續(xù)安排存儲治理方式安排方式:單一連續(xù)安排、固定分區(qū)、動態(tài)分區(qū)分區(qū)安排數(shù)據(jù)構(gòu)造、分區(qū)安排算法分頁存儲治理方式頁表、地址變換兩級頁表、多級頁表反置頁表、快表分段存儲治理方式段表、地址變換段頁式存儲治理方式虛擬存儲器虛擬存儲器定義及特征缺頁中斷頁面安排算法、頁面置換算法功能概述Nachos目前實現(xiàn)的存儲系統(tǒng),一次只能執(zhí)行一個用戶程序,且可執(zhí)行程序的大小必需小于物理內(nèi)存,否則無法正常執(zhí)行。要到達對現(xiàn)代操作系統(tǒng)中存儲系統(tǒng)的支持多道程序、程序可用空間不受限制的目標還是有差距的,有待改進。具體模塊實現(xiàn)介紹相關文件介紹machine.h:包含了內(nèi)存的相關定義machine.cc:包含了對內(nèi)存和頁表的初始化translate.h:定義了頁表構(gòu)造translate.cc:包含了地址轉(zhuǎn)換的實現(xiàn)以及讀、寫內(nèi)存的操作address.cc:包含了用戶程序頁表的操作函數(shù)介紹ReadMem函數(shù)語法:boolReadMem(intaddr,intsize,int*value)參數(shù):addr:用戶程序規(guī)律地址;size:需要讀出的字節(jié)數(shù);value:讀出的內(nèi)容暫存地功能:從用戶規(guī)律地址讀出size個字節(jié),轉(zhuǎn)換成相應的類型,存放在value所指向的空間WriteMem函數(shù)語法:boolWriteMem(intaddr,intsize,intvalue)參數(shù):addr:用戶程序規(guī)律地址;size:需要寫入的字節(jié)數(shù);value:需要寫入的內(nèi)容功能:將value表示的數(shù)值依據(jù)size大小轉(zhuǎn)換成相應的機器類型存放在add用戶規(guī)律地址Translate函數(shù)語法:ExceptionTranslate(intvirtAddr,int*physAddr,intsize,boolwriting)參數(shù):virtAddr:用戶程序的規(guī)律地址physAddr:轉(zhuǎn)換后的實際地址size:數(shù)據(jù)類型的大小writing:讀/寫內(nèi)存標志功能:將用戶的規(guī)律地址轉(zhuǎn)換成實際的物理地址,同時需要檢查對齊。Nachos中的網(wǎng)絡系統(tǒng)治理相關學問點回憶網(wǎng)絡操作系統(tǒng)ISO七層協(xié)議Socket網(wǎng)絡端口號郵局協(xié)議現(xiàn)有功能分析Nachos網(wǎng)絡系統(tǒng)治理模塊模擬了和一個Nachos有如下特點:數(shù)據(jù)報發(fā)送是有序的;是正確的,所以并不需要校驗;網(wǎng)絡之間的連接是全互連的。每個NachosNachos啟動時在命令行中給出。Nachos實現(xiàn)時用一個SOCKET文件模擬了和自己相連接的網(wǎng)絡局部。該文件名的格式SOCKET_網(wǎng)絡地址。一個網(wǎng)絡數(shù)據(jù)包由數(shù)據(jù)包頭和數(shù)據(jù)局部兩局部組成者的地址信息和數(shù)據(jù)報文內(nèi)容的長度。每個數(shù)據(jù)包的長度是固定的,為64個字節(jié)。Nachos在根本物理網(wǎng)絡的根底上建立了一個郵局協(xié)議。在每個Nachos模擬機上,有一下來分發(fā)給特定的郵箱;郵局對象同時還負責將本機的郵件發(fā)送給其它Nachos模擬機。由于Nachos是一個多線程的系統(tǒng),每個線程都可以獨立地利用網(wǎng)絡,這些線程在使用網(wǎng)絡的時候如何不相互干擾呢?這里實際上借用了網(wǎng)絡端口號的概念,每個線程需要進展網(wǎng)絡通個線程。這里的網(wǎng)絡端口就是郵箱。具體模塊實現(xiàn)介紹物理網(wǎng)絡的模擬Nachos的物理網(wǎng)絡主要由 machine名目下的network.cc和network.h文件中的PacketHeader類和Network類進展模擬。和機器模擬局部終端模擬實現(xiàn)相類似,兩個內(nèi)部函數(shù)NetworkReadPoll和NetworkSendDone作為網(wǎng)絡讀寫的中斷處理函數(shù)這兩個內(nèi)部函數(shù)通過CheckPktAvail和SendDone兩個內(nèi)部方法調(diào)用真正的中斷處理函數(shù)這樣Nachos可以以肯定的時間間隔檢查是否存在發(fā)給自己的數(shù)據(jù)包固然在這些網(wǎng)絡中斷處理程序中還包括了一些統(tǒng)計的工作。系統(tǒng)的網(wǎng)絡讀寫操作同樣有嚴格的工作挨次,對網(wǎng)絡讀來說:CheckPktAvail->Receive->CheckPktAvail->Receive->CheckPktAvail->Receive->...系統(tǒng)通過定期的網(wǎng)絡讀中斷來推斷是否有發(fā)給自己的數(shù)據(jù)包下一次讀網(wǎng)絡中斷連續(xù)推斷。讀出的內(nèi)容將始終保存到Receive將其讀走。對寫網(wǎng)絡來說:Send->SendDone->Send->SendDone->Send->SendDone->Send->SendDone->...系統(tǒng)發(fā)出一個向網(wǎng)絡發(fā)送數(shù)據(jù)包的指令Send,模擬系統(tǒng)將直接向和目標機相連接的網(wǎng)絡模擬文件發(fā)送數(shù)據(jù)包,但是對Nachos來說,整個寫的過程并沒有完畢,只有當寫網(wǎng)絡中斷來到后整個寫過程才算完畢。其中核心函數(shù)Send的主要功能就是向一個目標地址發(fā)送一個數(shù)據(jù)包voidSend(PacketHeaderhdr,char*data)。其中參數(shù)hdr表示發(fā)送數(shù)據(jù)包頭,data表示發(fā)送數(shù)據(jù)包數(shù)據(jù)內(nèi)容。Send函數(shù)發(fā)送一個數(shù)據(jù)報,Send函數(shù)到網(wǎng)絡發(fā)送中斷到達之前,與接收節(jié)點相連的網(wǎng)絡Socket文件中已經(jīng)有內(nèi)容,接收節(jié)點完全有可能探測到數(shù)據(jù)報內(nèi)容的存在并且將內(nèi)容讀走和接收同步問題的隱患。需要說明為什么用socket機制來模擬網(wǎng)絡,而不選用一般的文件?我們知道,通過socket和文件連接,這樣的文件擁有這樣的性質(zhì):已經(jīng)讀走的內(nèi)容不行再現(xiàn)。于是對于這樣到達同樣的效果。郵局協(xié)議的模擬networkpost.ccpost.h文件中,Nachos實現(xiàn)了在根本物理網(wǎng)絡根底上的模擬郵局協(xié)議,而nettest.cc文件對該協(xié)議的運作做了一個簡潔測試。的收發(fā)地址,以及數(shù)據(jù)報的長度。實現(xiàn)PostOffice協(xié)議時,網(wǎng)絡數(shù)據(jù)報又有兩個局部組成:郵件的頭部和郵件的內(nèi)容。而具體的郵件頭部構(gòu)造和郵件構(gòu)造在類MailHeaderMail中實現(xiàn)。Mail中實現(xiàn)。中斷到來時,整個處理完畢。在郵局對象生成方法中,生成了一個Demon線程,特地同步監(jiān)測傳給自己的郵件,分析郵件頭部并將郵件放入特定的郵箱中。郵局的構(gòu)造主要在類PostOffice中實現(xiàn)。其中比較核心的兩個函數(shù)功能說明如下:PostalDelivery函數(shù)語法:voidPostalDelivery參數(shù):無功能:監(jiān)測網(wǎng)絡上是否有郵件到來,并將到來的郵件分發(fā)給各個郵箱。這就是郵局生成的demon線程執(zhí)行的程序。Send方法語法:voidSend(PacketHeaderpktHdr,MailHeadermailHdr,char*data)參數(shù):無功能:將郵件發(fā)出去,接收郵件的地址由pktHdr中的接收地址和mailHdr中的接收郵箱打算。Nachos平臺上機實踐工程設置1:Nachos的線程治理模塊升級上機實踐具體要求【背景描述】在Nachos平臺中,線程是作業(yè)調(diào)度的根本單位,除了線程和進程的概念差異之外,可Nachos平臺所使用的是非搶占式調(diào)度,線程一旦占用CPU,就會始終運行到完畢或者被堵塞〔等待I/O大事Nachos平臺中的線程數(shù)據(jù)構(gòu)造定義格外簡潔,并無用戶ID、線程ID等數(shù)據(jù)成員,也就是說,無法基于線程的ID來實現(xiàn)通信、同步互斥等機制。Nachos平臺中并無全局性的線程治理機制,并未限制線程的數(shù)目,也無法了解有多少線程存在?!緦嵺`要求】本實習工程期望通過修改Nachos系統(tǒng)平臺的底層源代碼來實現(xiàn)以下目標:修改擴大Nachos中線程調(diào)度的機制,將其轉(zhuǎn)變?yōu)樽裱皶r間片輪轉(zhuǎn)”的可剝奪式調(diào)度。在時鐘中斷發(fā)生時,檢查占用CPU的線程是否用完時間片,假設用完就將其放入“就緒隊列”中,調(diào)度“就緒隊列”中的第一個線程占用CPUNachos的線程治理模塊增加通過“公共信箱”進展通信的機制,由Nachos系統(tǒng)核心維護一個預定大小的Mailbo4128個用戶線程之間通過這個“公共信箱”進展通信?!咎峤恍问健酷槍σ陨蠈嵺`要求,實踐小組必需提交符合以下標準的實踐成果。工程實踐文檔一份Word或PDF格式的文檔,在文檔中說明以下內(nèi)容:實踐小組的人員組成、各自的分工;對實踐要求的滿足程度,本工程有四項要求,請注明共滿足了幾項。對實踐過程的具體說明,針對已經(jīng)滿足的實踐要求,承受了何種算法或思想,Nachos平臺的哪些代碼進展了什么樣的修改。修改后的Nachos平臺源碼備份本文檔
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030年中國茶粉產(chǎn)品市場需求狀況及投發(fā)展策略分析報告
- 2025-2030年中國芥花油市場趨勢研究及投資前景預測報告
- 2025-2030年中國聚乳酸纖維行業(yè)發(fā)展狀況及投資前景規(guī)劃研究報告
- 2025年物業(yè)招投標合同風險防控及管理要點指南3篇
- 2025-2030年中國糖果、巧克力行業(yè)市場競爭格局及未來投資趨勢分析報告
- 二零二五年度房產(chǎn)交易全程保障合同4篇
- 2025-2030年中國泡沫塑科制造行業(yè)未來發(fā)展趨勢及投資前景規(guī)劃研究報告
- 二零二五年度旅行社與旅游電商平臺合作推廣合同4篇
- 二零二五年度大數(shù)據(jù)分析臨時員工聘用合同4篇
- 二零二五年度管道安裝及安全檢測服務合同3篇
- 2024年安徽省公務員錄用考試《行測》真題及答案解析
- 山西省太原市重點中學2025屆物理高一第一學期期末統(tǒng)考試題含解析
- 充電樁項目運營方案
- 2024年農(nóng)民職業(yè)農(nóng)業(yè)素質(zhì)技能考試題庫(附含答案)
- 高考對聯(lián)題(對聯(lián)知識、高考真題及答案、對應練習題)
- 新版《鐵道概論》考試復習試題庫(含答案)
- 【律師承辦案件費用清單】(計時收費)模板
- 高中物理競賽真題分類匯編 4 光學 (學生版+解析版50題)
- Unit1FestivalsandCelebrations詞匯清單高中英語人教版
- 2024年上海市中考語文試題卷(含答案)
- 幼兒園美術(shù)教育研究策略國內(nèi)外
評論
0/150
提交評論