Linux操作系統(tǒng)上的用戶態(tài)編程是通過系統(tǒng)調(diào)用提供的接口,將原本需要在Linux內(nèi)核中或者對(duì)Linux內(nèi)核進(jìn)行多次系統(tǒng)調(diào)用才能實(shí)現(xiàn)的功能,放到內(nèi)核之外來(lái)實(shí)現(xiàn),從而保證內(nèi)核的穩(wěn)定性,獲得更強(qiáng)的可拓展性,并且可以將Linux內(nèi)核的傳染性開源協(xié)議隔離。全書共分9章,第1、2章從用戶態(tài)與內(nèi)核態(tài)的基本概念入手,簡(jiǎn)要介紹C語(yǔ)言標(biāo)準(zhǔn)庫(kù)編程以及各種C語(yǔ)言標(biāo)準(zhǔn)庫(kù)。第3章深入介紹系統(tǒng)調(diào)用的概念和計(jì)算機(jī)架構(gòu)、特權(quán)級(jí)與硬件資源訪問限制的關(guān)系,以及內(nèi)核中系統(tǒng)調(diào)用的處理方式。第4章涵蓋了系統(tǒng)調(diào)用與C語(yǔ)言標(biāo)準(zhǔn)庫(kù)的關(guān)系,介紹如何基于Linux系統(tǒng)調(diào)用實(shí)現(xiàn)C語(yǔ)言標(biāo)準(zhǔn)庫(kù)。第5章深入介紹了Linux系統(tǒng)用戶態(tài)驅(qū)動(dòng)API的使用和分析,包括UserspaceI/O(UIO)接口的使用和VFIO等用戶態(tài)驅(qū)動(dòng)接口的使用。第6-9章涵蓋了高性能網(wǎng)卡Linux用戶態(tài)驅(qū)動(dòng)分析、用戶態(tài)文件系統(tǒng)FUSE分析、用戶態(tài)線程——協(xié)程和基于AndroidHAL硬件抽象層的用戶態(tài)驅(qū)動(dòng),介紹了操作系統(tǒng)中各個(gè)關(guān)鍵組件在用戶態(tài)中的實(shí)現(xiàn)方法。
前言
第1章Linux操作系統(tǒng)概述/
1.1用戶態(tài)與內(nèi)核態(tài)/
1.1.1硬件特權(quán)級(jí)、運(yùn)行模式(x86)/
1.1.2Linux的用戶態(tài)與內(nèi)核態(tài)/
1.2用戶態(tài)的優(yōu)勢(shì)/
1.2.1用戶態(tài)的速度優(yōu)勢(shì)/
1.2.2受限的高級(jí)功能(中斷、DMA)/
1.2.3更優(yōu)的內(nèi)核穩(wěn)定性/
1.2.4高吞吐量網(wǎng)絡(luò)設(shè)備/
1.2.5內(nèi)核態(tài)的copyleft開源協(xié)議/
第2章C語(yǔ)言程序設(shè)計(jì)與標(biāo)準(zhǔn)庫(kù)編程/
2.1桌面Linux使用的glibc簡(jiǎn)介/
2.2其他C語(yǔ)言標(biāo)準(zhǔn)庫(kù)/
2.2.1uClibc/
2.2.2musl libc/
2.2.3BSD libc/
2.2.4Android Bionic/
第3章系統(tǒng)調(diào)用與Linux系統(tǒng)調(diào)用的實(shí)現(xiàn)/
3.1什么是系統(tǒng)調(diào)用/
3.1.1計(jì)算機(jī)架構(gòu)、特權(quán)級(jí)與硬件資源訪問限制/
3.1.2內(nèi)核中的系統(tǒng)調(diào)用/
3.1.3系統(tǒng)調(diào)用open的實(shí)現(xiàn)/
3.2Linux系統(tǒng)調(diào)用的實(shí)現(xiàn)(內(nèi)核態(tài))/
3.2.1系統(tǒng)調(diào)用的通用處理/
3.2.2x86架構(gòu)的系統(tǒng)調(diào)用實(shí)現(xiàn)/
第4章系統(tǒng)調(diào)用與C語(yǔ)言標(biāo)準(zhǔn)庫(kù)/
4.1如何基于Linux系統(tǒng)調(diào)用實(shí)現(xiàn)C語(yǔ)言標(biāo)準(zhǔn)庫(kù)/
4.1.1實(shí)現(xiàn)標(biāo)準(zhǔn)庫(kù)的原理與方法/
4.1.2glibc中的標(biāo)準(zhǔn)庫(kù)實(shí)例/
4.2基于Linux sysfs在用戶態(tài)下編寫程序控制硬件/
4.2.1什么是Linux sysfs/
4.2.2使用C語(yǔ)言標(biāo)準(zhǔn)庫(kù)文件讀寫函數(shù)控制鍵盤LED/
4.2.3使用標(biāo)準(zhǔn)庫(kù)中提供的系統(tǒng)調(diào)用或Shell腳本調(diào)節(jié)屏幕背光/
第5章Linux系統(tǒng)用戶態(tài)驅(qū)動(dòng)API/
5.1用戶態(tài)驅(qū)動(dòng)與內(nèi)核態(tài)驅(qū)動(dòng)/
5.1.1內(nèi)核中的驅(qū)動(dòng)與字符設(shè)備驅(qū)動(dòng)/
5.1.2內(nèi)核中的塊設(shè)備驅(qū)動(dòng)/
5.1.3內(nèi)核中的網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)/
5.1.4用戶態(tài)驅(qū)動(dòng)的原理/
5.1.5在用戶態(tài)實(shí)現(xiàn)驅(qū)動(dòng)的優(yōu)劣/
5.2用戶態(tài)驅(qū)動(dòng)接口Userspace I/O(UIO)/
5.2.1硬件設(shè)備的內(nèi)存映射/
5.2.2UIO的用戶態(tài)API/
5.2.3基于UIO實(shí)現(xiàn)的PCI設(shè)備用戶態(tài)驅(qū)動(dòng)/
5.3用戶態(tài)驅(qū)動(dòng)接口VFIO/
5.3.1VFIO與硬件無(wú)關(guān)IOMMU的重映射/
5.3.2使用VFIO實(shí)現(xiàn)PCI設(shè)備的用戶態(tài)驅(qū)動(dòng)/
第6章Linux系統(tǒng)用戶態(tài)高性能網(wǎng)卡驅(qū)動(dòng)分析/
6.1Intel網(wǎng)卡用戶態(tài)驅(qū)動(dòng)的架構(gòu)/
6.2Intel網(wǎng)卡用戶態(tài)驅(qū)動(dòng)ixy的核心實(shí)現(xiàn)/
第7章Linux系統(tǒng)用戶態(tài)文件系統(tǒng)FUSE分析/
7.1FUSE在內(nèi)核中的實(shí)現(xiàn)模塊/
7.2FUSE在用戶態(tài)中的API與基礎(chǔ)示例/
第8章用戶態(tài)線程——協(xié)程/
8.1Linux內(nèi)核中線程與進(jìn)程切換的實(shí)現(xiàn)/
8.1.1線程與進(jìn)程切換的算法與原理/
8.1.2線程與進(jìn)程上下文切換實(shí)現(xiàn)/
8.2Linux環(huán)境用戶態(tài)中含棧協(xié)程的實(shí)現(xiàn)/
8.2.1協(xié)程的上下文切換實(shí)現(xiàn)/
8.2.2基于用戶態(tài)的棧實(shí)現(xiàn)協(xié)程狀態(tài) /
第9章基于Android HAL硬件抽象層的用戶態(tài)驅(qū)動(dòng)/
9.1Android HAL簡(jiǎn)介/
9.1.1Android HAL的作用/
9.1.2Android HAL的分類/
9.2HAL中的內(nèi)核態(tài)隔離/
9.2.1HAL中燈光Light的實(shí)現(xiàn)分析/
9.2.2HAL中內(nèi)核態(tài)部分的實(shí)現(xiàn)/
9.2.3HAL實(shí)現(xiàn)內(nèi)核態(tài)GPL隔離的原理/