計算機科學叢書:操作係統設計:Xinu方法 [Operating System Design]

計算機科學叢書:操作係統設計:Xinu方法 [Operating System Design] pdf epub mobi txt 電子書 下載 2025

[美] Douglas Comer 著,鄒恒明,周亮,曹浩 等 譯
圖書標籤:
  • 操作係統
  • Xinu
  • 計算機科學
  • 教學
  • 設計
  • 原理
  • UNIX
  • 內核
  • 實驗
  • 源碼
想要找書就要到 靜流書站
立刻按 ctrl+D收藏本頁
你會得到大驚喜!!
齣版社: 機械工業齣版社
ISBN:9787111428268
版次:1
商品編碼:11354659
品牌:機工齣版
包裝:平裝
叢書名: 計算機科學叢書
外文名稱:Operating System Design
開本:16開
齣版時間:2013-12-01
用紙:膠版紙
頁數:368
正文語種:中文

具體描述

內容簡介

  《計算機科學叢書:操作係統設計:Xinu方法》對操作係統的內存管理、進程管理、進程協調和同步、進程間通信、實時時鍾管理、設備無關的I/O、設備驅動、網絡協議、文件係統等進行瞭詳細的介紹,並利用分層的設計範式,以一種有序、易於理解的方式來闡述這些內容。《計算機科學叢書:操作係統設計:Xinu方法》以Xinu操作係統為係統設計的樣闆和模式,從一個裸機開始,一步一步地設計和實現一個小型但優雅的操作係統。本書的樣本代碼可以運行在Linksys E2100L無綫路由器上。
  《計算機科學叢書:操作係統設計:Xinu方法》適用於高年級的本科生或低年級的研究生,也適用於那些想瞭解操作係統的計算機從業人員。學習本書前,學生需要具備基本的程序設計能力,應當理解基本的數據結構,包括鏈錶、棧和隊列,並且應當用C語言寫過程序。

作者簡介

  Douglas Comer,美國普度大學計算機係傑齣教授,國際公認的計算機網絡、TCP/IP協議、Internet和操作係統設計方麵的專傢。Comer齣版瞭多部優秀的教材和專著,被翻譯成16種語言,並廣泛用於世界各地的工業界和學術界。Comer教授劃時代的三捲巨著《Internetworking with TCP/IP》對網絡和網絡教育産生瞭革命性的影響。Comer博士是ACM院士、普度教育學院院士。

目錄

齣版者的話
譯者序
前言
關於作者

第1章 引言和概述
1.1 操作係統
1.2 本書的研究方法
1.3 分層設計
1.4 Xinu操作係統
1.5 操作係統不是什麼
1.6 從外麵看操作係統
1.7 其他章節概要
1.8 觀點
1.9 總結
練習

第2章 並發執行與操作係統服務
2.1 引言
2.2 多活動的編程模型
2.3 操作係統服務
2.4 並發處理的概念和術語
2.5 串行程序和並發程序的區彆
2.6 多進程共享同一段代碼
2.7 進程退齣與進程終止
2.8 共享內存、競爭條件和同步
2.9 信號量與互斥
2.10 Xinu中的類型命名方法
2.11 使用Kputc和Kprintf進行操作係統的調試
2.12 觀點
2.13 總結
練習

第3章 硬件和運行時環境概覽
3.1 引言
3.2 E2100L的物理和邏輯結構
3.3 處理器結構和寄存器
3.4 總綫操作:獲取-存儲範式
3.5 直接內存訪問
3.6 總綫地址空間
3.7 內核段KSEG0和KSEG1的內容
3.8 總綫啓動的靜態配置
3.9 調用約定和運行時棧
3.10 中斷和中斷處理
3.11 異常處理
3.12 計時器硬件
3.13 串行通信
3.14 輪詢與中斷驅動I/O
3.15 內存緩存和KSEG
3.16 存儲布局
3.17 內存保護
3.18 觀點
練習

第4章 鏈錶與隊列操作
4.1 引言
4.2 用於進程鏈錶的統一數據結構
4.3 簡潔的鏈錶數據結構
4.4 隊列數據結構的實現
4.5 內聯隊列操作函數
4.6 獲取鏈錶中進程的基礎函數
4.7 FIFO隊列操作
4.8 優先級隊列的操作
4.9 鏈錶初始化
4.10 觀點
4.11 總結
練習

第5章 調度和上下文切換
5.1 引言
5.2 進程錶
5.3 進程狀態
5.4 就緒和當前狀態
5.5 調度策略
5.6 調度的實現
5.7 上下文切換的實現
5.8 內存中保存的狀態
5.9 在MIPS處理器上切換上下文
5.10 重新啓動進程執行的地址
5.11 並發執行和null進程
5.12 使進程準備執行和調度不變式
5.13 推遲重新調度
5.14 其他進程調度算法
5.15 觀點
5.16 總結
練習

第6章 更多進程管理
6.1 引言
6.2 進程掛起和恢復
6.3 自我掛起和信息隱藏
6.4 係統調用的概念
6.5 禁止中斷和恢復中斷
6.6 係統調用模闆
6.7 係統調用返迴SYSERR和OK值
6.8 掛起的實現
6.9 掛起當前進程
6.10 suspend函數的返迴值
6.11 進程終止和進程退齣
6.12 進程創建
6.13 其他進程管理函數
6.14 總結
練習

第7章 協調並發進程
7.1 引言
7.2 進程同步的必要性
7.3 計數信號量的概念
7.4 避免忙等待
7.5 信號量策略和進程選擇
7.6 等待狀態
7.7 信號量數據結構
7.8 係統調用wait
7.9 係統調用signal
7.10 靜態和動態信號量分配
7.11 動態信號量的實現示例
7.12 信號量刪除
7.13 信號量重置
7.14 多核處理器之間的協調
7.15 觀點
7.16 總結
練習

第8章 消息傳遞
8.1 引言
8.2 兩種類型的消息傳遞服務
8.3 消息使用資源的限製
8.4 消息傳遞函數和狀態轉換
8.5 send的實現
8.6 receive的實現
8.7 非阻塞消息接收的實現
8.8 觀點
8.9 總結
練習

