內容簡介
《Linux操作係統原理與應用(第2版)》是Linux內核及動手實踐的入門教程。在龐大的Linux內核中,選取基本的內容——進程管理、中斷、內存管理、係統調用、內核同步、文件係統、I/O設備管理等進行闡述。從原理齣發,基於Linux內核源代碼但又不局限於代碼,分析原理如何落實到代碼,並通過簡單有效的實例說明如何調用Linux內核提供的函數進行內核級程序的開發。主要章節給齣瞭具有實用價值的小型應用,從而讓讀者在實踐中加深對原理的理解和應用能力。
《Linux操作係統原理與應用(第2版)》對於希望深入Linux操作係統內部、閱讀Linux內核源代碼以及進行內核級程序開發的讀者具有較高的參考價值。
《Linux操作係統原理與應用(第2版)》可作為高等院校計算機相關專業的本科生、研究生的教材,Linux應用開發人員、嵌入式係統開發人員等均可從《Linux操作係統原理與應用(第2版)》中獲益。
內頁插圖
目錄
第1章 概述
1.1 認識操作係統
1.1.1 從使用者角度看
1.1.2 從程序開發者的角度看
1.1.3 從操作係統在整個計算機係統所處位置看
1.1.4 從操作係統設計者的角度看
1.1.5 操作係統組成
1.2 開放源代碼的UNIX/Linux操作係統
1.2.1 UNIX誕生和發展
1.2.2 Linux誕生
1.2.3 操作係統標準POSIX
1.2.4 GNU和Linux
1.2.5 Linux的開發模式
1.3 Linux內核
1.3.1 Linux晦核的技術特點
1.3.2 Linux內核的位置
1.3.3 Linux內核體係結構
1.4 Linux內核源代碼
1.4.1 Linux內核版本
1.4.2 Linux內核源代碼的結構
1.4.3 Linux內核源代碼分析工具
1.5 Linux內核模塊編程入門
1.5.1 模塊的定義
1.5.2 編寫一個簡單的模塊
1.5.3 應用程序與內核模塊的比較
1.6 Linux內核中鏈錶的實現及應用
1.6.1 鏈錶的演化
1.6.2 鏈錶的定義和操作
1.6.3 鏈錶的應用
1.7 小結
習題
第2章 內存尋址
2.1 內存尋址
2.1.1 Intelx86CPU尋址的演變
2.1.2 80x86寄存器簡介
2.1.3 物理地址、虛擬地址及綫性地址
2.2 段機製
2.2.1 段描述符
2.2.2 地址轉換及保護
2.2.3 Linux中的段
2.3 分頁機製
2.3.1 頁與頁錶
2.3.2 綫性地址到物理地址的轉換
2.3.3 分頁舉例
2.3.4 頁麵高速緩存
2.4 Linux中的分頁機製
2.5 Linux中的匯編語言
2.5.1 AT&T;與Intel匯編語言的比較
2.5.2 AT&T;匯編語言的相關知識
2.5.3 GCC嵌入式匯編
2.6 Linux係統地址映射舉例
2.7 小結
習題
第3章 進程
3.1 進程介紹
3.1.1 程序和進程
3.1.2 進程的層次結構
3.1.3 進程狀態
3.1.4 進程舉例
3.2 Linux係統中的進程控製塊
3.2.1 進程狀態
3.2.2 進程標識符
3.2.3 進程之間的親屬關係
3.2.4 進程控製塊的存放
3.2.5 當前進程
3.3 Linux係統中進程的組織方式
3.3.1 進程鏈錶
3.3.2 哈希錶
……
第4章 內存管理
第5章 中斷和異常
第6章 係統調用
第7章 內核中的同步
第8章 文件係統
第9章 設備驅動
參考文獻
前言/序言
20年前誕生於學生之手的I。inux,藉助於Internet這片肥沃的土壤,在開源文化的大熔爐中,逐步成長為穿越桌麵、服務器以及智能終端的通用操作係統。
1991年那個稚嫩的0.01版就是I。inus在操作係統課上寫的一個大作業,翻看其代碼,調度程序也就三十多行,文件係統的讀寫函數各隻有十多行(不含所調用的其他函數),如此而已,初學者可以在這樣的代碼中看到自己所寫程序的影子。
Linux從曾經的0.01版到現在的3.O版,曆經瞭八百多個版本的變遷,其中變化的點滴都記錄在Linux內核郵件列錶(LKML)中,從這些足跡中,我們會尋覓到一個變量為什麼那樣定義,一個結構體為什麼要增減字段,一個函數的參數為什麼從三個變為兩個,在這一個個的細節中,軟件設計的蛛絲馬跡也就逐步展現齣來。但是,這些過往的信息是海量的,多本教材都無法容納,需要讀者進行大量的課外閱讀。
Linux內核的全部源代碼是一個龐大的世界,如何在這龐大而又復雜的世界中抓住主要內容,如何找到進入Linux內部的突破口,又如何把Linux的源代碼變為自己所需,並在此基礎上進行內核級程序的開發,這是本書要探討的內容。
首先第1章概述從不同側麵概要描述瞭大傢熟悉而又陌生的操作係統,使讀者從宏觀上對操作係統有一個初步認識。之後,簡要介紹瞭Linux的同族同源UNIX,從而說明Linux賴以生存的土壤源於三十多年UNIX的發展。為瞭讓讀者對Linux有初步瞭解後動手實踐,本章還介紹瞭Linux內核中的模塊編寫方法,並以鏈錶為入口點,讓讀者近距離感知Linux內核代碼設計中的精彩和美妙。
第2章內存尋址從尋址方式的演變人手,給齣與操作係統設計密切相關的概念。比如,實模式、保護模式、各種寄存器、物理地址、虛擬地址以及綫性地址等。然後對保護模式的分段機製和分頁機製簡要描述,並從Linux設計的角度分析瞭這些機製的具體落實。接著介紹瞭Linux中的匯編以及嵌入式匯編,最後給齣瞭Linux係統的地址映射示例,這是在第2章就引入內存尋址的根本目的,就是操作係統如何藉助硬件把虛地址轉化為物理地址。
第3章進程從進程的引入開始,闡述瞭進程的各個方麵,包括進程上下文、進程層次結構、進程狀態,尤其是對進程控製塊進行瞭比較全麵的介紹。task_struct結構作為描述Linux進程的核心數據結構,對其熟悉和掌握可深入瞭解進程的入口點。另外,進程控製塊的各種組織方式鏈錶、散列錶、隊列等數據結構是管理和調度進程的基礎。在這些基礎上,對核心內容進程調度進行瞭代碼級的描述,並給齣瞭Linux新版本中改進的方法和思路。最後,以進程係統調用的剖析和應用結束本章。
第4章內存管理主要圍繞虛地址到物理地址的轉換,由此引發齣瞭各種問題,比如地址映射問題,一方麵把可執行映像映射到虛擬地址空間,另一方麵把虛地址空間映射到物理地址空間。而在程序執行時,涉及請頁問題,把虛空間中的頁真正搬到物理空間,由此要對物理空間進行分配和迴收,而在物理內存不夠時,又必須進行內外交換,交換的效率直接影響係統的性能,於是緩衝和刷新技術應運而生。本章最後一節給齣瞭一個比較完整的例子,說明內存管理在實際中的應用。
第5章中斷和異常涵蓋瞭較多的概念:中斷和異常、中斷嚮量、IRQ、中斷描述符錶、中斷請求隊列、中斷的上半部和下半部、時鍾中斷、時鍾節拍、節拍率、定時器等。中斷使得硬件與處理器進行通信,不同的設備對應的中斷不同;同時,不同的中斷具有不同的中斷服務程序,其中斷處理程序的入口地址存放在中斷嚮量錶中。當某個中斷發生時,對應的中斷服務程序得到執行,在執行期間不接受外界的乾擾。為瞭緩解中斷服務程序的壓力,內核中引入瞭中斷下半部機製,其本質都是推後下半部函數的執行。時鍾中斷是內核跳動的脈搏,本章引入瞭時鍾節拍、jiffies、節拍率等概念,簡要介紹瞭時鍾中斷的運行機製,同時給齣瞭定時器的簡單應用。
第6章係統調用是內核與用戶程序進行交互的接口。本章從不同角度對係統調用進行瞭描述,說明瞭係統調用與API、係統命令以及內核函數之間的關係。然後,分析瞭Linux內核如何實現係統調用,說明係統調用處理程序以及服務例程在整個係統調用執行過程中的作用。最後,通過兩個實例討論瞭如何增加係統調用,並給齣瞭從用戶空間調用係統調用的簡單例子。本章最後的日誌收集係統實例給齣瞭完整的過程,以便讀者充分認識係統調用的價值並在自己的項目開發中靈活應用。
第7章內核同步首先介紹瞭臨界區、共享隊列、死鎖等相關的同步概念,然後給齣瞭內核中常用的三種同步方法,即原子操作、自鏇鎖以及信號量,其中對信號量的實現機製進行瞭稍微深入的分析。為瞭加強讀者對同步機製的應用能力;本章給齣瞭兩大實例,其一是生産者一消費者模型,其二是內核中綫程、係統調用以及定時器任務隊列的並發執行。通過這兩個例子,讓讀者深刻體會並發程序編寫中如何應用同步機製。
第8章文件係統首先介紹瞭文件係統的基礎知識,其中涉及索引節點、軟連接、硬鏈接、文件係統、文件類型以及文件的訪問權限等概念。虛擬文件係統機製使得Linux可以支持各種不同的文件係統,其實現中涉及的主要對象有超級塊、索引節點、目錄項以及文件,對這些數據結構的描述可以使讀者深入到細節瞭解具體字段的含義。然後,簡要討論瞭文件係統的注冊、安裝以及卸載,最後的實例給齣romfs文件係統的具體實現。
第9章設備驅動首先闡述瞭設備驅動程序在文件係統中所處的位置。接著介紹瞭驅動程序的通用框架,以及Linux字符驅動的簡單實例,讓讀者對驅動程序有一個初步認識。然後對設備驅動開發中所涉及的I/O空間進行瞭比較詳細的介紹。在字符設備驅動一節,把內存空間的一片區域看做一個字符設備,並給齣瞭開發這樣一個驅動程序的具體步驟和過程。最後,對塊設備驅動程序的開發給齣瞭簡要描述。
為瞭突齣主題,本教材盡量簡化相關內容,但為瞭填補課堂教學和實踐開發之間的鴻溝,我們在Linux內核之旅www.kerneltravel.net網站上發布瞭與內核相關的學習資料。針對讀者學習操作係統課程後,苦於無用武之地的現狀,網站上討論瞭如何進行Linux內核層麵上的係統軟件開發,並配以有實用價值或指導意義的實驗。
Linux操作係統原理與應用(第2版) 下載 mobi epub pdf txt 電子書