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