第9章 基本內存管理
9.1 引言
9.2 內存的類型
9.3 重量級進程的定義
9.4 小型嵌入式係統的內存管理
9.5 程序段和內存區域
9.6 嵌入式係統中的動態內存分配
9.7 低層內存管理器的設計
9.8 分配策略和內存持久性
9.9 追蹤空閑內存
9.10 低層內存管理的實現
9.11 分配堆存儲
9.12 分配棧存儲
9.13 釋放堆和棧存儲
9.14 觀點
9.15 總結
練習

第10章 高級內存管理和虛擬內存
10.1 引言
10.2 分區空間分配
10.3 緩衝池
10.4 分配緩衝區
10.5 將緩衝區返迴給緩衝池
10.6 創建緩衝池
10.7 初始化緩衝池錶
10.8 虛擬內存和內存復用
10.9 實地址空間和虛地址空間
10.10 支持按需換頁的硬件
10.11 使用頁錶的地址翻譯
10.12 頁錶項中的元數據
10.13 按需換頁以及設計上的問題
10.14 頁麵替換和全局時鍾算法
10.15 觀點
10.16 總結
練習

第11章 高層消息傳遞
11.1 引言
11.2 進程間通信端口
11.3 端口實現
11.4 端口錶初始化
11.5 端口創建
11.6 嚮端口發送消息
11.7 從端口接收消息
11.8 端口的刪除和重置
11.9 觀點
11.10 總結
練習

第12章 中斷處理
12.1 引言
12.2 中斷的優點
12.3 中斷分配
12.4 中斷嚮量
12.5 中斷嚮量號的分配
12.6 硬件中斷
12.7 中斷請求的局限性和中斷多路復用
12.8 中斷軟件和分配
12.9 中斷分配器底層部分
12.10 中斷分配器高層部分
12.11 禁止中斷
12.12 函數中中斷代碼引起的限製
12.13 中斷過程中重新調度的必要性
12.14 中斷過程中的重新調度
12.15 觀點
12.16 總結
練習

第13章 實時時鍾管理
13.1 引言
13.2 定時事件
13.3 實時時鍾和計時器硬件
13.4 處理實時時鍾中斷
13.5 延時與搶占
13.6 使用計時器來模擬實時時鍾
13.7 搶占的實現
13.8 使用增量鏈錶對延遲進行有效管理
13.9 增量鏈錶的實現
13.10 將進程轉入睡眠
13.11 定時消息接收
13.12 喚醒睡眠進程
13.13 時鍾中斷處理
13.14 時鍾初始化
13.15 間隔計時器管理
13.16 觀點
13.17 總結
練習

第14章 設備無關的I/O
14.1 引言
14.2 I/O和設備驅動的概念結構
14.3 接口抽象和驅動抽象
14.4 I/O接口的一個示例
14.5 打開-讀-寫-關閉範式
14.6 綁定I/O操作和設備名
14.7 Xinu中的設備名
14.8 設備轉換錶概念
14.9 設備和共享驅動的多個副本
14.10 高層I/O操作的實現
14.11 其他高層I/O函數
14.12 打開、關閉和引用計數
14.13 devtab中的空條目和錯誤條目
14.14 I/O係統的初始化
14.15 觀點
14.16 總結
練習

第15章 設備驅動示例
15.1 引言
15.2 tty抽象
15.3 tty設備驅動的組成
15.4 請求隊列和緩衝區
15.5 上半部和下半部的同步
15.6 硬件緩衝區和驅動設計
15.7 tty控製塊和數據聲明
15.8 次設備號
15.9 上半部tty字符輸入(ttyGetc)
15.10 通用上半部tty輸入(ttyRead)
15.11 上半部tty字符輸齣(ttyPutc)
15.12 開始輸齣(ttyKickOut)
15.13 上半部tty多字符輸齣(ttyWrite)
15.14 下半部tty驅動函數(ttyInterrupt)
15.15 輸齣中斷處理(ttyInter_out)
15.16 tty輸入處理(tty Inter-in)
15.17 tty控製塊初始化(ttyInit)
15.18 設備驅動控製
15.19 觀點
15.20 總結
練習

第16章 DMA設備和驅動(以太網)
16.1 引言
16.2 直接內存訪問和緩衝區
16.3 多緩衝區和環
16.4 使用DMA的以太網驅動例子
16.5 設備的硬件定義和常量
16.6 環和內存緩衝區
16.7 以太網控製塊的定義
16.8 設備和驅動初始化
16.9 分配輸入緩衝區
16.10 從以太網設備中讀取數據包
16.11 嚮以太網設備中寫入數據包
16.12 以太網設備的中斷處理
16.13 以太網控製函數
16.14 觀點
16.15 總結
練習

第17章 最小互聯網協議棧
17.1 引言
17.2 所需的功能
17.3 同步對話、超時和進程
17.4 ARP函數
17.5 網絡數據包的定義
17.6 網絡輸入進程
17.7 UDP錶的定義
17.8 UDP函數
17.9 互聯網控製報文協議
17.10 動態主機配置協議
17.11 觀點
17.12 總結
練習

第18章 遠程磁盤驅動
18.1 引言
18.2 磁盤抽象
18.3 磁盤操作驅動支持
18.4 塊傳輸和高層I/O函數
18.5 遠程磁盤範式
18.6 磁盤操作的語義
18.7 驅動數據結構的定義
18.8 驅動初始化(rdsInit)
18.9 上半部打開函數(rdsOpen)
18.10 遠程通信函數(rdscomm)
18.11 上半部寫函數(rdsWrite)
18.12 上半部讀函數(rdsRead)
18.13 刷新掛起的請求
18.14 上半部控製函數(rdsControl)
18.15 分配磁盤緩衝區(rdsbufalloc)
18.16 上半部關閉函數(rdsClose)
18.17 下半部通信進程(rdsprocess)
18.18 觀點
18.19 總結
練習

第19章 文件係統
19.1 文件係統是什麼
19.2 文件操作的示例集閤
19.3 本地文件係統的設計
19.4 Xinu文件係統的數據結構
19.5 索引管理器的實現
19.6 清空索引塊(lfibclear)
19.7 獲取索引塊(lfibget)
19.8 存儲索引塊(lfibput)
19.9 從空閑鏈錶中分配索引塊(lfiballoc)
19.10 從空閑鏈錶中分配數據塊(lfdballoc)
19.11 使用設備無關的I/O函數的文件操作
19.12 文件係統的設備設置和函數名稱
19.13 本地文件係統打開函數(lfsOpen)
19.14 關閉文件僞設備(lflClose)
19.15 刷新磁盤中的數據(lfflush)
19.16 文件的批量傳輸函數(lflWrite,lflRead)
19.17 在文件中查找一個新位置(lflSeek)
19.18 從文件中提取一個字節(lflGetc)
19.19 改變文件中的一個字節(lflPutc)
19.20 載入索引塊和數據塊(lfsetup)
19.21 主文件係統設備的初始化(lfsInit)
19.22 僞設備的初始化(lflInit)
19.23 文件截斷(lftruncate)
19.24 初始文件係統的創建(lfscreate)
19.25 觀點
19.26 總結
練習

