

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 目錄</b></p><p><b> 一、背景知識1</b></p><p> 1、1 Nachos的介紹1</p><p> 1、2 Nachos的目錄結構2</p><p> 1、3 線程基礎知識3</p><p>
2、 二、設計要求和目的4</p><p> 2、1 Nachos的線程管理模塊4</p><p> 2、2 Nachos的線程線程調度算法分析4</p><p> 2、3 編程語言選擇對比5</p><p> 2、4 開發(fā)環(huán)境配置6</p><p> 2、5 NachOS 系統(tǒng)和交叉編譯器安
3、裝6</p><p> 2、5、1 NachOS 系統(tǒng)安裝6</p><p> 2、5、2 交叉編譯器環(huán)境的安裝7</p><p> 三、 設計思路和程序結構8</p><p> 3、1 線程的生成和狀態(tài)轉換8</p><p> 3、1、1 基于五狀態(tài)模型8</p><
4、p> 3、1、2 線程創(chuàng)建過程8</p><p> 3、2 線程調度機制8</p><p> 四、 關鍵代碼分析9</p><p> 4、1 擴充線程管理9</p><p> 4、2 擴充線程調度機制10</p><p> 4、3 擴充線程調度機制改進12</p>
5、<p> 4、3、1 信號量機制12</p><p> 4、3、2 實現(xiàn)用戶更改進程優(yōu)先級13</p><p><b> 五、 測試13</b></p><p> 5、1 測試NachOS 環(huán)境和交叉編譯器13</p><p> 5、2 測試創(chuàng)建線程14</p><
6、;p> 5、3 測試線程優(yōu)先級15</p><p><b> 六、 總結15</b></p><p><b> 一、背景知識</b></p><p> 1、1 Nachos的介紹</p><p> Nachos的全稱是“Not Another Completely Heuri
7、stic Operating System”,是一個可修改和跟蹤的操作系統(tǒng)教學軟件。它給出了一個支持多線程和虛擬存儲的操作系統(tǒng)骨架,可讓學生在較短的時間內對操作系統(tǒng)中的基本原理和核心算法有一個全面和完整的了解。</p><p> NachOS 提供了可重復的調試環(huán)境和模擬操作系統(tǒng)及底層硬件。目的是為學習者展示真實的操作系統(tǒng)運行時的環(huán)境,這個簡單的操作系統(tǒng)軟件可以讓學習者在較短的時間內理解并能夠用自己的想法來完善
8、它。</p><p> 免費的開源開發(fā)包可通過網(wǎng)絡下載,通常包括以下幾部分:</p><p><b> NachOS 概述</b></p><p> 簡單可運行的操作系統(tǒng)代碼</p><p> 模擬器——個人電腦或工作站</p><p> 任務樣本:任務說明和現(xiàn)代操作系統(tǒng)涉及的所有項,包
9、括線程和并發(fā),多道程序,系統(tǒng)調用,虛擬內存管理,文件系統(tǒng)管理,網(wǎng)絡協(xié)議,遠程過程調用和分布式系統(tǒng)。</p><p> C++ 編程索引(NachOS 是C++ 子集編程,簡單易學。這個索引將對C 語言程序員有所幫助)</p><p> Nachos操作系統(tǒng)本身只提供了一套框架,很多地方的實現(xiàn)都需要我們自己來完善,因此我們可以通過修改其源代碼,來豐富和增強Nachos操作系統(tǒng)的功能.更可
10、以在完善這些功能的同時,了解操作系統(tǒng)的內部運行機制.</p><p> Nachos 模擬了MIPS R2/3000的指令集、主存、中斷系統(tǒng)、網(wǎng)絡以及磁盤系統(tǒng)等操作系統(tǒng)所必須的硬件系統(tǒng)。用軟件模擬硬件的可靠性比真實硬件高得多,不會因為硬件故障而導致系統(tǒng)出錯,便于調試。虛擬機可以在運行時報告詳盡的出錯信息,更重要的是采用虛擬機使Nachos的移植變得非常容易,在不同機器上移植Nachos,只需對虛擬機部分作移植即
11、可。</p><p> MIPS R2/3000的指令集的優(yōu)勢:RISC指令集,指令書目少,Nachos 模擬其中的63條。</p><p> 編譯器:GCC 可直接將C/C++源程序編譯成該指令集的目標代碼,而不必重寫編譯器。</p><p> Nachos 是一個在宿主機上運行的進程,采用雙CPU,即一個宿主CPU,一個虛擬機CPU,不確定性是操作系統(tǒng)
12、所必須具有的特征,而Nachos 采用隨機因子模擬真實操作系統(tǒng)的不確定性,使系統(tǒng)運行更加真實。</p><p> Nachos 是一個可擴展的操作系統(tǒng),可發(fā)揮自己的創(chuàng)造性進行擴展。</p><p> Nachos 限制:只有一級索引結構限制了系統(tǒng)中最大文件的大小。Nachos 可以用面向對象的思想實現(xiàn),面向對象的方法能清楚的描述操作系統(tǒng)的各個部分的接口,但是又沒有全面的運用到面向對象的
13、性質,例如繼承性、多態(tài)性,這使得代碼更易讀和理解。</p><p> Nachos 分五個功能模塊:機器模擬、線程管理、文件系統(tǒng)管理、用戶程序和虛擬存儲以及網(wǎng)絡系統(tǒng)。</p><p> 由于Nachos開發(fā)沒有針對windows平臺的移植,Nachos 需要在虛擬機上實現(xiàn),所以需要首先實現(xiàn)創(chuàng)建虛擬機,創(chuàng)建linux 虛擬機來實現(xiàn)nachos代碼的編譯運行。</p><
14、;p> Nachos 運行時更像一個進程,但是它是完全按照操作系統(tǒng)思想開發(fā)的操作系統(tǒng)內核,具有完整的操作系統(tǒng)結構。</p><p> Nachos 系統(tǒng)結構,作為一個簡單的系統(tǒng)編程,網(wǎng)絡協(xié)議和文件系統(tǒng)只需夠用即可,這里主要設計線程管理和虛擬內存,在設計時虛擬內存可以暫時不要考慮。而其他的則可以由現(xiàn)有系統(tǒng)提供,為此,線程管理為主要任務。</p><p> 1、2 Nachos的
15、目錄結構</p><p> copyright 文件 Nachos 的版權信息</p><p> readme 文件 Nachos 的readme 信息</p><p> nachos.ps 文件 Nachos 的介紹文檔(Postscript 格式)</p><p> c+
16、+example 目錄 有關C++介紹和實例</p><p> doc 目錄 Nachos 各個部分介紹和原有的作業(yè)要求</p><p> code 目錄 Nachos 各個部分的源代碼</p><p> 最主要的Nachos 的源代碼部分</p><p><
17、;b> Makefile</b></p><p> Makefile.dep</p><p> Nachos 的Makefile 文件,當Nachos 需要移植到其它系統(tǒng)時,可以修改Makefile.dep 中的HOST 參數(shù)</p><p> machine 目錄 Nachos 虛擬機模擬部分源代碼</p>&
18、lt;p> threads 目錄 Nachos 線程管理部分源代碼</p><p> filesys 目錄 Nachos 文件系統(tǒng)管理部分源代碼</p><p> userprog 目錄 Nachos 用戶程序部分源代碼</p><p> network 目錄 Nachos 網(wǎng)絡管理部分源代碼<
19、;/p><p> vm 目錄 Nachos 虛擬內存管理部分源代碼</p><p> test 目錄 一些測試用應用程序</p><p> bin 目錄 包含有用戶程序目標碼變換的程序</p><p> 1、3 線程基礎知識</p><p> 線
20、程基本概念:是進程中的一個實體,是被系統(tǒng)獨立調度和分派的基本單位,線程自己不擁有系統(tǒng)資源,只擁有一點在運行中必不可少的資源,但它可與同屬一個進程的其它線程共享進程所擁有的全部資源。一個線程可以創(chuàng)建和撤消另一個線程,同一進程中的多個線程之間可以并發(fā)執(zhí)行。由于線程之間的相互制約,致使線程在運行中呈現(xiàn)出間斷性。</p><p> 線程狀態(tài):就緒、阻塞和運行三種基本狀態(tài)。 線程是程序中一個單一的順序控制流程.在單個程
21、序中同時運行多個線程完成不同的工作,稱為多線程. 線程和進程的區(qū)別在于,子進程和父進程有不同的代碼和數(shù)據(jù)空間,而多個線程則共享數(shù)據(jù)空間,每個線程有自己的執(zhí)行堆棧和程序計數(shù)器為其執(zhí)行上下文.多線程主要是為了節(jié)約CPU時間,發(fā)揮利用,根據(jù)具體情況而定. 線程的運行中需要使用計算機的內存資源和CPU</p><p><b> 線程的周期 </b></p><p> 新
22、建 就緒 運行 阻塞 死亡</p><p><b> 線程調度與優(yōu)先級 </b></p><p> 有線程進入了就緒狀態(tài),需要有線程調度程序來決定何時執(zhí)行,根據(jù)優(yōu)先級來調度.</p><p> 線程組 每個線程都是一個線程組的一個成員,線程組把多個線程集成一個對象,通過線程組可以同時對其中的多個線程進行操作.在生成線程時必須將線程放在指
23、定的線程組,也可以放在缺省的線程組中,缺省的就是生成該線程的線程所在的線程組.一旦一個線程加入了某個線程組,不能被移出這個組.</p><p><b> 進程和線程的關系</b></p><p> 在引入線程機制后,進程不再是單一的動態(tài)實體,而是由兩部分組成:</p><p> 各線程活動的環(huán)境,包括:統(tǒng)一的地址控件
24、、全局變量、打開文件和計時器等。</p><p> 若干個線程,它們是進程中的活動部分,也是處理機的調度單位,而進程不再是處理機</p><p><b> 的最小調度單位。</b></p><p> 一個進程中的所有線程在同一地址空間中活動,共享該地址空間中的全局變量,共享打開文</p><p&g
25、t; 件和計時器等。它們總是相互協(xié)作,各自承擔一個作業(yè)中的某個部分。與傳統(tǒng)的進程相似,</p><p> 線程具有狀態(tài)的變化。通常,這些狀態(tài)是:運行、阻塞、就緒或終止。</p><p><b> 二、設計要求和目的</b></p><p> Nachos的運宿主機通過軟件模擬了各種硬件系統(tǒng),包括中斷系統(tǒng)、存儲系統(tǒng)、磁盤文件行必須借助于、
26、網(wǎng)絡等。它的運行是可以跟蹤的,因此,我們可以一步一步的觀察操作系統(tǒng)是如何運行的.</p><p> 對于線程的管理,主要涉及到線程的擴充、nachos線程的調度機制和線程優(yōu)先級。</p><p> 2、1 Nachos的線程管理模塊</p><p> Nachos平臺所使用的是非搶占式調度,線程一旦占用CPU,就會一直運行到結束或者被阻塞(等待I/O事件);
27、Nachos平臺中的線程數(shù)據(jù)結構定義非常簡單,并無用戶ID、線程ID等數(shù)據(jù)成員,也就是說,無法基于線程的ID來實現(xiàn)通信、同步互斥等機制。Nachos平臺中并無全局性的線程管理機制,并未限制線程的數(shù)目,也無法了解有多少線程存在。</p><p> 通過修改Nachos系統(tǒng)平臺的底層源代碼來實現(xiàn)以下目標:</p><p> 1.擴充線程數(shù)據(jù)結構。增加“用戶ID、線程ID”兩個數(shù)據(jù)成員,同時
28、在Nachos現(xiàn)有的線程管理機制中增加對這兩個數(shù)據(jù)成員的維護機制。</p><p> 2.擴展現(xiàn)有的線程狀態(tài)。Nachos平臺中的線程狀態(tài)只有“初啟態(tài)”、“就緒態(tài)”、“阻塞態(tài)”、“運行態(tài)”四種情況。請增加“掛起(suspending)”這個狀態(tài),所謂“掛起”是指當前的線程映象保存在磁盤文件而不是內存中。“掛起”狀態(tài)是未來實現(xiàn)“虛擬內存管理”的重要基礎。</p><p> 3.修改線程調
29、度算法。將Nachos平臺的線程管理機制調整為“搶占式”。具體可選擇“時間片輪轉”、“優(yōu)先級調度”、“多級隊列”等不同的調度算法。</p><p> 4.增加全局性的線程管理機制。擴充Nachos平臺的現(xiàn)有操作命令,例如可以增加一個名為“ThreadView”的命令,執(zhí)行該命令,可以在屏幕上顯示目前所有存在的線程信息,包括“用戶ID“、“線程ID”、“當前狀態(tài)”等。</p><p>
30、5.實現(xiàn)一個同步與互斥的例子。在完成以上修改后,可編寫一個實例程序,來實現(xiàn)某個“同步-互斥”經(jīng)典問題的正確解法。例如可選擇“哲學家就餐”問題,實例程序會創(chuàng)建5個哲學家線程,這些線程擁有同樣的用戶ID,可以遵循“信號量”機制來正確的運行。也可以選擇“生產(chǎn)者-消費者”問題等其他經(jīng)典IPC問題。</p><p> 2、2 Nachos的線程線程調度算法分析</p><p> Nachos平
31、臺所使用的是非搶占式調度,線程一旦占用CPU,就會一直運行到結束或者被阻塞(等待I/O事件);Nachos平臺中的線程數(shù)據(jù)結構定義非常簡單,并無用戶ID、線程ID等數(shù)據(jù)成員,也就是說,無法基于線程的ID來實現(xiàn)通信、同步互斥等機制。Nachos平臺中并無全局性的線程管理機制,并未限制線程的數(shù)目,也無法了解有多少線程存在。</p><p> Sysdep模塊實現(xiàn)機制分析:sysdep.cc sysdep.h<
32、;/p><p> 屏蔽OS間的系統(tǒng)調用或函數(shù)調用在形式和內容上可能有的細微差別</p><p> 中斷處理模塊實現(xiàn)機制分析:interrupt.cc .h</p><p> 模擬底層中斷機制——時鐘中斷、磁盤中斷、終端讀/寫中斷、網(wǎng)絡接收/發(fā)送中斷</p><p> 時鐘中斷模塊實現(xiàn)機制分析:timer.cc .h</p&g
33、t;<p> 模擬時鐘中斷,在nachos指定線程隨機切換時啟動時鐘中斷,在每次的時鐘中斷處理的最后加入線程的切換</p><p> 終端設備模塊實現(xiàn)機制分析:console.cc .h</p><p> 模擬終端輸入和輸出,鍵盤的輸入和顯示輸出,異步,當發(fā)出終端的輸入輸出請求后系統(tǒng)即返回,需要等待中斷發(fā)生后才是真正完成了整個過程。</p><
34、p> 磁盤設備模塊實現(xiàn)機制分析:disk.cc .h</p><p> 模擬物理磁盤,nachos用宿主機種的一個文件模擬單面物理磁盤,異步</p><p> 工具模塊:list.cc .h utility.cc .h</p><p><b> 定義鏈表結構及操作</b></p><p>
35、 線程啟動和調度模塊:switch.s switch.h</p><p> 線程定義模塊:thread.cc .h</p><p> 線程調度算法模塊:scheduler.cc .h</p><p> nachos主控模塊:main.cc system.cc system.h</p><p> nachos系統(tǒng)入口,分
36、析nachos命令行參數(shù),根據(jù)不同的選項進行不同功能的初始化設置</p><p> 同步磁盤:文件synchdisk.cc .h</p><p> 文件系統(tǒng)模塊:filesys.cc .h</p><p> 模擬創(chuàng)建文件、刪除文件、打開文件操作</p><p> 文件頭模塊:文件filehdr.cc .h</p&g
37、t;<p> 打開文件結構:文件openfile.cc .h</p><p> 目錄模塊:directory.cc .h</p><p> machine.h:包含了內存的相關定義</p><p> machine.cc:包含了對內存和頁表的初始化</p><p> translate.h:定義了頁表結
38、構</p><p> translate.cc:包含了地址轉換的實現(xiàn)以及讀、寫內存的操作</p><p> address.cc:包含了用戶程序頁表的操作</p><p> 2、3 編程語言選擇對比</p><p> Java編程的優(yōu)勢:1.簡單,面向對象,穩(wěn)定,跨平臺,多線程,動態(tài)</p><p>
39、2.面向對象基于對象的編程更符合人的思維模式,更容易編寫程序</p><p> 3.類運行時動態(tài)加載,使得Java 可以在分布式環(huán)境下動態(tài)的維護程序及類庫,當類庫升級時也不必重新修改、編譯。</p><p> 缺點:程序速度較慢,不適合做實時性很強的開發(fā)</p><p> C++編程的優(yōu)勢:1.增加了面向對象的思想,但是又兼具面向過程的方法</p>
40、<p><b> 2.兼容C</b></p><p> 缺點:指針調用完成后需要手工釋放內存,容易造成內存泄露而程序崩潰</p><p> 2、4 開發(fā)環(huán)境配置</p><p><b> 開發(fā)環(huán)境配置:</b></p><p><b> 運行環(huán)境配置:</b
41、></p><p> 2、5 NachOS 系統(tǒng)和交叉編譯器安裝</p><p> 2、5、1 NachOS 系統(tǒng)安裝</p><p> ubuntu10.04</p><p> gcc -v Reading specs from /usr/lib/gcc-lib/i486-linux-gnu/2.95.4/specs&
42、lt;/p><p> gcc version 2.95.4 20011002 (Debian prerelease)</p><p> 1、解壓NachOS-4.1.tgz</p><p> root@ubuntu:~$ tar -zxvf NachOS-4.1.gz</p><p> 2、運行make depend</p>
43、<p> root@ubuntu:~/桌面/NachOS-4.1/code/build.linux# make depend</p><p><b> 3、運行make</b></p><p> root@ubuntu:~/桌面/NachOS-4.1/code/build.linux# make</p><p> 4、運行n
44、achos</p><p> root@ubuntu:~/桌面/NachOS-4.1/code/build.linux# ./nachos</p><p> tests summary: ok:0</p><p> Machine halting!</p><p> Ticks: total 10, idle 0, system 10
45、, user 0</p><p> Disk I/O: reads 0, writes 0</p><p> Console I/O: reads 0, writes 0</p><p> Paging: faults 0</p><p> Network I/O: packets received 0, sent 0</p&g
46、t;<p> 2、5、2 交叉編譯器環(huán)境的安裝</p><p> 在編譯前直接解壓到local根目錄下</p><p> 1、編譯生成coff2noff工具:</p><p> 運行configre</p><p> 2.運行make生成coff2noff</p><p> 3.編譯test
47、目錄下文件</p><p> 修改test/Makefile.dep中變量cpp和GCCDIR為正確的交叉編譯器路徑</p><p> root@ubuntu:~/NachOS-4.1/code/test# vim Makefile.dep</p><p> 4.編譯test目錄中的程序</p><p> root@ubuntu:~/
48、NachOS-4.1/code/test# make</p><p> root@ubuntu:~/NachOS-4.1/code/test# ls *.noff</p><p> add.noff halt.noff open.noff shell.noff write.noff</p><p> exec.noff matmult.nof
49、f read.noff sort.noff</p><p> 5、執(zhí)行NachOS格式文件</p><p> root@ubuntu:~/NachOS-4.1/code/build.linux# ./nachos -x ../test/halt.noff</p><p> tests summary: ok:0</p><p>
50、Machine halting!</p><p> Ticks: total 21, idle 0, system 10, user 11</p><p> Disk I/O: reads 0, writes 0</p><p> Console I/O: reads 0, writes 0</p><p> Paging: faul
51、ts 0</p><p> Network I/O: packets received 0, sent 0</p><p><b> 設計思路和程序結構</b></p><p> 3、1 線程的生成和狀態(tài)轉換</p><p> 3、1、1 基于五狀態(tài)模型</p><p> 3、1、2
52、 線程創(chuàng)建過程</p><p> 擴充線程管理,使其最多同時存在128個線程,測試創(chuàng)建線程</p><p> 在Thread類中增加靜態(tài)成員變量threadNum表示當前線程的總數(shù)量</p><p> Fork()創(chuàng)建一個線程時,threadNum加1,當線程總數(shù)超過128個線程時,程序終止。并打印終止信息</p><p> 當一個
53、線程終止時threadNum減1</p><p> 當系統(tǒng)關閉時,所有線程都結束</p><p> 3、2 線程調度機制</p><p> 當前的NachOS 系統(tǒng)中,線程沒有優(yōu)先級,每次將線程放入到就緒隊列時即是將線程放到隊尾,因此若要改變系統(tǒng)調用的線程順序則需要確定各線程的優(yōu)先級。</p><p> 擴充線程調度機制,測試線程數(shù)
54、為3個</p><p> 在Scheduler類中增加一個成員函數(shù),表示線程的優(yōu)先級,增加靜態(tài)的優(yōu)先級調度</p><p> 在Thread類中增加一個函數(shù)來對就緒隊列中的線程根據(jù)優(yōu)先級進行排序,將優(yōu)先級最高的放到隊首</p><p> 先將線程放入就緒隊列,然后排序,最后從中選擇下一條要執(zhí)行的線程</p><p> 具有優(yōu)先級的線程
55、將不再按照順序執(zhí)行而是根據(jù)線程的優(yōu)先級執(zhí)行</p><p><b> 關鍵代碼分析</b></p><p> 4、1 擴充線程管理</p><p> code/threads/下的thread.cc和thread.h是線程管理部分的文件</p><p><b> 代碼修改:</b><
56、/p><p><b> Thread.h</b></p><p> 定義靜態(tài)成員變量threadNum表示線程數(shù)量</p><p><b> Thread.cc</b></p><p> SelfTest () 測試創(chuàng)建線程</p><p> 4、2 擴充線程調度機制
57、</p><p><b> 代碼修改:</b></p><p> Scheduler類中添加全局靜態(tài)優(yōu)先級</p><p><b> Thread.h</b></p><p><b> Thread.cc</b></p><p> 4、3 擴
58、充線程調度機制改進</p><p> 4、3、1 信號量機制</p><p> class Semaphore {</p><p><b> public:</b></p><p><b> void P();</b></p><p><b> 核心操作
59、:</b></p><p> //禁止中斷,并保存初始中斷狀態(tài)。因為開始時中斷也可能處于被禁止//狀態(tài),所以操作結束后要恢復到初始狀態(tài)而不是使能中斷。</p><p> IntStatus oldLevel = interrupt->SetLevel(IntOff);</p><p> //當信號量為0時,將當前進程放到等待隊列里面,并設置
60、為睡眠模式,</p><p> //參數(shù)值為FALSE表示,進程沒有正常結束而要被掛起。</p><p><b> void V();</b></p><p><b> 核心操作:</b></p><p><b> //禁止中斷</b></p><p
61、> IntStatus oldLevel = interrupt->SetLevel(IntOff);</p><p> //如果隊列不為空說明有當前進程因為要臨界資源被別的進程訪問而掛//起,所以V操作首先應將當前進程設置為READY狀態(tài),以繼續(xù)運行并//訪問臨界資源</p><p><b> private:</b></p><
62、;p> int value; //信號量值 ( >=0)</p><p> List *queue; //線程等待隊列</p><p><b> };</b></p><p> 信號量的私有屬性有信號量的值,它是一個閥門。線程等待隊列中存放所有等待該信號量的線程。信號量有兩個操作:P操作和V操作,這兩個操作都是原子操作
63、。</p><p><b> P操作</b></p><p> 當value等于0時,</p><p> 將當前運行線程放入線程等待隊列。</p><p> 當前運行線程進入睡眠狀態(tài),并切換到其它線程運行。</p><p> 當value大于0時,value--。</p>
64、<p><b> V操作</b></p><p> 如果線程等待隊列中有等待該信號量的線程,取出其中一個將其設置成就緒態(tài),準備運行。</p><p><b> value++;</b></p><p> 4、3、2 實現(xiàn)用戶更改進程優(yōu)先級</p><p> int SysWri
65、te(char*buffer ,int size,OpenFileId id);</p><p> int SysRead(char*buffer ,int size,OpenFileId id);</p><p> SpaceId SysExec(char* exec_name);</p><p> int SysJoin(SpaceId id);</
66、p><p> int SysStrncmp(char*buffer,char *str,int n)</p><p> 除此外添加一個處理異常的類</p><p> Exception.cc</p><p> 相應的需要修改shell類中的代碼,進行測試</p><p> root@ubuntu:~/桌面/Nac
67、hOS-4.1/code/build.linux# ./nachos -x ../test/shell.noff</p><p><b> 測試</b></p><p> 5、1 測試NachOS 環(huán)境和交叉編譯器</p><p> root@ubuntu:~/桌面/18新/a測試創(chuàng)建線程/NachOS-4.1/code/build.l
68、inux# make</p><p> g++ -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 -DCHANGE
69、D -c ../threads/thread.cc</p><p> ../threads/thread.cc: In member function ‘void Thread::SelfTest()’:</p><p> ../threads/thread.cc:471: warning: deprecated conversion from string constant to ‘
70、char*’</p><p> g++ bitmap.o debug.o libtest.o sysdep.o interrupt.o stats.o timer.o console.o machine.o mipssim.o translate.o network.o disk.o alarm.o kernel.o main.o scheduler.o synch.o thread.o addrspace.o
71、 exception.o synchconsole.o directory.o filehdr.o filesys.o pbitmap.o openfile.o synchdisk.o post.o switch.o -o nachos</p><p> root@ubuntu:~/桌面/18新/a測試創(chuàng)建線程/NachOS-4.1/code/build.linux# ./nachos</p>
72、<p> root@ubuntu:~/桌面/18新/a測試創(chuàng)建線程/NachOS-4.1/code/build.linux# ./nachos -x ../test/halt.noff</p><p> 5、2 測試創(chuàng)建線程</p><p> root@ubuntu:~/桌面/18新/a測試創(chuàng)建線程/NachOS-4.1/code/build.linux# ./nacho
73、s -K</p><p> 5、3 測試線程優(yōu)先級</p><p> root@ubuntu:~/NachOS-4.1/code/build.linux# ./nachos -K</p><p><b> 總結</b></p><p> 通過這次對nachos線程機制的擴充,較深入理解了操作系統(tǒng)的內核中對線程的
74、管理和基本調度,對線程的4種狀態(tài) 也有了較好的了解和運用。只是這個是線程的基于優(yōu)先級的搶占式調度是靜態(tài)的,動態(tài)的搶占式線程調度還沒有很好的實現(xiàn)。</p><p> 本次課程設計主要圍繞nachos線程模塊做了分析,覺得nachos雖小但是它是一個完整的基本的操作系統(tǒng),各個模塊的實現(xiàn)雖然簡單,但是它們之間相互協(xié)作能夠形成一個系統(tǒng),我覺得這就是操作系統(tǒng)的精髓,正如積小流以成江河的道理一樣。真正的做一個操作系統(tǒng),我認
75、為不在于其算法有多優(yōu)秀,而在于其算法有多適用,算法的適用都是因不同的環(huán)境而定的。這次課程設計,我閱讀了不少的代碼,從實踐的角度了解了操作系統(tǒng),我覺得我的收獲很大。操作系統(tǒng)不僅僅是一門理論性很強的課程,我覺得應該更看重它的實用性。有些東西本來是很通俗易懂的,拿到理論的層面上,便變得很枯燥、很難懂。Nachos利用其簡單易懂的設計使我們對課本上的概念有了更深刻的理解。</p><p> 在這次作業(yè)的過程中遇到一些困
76、難,因為自己的電腦是64位的,而能找到的交叉編譯器只有32位的,這對作業(yè)的進度造成很大的影響,因為這只能用同學的電腦做,但是尤其同學也有自己的課程設計要做,因此時間上就顯得少了,最后只實現(xiàn)了少部分的功能。慶幸的是,Code::blocks 10.05在代碼閱讀和調試中起到了很大的作用,因為其支持代碼的編譯,可以測試NachOS 各部分的實現(xiàn)情況,雖然不能將測試結果直接輸出,但是間接地給出了各部分是否能實現(xiàn)。這次課程設計應該很大一部分得益
77、于此。</p><p> 對于操作系統(tǒng)的學習,對于我們而言其實是很抽象的,它不像其他課程的學習,雖然在專業(yè)學習的過程中,經(jīng)常與之打交道,但是并不知道它是怎樣實現(xiàn)進程的調度的,再有一點是我們對硬件也不是很熟悉它們的構造。盡管在學習電子技術時接觸到一些,但是畢竟沒有親手動手去做過,只是在實驗時,在封閉的情況下知道大概的構造,沒有直觀地接觸過,這都使得操作系統(tǒng)給人神秘不可知的感覺。</p><p&
78、gt; 在學習操作系統(tǒng)的過程中,自我感覺我們的課程安排的不是很合理,不知道是不是我的認知問題,我認為不管學什么最好還是從底層來做,還有一點就是有更多的實踐,寓教于實踐。在此我只說說我在大學兩年半以來的學習感想,首先聲明計算機雖然是我的第一志愿,但是當初報志愿的時候對這一專業(yè)并不是很了解,所以我也并不認為自己的想法一定就是正確的。我的第一感受是迷糊,還不是一般的迷糊。我不知道以前的專業(yè)課程安排是怎樣的,可是現(xiàn)在的課程安排卻讓我感覺很不合
79、理。</p><p> 第一,我還是堅持自己的觀點,我認為學什么還是從底層開始,有了底層的基礎再來做上層次的學習應該會更容易接受和理解;第二,不知道是老師習慣了以前的教學還是老師不知道我們現(xiàn)在的課程安排改動,很多老師在講課的時候,遇到一些問題,老師總是覺得我們在另外的課程中已經(jīng)學過了,盡管老師提到的那門課程我們要在以后的學期才會學到,于是就那樣過去了;第三,當知道我要做什么或者是這個專業(yè)或行業(yè)需要我們具備哪些能
80、力的時候,往往是我們在大學的時間已過去大半,所以我認為在我們學這個專業(yè)之初,能夠先了解一下我們將要學習的這個專業(yè)的行情是很必要的;第四,這個應該是和我們這個專業(yè)關系不大的一點,我不知道學校為什么不允許轉專業(yè),這其實對于初上大學的新生來言是一種不公平,這或許是中國教育的問題,也或許是我所在的地方的原因,在大學之前,我不知道什么專業(yè)更合適自己,或者說我更喜歡更感興趣的專業(yè)是什么名字,等上了大學之后才發(fā)現(xiàn)原來我感興趣的專業(yè)不是叫這個名字,但是
81、又因為學校的規(guī)定,不能轉專業(yè),對于自己選的專業(yè)又不感興趣,于是大學的前兩年在矛盾中度過,大學的后兩年為了以后的生計又是郁悶著逼迫自己學自己所選的專業(yè)。如果是自制能力很強的</p><p> 提出我的幾點希望:第一,對freshman 先給他們一個專業(yè)的介紹,這個介紹不能只是要學什么,還要有能做什么;第二,分專業(yè)時的專業(yè)介紹不能只是講哪個專業(yè)的優(yōu)點,還應講講各自的局限,畢竟對于年輕的學生在這方面的認知畢竟是有限的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 生產(chǎn)系統(tǒng)管理課程設計
- 課程設計--超市銷售系統(tǒng)管理
- nachos線程通信和調度分析操作系統(tǒng)課程設計
- 學生信息系統(tǒng)管理課程設計
- 工廠管理系統(tǒng)課程設計說明書
- 學生管理系統(tǒng)課程設計說明書
- 醫(yī)院管理系統(tǒng)課程設計說明書
- 學信生息系統(tǒng)管理課程設計
- c語言課程設計--學生選課系統(tǒng)管理
- c語言課程設計——小型公司系統(tǒng)管理
- 數(shù)據(jù)庫課程設計--系統(tǒng)管理模塊
- c語言課程設計——小型公司系統(tǒng)管理
- 倉儲管理系統(tǒng)-課程設計說明書
- 采購管理系統(tǒng)課程設計說明書
- 操作系統(tǒng)課程設計(文件系統(tǒng)管理)
- vfp課程設計--學生管理系統(tǒng)課程設計說明書
- 高校圖書館管理系統(tǒng)管理系統(tǒng)課程設計報告
- 學生管理系統(tǒng)課程設計說明書 (2)
- 圖書管理系統(tǒng)課程設計說明書
- 醫(yī)院管理系統(tǒng)-醫(yī)院管理系統(tǒng)課程設計說明書
評論
0/150
提交評論