簡介
對於最後的專案,你有兩個選擇:
- 繼續使用你自己的 JOS 核心並做 實驗 6,包括實驗 6 中的一個挑戰問題。(你可以隨意地、以任何有趣的方式去擴充套件實驗 6 或者 JOS 的任何部分,當然了,這不是課程規定的。)
- 在一個、二個或三個人組成的團隊中,你選擇去做一個涉及了你的 JOS 的專案。這個專案必須是涉及到與實驗 6 相同或更大的領域(如果你是團隊中的一員)。
目標是為了獲得樂趣或探索更高階的 O/S 的話題;你不需要做最新的研究。
如果你做了你自己的專案,我們將根據你的工作量有多少、你的設計有多優雅、你的解釋有多高明、以及你的解決方案多麼有趣或多有創意來為你打分。我們知道時間有限,因此也不期望你能在本學期結束之前重寫 Linux。要確保你的目標是合理的;合理地設定一個絕對可以實現的最小目標(即:控制你的實驗 6 的規模),如果進展順利,可以設定一個更大的目標。
如果你做了實驗 6,我們將根據你是否通過了測試和挑戰練習來為你打分。
交付期限
11 月 3 日:Piazza 討論和 1、2、或 3 年級組選擇(根據你的最終選擇來定)。使用在 Piazza 上的 lab7 標記/目錄。在 Piazza 上的文章評論區與其它人計論想法。使用這些文章幫你去找到有類似想法的其它學生一起組建一個小組。課程的教學人員將在 Piazza 上為你的專案想法給出反饋;如果你想得到更詳細的反饋,可以與我們單獨討論。
.
11 月 9 日:在 提交網站 上提交一個提議,只需要一到兩個段落就可以。提議要包括你的小組成員列表、你的計劃、以及明確的設計和實現打算。(如果你做實驗 6,就不用做這個了)
.
12 月 7 日:和你的簡短報告一起提交原始碼。將你的報告放在與名為 “README.pdf” 的檔案相同的目錄下。由於你只是這個實驗任務小組中的一員,你可能需要去使用 git 在小組成員之間共用你的專案程式碼。因此你需要去決定哪些原始碼將作為你的小組專案的共用起始點。一定要為你的最終專案去建立一個分支,並且命名為 lab7
。(如果你做了實驗 6,就按實驗 6 的提交要求做即可。)
.
12 月 11 日這一周:簡短的課堂演示。為你的 JOS 專案準備一個簡短的課堂演示。為了你的專案演示,我們將提供一個投影儀。根據小組數量和每個小組選擇的專案型別,我們可能會限制總的演講數,並且有些小組可能最終沒有機會上台演示。
.
12 月 11 日這一周:助教們驗收。向助教演示你的專案,因此我們可能會提問一些問題,去了解你所做的一些細節。
專案想法
如果你不做實驗 6,下面是一個啟迪你的想法列表。但是,你應該大膽地去實現你自己的想法。其中一些想法只是一個開端,並且本身不在實驗 6 的領域內,並且其它的可能是在更大的領域中。
- 使用 x86 虛擬機器支援 去構建一個能夠執行多個訪客系統(比如,多個 JOS 範例)的虛擬機器監視器。
- 使用 Intel SGX 硬體保護機制做一些有用的事情。這是使用 Intel SGX 的最新的論文。
- 讓 JOS 檔案系統支援寫入、檔案建立、為永續性使用紀錄檔、等等。或許你可以從 Linux EXT3 上找到一些啟示。
- 從 軟更新、WAFL、ZFS、或其它較高階的檔案系統上找到一些使用檔案系統的想法。
- 給一個檔案系統新增快照功能,以便於使用者能夠檢視過去的多個時間點上的檔案系統。為了降低空間使用量,你或許要使用一些寫時複製技術。
- 使用分頁去提供實時共用的記憶體,來構建一個 分散式的共用記憶體(DSM)系統,以便於你在一個機器叢集上執行多執行緒的共用記憶體的併行程式。當一個執行緒嘗試去存取位於另外一個機器上的頁時,頁故障將給 DSM 系統提供一個機會,讓它基於網路去從當前儲存這個頁的任意一台機器上獲取這個頁。
- 允許進程在機器之間基於網路進行遷移。你將需要做一些關於一個進程狀態的多個片段方面的事情,但是由於在 JOS 中許多狀態是在使用者空間中,它或許從 Linux 上的進程遷移要容易一些。
- 在 JOS 中實現 分頁 到磁碟,這樣那個進程使用的記憶體就可以大於真實的記憶體。使用交換空間去擴充套件你的記憶體。
- 為 JOS 實現檔案的 mmap()。
- 使用 xfi 將一個進程的程式碼沙箱化。
- 支援 x86 的 2MB 或 4MB 的頁大小。
- 修改 JOS 讓核心支援進程內的執行緒。從檢視 課堂上的 uthread 任務 去開始。實現排程器觸發將是實現這個專案的一種方式。
- 在 JOS 的核心中或檔案系統中(實現多執行緒之後),使用細粒度鎖或無鎖並行。Linux 核心使用 讀複製更新 去執行無需上鎖的讀取操作。通過在 JOS 中實現它來探索 RCU,並使用它去支援無鎖讀取的名稱快取。
- 實現 外核心論文 中的想法。例如包過濾器。
- 使 JOS 擁有軟實時行為。用它來辨識一些應用程式時非常有用。
- 使 JOS 執行在 64 位 CPU 上。這包括重設計虛擬記憶體讓它使用 4 級頁表。有關這方面的文件,請檢視 參考頁。
- 移植 JOS 到一個不同的微處理器。這個 osdev wiki 或許對你有幫助。
- 為 JOS 系統增加一個“視窗”系統,包括圖形驅動和滑鼠。有關這方面的文件,請檢視 參考頁。sqrt(x) 就是一個 JOS “視窗” 系統的範例。
- 在 JOS 中實現 dune,以提供特權硬體指令給使用者空間應用程式。
- 寫一個使用者級偵錯程式,新增類似跟蹤的功能;硬體暫存器概要(即:Oprofile);呼叫跟蹤等等。
- 為(靜態的)Linux 可執行程式做一個二進位制模擬。