第20章 遠程文件機製
20.1 引言
20.2 遠程文件訪問
20.3 遠程文件語義
20.4 遠程文件設計和消息
20.5 遠程文件服務器通信
20.6 發送一個基本消息
20.7 網絡字節序
20.8 使用設備範式的遠程文件係統
20.9 打開遠程文件
20.10 檢查文件模式
20.11 關閉遠程文件
20.12 讀遠程文件
20.13 寫遠程文件
20.14 遠程文件的定位
20.15 遠程文件單字符I/O
20.16 遠程文件係統控製函數
20.17 初始化遠程文件數據結構
20.18 觀點
20.19 總結
練習

第21章 句法名字空間
21.1 引言
21.2 透明與名字空間的抽象
21.3 多種命名方案
21.4 命名係統設計的其他方案
21.5 基於句法的名字空間
21.6 模式和替換
21.7 前綴模式
21.8 名字空間的實現
21.9 名字空間的數據結構和常量
21.10 增加名字空間前綴錶的映射
21.11 使用前綴錶進行名字映射
21.12 打開命名文件
21.13 名字空間初始化
21.14 對前綴錶中的項進行排序
21.15 選擇一個邏輯名字空間
21.16 默認層次和空前綴
21.17 額外的對象操作函數
21.18 名字空間方法的優點和限製
21.19 廣義模式
21.20 觀點
21.21 總結
練習

第22章 係統初始化
22.1 引言
22.2 引導程序:從頭開始
22.3 操作係統初始化
22.4 在E2100L上啓動一個可選的映像
22.5 Xinu初始化
22.6 係統啓動
22.7 從程序轉化為進程
22.8 觀點
22.9 總結
練習

第23章 異常處理
23.1 引言
23.2 異常、陷阱和惡意中斷
23.3 panic的實現
23.4 觀點
23.5 總結
練習

第24章 係統配置
24.1 引言
24.2 多重配置的需求
24.3 Xinu係統配置
24.4 Xinu配置文件的內容
24.5 計算次設備號
24.6 配置Xinu係統的步驟
24.7 觀點
24.8 總結
練習

第25章 一個用戶接口例子:Xinu殼
25.1 引言
25.2 用戶接口
25.3 命令和設計原則
25.4 一個簡化殼的設計決策
25.5 殼的組織和操作
25.6 詞法符號的定義
25.7 命令行語法的定義
25.8 Xinu殼的實現
25.9 符號的存儲
25.10 詞法分析器代碼
25.11 命令解釋器的核心
25.12 命令名查詢和內部處理
25.13 傳給命令的參數
25.14 嚮外部命令傳遞參數
25.15 I/O重定嚮
25.16 示例命令函數(sleep)
25.17 觀點
25.18 總結

練習
附錄1 操作係統移植
附錄2 Xinu設計注解
索引

精彩書摘

  第1章 引言和概述 ·
  ·第1章 引言和概述
  第1章
  Operating System Design:The Xinu Approach,Linksys Version
  引言和概述
  第1章 引言和概述
  我們的小小係統也有風光的時刻。
  ——Alfred,Lord Tennyson
  1.1 操作係統
  每一個智能設備和計算機係統中都隱藏著這麼一類軟件,它們控製著處理信息、管理資源以及與顯示屏、網絡、磁盤和打印機等設備通信的工作。總的來說,這些進行控製和協調工作的代碼通常叫做執行器、監視器、任務管理器,或者內核,而我們將使用一個更寬泛的術語操作係統。
  計算機操作係統是人類創造的最復雜的物體之一:計算機操作係統允許多個計算進程和用戶同時共享一個CPU,保護數據免受未經授權的訪問,並保持獨立輸入/輸齣(I/O)設備的正確運行。操作係統提供的高級服務都是通過嚮復雜的硬件發送一係列詳細的命令實現的。有趣的是,操作係統並不是從外部控製電腦的獨立機製——它還包括一些軟件,這些軟件由執行應用程序的同一處理器執行。事實上,當處理器運行應用程序的時候,處理器是不能執行操作係統的,反之亦然。
  保證操作係統總在應用程序運行結束後重新奪迴控製權的安排機製使得操作係統的設計變得非常復雜。操作係統最令人印象深刻的方麵來自於服務和硬件之間的不同:操作係統在低級的硬件上提供高級服務。隨著本書內容的推進,讀者就會理解係統軟件處理像串行接口這樣簡單的設備需要做的事情。而其中的哲學原理很簡單:操作係統應該提供讓編程更加容易的抽象,而不是反映底層硬1件設備的抽象。因此,我們得齣結論:
  設計操作係統時,應該隱藏底層的硬件細節,並創建一個為應用程序提供高級服務的抽象機器。
  操作係統的設計並不是人們所熟知的工藝。最初,由於計算機的缺乏和價格的昂貴,隻有少數程序員有從事操作係統相關工作的機會。而現在,由於先進的微電子技術降低瞭製造成本使得微處理器不再昂貴,操作係統便成為一種商品,與此同時也隻有少數程序員從事操作係統方麵的工作。有趣的是,由於微處理器變得非常便宜,大多數電子設備都是從可編程處理器構建得到,而不是從離散的邏輯構建得到。因此,設計與實現微機和微控製器的軟件係統不再是專傢的專利,它已成為一個稱職的係統程序員必須能勝任的技術。
  幸運的是,隨著生産新機器的技術的發展,我們對於操作係統的理解也在不斷提高。研究人員已經找齣瞭根本問題,製定瞭設計原則,定義瞭基本的組件,並設計瞭組件一起工作的機製。更重要的是,研究人員還定義瞭一係列的抽象,如文件和當前進程(這些抽象對於所有的操作係統都是相同的),並且已經找到瞭實現這些抽象的有效方式。最後,我們知道瞭如何將操作係統的不同組件組織成一個有意義的係統設計與實現。
  同早期係統相比,現代操作係統是簡潔的、可移植的。設計良好的係統都遵循著將軟件分割成一係列基本組件的基本設計模式。因此,現代係統就變得更容易理解和修改,相比早期的係統其處理開銷也比較小。
  供應商齣售的大型商業操作係統通常包括很多額外的軟件組件。例如,一個典型的操作係統軟件發行版包括編譯器、連接器、裝載程序、庫函數和一係列的應用程序。為瞭區分這些額外的軟件和一個基本的操作係統,我們有時會用內核指代常駐在內存中並且提供諸如並發進程支持等關鍵性服務的代碼。在本書中,操作係統這個術語指的就是內核,而不包括其他附加的功能。一個最小化內核功能的設計有時稱為微內核設計。我們的討論就將集中在微內核上。
  1.2 本書的研究方法
  本書講解瞭如何構建、設計並且實現操作係統的內核。書中使用瞭工程學方法,而不是僅僅羅列操作係統的特性和抽象地對其進行描述。這種方法嚮我們展示瞭每一個抽象是如何建立的,以及如何將這些抽象組織成一個優雅、高效的設計。
  這種工程學方法有兩個優勢。第一,因為本書的內容涵蓋操作係統的每一部分,所以讀者會看到整個係統如何融閤在一起,而不僅僅是一兩個部分之間如何交互。第二,由於讀者可以得到書中描述的所有部分的源代碼,所以任何部分的實現都沒有什麼神秘的地方——讀者可以獲得一份係統的副本來檢查、修改、工具化、測量、擴展或者將其移植到其他架構。在本書的最後,讀者會看到操作係統的每個部分是如何滿足設計需求的,以幫助讀者理解可選的設計方案。
  本書的關注點是實現,這意味著代碼是本書的一個重要組成部分。事實上,代碼是討論的核心,必須通過閱讀和學習所羅列的程序來欣賞其中的微妙之處和工程中的細節。例子代碼都非常精簡,這意味著讀者可以集中精力在概念的理解上而不需要費力地閱讀許多頁的代碼。但某些練習建議的改進或修改需要讀者深入細節或者找到其他方案。熟練的程序員會找到更多方法來改進和擴展我們的係統。
  ……

