歡迎光臨
每天分享高質量文章

Caffeinated 6.828:實驗 6:最終的 JOS 專案 | Linux 中國

下麵是一個啟迪你的想法串列。但是,你應該大膽地去實現你自己的想法。其中一些想法只是一個開端,並且本身不在實驗 6 的領域內,並且其它的可能是在更大的領域中。
— Csail.mit

 

致謝
譯自 | pdos.csail.mit.edu 
作者 | Csail.mit
譯者 | LCTT / qhwdw

簡介

對於最後的專案,你有兩個選擇:

◈ 繼續使用你自己的 JOS 核心並做 實驗 6[1],包括實驗 6 中的一個挑戰問題。(你可以隨意地、以任何有趣的方式去擴充套件實驗 6 或者 JOS 的任何部分,當然了,這不是課程規定的。)
◈ 在一個、二個或三個人組成的團隊中,你選擇去做一個涉及了你的 JOS 的專案。這個專案必須是涉及到與實驗 6 相同或更大的領域(如果你是團隊中的一員)。

標的是為了獲得樂趣或探索更高階的 O/S 的話題;你不需要做最新的研究。

如果你做了你自己的專案,我們將根據你的工作量有多少、你的設計有多優雅、你的解釋有多高明、以及你的解決方案多麼有趣或多有創意來為你打分。我們知道時間有限,因此也不期望你能在本學期結束之前重寫 Linux。要確保你的標的是合理的;合理地設定一個絕對可以實現的最小標的(即:控制你的實驗 6 的規模),如果進展順利,可以設定一個更大的標的。

如果你做了實驗 6,我們將根據你是否透過了測試和挑戰練習來為你打分。

交付期限

11 月 3 日:Piazza 討論和 1、2、或 3 年級組選擇(根據你的最終選擇來定)。使用在 Piazza 上的 lab7 標記/目錄。在 Piazza 上的文章評論區與其它人計論想法。使用這些文章幫你去找到有類似想法的其它學生一起組建一個小組。課程的教學人員將在 Piazza 上為你的專案想法給出反饋;如果你想得到更詳細的反饋,可以與我們單獨討論。

11 月 9 日:在 提交網站[2] 上提交一個提議,只需要一到兩個段落就可以。提議要包括你的小組成員串列、你的計劃、以及明確的設計和實現打算。(如果你做實驗 6,就不用做這個了)

12 月 7 日:和你的簡短報告一起提交原始碼。將你的報告放在與名為 “README.pdf” 的檔案相同的目錄下。由於你只是這個實驗任務小組中的一員,你可能需要去使用 git 在小組成員之間共享你的專案程式碼。因此你需要去決定哪些原始碼將作為你的小組專案的共享起始點。一定要為你的最終專案去建立一個分支,並且命名為 lab7。(如果你做了實驗 6,就按實驗 6 的提交要求做即可。)

12 月 11 日這一週:簡短的課堂演示。為你的 JOS 專案準備一個簡短的課堂演示。為了你的專案演示,我們將提供一個投影儀。根據小組數量和每個小組選擇的專案型別,我們可能會限制總的演講數,並且有些小組可能最終沒有機會上臺演示。

12 月 11 日這一週:助教們驗收。向助教演示你的專案,因此我們可能會提問一些問題,去瞭解你所做的一些細節。

專案想法

如果你不做實驗 6,下麵是一個啟迪你的想法串列。但是,你應該大膽地去實現你自己的想法。其中一些想法只是一個開端,並且本身不在實驗 6 的領域內,並且其它的可能是在更大的領域中。

◈ 使用 x86 虛擬機器支援[3] 去構建一個能夠執行多個訪客系統(比如,多個 JOS 實體)的虛擬機器監視器。
◈ 使用 Intel SGX 硬體保護機製做一些有用的事情。這是使用 Intel SGX 的最新的論文[4]
◈ 讓 JOS 檔案系統支援寫入、檔案建立、為永續性使用日誌、等等。或許你可以從 Linux EXT3 上找到一些啟示。
◈ 從 軟更新[5]WAFL[6]、ZFS、或其它較高階的檔案系統上找到一些使用檔案系統的想法。
◈ 給一個檔案系統新增快照功能,以便於使用者能夠檢視過去的多個時間點上的檔案系統。為了降低空間使用量,你或許要使用一些寫時複製技術。
◈ 使用分頁去提供實時共享的記憶體,來構建一個 分散式的共享記憶體[7](DSM)系統,以便於你在一個機器叢集上執行多執行緒的共享記憶體的並行程式。當一個執行緒嘗試去訪問位於另外一個機器上的頁時,頁故障將給 DSM 系統提供一個機會,讓它基於網路去從當前儲存這個頁的任意一臺機器上獲取這個頁。
◈ 允許行程在機器之間基於網路進行遷移。你將需要做一些關於一個行程狀態的多個片段方面的事情,但是由於在 JOS 中許多狀態是在使用者空間中,它或許從 Linux 上的行程遷移要容易一些。
◈ 在 JOS 中實現 分頁[8] 到磁碟,這樣那個行程使用的記憶體就可以大於真實的記憶體。使用交換空間去擴充套件你的記憶體。
◈ 為 JOS 實現檔案的 mmap()[9]
◈ 使用 xfi[10] 將一個行程的程式碼沙箱化。
◈ 支援 x86 的 2MB 或 4MB 的頁大小[11]
◈ 修改 JOS 讓核心支援行程內的執行緒。從檢視 課堂上的 uthread 任務[12] 去開始。實現排程器觸發將是實現這個專案的一種方式。
◈ 在 JOS 的核心中或檔案系統中(實現多執行緒之後),使用細粒度鎖或無鎖併發。Linux 核心使用 讀複製更新[13] 去執行無需上鎖的讀取操作。透過在 JOS 中實現它來探索 RCU,並使用它去支援無鎖讀取的名稱快取。
◈ 實現 外核心論文[14] 中的想法。例如包過濾器。
◈ 使 JOS 擁有軟實時行為。用它來辨識一些應用程式時非常有用。
◈ 使 JOS 執行在 64 位 CPU 上。這包括重設計虛擬記憶體讓它使用 4 級頁表。有關這方面的檔案,請檢視 參考頁[15]
◈ 移植 JOS 到一個不同的微處理器。這個 osdev wiki[16] 或許對你有幫助。
◈ 為 JOS 系統增加一個“視窗”系統,包括圖形驅動和滑鼠。有關這方面的檔案,請檢視 參考頁[15]sqrt(x)[17] 就是一個 JOS “視窗” 系統的示例。
◈ 在 JOS 中實現 dune[18],以提供特權硬體指令給使用者空間應用程式。
◈ 寫一個使用者級除錯器,新增類似跟蹤的功能;硬體暫存器概要(即:Oprofile);呼叫跟蹤等等。
◈ 為(靜態的)Linux 可執行程式做一個二進位制模擬。

via: https://pdos.csail.mit.edu/6.828/2018/labs/lab7/

作者:csail.mit[20] 選題:lujun9972 譯者:qhwdw 校對:wxy

贊(0)

分享創造快樂