nachos系統管理與調度分析課程設計說明書_第1頁
nachos系統管理與調度分析課程設計說明書_第2頁
nachos系統管理與調度分析課程設計說明書_第3頁
nachos系統管理與調度分析課程設計說明書_第4頁
nachos系統管理與調度分析課程設計說明書_第5頁
已閱讀5頁,還剩16頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

精選優質文檔-----傾情為你奉上精選優質文檔-----傾情為你奉上專心---專注---專業專心---專注---專業精選優質文檔-----傾情為你奉上專心---專注---專業操作系統課程設計基于NachOS的課程設計操作系統課程設計基于NachOS的課程設計目錄TOC\o"1-3"\h\u一、背景知識1、1Nachos的介紹Nachos的全稱是“NotAnotherCompletelyHeuristicOperatingSystem”,是一個可修改和跟蹤的操作系統教學軟件。它給出了一個支持多線程和虛擬存儲的操作系統骨架,可讓學生在較短的時間內對操作系統中的基本原理和核心算法有一個全面和完整的了解。NachOS提供了可重復的調試環境和模擬操作系統及底層硬件。目的是為學習者展示真實的操作系統運行時的環境,這個簡單的操作系統軟件可以讓學習者在較短的時間內理解并能夠用自己的想法來完善它。免費的開源開發包可通過網絡下載,通常包括以下幾部分:NachOS概述簡單可運行的操作系統代碼模擬器——個人電腦或工作站任務樣本:任務說明和現代操作系統涉及的所有項,包括線程和并發,多道程序,系統調用,虛擬內存管理,文件系統管理,網絡協議,遠程過程調用和分布式系統。C++編程索引(NachOS是C++子集編程,簡單易學。這個索引將對C語言程序員有所幫助)Nachos操作系統本身只提供了一套框架,很多地方的實現都需要我們自己來完善,因此我們可以通過修改其源代碼,來豐富和增強Nachos操作系統的功能.更可以在完善這些功能的同時,了解操作系統的內部運行機制.Nachos模擬了MIPSR2/3000的指令集、主存、中斷系統、網絡以及磁盤系統等操作系統所必須的硬件系統。用軟件模擬硬件的可靠性比真實硬件高得多,不會因為硬件故障而導致系統出錯,便于調試。虛擬機可以在運行時報告詳盡的出錯信息,更重要的是采用虛擬機使Nachos的移植變得非常容易,在不同機器上移植Nachos,只需對虛擬機部分作移植即可。MIPSR2/3000的指令集的優勢:RISC指令集,指令書目少,Nachos模擬其中的63條。編譯器:GCC可直接將C/C++源程序編譯成該指令集的目標代碼,而不必重寫編譯器。Nachos是一個在宿主機上運行的進程,采用雙CPU,即一個宿主CPU,一個虛擬機CPU,不確定性是操作系統所必須具有的特征,而Nachos采用隨機因子模擬真實操作系統的不確定性,使系統運行更加真實。Nachos是一個可擴展的操作系統,可發揮自己的創造性進行擴展。Nachos限制:只有一級索引結構限制了系統中最大文件的大小。Nachos可以用面向對象的思想實現,面向對象的方法能清楚的描述操作系統的各個部分的接口,但是又沒有全面的運用到面向對象的性質,例如繼承性、多態性,這使得代碼更易讀和理解。Nachos分五個功能模塊:機器模擬、線程管理、文件系統管理、用戶程序和虛擬存儲以及網絡系統。由于Nachos開發沒有針對windows平臺的移植,Nachos需要在虛擬機上實現,所以需要首先實現創建虛擬機,創建linux虛擬機來實現nachos代碼的編譯運行。Nachos運行時更像一個進程,但是它是完全按照操作系統思想開發的操作系統內核,具有完整的操作系統結構。Nachos系統結構,作為一個簡單的系統編程,網絡協議和文件系統只需夠用即可,這里主要設計線程管理和虛擬內存,在設計時虛擬內存可以暫時不要考慮。而其他的則可以由現有系統提供,為此,線程管理為主要任務。1、2Nachos的目錄結構copyright文件Nachos的版權信息readme文件Nachos的readme信息nachos.ps文件Nachos的介紹文檔(Postscript格式)c++example目錄有關C++介紹和實例doc目錄Nachos各個部分介紹和原有的作業要求code目錄Nachos各個部分的源代碼最主要的Nachos的源代碼部分MakefileMakefile.depNachos的Makefile文件,當Nachos需要移植到其它系統時,可以修改Makefile.dep中的HOST參數machine目錄Nachos虛擬機模擬部分源代碼threads目錄Nachos線程管理部分源代碼filesys目錄Nachos文件系統管理部分源代碼userprog目錄Nachos用戶程序部分源代碼network目錄Nachos網絡管理部分源代碼vm目錄Nachos虛擬內存管理部分源代碼test目錄一些測試用應用程序bin目錄包含有用戶程序目標碼變換的程序1、3線程基礎知識線程基本概念:是進程中的一個實體,是被系統獨立調度和分派的基本單位,線程自己不擁有系統資源,只擁有一點在運行中必不可少的資源,但它可與同屬一個進程的其它線程共享進程所擁有的全部資源。一個線程可以創建和撤消另一個線程,同一進程中的多個線程之間可以并發執行。由于線程之間的相互制約,致使線程在運行中呈現出間斷性。線程狀態:就緒、阻塞和運行三種基本狀態。