前言/序言

  建造計算機操作係統有點像編織錦緞。這兩種工作的最終成品都是一個和諧一緻、大型、復雜的人造係統。在每一種情況下,最後的人造成品都是由細微但卻精巧的步驟所構造。在編織錦緞時,細節是至關重要的,因為一點點不協調的瑕疵都很容易觀察到。就像錦緞裏的緞麵一樣,加入到操作係統裏的每個新組件都需要與整體的設計相協調。從這個角度看,將不同片段組裝起來的機械加工隻是整個建造過程中的一小部分,一個大師級的産品必須以某個模式為藍本,所有參與係統設計的工作人員都必須遵守這種模式。
  有諷刺意味的是,現有的操作係統教材或課程很少對底層的模式和原理進行解釋,而這些模式和原理正是操作係統構造的基礎。在學生看來:操作係統似乎是一個暗箱,而現有的教材則加強瞭這種誤解,因為這些教材所解釋的不過是操作係統的功能,其關注的也隻是操作係統各種能力的使用。更為重要的是,學生在學習操作係統時采取的是從操作係統外麵來察看的方式,從而常常導緻這樣一種感覺:認為操作係統由一組抽象的界麵所組成,這些界麵下的功能由一大堆晦澀神秘的代碼連接在一起,而這些神秘的代碼本身還包含著許多與機器硬件直接相關的、無規律可尋的奇技巧術。
  令人驚奇的是,學生一旦從大學畢業,就馬上覺得與操作係統有關的工作已經結束,自己不再需要理解或學習操作係統,因為由商業公司和開源社區所構造的現有操作係統足以應付各種需要,沒有自己什麼事情瞭。但沒有什麼比這種想法離真理更遠瞭。有諷刺意味的是,盡管為個人計算機設計傳統操作係統的公司數量比以前更少瞭,但社會和行業對操作係統技能的需求卻在增長,許多公司雇傭大學生來從事操作係統方麵的工作。社會上這些對操作係統技能的需求來源於更便宜的微處理器,這些便宜的微處理器嵌入在智能手機、視頻遊戲、iPod、Internet路由器、綫纜和機頂盒以及打印機中。
  在與嵌入式係統打交道時,有關原理和結構的知識非常關鍵,因為程序員可能需要在現有的操作係統內部構造某種或某個新的機製,或者對現有操作係統進行修改以便可以在新的硬件平颱上運行。而且,為嵌入式設備編寫應用程序時需要理解下層的操作係統。如果不理解操作係統設計的各種細微之處,則不可能充分利用這些小型嵌入式處理器的能力。
  本書的目的是揭開操作係統設計中的神秘感,將方方麵麵的材料整閤為一個係統化的整體。本書對操作係統的主要係統組件進行瞭詳細闡述,並以一種層次架構的設計範式來組織這些組件,從而以一種有序、可理解的方式來展開這些內容。與其他評述性書籍不同的是,本書並不盡可能多地提供不同方案,呈現給讀者的將是一個基於傳統過程的、使用實際的、直截瞭當的原語所構造的操作係統。本書從一個裸機開始,一步一步地設計和實現一個小型但優雅的操作係統。這個稱為Xinu的操作係統將成為係統設計的樣闆和模式。
  雖然Xinu操作係統的規模較小,可以完全容納在本書中,但該係統卻包括瞭構成一個普通操作係統的全部組件:內存管理、進程管理、進程協調和同步、進程間通信、實時時鍾管理、設備獨立的輸入輸齣、設備驅動、網絡協議和一個文件係統。本書將這些組件組織成一個層次架構,使它們之間的相互連接清晰可見、設計過程淺顯易懂。盡管規模小,但Xinu卻擁有大型係統的能力。此外,Xinu並不是一個玩具係統,它在很多商業産品中得到瞭應用。使用該係統的廠商包括Mitsubishi、Lexmark、HP、IBM、Woodward(woodward.com)、Barnard Software和Mantissa公司。學生通過本書可以學到的重要一課是:不管是小型嵌入式係統還是大型係統,好的係統設計都一樣重要,一個係統的大部分能力都來自於良好的抽象。
  本書所覆蓋的所有議題都以一種特定的次序排列,這種次序就是設計人員在構建操作係統時所遵守的工作次序。本書每一章描述設計架構裏的一個組件,並提供示例軟件來演示由該層架構所提供的功能。使用這種方式具有如下幾種優點:第一,每一章所解釋的操作係統的功能子集均比上一章所討論的功能子集更大,這種安排使我們在考慮一層特定架構的設計和實現時不用關心後續層麵的實現。第二,每一章的細節描述在第一次閱讀時可以跳過去,讀者隻需要理解該層所提供的服務即可,而不是這些服務是如何實現的。第三,如果按次序閱讀本書,讀者可以先理解一個功能,然後在後麵看到該功能是如何被後續部分所使用的。第四,有智力挑戰的議題(如對並發的支持)齣現在書的較前麵,高層次的操作係統服務則齣現在後麵。在本書中,讀者將看到大部分核心的功能僅僅隻用幾行代碼就可以完成,這樣我們就可以將大部分的代碼(網絡和文件係統)放到書的較後麵,在讀者已經做齣瞭充分的思想準備後再進行講解。
  如前所述,與其他關於操作係統的許多書不一樣的是,本書並不試圖對每個係統組件的每種實現方案進行評估,也不對現有的商業係統進行綜述。而是選擇對一組使用最廣泛的操作係統原語的實現細節進行闡述。例如,在討論進程協調的一章,我們解釋的是信號量(使用最廣泛的進程協調原語)原語,而對其他原語(如監視器)的討論則放到練習裏。我們的目的是展示如何將原語在傳統的硬件上實現,消除神秘。學生一旦理解瞭一組特定原語的魔力,其他原語的實現也就容易掌握瞭。
  本書的示例代碼可以運行在Linksys E2100L無綫路由器上,該無綫路由器在零售商店裏就可以買到。隻不過,我們並不是將Linksys硬件作為一個無綫路由器來使用。我們的做法是,打開Linksys設備,將一根串行綫連接到其控製端口,使用該串行綫來中斷Linksys正常的啓動過程,並通過輸入命令來迫使Linksys硬件下載和運行一個Xinu操作係統副本。也就是說,我們基本上忽略供應商所提供的軟件,而是對其底層的硬件進行控製來運行Xinu。
  本書適用於高年級的本科生或者研究生,也適用於那些想瞭解操作係統的計算機從業人員。在本書所提供的全部材料裏,雖然沒有任何議題的難度達到不能理解的程度,但學習本書的全部內容可能需要超過一學期的時間。本科生裏很少有學生能夠熟練地閱讀串行程序,而理解運行時環境的細節或機器架構的學生就更少瞭。因此,必須對學生進行仔細引導,以便使其可以掌握進程管理和進程同步的知識。如果時間有限,我推薦覆蓋的內容包括第1章~第7章(進程管理)、第9章(基本的內存管理)、第12章(中斷處理)、第13章(時鍾管理)、第14章(設備無關的I/O)和第19章(文件係統)。此外,對於一個完整學期的本科生課程來說,討論第20章的遠程文件係統等基本的遠程訪問議題也很重要。對於研究生課程來說,學生應當完整地閱讀整本書,課堂討論則應該專注於一些微妙的細節、各種摺中和不同實現方案的比較。不管是本科生課程還是研究生課程,都應該包括的兩個議題是:1)在初始化階段,當一個運行中的程序轉化為一個進程時所發生的各種改變;2)當輸入行裏的字符序列作為一個字符串變量傳遞給命令進程時,在操作係統殼裏所發生的轉化。
  在所有情況下,如果學生能夠在實驗室中對係統進行動手實驗,則學習的效果將大幅提高。理想的狀態下,學生可以在課程的最初幾天或幾個星期開始使用這個係統,然後再試圖理解係統的內部結構。本書第1章提供瞭幾個例子和一些能夠引起學生興趣的實驗(令人吃驚的是,很多學生在學習過操作係統課程後,卻沒有寫過一個並發程序或使用過操作係統功能)。
  如果要在一個學期內覆蓋本書的大部分內容,則要求極快的進度,而這在本科生課程裏難以達到。此時,選擇略去哪些內容將很大程度上取決於選修本課程的學生的背景。在係統課程裏,我們需要課堂講解時間來幫助學生理解動機和細節。如果學生修過的“數據結構”課程裏對內存管理和錶處理進行過討論,則本書第4章和第9章的內容可以略過。如果學生在將來會選修網絡方麵的課程,則第17章的網絡協議內容也可以跳過。此外,本書包括一章遠程磁盤係統和一章遠程文件係統,這兩章的內容存在一些相似之處,可以略過一章。相對來說,遠程磁盤係統一章的內容可能更加貼切,因為該章引入瞭磁盤塊緩存的議題,而該議題對於許多操作係統來說都非常重要。
  在研究生課程裏,課堂時間可以用來討論動機、原理、摺中、不同原語集和不同的實現方案比較。學生在本課程學習結束後,應當對進程模型、中斷和進程之間的關係有一個深刻的理解,同時也將具備理解、創建和修改係統組件的能力。學生應當在大腦中建立起瞭整個係統的完整概念模型,並且知道所有的組件之間是如何交互協作的。
  我推薦在各個層麵上設計程序設計實驗。本書的許多練習都推薦對代碼進行修改或者測量,或者嘗試不同的實現方案。相關的軟件可在下麵的網站上免費下載,該網站上還列有如何創建一個Linksys實驗平颱的指令:www.xinu.cs.purdue.edu。
  因為Linksys的硬件非常便宜,所以構建一個實驗的成本很低。此外,我們也有用於其他硬件平颱的軟件版本,這些版本包括x86和ARM的一個功能有限的版本。
  本書中的許多練習都建議進行改進、實驗和不同實現,但是也可以設計大型實驗項目。可以用於不同硬件平颱的大型實驗例子包括:虛擬內存係統、不同計算機之間指令執行的同步機製、虛擬網絡的設計等。例如,普度大學的一些學生就將Xinu操作係統移植到瞭各種處理器上,或者為各種I/O設備編寫瞭設備驅動程序。
  學習本書前,學生需要具備基本的程序設計能力。學生應當理解基本的數據結構,這些基本結構包括鏈錶、棧和隊列,並且應當用C語言寫過程序。
  最後,我鼓勵設計人員盡可能使用高級程序設計語言,僅在必要的情況下纔使用匯編語言。根據這種原則,Xinu操作係統的大部分都是用C語言編寫的。少數一些與機器相關的功能,如上下文切換和中斷分配器的最底層功能,則是用匯編語言寫成的。所有的匯編語言代碼都附有解釋和注釋,使讀者無需學習匯編語言的細節就可以理解這些代碼。此外,我們還提供用於其他平颱的Xinu版本,這樣就可以對在各種平颱上實現Xinu操作係統的成本進行比較。例如,我們可以對在MIPS處理器上實現Xinu所需要的代碼量和在其他處理器架構(如x86)上實現Xinu所需要的代碼量進行比較。
  本書的成書要歸功於我過去在商業操作係統上所獲得的各種經驗,這些經驗有好也有壞。雖然Xinu操作係統與現有的操作係統在內部機製上並不相同,但其基本的思想卻並不新穎。另外,雖然Xinu係統裏的許多概念和名稱都來自於UNIX係統,但讀者應當注意,這兩個係統裏的許多函數所使用的參數和內部結構有巨大的不同。因此,為一個係統所寫的應用程序在未經修改的情況下不能在另一個平颱上運行。
  我感謝為Xinu項目貢獻瞭思想、辛勞和激情的所有人的幫助。在過去的歲月裏,普度大學的許多研究生都從事過本係統的工作,他們為Xinu進行過移植,寫過設備驅動。從原始的係統版本開始,Xinu到目前已經走過瞭30多年的曆程。本書的Xinu版本是原始版本的一個完全重寫,但卻保留瞭原始設計的優雅。Dennis Brylow將Xinu移植到瞭Linksys平颱,並且創建瞭許多底層的構件,包括啓動代碼、上下文切換和Ethernet驅動。Dennis還設計瞭重啓機製,並應用在普度大學的實驗室裏。另外,我特彆要感謝我的妻子和我的閤作夥伴Christine,她的仔細編輯和建議讓本書改善良多。
  Douglas E.Comer
  2011年8月


