作業系統概論 – 交大修課心得
課程資料
作業系統概論
開課:黃世昆老師
修課年度:99資工系
課本是 《Operating System Concepts》。
上課方式
這堂課的價值主要偏實做。上課主要是用投影片講解,有時老師會講 Linus 的故事。
評分方式
這學期老師只有點一次名,不過有算分。以前聽說這堂課有很多 lab, Bonus 可以做,到了期中,就有人已經 8x 了,還說學期末有六個人 100,不過這學期盛況不再, Bonus 只剩兩個。
即使如此,作業依然不少,確實可以學到許多。像是 user thread scheduler 若不是修這堂課,我大概也不會有機會寫吧。
bonus 佔 10 分,所以作業考試和 bonus 加一加,分數上限是 110 分。學期末還有調分,最後有及格的人的平均是 81。
考試作業
老師好像蠻喜歡 Linux 而不是 Windows,所以許多作業主要在 Linux 上進行。這學期有三個 online judge 的作業,越早寫完,寫出題數愈多,分數愈高。除了把題目解出來外,每份作業還要另外寫一份報告解釋自己的作法並附上相關討論。
第一個是要寫一個小型的 online judge 去 judge 老師的程式,主要是要透過 fork 執行程式並想辦法取得子程式的資源使用,及輸出入的重導。
第二個是一般基礎程設的題目:〈2009-04: On Disk Scheduling〉,相對而言比較簡單。
第三個是用 makecontext/setcontext/getcontext/swapcontext 實做 thread scheduler:〈OS-0002: A user thread scheduler〉。這個作業不太好想,一開始為了搞清楚題意費了不少心思,寫好的第一個版本異常複雜,後來跟同學討論才想出較簡單的寫法。
除此之外,還有一些程式作業:有一個是要寫個程式製造 zombie process,並寫個報告說明什麼是 zombie process。還有一個是要用 C++ 配合 pthread, semaphore 實做 monitor。還有一個是要寫程式印出在 stack, heap 等等的變數及 functions 的記憶體位址,並比較與/proc/xxx/maps 的關係。
最後還有兩個 Bonus:
第一個是要用虛擬機 (ex. VirtualBox)安裝任一 Linux,並且加入自訂 system call 重新編譯核心,同時要寫一份報告及 demo system call 的使用。
推薦使用 Ubuntu,無論是安裝,編譯核心,加 system call,網路上都有 step by step 的教學。(因為版本會一直更新,所以這裡就不附連結了)安裝起來並不困難,只要一直按下一步就好了,如果有修過 SA 的,一定會很感動,他跟 FreeBSD 比真是天壤之別。
第二個是要取得 child process 的記憶體使用量的資訊(實際上為了完成 onilne judge hw1,本來就一定要完成這件事。)
我有把自己的報告和作業程式碼放在 github 上,可供參考:
- An online judge system
- On Disk Scheduling
- A user thread scheduler
- Illustrating /proc/xxx/maps and [vdso] in Linux
- 程式碼 @ github
考試方面,一共有三次期中考,老師都會給考古題,雖然會考很多新東西。
第一次考試,是到系計中線上考試,題型主要是選擇、填充等等。有一些記憶和觀念的問題,也有計算題。還有一些老師說是常識。第二次難度加深,還出了一題佔分 25 的程式題,是作業 monitor 的延伸。第三次改成紙筆考試,考得又更難了一些,計算題比重變得很高,尤其出了 page replacement 的題目。這題雖然在老師給的考古題就有出現,不過計算起來相當耗時。看到他的一瞬間,就直覺認為這份考卷要寫完很難。
結語
因為很多人作業寫不完的緣故,所以作業的 deadline 一直在延。我也在期末堆了四份報告和一份 online judge 沒寫,結果寒假第一個禮拜幾乎都在寫 OS 作業 囧
老師寄來的信,說話總是很客氣。
Bonus 中要裝的 Linux 真的推薦用 Ubuntu,我自己電腦上的主要作業系統就是灌 Ubuntu,反而 Windows 7 才是裝在虛擬機裡。感覺最方便的就是,不管是要寫 Java, Perl, Pthyon, Lisp, 還是 Prolog,執行環境都是直接用內建的套件管理員就可以輕鬆裝好。而且他上面又有很多方便的程式開發工具。
我都用 Vim 寫程式、gcc 編譯、gdb 除錯、git 管理程式碼。特別是 gdb,介紹給幾個人後,他們都覺得很棒,推薦大家可以試試看。
另外介紹一個工具叫 valgrind 是我上吳育松老師的資料結構時得知的。在除錯用 pthread 寫的 multithreaded 程式時,valgrind 和 gdb 真是配合的天衣無縫。我寫 monitor 作業時,他們真的幫助良多,否則我真不知要除錯多久。
延伸閱讀
- [教學]利用VirtualBox 建立虛擬電腦,安裝作業系統
- Ubuntu 中文 wiki
- Linux Tutorial: POSIX Threads
- 《The Art of Debugging with GDB, DDD, and Eclipse》雖然高中時我也看過那種可以看看你的程式碼就一下子找到錯誤的神人,不過比起培養那樣的能力,用除錯工具來彌補自己的不足似乎比較簡單。有 gdb 的幫助,寫起程式來真的輕鬆許多。這本書對 gdb 有詳細的介紹,寫得非常清楚,而且我也有推薦給浩然,大家可以去借來看。
- RMS’s gdb Debugger Tutorial
- 《Learning the vi and Vim Editors》一個好的文字編輯器,可以節省不少寫程式的時間,Vim 功能強大,個人非常喜歡。也可參考〈Vim的教學資料〉。
- Git - Fast Version Control System其實 git 主要是用來管理大型專案的程式碼,不過我用來管理多個版本的程式作業時感覺也相當不錯。有興趣的話可以看看。
p.s. 這篇文章裡提到的工具,有些也可在 Windows 上使用,在資工系計中甚至資訊服務中心的工作站上也都有,大家可以試試看。
文章作者 Shaform
上次更新 2019-01-17
授權條款 保留所有權利