終於到了最後一個學期,期初系上寄來的畢業檢核信顯示我只剩下三學分的系上選修還沒修完,這和我以前預期的相同:系上選修 30 分要修完不是簡單事,果然到了最後一學期才給它補上。多修的 3 學分可以拿來抵研究所的學分數,可以算是研究所先修課程。
- 系上選修|3 學分|王柏堯 型別與程式語言
- 系上選修|3 學分|黎士瑋 虛擬機器
這學期因為還有 Synology 的實習,所以只修了 6 學分,沒意外的話之後還會有一篇 Synology 的實習心得。
評分量尺¶
這裡的三星是正常的意思,不是韓國企業,相當於一般人說的四分。除了極力推薦或極度不推薦,否則不會給一星或五星。
王柏堯 型別與程式語言¶
系上選修|3 學分
- 綜合:★★★★☆
- 甜度:★★★★☆
- 涼度:★★★★☆
- 紮實:★★★★☆
上課方式:使用的教科書為經典的《Types and Programming Languages》,老師使用自製投影片搭配板書上課。
評分方式:作業 40%,老師不定時會出作業,這學期總共出了四次,內容多是使用課本作者提供的直譯器實作課堂上教到的 lambda calculus,基本上有寫都有分。期中期末考各佔 25%,和老師開的另一門邏輯課一樣,可以查看紙本或是離線的電子資源,題目都是簡單的手寫題。最後 10% 是出席成績。
心得:這堂課除了授課內容外其他都和老師另外一門「計算邏輯簡介」很像,可以參考我大三上的修課心得。我從以前就想要學程式語言理論了,我甚至還去圖書館借了這門課的課本,並且寫了一篇關於 lambda calculus 的文章,不過那時候只有看課本的前幾章而已。這學期看到有老師開程式語言,而且又是以前認識的王柏堯老師,我二話不說就來修了。
課程內容可以學到很多理論知識,這些理論都很紮實有意思,我也寫了一篇文章連結資訊理論與程式語言的型別理論,但和我想像中不一樣的是,我以為會像計算邏輯簡介一樣有不少實務實作,但這堂課則缺少這一部分。
黎士瑋 虛擬機器¶
系上選修|3 學分
- 綜合:★★★★★
- 甜度:★★★★☆
- 涼度:★★☆☆☆
- 紮實:★★★★☆
上課方式:上半學期主要由老師用投影片上課,課本是《Hardware and Software Support for Virtualization》,下半學期有報論文和期末專案發表,之間安插了兩堂老師上課。
評分方式:兩份作業各佔 10%,第一份作業是在 KVM 加入設定 CPU affinity 的功能,第二份作業則是讓 Rust 寫的 cloud hypervisor 支援 CCA v8。兩份作業最難的都不是想法,而是如何快速且有效率地設定虛擬化環境,因為這些作業並不是在你的系統上開一個虛擬機就可以了,而是要在虛擬機中開更多虛擬機,最多可能開到三個虛擬機。接著報論文包含 10% 報告與 10% 論文評論,有安排報告的課堂開始前,每個人都要寫兩篇論文的評論,然後每篇論文都有不同的組別上去報告。再來是 25% 期中考,非常開放式的問題,主要考關於如何設計虛擬化架構,平均分數只有 46 分。最後是期末口頭報告 15% 與書面報告 20%,和同學組成三人小組,提出一個關於虛擬機的專案並和老師討論,老師說沒問題就可以開始實作了。
心得:這堂課上課方式和老師之前開的「系統軟體設計與實作特論」很像,可以參考之前我寫的修課心得。內容都是虛擬機的運作原理,從頭學或是沒有作業系統相關背景的人可能會學得很痛苦,但因為我之前已經在老師的實驗室一年了,所以對於虛擬機算是熟悉。雖然說熟悉,但是這學期才真正開始理解虛擬機是怎麼運作,其實核心概念都圍繞在 CPU 特權級切換,理解系統呼叫大致就能理解虛擬機的運作了,我也寫了一篇關於虛擬機原理的文章。
雖然是全英文授課,但是老師說的英文非常容易理解。上課時我舉手問老師問題時,就算我聽不懂我自己在問什麼,老師還是能理解我腦袋中真正想問的問題,並且精準回答我不了解的地方。
虛擬機這個領域比較小眾,在台灣只有黎士瑋老師有在做這方面的研究,也只有老師有開虛擬機器的課程。我認為這堂課有一個很有趣的定位,大學以來從程式開始學起,之後學了系統程式設計接觸系統呼叫,然後再學習作業系統,最後學習計算機結構認識作業系統與硬體間的介面。接下來理應要學習硬體,但是虛擬機器卻以軟體模擬硬體,和剛才的上層往下層不一樣,這是從下層往上層模擬硬體,讓我們可以學習硬體的邏輯,這件事非常酷。