《嵌入式係統開發精要:從底層驅動到應用集成》 內容簡介 在飛速發展的嵌入式技術浪潮中,理解並掌握嵌入式係統的設計與開發至關重要。本書旨在為讀者提供一套係統、深入的學習路徑,覆蓋從硬件底層驅動到復雜應用集成的全過程。我們不再拘泥於特定操作係統架構的細節,而是著力於揭示嵌入式係統構建的通用原理、核心挑戰以及高效解決方案。本書將帶領您穿越信號流的復雜迷宮,構建堅實的軟件架構,最終實現穩定、高效、可靠的嵌入式産品。 第一部分:嵌入式係統底層基礎與硬件交互 本部分是整個嵌入式係統開發的基石。我們將首先深入理解嵌入式係統的核心——微控製器(Microcontroller Unit, MCU)。這不是對某個特定MCU型號的簡單介紹,而是要剖析MCU的通用架構,包括CPU核心(如ARM Cortex-M係列)、內存子係統(RAM, ROM, Flash)、外圍設備接口(GPIO, UART, SPI, I2C, ADC, DAC等)以及時鍾與電源管理單元。我們將詳細闡述這些組件如何協同工作,以及它們在嵌入式係統中的功能定位。 接下來,我們將聚焦於裸機編程(Bare-metal Programming)的概念。這意味著我們將直接與硬件寄存器打交道,不依賴於任何高級操作係統。我們將通過大量實例,講解如何通過直接讀寫硬件寄存器來實現對GPIO引腳的控製,如何配置和使用定時器産生精確的時間延遲或周期性信號,如何通過UART進行串行通信,以及如何與其他外設進行基本的數據交換。這個過程將幫助讀者建立起對硬件操作的直觀認識,理解“代碼如何驅動物理世界”。 中斷(Interrupts)是嵌入式係統中實現高效並發和響應外部事件的關鍵機製。我們將深入探討中斷的原理,包括中斷嚮量錶、中斷服務例程(ISR)的設計原則、中斷優先級管理以及中斷嵌套。通過實際案例,我們將演示如何配置和處理外部中斷,例如按鍵按下、傳感器數據就緒等,以及如何利用定時器中斷實現任務調度和周期性數據采集。理解中斷處理的精妙之處,是編寫響應式嵌入式程序的關鍵。 內存管理在資源受限的嵌入式環境中同樣不容忽視。我們將介紹嵌入式係統中常見的內存組織方式,包括閃存(Flash Memory)用於存儲程序代碼和常量數據,SRAM用於存儲變量和堆棧。我們將討論代碼的加載過程,理解固定地址代碼和可重定位代碼的區彆。對於需要動態分配內存的應用,我們將探討如何在資源有限的情況下實現高效的內存分配與釋放策略,以及避免常見的內存泄漏問題。 第二部分:實時操作係統(RTOS)的核心概念與應用 雖然本書不以特定RTOS為中心,但RTOS是現代嵌入式係統開發不可或缺的組成部分。本部分將係統地介紹RTOS的設計理念和核心組件,幫助讀者理解RTOS如何為復雜的嵌入式應用提供結構和管理。 我們將從任務(Task)的概念開始,這是RTOS的基本執行單元。我們將詳細闡述任務的狀態(就緒、運行、阻塞、掛起),以及任務之間的切換機製——上下文切換(Context Switching)。理解上下文切換的開銷和時機,對於優化係統性能至關重要。 進程間通信(Inter-Process Communication, IPC)是RTOS中用於實現任務間協同工作的關鍵機製。我們將詳細講解幾種主要的IPC方式: 信號量(Semaphores): 用於實現資源的互斥訪問和任務間的同步。我們將通過實際場景,例如共享打印機資源,來演示信號量的使用。 互斥鎖(Mutexes): 專用於解決共享資源互斥訪問的問題,並提供優先級繼承等機製來避免優先級反轉。 消息隊列(Message Queues): 允許任務之間發送和接收任意類型的數據塊,是實現數據流和事件通知的強大工具。 事件標誌組(Event Flags): 允許任務之間通過組閤多個事件進行同步,實現更靈活的等待和通知機製。 時間管理是RTOS的核心功能之一。我們將深入講解RTOS如何提供精確的時間服務,包括係統時鍾(System Tick)、延時函數(Delay Functions)以及定時器(Timers)的應用。理解RTOS的調度算法(如優先級調度、時間片輪轉)對於預測係統行為和優化資源分配至關重要。 本部分還將探討RTOS的內存管理策略,例如靜態分配和動態分配。我們會討論RTOS如何管理堆(Heap)和棧(Stack),以及如何避免在RTOS環境下齣現死鎖(Deadlock)和活鎖(Livlock)等並發問題。 第三部分:嵌入式係統軟件架構與設計模式 一個良好的軟件架構是構建可維護、可擴展、高可靠性嵌入式係統的關鍵。本部分將引領讀者思考如何在RTOS的基礎上,構建健壯的應用程序。 我們將介紹幾種在嵌入式領域廣泛應用的軟件架構模式: 事件驅動架構(Event-Driven Architecture): 強調係統響應外部事件的能力,通過事件和消息驅動係統流程,非常適閤於需要實時響應的係統。 狀態機(State Machines): 一種強大的建模工具,用於描述係統的行為,尤其適用於處理復雜的邏輯和流程控製。我們將演示如何設計和實現狀態機,以清晰地管理係統的工作模式。 生産者-消費者模型(Producer-Consumer Model): 一種經典的並發模型,用於解決數據産生與消費之間的速度匹配問題,通過緩衝區(如消息隊列)進行解耦。 我們將深入探討嵌入式係統中常用的設計模式,例如: 單例模式(Singleton Pattern): 確保某個類隻有一個實例,並提供一個全局訪問點,常用於配置管理器或日誌服務。 工廠模式(Factory Pattern): 提供一個創建對象的接口,但由子類決定實例化哪個類,增加瞭代碼的靈活性。 觀察者模式(Observer Pattern): 定義對象之間的一對多依賴關係,當一個對象的狀態發生改變時,所有依賴於它的對象都會得到通知並自動更新。 通過對這些架構和設計模式的學習,讀者將能夠更有條理地組織代碼,提高代碼的可讀性、可測試性和可重用性,從而應對日益復雜的嵌入式項目需求。 第四部分:嵌入式係統通信協議與網絡集成 現代嵌入式係統往往需要與其他設備進行通信,甚至接入互聯網。本部分將聚焦於嵌入式通信協議和網絡集成。 我們將詳細介紹嵌入式係統中常用的串行通信協議,例如: UART(Universal Asynchronous Receiver/Transmitter): 最基礎的串行通信方式,用於設備間的點對點通信。 SPI(Serial Peripheral Interface): 一種全雙工、同步的串行通信總綫,適閤於連接多個外設,如傳感器、存儲器等。 I2C(Inter-Integrated Circuit): 一種串行通信總綫,具有地址識彆功能,允許多個設備掛載在同一總綫上,常用於傳感器和片上外設的連接。 除瞭硬件層麵的通信,我們還將探討更高層次的通信協議,尤其是在物聯網(IoT)領域。 MQTT(Message Queuing Telemetry Transport): 一種輕量級的發布/訂閱消息協議,非常適閤於低帶寬、高延遲的網絡環境,是IoT設備通信的首選協議之一。 HTTP(Hypertext Transfer Protocol): 盡管通常與Web相關,但在某些嵌入式場景下,HTTP也被用於設備間的通信或與雲平颱的交互。 網絡層麵的集成將是本部分的重點。我們將討論嵌入式設備如何連接到網絡,無論是通過有綫以太網還是無綫Wi-Fi、藍牙、LoRa等。我們將介紹TCP/IP協議棧在嵌入式係統中的實現,以及如何進行網絡配置、數據傳輸和與服務器進行通信。 第五部分:嵌入式係統調試、測試與優化 在嵌入式係統的開發過程中,調試和測試是不可或缺的環節。本部分將提供一套實用的工具和方法,幫助讀者快速定位問題,保證産品質量。 我們將深入講解各種調試技術: 打印調試(Print Debugging): 最簡單但有時非常有效的調試方法。 斷點調試(Breakpoint Debugging): 利用調試器(如GDB)設置斷點,逐步執行代碼,觀察變量變化。 硬件調試器(Hardware Debuggers): 如JTAG/SWD接口,配閤調試器(如OpenOCD, Segger J-Link)進行更底層的代碼調試,包括內存查看、寄存器讀寫等。 邏輯分析儀與示波器: 用於觀察信號時序和電平變化,對於解決硬件接口問題至關重要。 我們將介紹嵌入式係統的測試策略: 單元測試(Unit Testing): 對模塊或函數進行獨立測試,確保其功能正確性。 集成測試(Integration Testing): 測試不同模塊組閤在一起時的交互是否正常。 係統測試(System Testing): 對整個係統進行端到端的測試,驗證其是否滿足需求。 最後,我們將討論嵌入式係統的性能優化。這包括代碼優化(算法改進、減少不必要的計算)、內存優化(閤理分配,避免浪費)以及功耗優化(低功耗模式的運用)。通過這些方法,讀者將能夠打造齣高效、節能的嵌入式解決方案。 總結 《嵌入式係統開發精要:從底層驅動到應用集成》並非一本關於特定操作係統內核實現的教程。它是一本關於如何構建一個功能完善、性能優越、可靠穩定的嵌入式係統的指南。本書強調的是通用的設計原則、核心技術和實踐經驗,旨在培養讀者獨立解決復雜嵌入式問題的能力。通過理論與實踐的結閤,本書將幫助您建立起紮實的嵌入式係統開發功底,為應對未來不斷變化的嵌入式技術挑戰做好充分準備。

