《國外計算機科學教材系列:操作系統·精髓與設計原理(第7版)》是一本關于操作系統的概念、結構和機制的教材,其目的是盡可能清楚和全面地展示現代操作系統的本質和特點;同時,《國外計算機科學教材系列:操作系統·精髓與設計原理(第7版)》也是講解操作系統的經典教材,不僅系統地講述了操作系統的基本概念、原理和方法,而且以當代最流行的操作系統——Windows7、UNIX和Linux為例,全面清楚地展現了當代操作系統的本質和特點。與本書配套的專用網站,為幫助教師和學生理解書中內容,提供了及時、生動的材料。
《國外計算機科學教材系列:操作系統·精髓與設計原理(第7版)》既注重對操作系統經典知識的講解,又緊密結合當代最新的操作系統發展趨勢,可作為大學計算機專業學生的教材和參考書,也可供從事計算機專業研究方向的專業技術人員參考。
譯者序
操作系統在計算機系統中占據重要的地位,是計算機系統的核心和靈魂,是構建在計算機硬件之上的第一層軟件,也是基礎軟件運行平臺的主要成分。“操作系統”是計算機科學與技術專業的一門非常重要的專業基礎課,一本好的教材可以使學生通過仔細閱讀、深入思考、不斷練習,循序漸進地提高自己的專業知識和技能水平。
一本教材,承載著什么?學生和教師對它的期望又是什么?WilliamStallings博士編寫的《操作系統——精髓與設計原理》第七版給出了完美的答案。WilliamStallings博士在教材的修訂過程中,將第六版交給了一批從事相關教學和研究的教授們審閱,使新一版的敘述更加清晰、緊湊,說明文字也進行了修正,使本書在教育學及用戶友善性方面有了新的改進。作為一本經典的教材,在美國,多所大學采用本書的前幾個版本作為教材或參考書目;在中國,講授操作系統課程的教師和學習操作系統課程的學生對“精髓”一書也是非常熟悉。
我們真誠地向廣大讀者推薦WilliamStallings博士的這本教材。本教材提供了操作系統原理的全景圖,對操作系統的概念、結構和機制,進行了系統、全面的闡述,并清晰地展示了當代操作系統的本質和特點。特別是,由于本教材已經出到第七版,每一版本都在多位教師使用、反饋建議的基礎上,對不足進行了更新,并結合新技術的發展,增加了新內容以反映操作系統的新進展。
教材第七版主要內容分為八個部分。第一部分綜述了計算機組織與系統結構,重點講述與操作系統設計相關的主題。第二部分詳細分析了進程、多線程、對稱多處理(SMP)和微內核,以及單一系統中的并發機制,重點講述互斥和死鎖。第三部分全面介紹了內存管理技術,包括虛擬存儲器。第四部分討論了線程調度、SMP調度和實時調度,分析比較了多種進程調度方法。第五部分主要分析了操作系統中對I/O功能的控制,特別是磁盤I/O,給出了關于文件管理的綜述。第六部分討論了嵌入式操作系統的一般性原理,并介紹了兩個實例系統:TinyOS和eCos。第七部分概述了涉及計算機和網絡安全的威脅與機制。第八部分圍繞分布式系統,分析了計算機系統網絡化技術的主要趨勢,同時還介紹了分布式系統開發中的一些主要設計領域。
本書依然選擇最流行、應用最廣泛的Windows(Windows7)和Linux作為實例操作系統,并增補了多核操作系統、虛擬機、新的調度程序實例、面向服務的架構(SOA)、概率、統計和排隊分析、B樹等反映操作系統領域進展變化的新內容。在講解操作系統每一功能的過程中,引入了實例操作系統,以加深讀者對原理的理解。本書配備有相應的網站,包括一系列相關鏈接,包括作業題目和解答、編程項目、重要論文、支持文檔、在線章節、在線附錄等,并補充了大量的“現場測試”型作業練習。本書在每一章開始給出了學習目標,還按章節給出了學生應該在本章關注的主要概念。本書給教師提供了幾個教學大綱樣例,允許教師在有限的時間(如16周或12周)內完成教學任務。這些樣例是在一些教師們在第六版的真實教學經驗的基礎上形成的。上述內容為學生和教師提供豐富的輔助材料。
為了配合基于本書的操作系統教學,我們參照本書的重要知識點實現了一個教學用uCore操作系統,并基于uCore操作系統設計了8個增量式的操作系統實驗。有興趣的學生可在了解基本的操作系統概念和原理的基礎上,通過閱讀實驗指導書,分析uCore操作系統源碼,完成實驗中的練習,擴展uCore操作系統功能,來逐步體會一個操作系統是如何實現的,以及操作系統的概念原理和實際實現之間的緊密聯系與巨大差異。相關實驗指導書文檔和實驗代碼放在https://github.com/chyyuu/ucore_pub上,且會持續更新。
參加本書翻譯、審閱和校對的還有劉偉、杜圓圓、閻梵茜、徐淑琪、孔俊俊、閆林、張琳、馮濤、劉晗、王浩宇、周欣、陳剛、李小奇、劉夢馨、閆豐潤、袁鵬飛、陳昕、呂驍博等人,在此對他(她)們的貢獻表示誠摯的謝意。
由于譯者水平有限,本書的譯文中必定會存在一些不足或錯誤之處,歡迎各位專家和廣大讀者批評指正。
譯者
2012年8月
第0章 讀者與教師指南
0.1 本書概述
0.2 實例系統
0.3 讀者和教師的學習路線圖
0.4 互聯網和網站資源
第一部分 背景知識
第1章 計算機系統概述
1.1 基本構成
1.2 微處理器的發展演化
1.3 指令的執行
1.4 中斷
1.4.1 中斷和指令周期
1.4.2 中斷處理
1.4.3 多個中斷
1.5 存儲器的層次結構
1.6 高速緩存
1.6.1 動機
1.6.2 高速緩存原理
1.6.3 高速緩存設計
1.7 直接內存存取
1.8 多處理器和多核計算機組織結構
1.8.1 對稱多處理器
1.8.2 多核計算機
1.9 推薦讀物和網站
1.10 關鍵術語、復習題和習題
1.10.1 關鍵術語
1.10.2 復習題
1.10.3 習題
附錄1A 兩級存儲器的性能特征
第2章 操作系統概述
2.1 操作系統的目標和功能
2.1.1 作為用戶/計算機接口的操作系統
2.1.2 作為資源管理器的操作系統
2.1.3 操作系統的易擴展性
2.2 操作系統的發展
2.2.1 串行處理
2.2.2 簡單批處理系統
2.2.3 多道批處理系統
2.2.4 分時系統
2.3 主要的成就
2.3.1 進程
2.3.2 內存管理
2.3.3 信息保護和安全
2.3.4 調度和資源管理
2.4 現代操作系統的特征
2.5 虛擬機
2.5.1 虛擬機和虛擬化
2.5.2 虛擬機架構
2.6 針對多處理器和多核的操作系統設計考慮因素
2.6.1 對稱多處理器計算機的操作系統設計考慮因素
2.6.2 多核計算機的操作系統設計考慮因素
2.7 微軟Windows系統簡介
2.7.1 歷史
2.7.2 現代操作系統
2.7.3 體系結構
2.7.4 客戶/服務器模型
2.7.5 線程和SMP
2.7.6 Windows對象
2.7.7 Windows 7中的新特性
2.8 傳統的UNIX系統
2.8.1 歷史
2.8.2 描述
2.9 現代UNIX系統
2.9.1 System V版本4(簡稱SVR4)
2.9.2 BSD
2.9.3 Solaris 10
2.10 Linux操作系統
2.10.1 歷史
2.10.2 模塊結構
2.10.3 內核組件
2.11 Linux Vserver虛機器結構
2.12 推薦讀物和網站
2.13 關鍵術語、復習題和習題
2.13.1 關鍵術語
2.13.2 復習題
2.13.3 習題
第二部分 進程
第3章 進程描述和控制
3.1 什么是進程
3.1.1 背景
3.1.2 進程和進程控制塊
3.2 進程狀態
3.2.1 兩狀態進程模型
3.2.2 進程的創建和終止
3.2.3 五狀態模型
3.2.4 被掛起的進程
3.3 進程描述
3.3.1 操作系統的控制結構
3.3.2 進程控制結構
3.4 進程控制
3.4.1 執行模式
3.4.2 進程創建
3.4.3 進程切換
3.5 操作系統的執行
3.5.1 無進程的內核
3.5.2 在用戶進程中執行
3.5.3 基于進程的操作系統
3.6 安全問題
3.6.1 系統訪問威脅
3.6.2 對抗措施
3.7 UNIX SVR4進程管理
3.7.1 進程狀態
3.7.2 進程描述
3.7.3 進程控制
3.8 小結
3.9 推薦讀物
3.10 關鍵術語、復習題和習題
3.10.1 關鍵術語
3.10.2 復習題
3.10.3 習題
第4章 線程
4.1 進程和線程
4.1.1 多線程
4.1.2 線程功能特性
4.2 線程分類
4.2.1 用戶級和內核級線程
4.2.2 其他方案
4.3 多核和多線程
4.3.1 多核系統上的軟件性能
4.3.2 應用示例:Valve游戲軟件
4.4 Windows 7線程和SMP管理
4.4.1 進程對象和線程對象
4.4.2 多線程
4.4.3 線程狀態
4.4.4 對OS子系統的支持
4.4.5 對稱多處理的支持
4.5 Solaris的線程和SMP管理
4.5.1 多線程體系結構
4.5.2 動機
4.5.3 進程結構
4.5.4 線程的執行
4.5.5 把中斷當做線程
4.6 Linux的進程和線程管理
4.6.1 Linux任務
4.6.2 Linux線程
4.7 Mac OS X的GCD技術
4.8 小結
4.9 推薦讀物
4.10 關鍵術語、復習題和習題
4.10.1 關鍵術語
4.10.2 復習題
4.10.3 習題
第5章 并發性:互斥和同步
5.1 并發的原理
5.1.1 一個簡單的例子
5.1.2 競爭條件
5.1.3 操作系統關注的問題
5.1.4 進程的交互
5.1.5 互斥的要求
5.2 互斥:硬件的支持
5.2.1 中斷禁用
5.2.2 專用機器指令
5.3 信號量
5.3.1 互斥
5.3.2 生產者/消費者問題
5.3.3 信號量的實現
5.4 管程
5.4.1 使用信號的管程
5.4.2 使用通知和廣播的管程
5.5 消息傳遞
5.5.1 同步
5.5.2 尋址
5.5.3 消息格式
5.5.4 排隊原則
5.5.5 互斥
5.6 讀者/寫者問題
5.6.1 讀者優先
5.6.2 寫者優先
5.7 小結
5.8 推薦讀物
5.9 關鍵術語、復習題和習題
5.9.1 關鍵術語
5.9.2 復習題
5.9.3 習題
第6章 并發:死鎖和饑餓
6.1 死鎖原理
6.1.1 可重用資源
6.1.2 可消耗資源
6.1.3 資源分配圖
6.1.4 死鎖的條件
6.2 死鎖預防
6.2.1 互斥
6.2.2 占有且等待
6.2.3 不可搶占
6.2.4 循環等待
6.3 死鎖避免
6.3.1 進程啟動拒絕
6.3.2 資源分配拒絕
6.4 死鎖檢測
6.4.1 死鎖檢測算法
6.4.2 恢復
6.5 一種綜合的死鎖策略
6.6 哲學家就餐問題
6.6.1 基于信號量解決方案
6.6.2 基于管程解決方案
6.7 UNIX的并發機制
6.7.1 管道
6.7.2 消息
6.7.3 共享內存
6.7.4 信號量
6.7.5 信號
6.8 Linux內核并發機制
6.8.1 原子操作
6.8.2 自旋鎖
6.8.3 信號量
6.8.4 屏障
6.9 Solaris線程同步原語
6.9.1 互斥鎖
6.9.2 信號量
6.9.3 多讀者/單寫者鎖
6.9.4 條件變量
6.10 Windows 7并發機制
6.10.1 等待函數
6.10.2 分派器對象
6.10.3 臨界區
6.10.4 輕量級讀者-寫者鎖和條件變量
6.10.5 鎖無關同步機制
6.11 小結
6.12 推薦讀物
6.13 關鍵術語、復習題和習題
6.13.1 關鍵術語
6.13.2 復習題
6.13.3 習題
第三部分 內存
第7章 內存管理
7.1 內存管理的需求
7.1.1 重定位
7.1.2 保護
7.1.3 共享
7.1.4 邏輯組織
7.1.5 物理組織
7.2 內存分區
7.2.1 固定分區
7.2.2 動態分區
7.2.3 伙伴系統
7.2.4 重定位
7.3 分頁
7.4 分段
7.5 安全問題
7.5.1 緩沖區溢出攻擊
……