操作繫統導論
作 者: [美] 雷姆茲·H.阿帕希杜塞爾( Remzi H. Arpaci-Dusseau), [美]安德莉亞·C.阿帕希杜塞爾(Andrea C. Arpaci-Dusseau) 著 王海鵬 譯
定 價: 99
出?版?社: 人民郵電出版社
出版日期: 2019年06月01日
頁 數: 482
裝 幀: 簡裝
ISBN: 9787115508232
●第 1章 關於本書的對話 1 第 2章 操作繫統介紹 3 2.1 虛擬化CPU 4 2.2 虛擬化內存 6 2.3 並發 7 2.4 持久性 9 2.5 設計目標 11 2.6 簡單歷史 12 2.7 小結 15 參考資料 15 第 1部分 虛擬化 第3章 關於虛擬化的對話 18 第4章 抽像:進程 19 4.1 抽像:進程 20 4.2 進程API 20 4.3 進程創建:更多細節 21 4.4 進程狀態 22 4.5 數據結構 24 4.6 小結 25 參考資料 25 作業 26 問題 26 第5章 插敘:進程API 28 5.1 fork()繫統調用 28 5.2 wait()繫統調用 29 5.3 最後是exec()繫統調用 30 5.4 為什麼這樣設計API 32 5.5 其他API 34 5.6 小結 34 參考資料 34 作業(編碼) 35 問題 35 第6章 機制:受限直接執行 37 6.1 基本技巧:受限直接執行 37 6.2 問題1:受限制的操作 38 6.3 問題2:在進程之間切換 40 6.4 擔心並發嗎 44 6.5 小結 45 參考資料 45 作業(測量) 47 第7章 進程調度:介紹 48 7.1 工作負載假設 48 7.2 調度指標 49 7.3 先進先出(FIFO) 49 7.4 最短任務優先(SJF) 50 7.5 最短完成時間優先(STCF) 51 7.6 新度量指標:響應時間 52 7.7 輪轉 52 7.8 結合I/O 54 7.9 無法預知 54 7.10 小結 55 參考資料 55 作業 56 問題 56 第8章 調度:多級反饋隊列 57 8.1 MLFQ:基本規則 57 8.2 嘗試 #1:如何改變優先級 58 8.3 嘗試 #2:提升優先級 60 8.4 嘗試 #3:更好的計時方式 61 8.5 MLFQ調優及其他問題 61 8.6 MLFQ:小結 62 參考資料 63 作業 64 問題 64 第9章 調度:比例份額 65 9.1 基本概念:彩票數表示份額 65 9.2 彩票機制 66 9.3 實現 67 9.4 一個例子 68 9.5 如何分配彩票 68 9.6 為什麼不是確定的 69 9.7 小結 70 參考資料 70 作業 71 問題 71 第 10章 多處理器調度(不錯) 73 10.1 背景:多處理器架構 73 10.2 別忘了同步 75 10.3 最後一個問題:緩存親和度 76 10.4 單隊列調度 76 10.5 多隊列調度 77 10.6 Linux 多處理器調度 79 10.7 小結 79 參考資料 79 第 11章 關於CPU虛擬化的總結對話 81 第 12章 關於內存虛擬化的對話 83 第 13章 抽像:地址空間 85 13.1 早期繫統 85 13.2 多道程序和時分共享 85 13.3 地址空間 86 13.4 目標 87 13.5 小結 89 參考資料 89 第 14章 插敘:內存操作API 91 14.1 內存類型 91 14.2 malloc()調用 92 14.3 free()調用 93 14.4 常見錯誤 93 14.5 底層操作繫統支持 96 14.6 其他調用 97 14.7 小結 97 參考資料 97 作業(編碼) 98 問題 98 第 15章 機制:地址轉換 100 15.1 假設 101 15.2 一個例子 101 15.3 動態(基於硬件)重定位 103 15.4 硬件支持:總結 105 15.5 操作繫統的問題 105 15.6 小結 108 參考資料 109 作業 110 問題 110 第 16章 分段 111 16.1 分段:泛化的基址/界限 111 16.2 我們引用哪個段 113 16.3 棧怎麼辦 114 16.4 支持共享 114 16.5 細粒度與粗粒度的分段 115 16.6 操作繫統支持 115 16.7 小結 117 參考資料 117 作業 118 問題 119 第 17章 空閑空間管理 120 17.1 假設 120 17.2 底層機制 121 17.3 基本策略 126 17.4 其他方式 128 17.5 小結 130 參考資料 130 作業 131 問題 131 第 18章 分頁:介紹 132 18.1 一個簡單例子 132 18.2 頁表存在哪裡 134 18.3 列表中究竟有什麼 135 18.4 分頁:也很慢 136 18.5 內存追蹤 137 18.6 小結 139 參考資料 139 作業 140 問題 140 第 19章 分頁:快速地址轉換(TLB) 142 19.1 TLB的基本算法 142 19.2 示例:訪問數組 143 19.3 誰來處理TLB未命中 145 19.4 TLB的內容 146 19.5 上下文切換時對TLB的處理 147 19.6 TLB替換策略 149 19.7 實際繫統的TLB表項 149 19.8 小結 150 參考資料 151 作業(測量) 152 問題 153 第 20章 分頁:較小的表 154 20.1 簡單的解決方案:更大的頁 154 20.2 混合方法:分頁和分段 155 20.3 多級頁表 157 20.4 反向頁表 162 20.5 將頁表交換到磁盤 163 20.6 小結 163 參考資料 163 作業 164 問題 164 第 21章 超越物理內存:機制 165 21.1 交換空間 165 21.2 存在位 166 21.3 頁錯誤 167 21.4 內存滿了怎麼辦 168 21.5 頁錯誤處理流程 168 21.6 交換何時真正發生 169 21.7 小結 170 參考資料 171 第 22章 超越物理內存:策略 172 22.1 緩存管理 172 22.2 最優替換策略 173 22.3 簡單策略:FIFO 175 22.4 另一簡單策略:隨機 176 22.5 利用歷史數據:LRU 177 22.6 工作負載示例 178 22.7 實現基於歷史信息的算法 180 22.8 近似LRU 181 22.9 考慮髒頁 182 22.10 其他虛擬內存策略 182 22.11 抖動 183 22.12 小結 183 參考資料 183 作業 185 問題 185 第 23章 VAX/VMS虛擬內存繫統 186 23.1 背景 186 23.2 內存管理硬件 186 23.3 一個真實的地址空間 187 23.4 頁替換 189 23.5 其他漂亮的虛擬內存技巧 190 23.6 小結 191 參考資料 191 第 24章 內存虛擬化總結對話 193 第 2部分 並發 第 25章 關於並發的對話 196 第 26章 並發:介紹 198 26.1 實例:線程創建 199 26.2 為什麼更糟糕:共享數據 201 26.3 核心問題:不可控的調度 203 26.4 原子性願望 205 26.5 還有一個問題:等待另一個 線程 206 26.6 小結:為什麼操作繫統課要研究 並發 207 參考資料 207 作業 208 問題 208 第 27章 插敘:線程API 210 27.1 線程創建 210 27.2 線程完成 211 27.3 鎖 214 27.4 條件變量 215 27.5 編譯和運行 217 27.6 小結 217 參考資料 218 第 28章 鎖 219 28.1 鎖的基本思想 219 28.2 Pthread鎖 220 28.3 實現一個鎖 220 28.4 評價鎖 220 28.5 控制中斷 221 28.6 測試並設置指令(原子交換) 222 28.7 實現可用的自旋鎖 223 28.8 評價自旋鎖 225 28.9 比較並交換 225 28.10 鏈接的加載和條件式存儲指令 226 28.11 獲取並增加 228 28.12 自旋過多:怎麼辦 229 28.13 簡單方法:讓出來吧,寶貝 229 28.14 使用隊列:休眠替代自旋 230 28.15 不同操作繫統,不同實現 232 28.16 兩階段鎖 233 28.17 小結 233 參考資料 233 作業 235 問題 235 第 29章 基於鎖的並發數據結構 237 29.1 並發計數器 237 29.2 並發鏈表 241 29.3 並發隊列 244 29.4 並發散列表 245 29.5 小結 246 參考資料 247 第30章 條件變量 249 30.1 定義和程序 250 30.2 生產者/消費者(有界緩衝區) 問題 252 30.3 覆蓋條件 260 30.4 小結 261 參考資料 261 第31章 信號量 263 31.1 信號量的定義 263 31.2 二值信號量(鎖) 264 31.3 信號量用作條件變量 266 31.4 生產者/消費者(有界緩衝區) 問題 268 31.5 讀者—寫者鎖 271 31.6 哲學家就餐問題 273 31.7 如何實現信號量 275 31.8 小結 276 參考資料 276 第32章 常見並發問題 279 32.1 有哪些類型的缺陷 279 32.2 非死鎖缺陷 280 32.3 死鎖缺陷 282 32.4 小結 288 參考資料 289 第33章 基於事件的並發(進階) 291 33.1 基本想法:事件循環 291 33.2 重要API:select()(或poll()) 292 33.3 使用select() 293 33.4 為何更簡單?無須鎖 294 33.5 一個問題:阻塞繫統調用 294 33.6 解決方案:異步I/O 294 33.7 另一個問題:狀態管理 296 33.8 什麼事情仍然很難 297 33.9 小結 298 參考資料 298 第34章 並發的總結對話 300 第3部分 持久性 第35章 關於持久性的對話 302 第36章 I/O設備 303 36.1 繫統架構 303 36.2 標準設備 304 36.3 標準協議 304 36.4 利用中斷減少CPU開銷 305 36.5 利用DMA進行更高效的數據 傳送 306 36.6 設備交互的方法 307 36.7 納入操作繫統:設備驅動程序 307 36.8 案例研究:簡單的IDE磁盤驅動 程序 309 36.9 歷史記錄 311 36.10 小結 311 參考資料 312 第37章 磁盤驅動器 314 37.1 接口 314 37.2 基本幾何形狀 314 37.3 簡單的磁盤驅動器 315 37.4 I/O時間:用數學 318 37.5 磁盤調度 320 37.6 小結 323 參考資料 323 作業 324 問題 324 第38章 廉價冗餘磁盤陣列(RAID) 326 38.1 接口和RAID內部 327 38.2 故障模型 327 38.3 如何評估RAID 328 38.4 RAID 0級:條帶化 328 38.5 RAID 1級:鏡像 331 38.6 RAID 4級:通過奇偶校驗 空間 333 38.7 RAID 5級:旋轉奇偶校驗 336 38.8 RAID比較:總結 337 38.9 其他有趣的RAID問題 338 38.10 小結 338 參考資料 339 作業 340 問題 340 第39章 插敘:文件和目錄 342 39.1 文件和目錄 342 39.2 文件繫統接口 343 39.3 創建文件 343 39.4 讀寫文件 344 39.5 讀取和寫入,但不按順序 346 39.6 用fsync()立即寫入 346 39.7 文件重命名 347 39.8 獲取文件信息 348 39.9 刪除文件 349 39.10 創建目錄 349 39.11 讀取目錄 350 39.12 刪除目錄 351 39.13 硬鏈接 351 39.14 符號鏈接 353 39.15 創建並掛載文件繫統 354 39.16 總結 355 參考資料 355 作業 356 問題 356 第40章 文件繫統實現 357 40.1 思考方式 357 40.2 整體組織 358 40.3 文件組織:inode 359 40.4 目錄組織 363 40.5 空閑空間管理 364 40.6 訪問路徑:讀取和寫入 364 40.7 緩存和緩衝 367 40.8 小結 369 參考資料 369 作業 370 問題 371 第41章 局部性和快速文件繫統 372 41.1 問題:性能不佳 372 41.2 FFS:磁盤意識是解決方案 373 41.3 組織結構:柱面組 373 41.4 策略:如何分配文件和目錄 374 41.5 測量文件的局部性 375 41.6 大文件例外 376 41.7 關於FFS的其他幾件事 377 41.8 小結 378 參考資料 378 第42章 崩潰一致性:FSCK和日志 380 42.1 一個詳細的例子 380 42.2 解決方案#1:文件繫統檢查 程序 383 42.3 解決方案#2:日志 (或預寫日志) 384 42.4 解決方案#3:其他方法 392 42.5 小結 393 參考資料 393 第43章 日志結構文件繫統 395 43.1 按順序寫入磁盤 396 43.2 順序而高效地寫入 396 43.3 要緩衝多少 397 43.4 問題:查找inode 398 43.5 通過間接解決方案:inode映射 398 43.6 檢查點區域 399 43.7 從磁盤讀取文件:回顧 400 43.8 目錄如何 400 43.9 一個新問題:垃圾收集 401 43.10 確定塊的死活 402 43.11 策略問題:要清理哪些塊, 何時清理 403 43.12 崩潰恢復和日志 403 43.13 小結 404 參考資料 404 第44章 數據完整性和保護 407 44.1 磁盤故障模式 407 44.2 處理潛在的扇區錯誤 409 44.3 檢測訛誤:校驗和 409 44.4 使用校驗和 412 44.5 一個新問題:錯誤的寫入 412 44.6 最後一個問題:丟失的寫入 413 44.7 擦淨 413 44.8 校驗和的開銷 414 44.9 小結 414 參考資料 414 第45章 關於持久的總結對話 417 第46章 關於分布式的對話 418 第47章 分布式繫統 419 47.1 通信基礎 420 47.2 不可靠的通信層 420 47.3 可靠的通信層 422 47.4 通信抽像 424 47.5 遠程過程調用(RPC) 425 47.6 小結 428 參考資料 429 第48章 Sun的網絡文件繫統(NFS) 430 48.1 基本分布式文件繫統 430 48.2 交出NFS 431 48.3 關注點:簡單快速的服務器崩潰 恢復 431 48.4 快速崩潰恢復的關鍵:無狀態 432 48.5 NFSv2協議 433 48.6 從協議到分布式文件繫統 434 48.7 利用冪等操作處理服務器故障 435 48.8 提高性能:客戶端緩存 437 48.9 緩存一致性問題 437 48.10 評估NFS的緩存一致性 439 48.11 服務器端寫緩衝的隱含意義 439 48.12 小結 440 參考資料 440 第49章 Andrew文件繫統(AFS) 442 49.1 AFS版本1 442 49.2 版本1的問題 443 49.3 改進協議 444 49.4 AFS版本2 444 49.5 緩存一致性 446 49.6 崩潰恢復 447 49.7 AFSv2的擴展性和性能 448 49.8 AFS:其他改進 450 49.9 小結 450 參考資料 451 作業 452 問題 452 第50章 關於分布式的總結對話 453 附錄A 關於虛擬機監視器的對話 454 附錄B 虛擬機監視器 455 附錄C 關於監視器的對話 466 附錄D 關於實驗室的對話 467 附錄E 實驗室:指南 468 附錄F 實驗室:繫統項目 478 附錄G 實驗室:xv6項目 480
內容簡介
這是一本關於現代操作繫統的書。全書圍繞虛擬化、並發和持久性這3個主要概念展開,介紹了所有現代繫統的主要組件(包括調度、虛擬內存管理、磁盤和I/O子繫統、文件繫統 )。 本書共50章,分為3個部分,分別講述虛擬化、並發和持久性的相關內容。本書大部分章節均先提出特定的問題,然後通過書中介紹的技術、算法和思想來解決這些問題。筆者以對話形式引入所介紹的主題概念,行文詼諧幽默卻又鞭闢入裡,力求幫助讀者理解操作繫統中虛擬化、並發和持久性的原理。 本書內容全面,並給出了真實可運行的代碼(而非偽代碼),還提供了相應的練習,適合高等院校相關專業教師教學和高校學生自學。
[美] 雷姆茲·H.阿帕希杜塞爾( Remzi H. Arpaci-Dusseau), [美]安德莉亞·C.阿帕希杜塞爾(Andrea C. Arpaci-Dusseau) 著 王海鵬 譯
雷姆茲·H.阿帕希杜塞爾(Remzi H.Arpaci-Dusseau)和安德莉亞·C.阿帕希杜塞爾 (Andrea C.Arpaci-Dusseau)夫婦是美國威斯康星大學計算機科學教授。二人都從事計算機操作繫統方面的教學和研究。
"