適合初學者學習的操作系統書,沒有理由不拿來讀一讀

      網友投稿 747 2022-05-28

      本書圍繞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小時內刪除侵權內容。

      上一篇:Python之深入解析優秀的時間格式轉換工具Delorean
      下一篇:還在為存儲方案猶豫不決?選擇OBS干啥啥都行
      相關文章
      亚洲国产美国国产综合一区二区| 亚洲中文字幕无码久久精品1| 亚洲日韩av无码| vvvv99日韩精品亚洲| 亚洲一线产品二线产品| 亚洲va成无码人在线观看| 亚洲欧洲精品一区二区三区| 亚洲av永久无码精品漫画| 国产亚洲精AA在线观看SEE| 亚洲女久久久噜噜噜熟女| 亚洲精品中文字幕无码蜜桃| 亚洲开心婷婷中文字幕| 国产亚洲日韩一区二区三区| 夜夜春亚洲嫩草影院| 亚洲欧洲精品无码AV| 久久久久亚洲av无码专区蜜芽| 久久国产精品亚洲一区二区| 亚洲AV区无码字幕中文色 | 精品久久久久久亚洲| 国产亚洲精品va在线| 亚洲AV无码一区二区二三区软件| 亚洲AV无码乱码国产麻豆穿越 | 亚洲欧洲日韩不卡| 亚洲精品456在线播放| 亚洲人成网站在线观看播放动漫| 亚洲乱码一二三四区国产| 亚洲国产熟亚洲女视频| 亚洲AV一区二区三区四区| 亚洲成A∨人片天堂网无码| 伊人久久亚洲综合| 亚洲av无码国产精品色午夜字幕 | 亚洲精品成人在线| 亚洲精品高清国产一线久久| 亚洲AV无码乱码在线观看裸奔| 久久久久久亚洲AV无码专区| 亚洲H在线播放在线观看H| 亚洲sm另类一区二区三区| 亚洲中文字幕丝袜制服一区| 国产精品亚洲片在线| 亚洲精品免费在线视频| 亚洲成a人片在线看|