操作系統實驗6:IntroductiontoOS161

NO IMAGE

實驗目的
1.Be familiar with Subversion (SVN) and GDB (the GNU Debugger)
2.Setup your account to work on OS161
3.Understand the source code structure of OS161
4.Know how to build the OS161 kernel from source
5.Learn how to modify the OS161 kernel by adding debugging statements and system calls

實驗內容
1.Install OS/161, Sys/161 and the toolchain
2.Learn how to modify it, build it, run it, and debug it
3.Customize the Kernel Boot Output
4.Add a Kernel Menu Command

實驗環境
Environment:Ubuntu 14.04
Compiler:
GCC MIPS Cross-Compiler
GDB for Use with OS/161
bmake for use with OS/161

實驗報告
1.細節說明
此次實驗資料來自於哈佛大學CS350 操作系統課程,OS161是Harvard開發的專門用於學習和練習的簡易操作系統,OS161分為兩部分,kernel和user兩層
在安裝文件夾裡,kernel文件夾裡面的是OS的核心文件,不在kernel裡面的就是公共文件。在安裝目錄下make會編譯所有的公共信息,包括測試程序等等,基本都是用戶層的東西。而在kernel/ASSTX/compile裡面make則會重新編譯整個OS161,不過相對的,如果要在kernel裡添加文件,則需要在kernel/conf裡面的修改設定,然後才能正確的編譯。
(We use a simulator in CS350 because it allows everyone to have a private machine on which to test their operating system. In addition, debugging and testing the operating system on the simulator is easier than it would be on real hardware. The System/161 machine simulator has been found to be an excellent platform for rapid development of operating system code, while still retaining a high degree of realism. Apart from floating point support and certain issues relating to RAM cache management, it provides an accurate emulation of a MIPS R3000 processor.)

2.實驗思路
Sys161 kernel中所涉及到的源文件分別是kprintf.c, main.c ,menu.c ,和lib.h, 文件都位於os161-1.99/kern/startup 的目錄下。
1) 分析main文件發現,在主函數中的輸出部分,有個kprintf函數用於輸出顯示信息在標準輸出中,將其中的“Put-your-group-name…”改為自己的用戶名即可。
2) 第二個實驗要求設置一個新的函數dth,使得DOS界面中可以輸出給定線程的調試信息。這個函數dth是顯示在sub_menu的選擇界面中。分析menu.c文件可以發現,可以參考已有的cmd函數系列,自己寫一個關於dth的函數,並在cmdtable中建立對應的選擇界面。
3) 根據ASST0中的說明,我們需要這個dth函數能夠the output of debugging messages of type DB_THREADS,這個debug信息來自於一個kernel中的全局變量 dbflags, 該變量定義了哪種debug信息可以在內核運行的情況下輸出(defines which types of debugging messages should be displayed when the kernel runs)。該變量的缺省值為0
查找發現在lib.h文件中定義DB_THREADS為0x0010,自此我們可以知道,在dth函數中將dbflags賦DB_THREADS的值,即可達到要求。

3.實驗結果
1)在menu中添加dth命令選項

操作系統實驗6:IntroductiontoOS161

2)menu中自定義的cmd_dth函數

操作系統實驗6:IntroductiontoOS161

3)最終結果輸出

操作系統實驗6:IntroductiontoOS161

4.遇到的問題及解決方案
本次實驗最大的問題不在於添加命令函數,而在於安裝和配置環境
1) 安裝Step5中GDB安裝報錯Error2
經大家相互交流發現,是因為原先的電腦中沒有安裝libncurses-devel library,按照指導上面的操作還是失敗,所以直接google一下後下載好了需要的文件。

2) 安裝Step7中對應的bin文件沒有相應的文件,且執行ln命令時bmake未定義報錯。
經過一番查找嘗試發現,指導書上的sh語句總共有兩行,而兩行間沒有說明,容易使人誤會為兩條命令,也導致了echo語句一直無法執行。全部的正確執行語句如下:
sh –cs ‘for i in mips-*; do ln -s $HOME/sys161/tools/bin/$i $HOME/sys161/bin/cs350-echo $i | cut -d- -f4-; done’

3) 關閉終端之後再執行語句報錯:sys161語句未定義
討論之後發現,按照指導書上的命令,在Step3配置環境變量和PATH的時候,我們只是將該命令路徑添加在了當前終端界面之中,並沒有改變整個ubuntu的環境,所以當關閉終端之後,由於系統訪問不到命令對應的路徑,無法執行該指令。
查找發現有三種改路徑的方式
直接在/etc/environment目錄下添加路徑。但在此次實驗中,該目錄權限是隻讀,所以無法添加路徑。(當然,直接改掉environment可能會使得電腦重啟之後無法登陸,一旦出錯就會引發很多麻煩的問題)
在終端中直接輸入export PATH=$HOME/sys161/tools/bin:$PATH,這也是指導書上要求我們去做的,這種方式變量可以立即生效,但是隻適合臨時變量的設置。
在etc/profile 中加入PATH設置(這樣對所有的用戶都有效)或者在終端gedit ~/.profile (or .bashrc),將PATH添加在此文件末尾。(只對當前用戶有效)
問題解決如下圖所示

操作系統實驗6:IntroductiontoOS161

相關文章

IntroductiontoAlgorithm

計算機網絡實驗五:虛擬局域網技術

編譯原理實驗1:詞法分析

操作系統實驗4系統調用聯繫