用戶評價

評分

這本書的書名,特彆是“Xinu方法”這幾個字,瞬間就勾起瞭我強烈的好奇心。作為一個長期在計算機領域摸爬滾打的從業者,我深知操作係統設計是計算機科學中最核心、最基礎也最復雜的領域之一。我曾經閱讀過不少關於操作係統的書籍,但總覺得有些意猶未盡,或者過於側重理論,或者對於實踐的指導不夠深入。然而,“Xinu”這個名字,給我一種耳目一新的感覺,它似乎暗示瞭一種更加實用、更加貼近實際的教學方法。我非常好奇,作者是如何將Xinu這個具體的操作係統作為切入點,來講解如此宏大的操作係統設計原理的。我期望這本書能夠提供一種不同於傳統模式的學習體驗,它可能不是那種“教科書式”的講解,而是通過一個鮮活的、可運行的例子,來帶領讀者一步步深入到操作係統的內部。我希望能從中學習到如何思考操作係統的問題,如何設計和實現一個操作係統,甚至是如何去理解和優化現有的操作係統。

評分

這本書的包裝設計,那種簡潔而又不失質感的風格,讓我第一眼就對它産生瞭濃厚的興趣。我一直認為,一本優秀的技術書籍,除瞭內容本身的高質量,其呈現方式同樣重要。封麵的設計往往能夠傳達齣書籍的定位和氣質,而這本書的設計,恰恰展現瞭一種嚴謹、專業且具有前瞻性的學術品味。我尤其被“Xinu方法”這個副標題所吸引,它暗示瞭一種獨特的、以實踐為導嚮的學習路徑。我曾經接觸過一些關於操作係統的經典著作,它們固然精彩,但在如何將理論知識轉化為實際動手能力方麵,總覺得缺少一些直接的指導。我希望這本書能夠填補這一空白,它不僅僅是關於操作係統的理論知識,更是關於如何通過Xinu這個具體的操作係統來實現這些理論。我非常期待書中能夠包含豐富的代碼示例、詳細的設計思路以及實際操作的指導,讓我在閱讀的過程中,能夠真正地“玩轉”操作係統,理解其背後的邏輯和精妙之處。

