最適合初學者學習的操作系統書,沒有理由不拿來讀一讀
本書圍繞3個主題元素展開講解:虛擬化(virtualization)、并發(concurrency)和持久性(persistence)。對于這些概念的討論,最終延伸到討論操作系統所做的大多數重要事情。
每個主要概念在若干章節中加以闡釋,其中大部分章節都提出了一個特定的問題,然后展示了解決它的方法。這些章節很簡短,嘗試(盡可能地)引用作為這些想法真正來源的源材料。我們寫這本書的目的之一就是厘清操作系統的發展脈絡,因為我們認為這有助于學生更清楚地理解過去是什么、現在是什么、將來會是什么。在這種情況下,了解香腸的制作方法幾乎與了解香腸的優點一樣重要。
我們在整本書中采用了幾種結構,值得在這里介紹一下。
無論何時,在試圖解決問題時,我們首先要說明最重要的問題是什么。我們在書中明確提出關鍵問題(crux of the problem),并希望通過本書其余部分提出的技術、算法和思想來解決。
在許多地方,我們將通過顯示一段時間內的行為來解釋系統的工作原理。這些時間線(timeline)是理解的本質。如果你知道會發生什么,例如,當進程出現頁故障時,你就可以真正了解虛擬內存的運行方式。如果你理解日志文件系統將塊寫入磁盤時發生的情況,就已經邁出了掌握存儲系統的第一步。
整本書中有許多“補充”和“提示”,為主線講解增添了一些趣味性。“補充”傾向于討論與主要文本相關的內容(但可能不是必要的);“提示”往往是一般經驗,可以應用于所構建的系統。
在整本書中,我們使用最古老的教學方法之一——對話(dialogue)。這些對話用于介紹主要的主題概念,并不時地復習這些內容。這也讓我們得以用更幽默的方式寫作。好吧,你覺得它們是有用還是幽默,完全是另一回事。
在每一個主要部分的開頭,我們將首先呈現操作系統提供的抽象(abstraction),然后在后續章節中介紹提供抽象所需的機制、策略和其他支持。抽象是計算機科學各個方面的基礎,因此它在操作系統中也是必不可少的。
在所有的章節中,我們嘗試使用可能的真實代碼(real code),而非偽代碼(pseudocode)。因此書中幾乎所有的示例,你應該能夠自己輸入并運行它們。在真實系統上運行真實代碼是了解操作系統的最佳方式,因此建議你盡可能這樣做。
在本書的各個部分,我們提供了一些作業(homework),確保你進一步理解書中的內容。其中許多作業都是對操作系統的一些模擬(simulation)程序。你應該下載作業,并運行它們,以此來測驗自己。作業模擬程序具有以下特征:通過給它們提供不同的隨機種子,你可以產生幾乎無限的問題,也可以讓模擬程序為你解決問題。因此,你可以一次又一次地自測,直至很好地理解了這些知識。
本書最重要的附錄是一組項目(project),可供你通過設計、測試和實現自己的代碼,來了解真實系統的工作原理。所有項目(以及上面提到的代碼示例)都是使用C編程語言(C programming language)[KR88]編寫的。C是一種簡單而強大的語言,是大多數操作系統的基礎,因此值得添加到你的工具庫中。附錄中含有兩種類型的項目(請參閱在線附錄中的想法)。第一類是系統編程(system programming)項目。這些項目非常適合那些不熟悉C和UNIX,并希望學習如何進行底層C編程的人。第二類基于在麻省理工學院開發的實際操作系統內核,稱為xv6 [CK+08]。這些項目非常適合已經有一些C的經驗并希望深入研究操作系統的學生。在威斯康星大學,我們以 3 種不同的方式開課:系統編程、xv6編程,或兩者兼而有之。
從這本書中你可以學習到哪些內容?
如何提供有許多CPU的假象?
如何創建并控制進程
如何高效、可控地虛擬化CPU
如何執行受限制的操作
如何在沒有協作的情況下獲得控制權
如何重獲CPU的控制權
如何開發調度策略
沒有完備的知識如何調度?
如何按比例分配CPU
如何在多處理器上調度工作
如何虛擬化內存
如何分配和管理內存
如何高效、靈活地虛擬化內存
怎樣支持大地址空間
如何管理空閑空間
如何通過頁來實現虛擬內存
如何加速地址轉換
如何讓頁表更小?
如何超越物理內存
如何決定踢出哪個頁
如何避免通用性“魔咒” 、
如何創建和控制線程?
怎樣實現一個鎖
如何給數據結構加鎖?
如何使用信號量?
如何處理常見的并發缺陷?
不用線程,如何構建并發服務器?
如何將I/O集成進計算機系統中?
如何減少輪詢開銷?
如何得到大型、快速、可靠的磁盤
操作系統應該如何管理持久存儲設備?都需要哪些API?實現有哪些重要方面?
如何構建一個簡單的文件系統?磁盤上需要什么結構?它們需要記錄什么?它們如何訪問?
如何組織文件系統數據結構以提高性能?在這些數據結構之上,需要哪些類型的分配策略?如何讓文件系統具有“磁盤意識”?
考慮到崩潰,如何更新磁盤
如何讓所有寫入變成順序寫入?
系統應如何確保寫入存儲的數據受到保護?需要什么技術?如何在低空間和時間開銷的情況下提高這些技術的效率?
如何用無法一直正常工作的部件,來構建能工作系統?這個基本問題應該讓你想起,我們在RAID存儲陣列中討論的一些主題。然而,這里的問題往往更復雜,解決方案也是如此。
如何構建分布式文件系統?要考慮哪些關鍵方面?哪里容易出錯?我們可以從現有系統中學到什么?
本文轉載自異步社區。
虛擬化 任務調度
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。