Linux操作系統(tǒng)原理與應(yīng)用
定 價:28 元
- 作者:陳莉君 ,康華 著
- 出版時間:2012/1/1
- ISBN:9787302278368
- 出 版 社:清華大學(xué)出版社
- 中圖法分類:TP316.85
- 頁碼:255
- 紙張:膠版紙
- 版次:2
- 開本:16開
《21世紀高等學(xué)校規(guī)劃教材·計算機科學(xué)與技術(shù):Linux 操作系統(tǒng)原理與應(yīng)用(第2版)》是Linux內(nèi)核及動手實踐的入門教程。在龐大的Linux內(nèi)核中,選取最基本的內(nèi)容--進程管理、中斷、內(nèi)存管理、系統(tǒng)調(diào)用、內(nèi)核同步、文件系統(tǒng)、i/o設(shè)備管理等進行闡述。從原理出發(fā),基于Linux內(nèi)孩源代碼但又不局限于代碼,分析原理如何落實到代碼,并通過簡單有效的實例說明如何調(diào)用Linux內(nèi)核提供的函數(shù)進行內(nèi)核級程序的開發(fā)。主要章節(jié)給出了具有實用價值的小型應(yīng)用,從而讓讀者在實踐中加深對原理的理解和應(yīng)用能力。
《21世紀高等學(xué)校規(guī)劃教材·計算機科學(xué)與技術(shù):Linux 操作系統(tǒng)原理與應(yīng)用(第2版)》對于希望深入Linux操作系統(tǒng)內(nèi)部、閱讀Linux內(nèi)核源代碼以及進行內(nèi)核級程序開發(fā)的讀者具有較高的參考價值。《21世紀高等學(xué)校規(guī)劃教材·計算機科學(xué)與技術(shù):Linux 操作系統(tǒng)原理與應(yīng)用(第2版)》可作為高等院校計算機相關(guān)專業(yè)的本科生、研究生的教材,Linux應(yīng)用開發(fā)人員、嵌入式系統(tǒng)開發(fā)人員等均可從《21世紀高等學(xué)校規(guī)劃教材·計算機科學(xué)與技術(shù):Linux 操作系統(tǒng)原理與應(yīng)用(第2版)》中獲益。
教學(xué)目標明確,注重理論與實踐的結(jié)合 教學(xué)方法靈活,培養(yǎng)學(xué)生自主學(xué)習(xí)的能力 教學(xué)內(nèi)容先進,強調(diào)計算機在各專業(yè)中的應(yīng)用 教學(xué)模式完善,提供配套的教學(xué)資源解決方案
第2版前言
20年前誕生于學(xué)生之手的Linux,借助于Internet這片肥沃的土壤,在開源文化的大熔爐中,逐步成長為穿越桌面、服務(wù)器以及智能終端的通用操作系統(tǒng)。
1991年那個稚嫩的0.01版就是Linus在操作系統(tǒng)課上寫的一個大作業(yè),翻看其代碼,調(diào)度程序也就三十多行,文件系統(tǒng)的讀寫函數(shù)各只有十多行(不含所調(diào)用的其他函數(shù)),如此而已,初學(xué)者可以在這樣的代碼中看到自己所寫程序的影子。
Linux從曾經(jīng)的0.01版到現(xiàn)在的3.0版,歷經(jīng)了八百多個版本的變遷,其中變化的點滴都記錄在Linux內(nèi)核郵件列表(LKML)中,從這些足跡中,我們會尋覓到一個變量為什么那樣定義,一個結(jié)構(gòu)體為什么要增減字段,一個函數(shù)的參數(shù)為什么從三個變?yōu)閮蓚,在這一個個的細節(jié)中,軟件設(shè)計的蛛絲馬跡也就逐步展現(xiàn)出來。但是,這些過往的信息是海量的,多本教材都無法容納,需要讀者進行大量的課外閱讀。
Linux內(nèi)核的全部源代碼是一個龐大的世界,如何在這龐大而又復(fù)雜的世界中抓住主要內(nèi)容,如何找到進入Linux內(nèi)部的突破口,又如何把Linux的源代碼變?yōu)樽约核瑁⒃诖嘶A(chǔ)上進行內(nèi)核級程序的開發(fā),這是本書要探討的內(nèi)容。
首先第1章概述從不同側(cè)面概要描述了大家熟悉而又陌生的操作系統(tǒng),使讀者從宏觀上對操作系統(tǒng)有一個初步認識。之后,簡要介紹了Linux的同族同源UNIX,從而說明Linux賴以生存的土壤源于三十多年UNIX的發(fā)展。為了讓讀者對Linux有初步了解后動手實踐,本章還介紹了Linux內(nèi)核中的模塊編寫方法,并以鏈表為入口點,讓讀者近距離感知Linux內(nèi)核代碼設(shè)計中的精彩和美妙。
第2章內(nèi)存尋址從尋址方式的演變?nèi)胧,給出與操作系統(tǒng)設(shè)計密切相關(guān)的概念。比如,實模式、保護模式、各種寄存器、物理地址、虛擬地址以及線性地址等。然后對保護模式的分段機制和分頁機制簡要描述,并從Linux設(shè)計的角度分析了這些機制的具體落實。接著介紹了Linux中的匯編以及嵌入式匯編,最后給出了Linux系統(tǒng)的地址映射示例,這是在第2章就引入內(nèi)存尋址的根本目的,就是操作系統(tǒng)如何借助硬件把虛地址轉(zhuǎn)化為物理地址。
第3章進程從進程的引入開始,闡述了進程的各個方面,包括進程上下文、進程層次結(jié)構(gòu)、進程狀態(tài),尤其是對進程控制塊進行了比較全面的介紹。task_struct結(jié)構(gòu)作為描述Linux進程的核心數(shù)據(jù)結(jié)構(gòu),對其熟悉和掌握可深入了解進程的入口點。另外,進程控制塊的各種組織方式鏈表、散列表、隊列等數(shù)據(jù)結(jié)構(gòu)是管理和調(diào)度進程的基礎(chǔ)。在這些基礎(chǔ)上,對核心內(nèi)容進程調(diào)度進行了代碼級的描述,并給出了Linux新版本中改進的方法和思路。最后,以進程系統(tǒng)調(diào)用的剖析和應(yīng)用結(jié)束本章。
第4章內(nèi)存管理主要圍繞虛地址到物理地址的轉(zhuǎn)換,由此引發(fā)出了各種問題,比如地址映射問題,一方面把可執(zhí)行映像映射到虛擬地址空間,另一方面把虛地址空間映射到物理地址空間。而在程序執(zhí)行時,涉及請頁問題,把虛空間中的頁真正搬到物理空間,由此要對物理空間進行分配和回收,而在物理內(nèi)存不夠時,又必須進行內(nèi)外交換,交換的效率直接影響系統(tǒng)的性能,于是緩沖和刷新技術(shù)應(yīng)運而生。本章最后一節(jié)給出了一個比較完整的例子,說明內(nèi)存管理在實際中的應(yīng)用。
第5章中斷和異常涵蓋了較多的概念: 中斷和異常、中斷向量、IRQ、中斷描述符表、中斷請求隊列、中斷的上半部和下半部、時鐘中斷、時鐘節(jié)拍、節(jié)拍率、定時器等。中斷使得硬件與處理器進行通信,不同的設(shè)備對應(yīng)的中斷不同; 同時,不同的中斷具有不同的中斷服務(wù)程序,其中斷處理程序的入口地址存放在中斷向量表中。當某個中斷發(fā)生時,對應(yīng)的中斷服務(wù)程序得到執(zhí)行,在執(zhí)行期間不接受外界的干擾。為了緩解中斷服務(wù)程序的壓力,內(nèi)核中引入了中斷下半部機制,其本質(zhì)都是推后下半部函數(shù)的執(zhí)行。時鐘中斷是內(nèi)核跳動的脈搏,本章引入了時鐘節(jié)拍、jiffies、節(jié)拍率等概念,簡要介紹了時鐘中斷的運行機制,同時給出了定時器的簡單應(yīng)用。
第6章系統(tǒng)調(diào)用是內(nèi)核與用戶程序進行交互的接口。本章從不同角度對系統(tǒng)調(diào)用進行了描述,說明了系統(tǒng)調(diào)用與API、系統(tǒng)命令以及內(nèi)核函數(shù)之間的關(guān)系。然后,分析了Linux內(nèi)核如何實現(xiàn)系統(tǒng)調(diào)用,說明系統(tǒng)調(diào)用處理程序以及服務(wù)例程在整個系統(tǒng)調(diào)用執(zhí)行過程中的作用。最后,通過兩個實例討論了如何增加系統(tǒng)調(diào)用,并給出了從用戶空間調(diào)用系統(tǒng)調(diào)用的簡單例子。本章最后的日志收集系統(tǒng)實例給出了完整的過程,以便讀者充分認識系統(tǒng)調(diào)用的價值并在自己的項目開發(fā)中靈活應(yīng)用。
第7章內(nèi)核同步首先介紹了臨界區(qū)、共享隊列、死鎖等相關(guān)的同步概念,然后給出了內(nèi)核中常用的三種同步方法,即原子操作、自旋鎖以及信號量,其中對信號量的實現(xiàn)機制進行了稍微深入的分析。為了加強讀者對同步機制的應(yīng)用能力,本章給出了兩大實例,其一是生產(chǎn)者消費者模型,其二是內(nèi)核中線程、系統(tǒng)調(diào)用以及定時器任務(wù)隊列的并發(fā)執(zhí)行。通過這兩個例子,讓讀者深刻體會并發(fā)程序編寫中如何應(yīng)用同步機制。
第8章文件系統(tǒng)首先介紹了文件系統(tǒng)的基礎(chǔ)知識,其中涉及索引節(jié)點、軟連接、硬鏈接、文件系統(tǒng)、文件類型以及文件的訪問權(quán)限等概念。虛擬文件系統(tǒng)機制使得Linux可以支持各種不同的文件系統(tǒng),其實現(xiàn)中涉及的主要對象有超級塊、索引節(jié)點、目錄項以及文件,對這些數(shù)據(jù)結(jié)構(gòu)的描述可以使讀者深入到細節(jié)了解具體字段的含義。然后,簡要討論了文件系統(tǒng)的注冊、安裝以及卸載,最后的實例給出romfs文件系統(tǒng)的具體實現(xiàn)。
第9章設(shè)備驅(qū)動首先闡述了設(shè)備驅(qū)動程序在文件系統(tǒng)中所處的位置。接著介紹了驅(qū)動程序的通用框架,以及Linux字符驅(qū)動的簡單實例,讓讀者對驅(qū)動程序有一個初步認識。然后對設(shè)備驅(qū)動開發(fā)中所涉及的I/O空間進行了比較詳細的介紹。在字符設(shè)備驅(qū)動一節(jié),把內(nèi)存空間的一片區(qū)域看做一個字符設(shè)備,并給出了開發(fā)這樣一個驅(qū)動程序的具體步驟和過程。最后,對塊設(shè)備驅(qū)動程序的開發(fā)給出了簡要描述。
為了突出主題,本教材盡量簡化相關(guān)內(nèi)容,但為了填補課堂教學(xué)和實踐開發(fā)之間的鴻溝,我們在Linux內(nèi)核之旅www.kerneltravel.net網(wǎng)站上發(fā)布了與內(nèi)核相關(guān)的學(xué)習(xí)資料。針對讀者學(xué)習(xí)操作系統(tǒng)課程后,苦于無用武之地的現(xiàn)狀,網(wǎng)站上討論了如何進行Linux內(nèi)核層面上的系統(tǒng)軟件開發(fā),并配以有實用價值或指導(dǎo)意義的實驗。
在近幾年的教學(xué)過程中,依然感到學(xué)生對Linux系統(tǒng)的陌生和動手能力偏弱,針對這種現(xiàn)狀,在本次改版過程中,盡量從Linux命令級入手,逐步過渡到原理; 從簡單的小實驗入手,逐步過渡到大例子,以便學(xué)生把所學(xué)原理與平時遇到的問題聯(lián)系起來。
由于本教材的篇幅所限,本書內(nèi)容進行了一定的簡化,這可能在某種程度上影響了讀者對其內(nèi)容的深入理解,為此,Linux內(nèi)核之旅網(wǎng)站公布了作者曾經(jīng)編寫的《深入分析Linux內(nèi)核源代碼》一書的電子版內(nèi)容,以滿足讀者深入探究之愿望。
在本次內(nèi)容的改編過程中,得到了很多學(xué)生的支持,他們是許振文、牛濤、陳繼峰、武婷、武特等,而武特的博客http://edsionte.com/techblog/更是讓初學(xué)者有一種親近感和熟悉感, 希望大家在學(xué)習(xí)的過程中,以博客的形式分享自己的心得。
作者
2011年9月
第1章 概述
1.1 認識操作系統(tǒng)
1.1.1 從使用者角度看
1.1.2 從程序開發(fā)者的角度看
1.1.3 從操作系統(tǒng)在整個計算機系統(tǒng)所處位置看
1.1.4 從操作系統(tǒng)設(shè)計者的角度看
1.1.5 操作系統(tǒng)組成
1.2 開放源代碼的UNlX/Linux操作系統(tǒng)
1.2.1 UNIX誕生和發(fā)展
1.2.2 Linux誕生
1.2.3 操作系統(tǒng)標準POSIX
1.2.4 GNU和Linux
1.2.5 Linux的開發(fā)模式
1.3 Linux內(nèi)核
1.3.1 Linux內(nèi)核的技術(shù)特點
1.3.2 Linux內(nèi)核的位置
1.3.3 Linux內(nèi)核體系結(jié)構(gòu)
1.4 Linux內(nèi)核源代碼
1.4.1 Linux內(nèi)核版本
1.4.2 Linux內(nèi)核源代碼的結(jié)構(gòu)
1.4.3 Linux內(nèi)核源代碼分析工具
1.5 Linux內(nèi)核模塊編程入門
1.5.1 模塊的定義
1.5.2 編寫一個簡單的模塊
1.5.3 應(yīng)用程序與內(nèi)核模塊的比較
1.6 Linux內(nèi)核中鏈表的實現(xiàn)及應(yīng)用
1.6.1 鏈表的演化
1.6.2 鏈表的定義和操作
1.6.3 鏈表的應(yīng)用
1.7 小結(jié)
習(xí)題
第2章 內(nèi)存尋址
2.1 內(nèi)存尋址
2.1.1 Intelx86CPU尋址的演變
2.1.2 80x86寄存器簡介
2.1.3 物理地址、虛擬地址及線性地址
2.2 段機制
2.2.1 段描述符
2.2.2 地址轉(zhuǎn)換及保護
2.2.3 Linux中的段
2.3 分頁機制
2.3.1 頁與頁表
2.3.2 線性地址到物理地址的轉(zhuǎn)換
2.3.3 分頁舉例
2.3.4 頁面高速緩存
2.4 Linux中的分頁機制
2.5 Linux中的匯編語言
2.5.1 AT&T與Intel匯編語言的比較
2.5.2 AT&T匯編語言的相關(guān)知識
2.5.3 GCC嵌入式匯編
2.6 Linux系統(tǒng)地址映射舉例
2.7 小結(jié)
習(xí)題
第3章 進程
3.1 進程介紹
3.1.1 程序和進程
3.1.2 進程的層次結(jié)構(gòu)
3.1.3 進程狀態(tài)
3.1.4 進程舉例
3.2 Linux系統(tǒng)中的進程控制塊
3.2.1 進程狀態(tài)
3.2.2 進程標識符
3.2.3 進程之間的親屬關(guān)系
3.2.4 進程控制塊的存放
3.2.5 當前進程
3.3 Linux系統(tǒng)中進程的組織方式
3.3.1 進程鏈表
3.3.2 哈希表
……
第4章 內(nèi)存管理
第5章 中斷和異常
第6章 系統(tǒng)調(diào)用
第7章 內(nèi)核中的同步
第8章 文件系統(tǒng)
第9章 設(shè)備驅(qū)動
參考文獻