《計算機科學叢書:現代操作系統(原書第3版)》是操作系統領域的經典之作,與第2版相比,增加了關于Linux、Windows Vista和Symbian操作系統的詳細介紹。書中集中討論了操作系統的基本原理,包括進程、線程、存儲管理、文件系統、輸入/輸出、死鎖等,同時還包含了有關計算機安全、多媒體操作系統、掌上計算機操作系統、微內核、多核處理機上的虛擬機以及操作系統設計等方面的內容。此外,還在第2版的基礎上對部分習題進行了增刪,更有助于讀者學習和對知識的理解及掌握。
《計算機科學叢書:現代操作系統(原書第3版)》適合作為高等院校計算機專業操作系統課程教材,也是設計、開發操作系統的重要參考書。
《計算機科學叢書:現代操作系統(原書第3版)》特色:
涉及Windows Vista以及全新的Linux/UNIX操作系統;用一整章(第12章)的篇幅對用于移動設備的Symbian操作系統進行分析;涵蓋更多、更新的安全方面的內容;重新組織內容,盡早論述關鍵抽象概念;給出與未來操作系統發展有關的新研究成果;更新和增加了編程練習;在線操作系統練習采用主流Windows操作系統以及開源工具;包括操作系統模擬練習。
Tanenbaum教授作為三個操作系統的設計師或聯合設計師,具有長期設計開發操作系統的經驗,從而把其對理論的深入理解和具體實踐融入書中,使《計算機科學叢書:現代操作系統(原書第3版)》成為操作系統領域的經典之作。
在《計算機科學叢書:現代操作系統(原書第3版)》第3版中,作者深入討論了許多主題,包括:進程、線程、存儲管理、文件系統、I/O、死鎖、接口設計、多媒體、性能權衡,以及有關操作系統設計的全新趨勢。書中不僅涵蓋了現代操作系統的原理和實踐,而且特別關注了Linux操作系統、Windows Vista操作系統、嵌入式操作系統、實時操作系統以及多媒體操作系統。
Andrew S.Tanenbaum教授寫作的《現代操作系統》,無論是英文版還是中文版都受到了中國讀者的歡迎。究其原因,該書內容豐富,反映了當代操作系統的發展與動向。這次出版的第3版,無疑在保持原有特色的基礎上,又有所發展。
第3版的一個很大變化是,大大加強了對操作系統中許多抽象概念的敘述,包括CPU到進程的抽象、物理內存到地址空間(虛擬內存)的抽象以及磁盤到文件的抽象等。Tanenbaum教授在《現代操作系統》前兩版中,在這一方面確實著墨不多。譯者在翻譯該書前兩版的內容時,就對此有些疑問,似乎Tanenbaum教授的講授方法與眾不同。這是因為,在國內許多院校的操作系統教學過程中,授課教師非常重視對這些抽象概念的講解和分析。而且據譯者所知,在美國不少大學的操作系統教學過程中,也很重視對這些抽象概念的引入。譯者認為,Tanenbaum教授在第3版中對有關操作系統基本抽象概念敘述方式的重大修改,是對《現代操作系統》內在質量的提升,將使第3版受到更多中國教師和讀者的歡迎。
Andrew S.Tanenbaum,擁有美國麻省理工學院的理學學士學位和加州大學伯克利分校的哲學博士學位,目前是荷蘭阿姆斯特丹Vrije大學的計算機科學系教授多年來,他在編譯技術、操作系統、網絡及局域分布式系統方面進行了大量的研究工作。目前。他專注于系統和安全方面的高級研究他已經發表了近150篇論文,并在十幾個國家做了有關操作系統的學術報告Tanenbaum是ACM會員、IEEE專業會員、荷蘭皇家藝術和科學學院院士。并由于計算領域.特別是計算機組織、網絡和操作系統方面的教育所做的貢獻。而獲得2007年度IEEE James H.Mulhgan,Jr教育獎。他還入選了《世界名人錄》。
出版者的話
譯者充
前言
第1章 引論
1.1 什么是操作系統
1.1.1 作為擴展機器的操作系統
1.1.2 作為資源管理者的操作系統
1.2 操作系統的歷史
1.2.1 第一代(1945~1955):真空管和穿孔卡片
1.2.2 第二代(1955~1965):晶體管和批處理系統
1.2.3 第三代(1965~1980):集成電路芯片和多道程序設計
1.2.4第四代(1980年至今):個人計算機
1.3 計算機硬件介紹
1.3.1 處理器
1.3.2 存儲器
1.3.3 磁盤
1.3.4 磁帶
1.3.5 I/O設備
1.3.6 總線
1.3.7 啟動計算機
1.4 操作系統大觀園
1.4.1 大型機操作系統
1.4.2 服務器操作系統
1.4.3 多處理器操作系統
1.4.4 個人計算機操作系統
1.4.5 掌上計算機操作系統
1.4.6 嵌入式操作系統
1.4.7 傳感器節點操作系統
1.4.8 實時操作系統
1.4.9 智能卡操作系統
1.5 操作系統概念
1.5.1 進程
1.5.2 地址空間
1.5.3 文件
1.5.4 輸入/輸出
1.5.5 保護
1.5.6 shell
1.5.7 個體重復系統發育
1.6 系統調用
1.6.1 用于進程管理的系統調用
1.6.2 用于文件管理的系統調用
1.6.3 用于目錄管理的系統調用
1.6.4 各種系統調用
1.6.5 WindowsWin32API
1.7 操作系統結構
1.7.1 單體系統
1.7.2 層次式系統
1.7.3 微內核
1.7.4 客戶機-服務器模式
1.7.5 虛擬機
1.7.6 外核
1.8 依靠C的世界
1.8.1 C語言
1.8.2 頭文件
1.8.3 大型編程項目
1.8.4 運行模型
1.9 有關操作系統的研究
1.10 本書其他部分概要
1.11 公制單位
1.12 小結
習題
第2章 進程與線程
2.1 進程
2.1.1 進程模型
2.1.2 創建進程
2.1.3 進程的終止
2.1.4 進程的層次結構
2.1.5 進程的狀態
2.1.6 進程的實現
2.1.7 多道程序設計模型
2.2 線程
2.2.1 線程的使用
2.2.2 經典的線程模型
2.2.3 POSIX線程
2.2.4 在用戶空間中實現線程
2.2.5 在內核中實現線程
2.2.6 混合實現
2.2.7 調度程序激活機制
2.2.8 彈出式線程
2.2.9 使單線程代碼多線程化
2.3 進程間通信
2.3.1 競爭條件
2.3.2 臨界區
2.3.3 忙等待的互斥
2.3.4 睡眠與喚醒
2.3.5 信號量
2.3.6 互斥量
2.3.7 管程
2.3.8 消息傳遞
2.3.9 屏障
2.4 調度
2.4.1 調度介紹
2.4.2 批處理系統中的調度
2.4.3 交互式系統中的調度
2.4.4 實時系統中的調度
2.4.5 策略和機制
2.4.6 線程調度
2.5 經典的IPC問題
2.5.1 哲學家就餐問題
2.5.2 讀者一寫者問題
2.6 有關進程和線程的研究
2.7 小結
習題
第3章 存儲管理
3.1 無存儲器抽象
3.2 一種存儲器抽象:地址空間
3.2.1 地址空間的概念
3.2.2 交換技術
3.2.3 空閑內存管理
3.3 虛擬內存
3.3.1 分頁
3.3.2 頁表
3.3.3 加速分頁過程
3.3.4 針對大內存的頁表
3.4 頁面置換算法
3.4.1 最優頁面置換算法
3.4.2 最近未使用頁面置換算法
3.4.3 先進先出頁面置換算法
3.4.4 第二次機會頁面置換算法
3.4.5 時鐘頁面置換算法
3.4.6 最近最少使用頁面置換算法
3.4.7 用軟件模擬LRU
3.4.8 工作集頁面置換算法
3.4.9 工作集時鐘頁面置換算法
3.4.10 頁面置換算法小結
3.5 分頁系統中的設計問題
3.5.1 局部分配策略與全局分配策略
3.5.2 負載控制
3.5.3 頁面大小
3.5.4 分離的指令空間和數據空間
3.5.5 共享頁面
3.5.6 共享庫
3.5.7 內存映射文件
3.5.8 清除策略
3.5.9 虛擬內存接口
3.6 有關實現的問題._
3.6.1 與分頁有關的工作
3.6.2 缺頁中斷處理
3.6.3 指令備份__
3.6.4 鎖定內存中的頁面
3.6.5 后備存儲
3.6.6 策略和機制的分離
3.7 分段
3.7.1 純分段的實現
3.7.2 分段和分頁結合:MULTICS
3.7.3 分段和分頁結合:Intel Pentium
3.8 有關存儲管理的研究
3.9 小結
習題
第4章 文件系統
4.1 文件
4.1.1 文件命名
4.1.2 文件結構
4.1.3 文件類型
4.1.4 文件存取
4.1.5 文件屬性
4.1.6 文件操作
4.1.7 使用文件系統調用的一個示例程序
4.2 目錄
4.2.1 一級目錄系統
4.2.2 層次目錄系統
4.2.3 路徑名
4.2.4 目錄操作
4.3 文件系統的實現
4.3.1 文件系統布局
4.3.2 文件的實現
4.3.3 目錄的實現
4.3.4 共享文件
4.3.5 日志結構文件系統
4.3.6 日志文件系統
4.3.7 虛擬文件系統
4.4 文件系統管理和優化
4.4.1 磁盤空間管理
4.4.2 文件系統備份
4.4.3 文件系統的一致性
4.4.4 文件系統性能
4.4.5 磁盤碎片整理
4.5 文件系統實例
4.5.1 CD-ROM文件系統
4.5.2 MS-DOS文件系統
4.5.3 UNIXV7文件系統
4.6 有關文件系統的研究
4.7 小結
習題
第5章 輸入/輸出
5.1 I/O硬件原理
5.1.1 I/O設備
5.1.2 設備控制器
5.1.3 內存映射I/O
5.1.4 直接存儲器存取
5.1.5 重溫中斷
5.2 I/O軟件原理
5.2.1 I/O軟件的目標
5.2.2 程序控制I/O
5.2.3 中斷驅動I/O
5.2.4 使用DMA的I/O
5.3 I/O軟件層次
5.3.1 中斷處理程序
5.3.2 設備驅動程序
5.3.3 與設備無關的I/O軟件
5.3.4 用戶空間的I/O軟件
5.4 盤
5.4.1 盤的硬件
5.4.2 磁盤格式化
5.4.3 磁盤臂調度算法
5.4.4 錯誤處理
5.4.5 穩定存儲器
5.5 時鐘
5.5.1 時鐘硬件
5.5.2 時鐘軟件
5.5.3 軟定時器
5.6 用戶界面:鍵盤、鼠標和監視器
5.6.1 輸入軟件
5.6.2 輸出軟件
5.7 瘦客戶機
5.8 電源管理
5.8.1 硬件問題
5.8.2 操作系統問題
5.8.3 應用程序問題
5.9 有關輸入/輸出的研究
5.10 小結
習題
第6章 死鎖
6.1 資源
6.1.1 可搶占資源和不可搶占資源
6.1.2 資源獲取
6.2 死鎖概述
6.2.1 資源死鎖的條件
6.2.2 死鎖建模
6.3 鴕鳥算法
6.4 死鎖檢測和死鎖恢復
6.4.1 每種類型一個資源的死鎖檢測
6.4.2 每種類型多個資源的死鎖檢測
6.4.3 從死鎖中恢復
6.5 死鎖避免
6.5.1 資源軌跡圖
6.5.2 安全狀態和不安全狀態
6.5.3 單個資源的銀行家算法
6.5.4 多個資源的銀行家算法
6.6 死鎖預防
6.6.1 破壞互斥條件
6.6.2 破壞占有和等待條件
6.6.3 破壞不可搶占條件
6.6.4 破壞環路等待條件
6.7 其他問題
6.7.1 兩階段加鎖
6.7.2 通信死鎖
6.7.3 活鎖
6.7 -4饑餓
6.8.有關死鎖的研究
6.9 小結
習題
第7章 多媒體操作系統
7.1 多媒體簡介
7.2 多媒體文件
7.2.1 視頻編碼
7.2.2 音頻編碼
7.3 視頻壓縮
7.3.1 JPEG標準
7.3.2 MPEG標準
7.4 音頻壓縮
7.5 多媒體進程調度
7.5.1 調度同質進程
7.5.2 一般實時調度
7.5.3 速率單調調度
7.5.4 最早最終時限優先調度
7.6 多媒體文件系統范型
7.6.1 VCR控制功能
7.6.2 近似視頻點播
7.6.3 具有VCR功能的近似視頻點播
7.7 文件存放
7.7.1 在單個磁盤上存放文件
7.7.2 兩個替代的文件組織策略
7.7.3 近似視頻點播的文件存放
7.7.4 在單個磁盤上存放多個文件
7.7.5 在多個磁盤上存放文件
7.8 高速緩存
7.8.1 塊高速緩存
7.8.2 文件高速緩存
7.9 多媒體磁盤調度
7.9.1 靜態磁盤調度
7.9.2 動態磁盤調度
7.10 有關多媒體的研究
7.11 小結
習題
第8章 多處理機系統
8.1 多處理機
8.1.1 多處理機硬件
8.1.2 多處理機操作系統類型
8.1.3 多處理機同步
8.1.4 多處理機調度
8.2 多計算機
8.2.1 多計算機硬件
8.2.2 低層通信軟件
8.2.3 用戶層通信軟件
8.2.4 遠程過程調用
8.2.5 分布式共享存儲器
8.2.6 多計算機調度
8.2.7 負載平衡
8.3 虛擬化
8.3.1 虛擬化的條件
8.3.2 Ⅰ型管理程序
8.3.3 Ⅱ型管理程序
8.3.4 準虛擬化
8.3.5 內存的虛擬化
8.3.6 I/0設備的虛擬化
8.3.7 虛擬工具
8.3.8 多核處理機上的虛擬機
8.3.9 授權問題
8.4 分布式系統
8.4.1 網絡硬件
8.4.2 網絡服務和協議
8.4.3 基于文檔的中間件
8.4.4 基于文件系統的中間件
8.4.5 基于對象的中間件
8.4.6 基于協作的中間件
8.4.7 網格
8.5 有關多處理機系統的研究
8.6 小結
習題
……
第9章 安全
第10章 實例研究1:Linux
第11章 實例研究2:Windows Visa
第12章 實例研究3:Symbian操作系統
第13章 操作系統設計
第14章 閱讀材料及參考文獻
第2章 進程與線程
從本章開始我們將深入考察操作系統是如何設計和構造的。操作系統中最核心的概念是進程:這是對正在運行程序的一個抽象。操作系統的其他所有內容都是圍繞著進程的概念展開的,所以,讓操作系統的設計者(及學生)盡早并透徹地理解進程是非常重要的。
進程是操作系統提供的最古老的也是最重要的抽象概念之一。即使可以利用的CPU只有一個,但它們也支持(偽)并發操作的能力。它們將一個單獨的CPU變換成多個虛擬的CPU。沒有進程的抽象,現代計算將不復存在。在本章里我們會通過大量的細節去探究進程,以及它們的第一個親戚——線程。
2.1 進程
所有現代的計算機經常會在同一時間做許多件事。習慣于在個人計算機上工作的人們也許不會十分注意這個事實,因此列舉一些例子可以更清楚地說明這一問題。先考慮一個網絡服務器。從各處進入一些網頁請求。當一個請求進入時,服務器檢查是否其需要的網頁在緩存中。如果是,則把網頁發送回去;如果不是,則啟動一個磁盤請求以獲取網頁。然而,從CPU的角度來看,磁盤請求需要漫長的時間。當等待磁盤請求完成時,其他更多的請求將會進入。如果有多個磁盤存在,會在滿足第一個請求之前就接二連三地對其他的磁盤發出一些或所有的請求。很明顯,需要一些方法去模擬并控制這種并發。進程(特別是線程)在這里就可以產生作用。
現在考慮只有一個用戶的PC。一般用戶不知道,當啟動系統時,會秘密啟動許多進程。例如,啟動一個進程用來等待進入的電子郵件;或者啟動另一個防病毒進程周期性地檢查是否有新的有效的病毒定義。另外,某個用戶進程也許會在所有用戶上網的時候打印文件以及燒錄CD-ROM。所有的這些活動需要管理,于是一個支持多進程的多道程序系統在這里就顯得很有用了。
在任何多道程序設計系統中,CPU由一個進程快速切換至另一個進程,使每個進程各運行幾十或幾百個毫秒。嚴格地說,在某一個瞬間,CPU只能運行一個進程。但在1秒鐘期間,它可能運行多個進程,這樣就產生并行的錯覺。有時人們所說的偽并行就是指這種情形,以此來區分多處理器系統(該系統有兩個或多個CPU共享同一個物理內存)的真正硬件并行。人們很難對多個并行活動進行跟蹤。因此,經過多年的努力,操作系統的設計者發展了用于描述并行的一種概念模型(順序進程),使得并行更容易處理。有關該模型、它的使用以及它的影響正是本章的主題。
······