評分

我最期待的是這本書能夠提供一種全新的視角來看待操作係統。很多關於操作係統的書籍,往往側重於理論的講解,雖然內容詳實,但常常讓人覺得脫離實際,難以想象其在真實計算機上的運行。而“Xinu方法”這個名字,暗示瞭一種以具體實現為基礎的學習方式,這正是我一直以來所尋求的。我希望這本書能夠通過Xinu這個具體的操作係統內核,深入淺齣地揭示操作係統的核心設計理念和實現細節。我設想,在閱讀過程中,我能夠不僅僅是“讀”到操作係統是如何工作的,而是能夠“看到”它如何在Xinu中被實現,甚至能夠通過對Xinu代碼的理解,去“感受”到操作係統的脈搏。我期待書中能夠包含大量的圖示、流程圖以及關鍵代碼片段的分析,用直觀的方式展現操作係統內部的運作機製,例如進程的創建與銷毀、內存的分配與迴收、中斷的處理流程等等。我希望這本書能夠打破抽象概念的壁壘,讓我能夠真正地理解操作係統的“藝術”,掌握構建和理解復雜軟件係統的關鍵技能。

評分

這本書的封麵設計真是太吸引人瞭,那種深邃的藍色背景,搭配上簡約卻充滿力量感的銀色字體,讓人一眼就能感受到一種嚴謹和深度的學術氛圍。我當時就是在書店裏被它“抓”住的,它就靜靜地擺在那裏,散發齣一種“過來,讓我帶你進入操作係統設計的奇妙世界”的邀請。我一直對計算機底層的東西非常感興趣,但又覺得很多資料過於枯燥抽象,難以入門。這本書的名字,尤其是“Xinu方法”這幾個字,給我一種獨特的感覺,仿佛它提供瞭一條不同尋常但又充滿啓發的學習路徑。我迫不及待地想知道,通過Xinu這個具體的例子,究竟能如何生動地剖析操作係統的核心原理。我腦海中已經開始構想,這本書會不會像一個經驗豐富的嚮導,帶領我穿越復雜的內存管理、進程調度、設備驅動等概念的迷霧,讓我能夠真正理解“看不見”的操作係統是如何運轉的。封麵上的圖案,雖然隻是簡單的幾何圖形組閤,但卻傳遞齣一種邏輯性和結構感,這正是我對操作係統設計最期待的特質。我希望這本書不僅僅是一本技術手冊,更是一次思維的啓迪,能夠讓我對計算機的運行機製産生更深刻、更全麵的認識。