線程是程序中一個單一的順序控制流程.在單個程序中同時運行多個線程完成不同的工作,稱為多線程.

線程和進程的區別在于,子進程和父進程有不同的代碼和數據空間,而多個線程則共享數據空間,每個線程有自己的執行堆棧和程序計數器為其執行上下文.多線程主要是為了節約CPU時間,發揮利用,根據具體情況而定.線程的運行中需要使用計算機的內存資源和CPU線程的周期新建就緒運行阻塞死亡線程調度與優先級有線程進入了就緒狀態,需要有線程調度程序來決定何時執行,根據優先級來調度.線程組

每個線程都是一個線程組的一個成員,線程組把多個線程集成一個對象,通過線程組可以同時對其中的多個線程進行操作.在生成線程時必須將線程放在指定的線程組,也可以放在缺省的線程組中,缺省的就是生成該線程的線程所在的線程組.一旦一個線程加入了某個線程組,不能被移出這個組.進程和線程的關系在引入線程機制后,進程不再是單一的動態實體,而是由兩部分組成:各線程活動的環境,包括:統一的地址控件、全局變量、打開文件和計時器等。若干個線程,它們是進程中的活動部分,也是處理機的調度單位,而進程不再是處理機的最小調度單位。一個進程中的所有線程在同一地址空間中活動,共享該地址空間中的全局變量,共享打開文件和計時器等。它們總是相互協作,各自承擔一個作業中的某個部分。與傳統的進程相似,線程具有狀態的變化。通常,這些狀態是:運行、阻塞、就緒或終止。二、設計要求和目的Nachos的運宿主機通過軟件模擬了各種硬件系統,包括中斷系統、存儲系統、磁盤文件行必須借助于、網絡等。它的運行是可以跟蹤的,因此,我們可以一步一步的觀察操作系統是如何運行的.對于線程的管理,主要涉及到線程的擴充、nachos線程的調度機制和線程優先級。2、1Nachos的線程管理模塊Nachos平臺所使用的是非搶占式調度,線程一旦占用CPU,就會一直運行到結束或者被阻塞(等待I/O事件);Nachos平臺中的線程數據結構定義非常簡單,并無用戶ID、線程ID等數據成員,也就是說,無法基于線程的ID來實現通信、同步互斥等機制。Nachos平臺中并無全局性的線程管理機制,并未限制線程的數目,也無法了解有多少線程存在。通過修改Nachos系統平臺的底層源代碼來實現以下目標:1.擴充線程數據結構。增加“用戶ID、線程ID”兩個數據成員,同時在Nachos現有的線程管理機制中增加對這兩個數據成員的維護機制。2.擴展現有的線程狀態。Nachos平臺中的線程狀態只有“初啟態”、“就緒態”、“阻塞態”、“運行態”四種情況。請增加“掛起(suspending)”這個狀態,所謂“掛起”是指當前的線程映象保存在磁盤文件而不是內存中。“掛起”狀態是未來實現“虛擬內存管理”的重要基礎。3.修改線程調度算法。將Nachos平臺的線程管理機制調整為“搶占式”。具體可選擇“時間片輪轉”、“優先級調度”、“多級隊列”等不同的調度算法。4.增加全局性的線程管理機制。擴充Nachos平臺的現有操作命令,例如可以增加一個名為“ThreadView”的命令,執行該命令,可以在屏幕上顯示目前所有存在的線程信息,包括“用戶ID“、“線程ID”、“當前狀態”等。5.實現一個同步與互斥的例子。在完成以上修改后,可編寫一個實例程序,來實現某個“同步-互斥”經典問題的正確解法。例如可選擇“哲學家就餐”問題,實例程序會創建5個哲學家線程,這些線程擁有同樣的用戶ID,可以遵循“信號量”機制來正確的運行。也可以選擇“生產者-消費者”問題等其他經典IPC問題。2、2Nachos的線程線程調度算法分析Nachos平臺所使用的是非搶占式調度,線程一旦占用CPU,就會一直運行到結束或者被阻塞(等待I/O事件);Nachos平臺中的線程數據結構定義非常簡單,并無用戶ID、線程ID等數據成員,也就是說,無法基于線程的ID來實現通信、同步互斥等機制。Nachos平臺中并無全局性的線程管理機制,并未限制線程的數目,也無法了解有多少線程存在。Sysdep模塊實現機制分析:sysdep.ccsysdep.h屏蔽OS間的系統調用或函數調用在形式和內容上可能有的細微差別中斷處理模塊實現機制分析:interrupt.cc.h模擬底層中斷機制——時鐘中斷、磁盤中斷、終端讀/寫中斷、網絡接收/發送中斷時鐘中斷模塊實現機制分析:timer.cc.h模擬時鐘中斷,在nachos指定線程隨機切換時啟動時鐘中斷,在每次的時鐘中斷處理的最后加入線程的切換終端設備模塊實現機制分析:console.cc.h模擬終端輸入和輸出,鍵盤的輸入和顯示輸出,異步,當發出終端的輸入輸出請求后系統即返回,需要等待中斷發生后才是真正完成了整個過程。磁盤設備模塊實現機制分析:disk.cc.h模擬物理磁盤,nachos用宿主機種的一個文件模擬單面物理磁盤,異步工具模塊:list.cc.hutility.cc.h定義鏈表結構及操作線程啟動和調度模塊:switch.sswitch.h線程定義模塊:thread.cc.h線程調度算法模塊:scheduler.cc.hnachos主控模塊:main.ccsystem.ccsystem.hnachos系統入口,分析nachos命令行參數,根據不同的選項進行不同功能的初始化設置同步磁盤:文件synchdisk.cc.h文件系統模塊:filesys.cc.h模擬創建文件、刪除文件、打開文件操作文件頭模塊:文件filehdr.cc.h打開文件結構:文件openfile.cc.h目錄模塊:directory.cc.hmachine.h: 包含了內存的相關定義machine.cc: 包含了對內存和頁表的初始化translate.h: 定義了頁表結構translate.cc: 包含了地址轉換的實現以及讀、寫內存的操作address.cc: 包含了用戶程序頁表的操作2、3編程語言選擇對比Java編程的優勢:1.簡單,面向對象,穩定,跨平臺,多線程,動態2.面向對象基于對象的編程更符合人的思維模式,更容易編寫程序3.類運行時動態加載,使得Java可以在分布式環境下動態的維護程序及類庫,當類庫升級時也不必重新修改、編譯。缺點:程序速度較慢,不適合做實時性很強的開發C++編程的優勢:1.增加了面向對象的思想,但是又兼具面向過程的方法2.兼容C缺點:指針調用完成后需要手工釋放內存,容易造成內存泄露而程序崩潰2、4開發環境配置開發環境配置:類型標準配置計算機硬件內存1G;CPUCorei332位軟件Windows7;ubuntu10.04交叉編譯器GCC2.95.4運行環境配置:類型標準配置計算機硬件內存1G;CPUCorei332位軟件Windows7;ubuntu10.04交叉編譯器GCC2.95.42、5NachOS系統和交叉編譯器安裝2、5、1NachOS系統安裝ubuntu10.04gcc-vReadingspecsfrom/usr/lib/gcc-lib/i486-linux-gnu/2.95.4/specsgccversion2.95.(Debianprerelease)1、解壓NachOS-4.1.tgzroot@ubuntu:~$tar-zxvfNachOS-4.1.gz2、運行makedependroot@ubuntu:~/桌面/NachOS-4.1/code/build.linux#makedepend3、運行makeroot@ubuntu:~/桌面/NachOS-4.1/code/build.linux#make4、運行nachosroot@ubuntu:~/桌面/NachOS-4.1/code/build.linux#./nachostestssummary:ok:0Machinehalting!Ticks:total10,idle0,system10,user0DiskI/O:reads0,writes0ConsoleI/O:reads0,writes0Paging:faults0NetworkI/O:packetsreceived0,sent02、5、2交叉編譯器環境的安裝在編譯前直接解壓到local根目錄下1、編譯生成coff2noff工具:運行configre2.運行make生成coff2noff3.編譯test目錄下文件修改test/Makefile.dep中變量cpp和GCCDIR為正確的交叉編譯器路徑root@ubuntu:~/NachOS-4.1/code/test#vimMakefile.dep4.編譯test目錄中的程序root@ubuntu:~/NachOS-4.1/code/test#makeroot@ubuntu:~/NachOS-4.1/code/test#ls*.noffadd.noffhalt.noffopen.noffshell.noffwrite.noffexec.noffmatmult.noffread.noffsort.noff5、執行NachOS格式文件root@ubuntu:~/NachOS-4.1/code/build.linux#./nachos-x../test/halt.nofftestssummary:ok:0Machinehalting!Ticks:total21,idle0,system10,user11DiskI/O:reads0,writes0ConsoleI/O:reads0,writes0Paging:faults0NetworkI/O:packetsreceived0,sent0設計思路和程序結構3、1線程的生成和狀態轉換3、1、1基于五狀態模型3、1、2線程創建過程擴充線程管理,使其最多同時存在128個線程,測試創建線程在Thread類中增加靜態成員變量threadNum表示當前線程的總數量Fork()創建一個線程時,threadNum加1,當線程總數超過128個線程時,程序終止。并打印終止信息當一個線程終止時threadNum減1當系統關閉時,所有線程都結束3、2線程調度機制當前的NachOS系統中,線程沒有優先級,每次將線程放入到就緒隊列時即是將線程放到隊尾,因此若要改變系統調用的線程順序則需要確定各線程的優先級。擴充線程調度機制,測試線程數為3個在Scheduler類中增加一個成員函數,表示線程的優先級,增加靜態的優先級調度在Thread類中增加一個函數來對就緒隊列中的線程根據優先級進行排序,將優先級最高的放到隊首先將線程放入就緒隊列,然后排序,最后從中選擇下一條要執行的線程具有優先級的線程將不再按照順序執行而是根據線程的優先級執行關鍵代碼分析4、1擴充線程管理code/threads/下的thread.cc和thread.h是線程管理部分的文件代碼修改:Thread.h定義靜態成員變量threadNum表示線程數量Thread.ccSelfTest()測試創建線程4、2擴充線程調度機制代碼修改:Scheduler類中添加全局靜態優先級Thread.hThread.cc4、3擴充線程調度機制改進4、3、1信號量機制classSemaphore{public: voidP(); 核心操作://禁止中斷,并保存初始中斷狀態。因為開始時中斷也可能處于被禁止//狀態,所以操作結束后要恢復到初始狀態而不是使能中斷。 IntStatusoldLevel=interrupt->SetLevel(IntOff); //當信號量為0時,將當前進程放到等待隊列里面,并設置為睡眠模式, //參數值為FALSE表示,進程沒有正常結束而要被掛起。voidV(); 核心操作: //禁止中斷 IntStatusoldLevel=interrupt->SetLevel(IntOff);//如果隊列不為空說明有當前進程因為要臨界資源被別的進程訪問而掛//起,所以V操作首先應將當前進程設置為READY狀態,以繼續運行并//訪問臨界資源private:intvalue;// 信號量值(>=0)List*queue;// 線程等待隊列};信號量的私有屬性有信號量的值,它是一個閥門。線程等待隊列中存放所有等待該信號量的線程。信號量有兩個操作:P操作和V操作,這兩個操作都是原子操作。P操作當value等于0時,將當前運行線程放入線程等待隊列。當前運行線程進入睡眠狀態,并切換到其它線程運行。當value大于0時,value--。V操作如果線程等待隊列中有等待該信號量的線程,取出其中一個將其設置成就緒態,準備運行。value++;4、3、2實現用戶更改進程優先級intSysWrite(char*buffer,intsize,OpenFileIdid);intSysRead(char*buffer,intsize,OpenFileIdid);SpaceIdSysExec(char*exec_name);intSysJoin(SpaceIdid);intSysStrncmp(char*buffer,char*str,intn)除此外添加一個處理異常的類Exception.cc相應的需要修改shell類中的代碼,進行測試root@ubuntu:~/桌面/NachOS-4.1/code/build.linux#./nachos-x../test/shell.noff測試5、1測試NachOS環境和交叉編譯器root@ubuntu:~/桌面/18新/a測試創建線程/NachOS-4.1/code/build.linux#makeg++-ftemplate-depth-100-Wno-deprecated-g-Wall-I../network-I../filesys-I../userprog-I../threads-I../machine-I../lib-DFILESYS_STUB-DRDATA-DSIM_FIX-DTUT-Dx86-DLINUX-DCHANGED-c../threads/thread.cc../threads/thread.cc:Inmemberfunction‘voidThread::SelfTest()’:../threads/thread.cc:471:warning:deprecatedconversionfromstringconstantto‘char*’g++bitmap.odebug.olibtest.osysdep.ointerrupt.ostats.otimer.oconsole.omachine.omipssim.otranslate.onetwork.odisk.oalarm.okernel.omain.oscheduler.osynch.othread.oaddrspace.oexception.osynchconsole.odirectory.ofilehdr.ofilesys.opbitmap.oopenfile.osynchdisk.opost.oswitch.o-onachosroot@ubuntu:~/桌面/18新/a測試創建線程/NachOS-4.1/code/build.linux#./nachosroot@ubuntu:~/桌面/18新/a測試創建線程/NachOS-4.1/code/build.linux#./nachos-x../test/halt.noff5、2測試創建線程root@ubuntu:~/桌面/18新/a測試創建線程/NachOS-4.1/code/build.linux#./nachos-K5、3測試線程優先級root@ubuntu:~/NachOS-4.1/code/build.linux#./nachos-K總結通過這次對nachos線程機制的擴充,較深入理解了操作系統的內核中對線程的管理和基本調度,對線程的4種狀態也有了較好的了解和運用。只是這個是線程的基于優先級的搶占式調度是靜態的,動態的搶占式線程調度還沒有很好的實現。本次課程設計主要圍繞nachos線程模塊做了分析,覺得nachos雖小但是它是一個完整的基本的操作系統,各個模塊的實現雖然簡單,但是它們之間相互協作能夠形成一個系統,我覺得這就是操作系統的精髓,正如積小流以成江河的道理一樣。真正的做一個操作系統,我認為不在于其算法有多優秀,而在于其算法有多適用,算法的適用都是因不同的環境而定的。這次課程設計,我閱讀了不少的代碼,從實踐的角度了解了操作系統,我覺得我的收獲很大。操作系統不僅僅是一門理論性很強的課程,我覺得應該更看重它的實用性。有些東西本來是很通俗易懂的,拿到理論的層面上,便變得很枯燥、很難懂。Nachos利用其簡單易懂的設計使我們對課本上的概念有了更深刻的理解。在這次作業的過程中遇到一些困難,因為自己的電腦是64位的,而能找到的交叉編譯器只有32位的,這對作業的進度造成很大的影響,因為這只能用同學的電腦做,但是尤其同學也有自己的課程設計要做,因此時間上就顯得少了,最后只實現了少部分的功能。慶幸的是,Code::blocks10.05在代碼閱讀和調試中起到了很大的作用,因為其支持代碼的編譯,可以測試NachOS各部分的實現情況,雖然不能將測試結果直接輸出,但是間接地給出了各部分是否能實現。這次課程設計應該很大一部分得益于此。對于操作系統的學習,對于我們而言其實是很抽象的,它不像其他課程的學習,雖然在專業學習的過程中,經常與之打交道,但是并不知道它是怎樣實現進程的調度的,再有一點是我們對硬件也不是很熟悉它們的構造。盡管在學習電子技術時接觸到一些,但是畢竟沒有親手動手去做過,只是在實驗時,在封閉的情況下知道大概的構造,沒有直觀地接觸過,這都使得

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論