目录 3
丛书序言 3
专家指导委员会 3
前言 3
第一部分 基础知识 3
第1章 Linux操作系统简介 3
1.1 Linux的故事 3
1.2 Linux简介 6
1.3 阅读Linux内核源码 8
1.4 小结 12
第2章 Linux的进程管理 13
2.1 进程与进程描述符 13
2.2 进程状态及切换时机 16
2.2.1 Linux的进程状态 16
2.2.2 进程的切换时机 17
2.3 进程的调度算法 18
2.4 进程的创建与消亡 19
2.4.1 进程的创建 19
2.4.2 进程的销毁 22
第3章 Linux的存储管理 25
3.1 物理内存的管理 25
3.1.1 页帧与区域 25
3.1.2 伙伴算法 26
3.1.3 slab分配器 27
3.1.4 换出页面 29
3.2 进程空间的管理 30
3.2.1 页表机制 30
3.2.2 vm_area_struct结构 32
3.2.3 进程空间的相关系统调用 33
3.2.4 页面异常的处理 33
4.1 VFS 37
第4章 Linux的文件系统 37
4.1.1 进程对文件系统的支持 38
4.1.2 VFS的文件模型 38
4.1.3 文件系统的注册与安装 41
4.1.4 各种对象的操作接口 41
4.1.5 目录的缓存机制 44
4.2 EXT2文件系统 45
4.2.1 EXT2文件系统在磁盘上的物理布局 45
4.2.2 主要数据结构及基本操作 46
4.2.3 磁盘块的分配和释放 49
4.3 有关的系统调用及处理流程 49
4.3.1 文件的open操作 49
4.3.2 文件的read操作 51
5.2.1 设备的注册和注销 53
5.2 相关数据结构 53
5.1 设备文件的概念 53
第5章 Linux的设备管理 53
5.2.2 缓冲区管理 54
5.2.3 设备请求队列 56
5.3 块设备文件的open和read操作 56
5.3.1 open()函数的实现 57
5.3.2 read()函数的实现 58
第6章 中断、异常及系统调用 59
6.1 中断和异常的基本知识 59
6.2 异常处理函数 60
6.3 系统调用 61
6.4 中断的处理 62
6.4.1 中断控制器 62
6.4.2 管理中断的数据结构 63
6.5 软中断 65
6.4.3 中断的处理过程 65
第7章 SYS V进程间通信 69
7.1 共同特性 69
7.2 信号量 71
7.3 消息队列 74
7.4 共享内存 76
第二部分 实验 81
实验一 观察Linux的行为 81
Linux下的proc文件系统简介 81
实验内容 86
解决方案 86
实验二 进程间通信 89
Linux进程间通信简介 89
本机内进程通信 89
网络间进程通信 92
实验内容 94
解决方案 95
实验三 理解和增加Linux系统调用 97
内核及系统调用原理 97
实验内容 101
解决方案 102
实验四 内核模块 105
Linux内核模块简介 105
模块的组织结构 105
模块的加载和卸载 106
内核模块的编写实例 107
实验内容 109
解决方案 109
用户空间和内核空间 109
进程 110
概述 113
实验五 proc文件系统编程 113
proc文件系统编程简介 113
函数接口 114
基本的例子 117
实验内容 119
解决方案 120
实验六 同步机制 123
同步机制简介 123
阻塞任务 124
等待队列 124
使用等待队列 126
实验内容 128
解决方案 129
Linux下设备驱动程序的基本结构 131
编写设备驱动程序 131
实验七 设备驱动程序 131
编写Linux设备驱动程序的基本方法 134
radimo:一个块设备驱动程序的例子 137
实验内容 145
解决方案 145
USB设备简述 145
Linux下的USB设备驱动程序简介 147
设备驱动程序的调试方法 148
第三部分 附录 153
附录A 安装Red Hat Linux 153
附录B 编译Linux内核 157
附录C Linux常用命令 163
附录D Linux常用函数 177
附录E 常用内核函数 189