評分

這本書的齣版信息和作者背景介紹,讓我對它充滿瞭期待。看到作者在操作係統領域擁有如此豐富的實踐經驗和深厚的理論功底,我就知道這絕對不是一本泛泛而談的書。我尤其看重那些能夠將復雜的理論與實際應用巧妙結閤的作者,他們往往能夠用最生動、最易懂的方式解釋最晦澀的概念。我一直在尋找一本能夠讓我“上手”學習操作係統設計的書籍,而“Xinu方法”這個提示,讓我相信這本書的作者並非隻滿足於理論的陳述,而是會通過一個可執行的、可觀察的係統來講解。我希望這本書能夠帶領我從最基礎的啓動過程開始,一步一步地構建起對操作係統的認識,而不是上來就拋齣各種高深的術語。我希望它能像一個循循善誘的老師,用清晰的邏輯和豐富的實例,引導我逐步掌握操作係統的各個組成部分及其相互作用。我對於那些能夠引發讀者思考、鼓勵讀者動手實踐的書籍情有獨鍾,我相信這本書一定能滿足我的這一期望,它不僅僅是知識的傳授,更是一種能力的培養,一種解決問題的思維方式的塑造。

評分

買錯瞭,算瞭。壓箱瞭

評分

寒假學的

評分

非常棒。。。經典的書啊,慢慢學習

評分

不錯。值得看看。

評分

還沒開始看,爭取能讀懂

評分

不錯不錯。。。。。。。。。。。。。

評分

我覺得這個很好。。。。。。

評分

圖書磨損快遞人員服務態度相當不錯

評分

我為什麼喜歡在京東買東西,因為今天買明天就可以送到。我為什麼每個商品的評價都一樣,因為在京東買的東西太多太多瞭,導緻積纍瞭很多未評價的訂單,所以我統一用段話作為評價內容。京東購物這麼久,有買到很好的産品,也有買到比較坑的産品,如果我用這段話來評價,說明這款産品沒問題,至少85分以上,而比較垃圾的産品,我絕對不會偷懶到復製粘貼評價,我絕對會用心的差評,這樣其他消費者在購買的時候會作為參考,會影響該商品銷量,而商傢也會因此改進商品質量。

相關圖書

本站所有內容均為互聯網搜尋引擎提供的公開搜索信息,本站不存儲任何數據與內容,任何內容與數據均與本站無關,如有需要請聯繫相關搜索引擎包括但不限於百度google,bing,sogou

© 2025 book.coffeedeals.club All Rights Reserved. 靜流書站 版權所有