第一部分 Linux概况
1 Linux的演变
2 通用内核职责
2.1 资源抽象
2.2 共享资源
2.2.1 管理对资源的竞争
2.2.2 资源的独占使用
2.2.3 有控制的共享
2.3 操作系统的功能划分
3 内核的组织结构
3.1 中断
3.2 使用内核服务
3.3 串行执行
3.4 守护进程
3.5 引导过程
3.5.1 引导扇区
3.5.2 启动内核
3.6 登录到机器
3.7 机器中的控制流
4 进程与资源管理
4.1 运行进程管理程序
4.1.1 系统调用
4.1.2 中断
4.2 创建新任务
4.3 调度程序
4.4 进程间通信与同步机制
4.5 保护机制
5 存储管理
5.1 管理虚拟地址空间
5.2 辅助存储
5.3 缺页处理
5.4 地址变换
6 设备管理
6.1 设备驱动程序
6.2 处理中断
7 文件管理
7.1 装载文件系统
7.2 打开文件
7.3 读写文件
7.4 Ext2文件系统
8 了解Linux的更多信息
第二部分 练 习
练习一 观察Linux行为
1.1 介绍
1.2 问题陈述
1.2.1 部分A
1.2.2 部分B
1.2.3 部分C
1.2.4 部分D
1.3 解决问题
1.3.1 /proc文件系统
1.3.2 使用argc和argv
1.3.3 组织方案
1.3.4 将工作保存在共享实验室
练习二 Shell编程
2.1 介绍
2.1.1 基本UNIX风格的shell操作
2.1.2 将进程放在后台
2.1.3 I/O重定向
2.1.4 shell管道
2.1.5 读取多个输入流
2.2 问题陈述
2.2.1 部分A
2.2.2 部分B
2.2.3 部分C
2.3 解决问题
2.3.1 组织方案
2.3.2 部分A
2.3.3 部分B和C
练习三 内核定时器
3.1 介绍
3.1.1 内核如何维护时间
3.1.2 每进程定时器
3.2 问题陈述
3.2.1 部分A
3.2.2 部分B
3.2.3 部分C
3.3 解决问题
3.3.1 Linux源代码组织结构
3.3.2 信号
3.3.3 组织方案
练习四 内核模块
4.1 介绍
4.1.1 模块组织结构
4.1.2 模块的装载与卸载
4.2 问题陈述
4.3 解决问题
4.3.1 read()过程
4.3.2 文件结束(EOF)条件
4.3.3 编译模块
4.3.4 装载和卸载模块
4.3.5 时钟精度问题
4.3.6 更多帮助
练习五 系统调用
5.1 介绍
5.1.1 系统调用链
5.1.2 定义系统调用编号
5.1.3 生成系统调用stub
5.1.4 内核函数组织结构
5.1.5 引用用户空间内存地址
5.2 问题陈述
5.2.1 部分A
5.2.2 部分B
5.3 解决问题
5.3.1 内核printk()函数
5.3.2 组织方案
5.3.3 重建内核
5.3.4 留下一个干净的环境
练习六 共享内存
6.1 介绍
6.1.1 共享内存API
6.1.2 实现
6.2 问题陈述
6.3 解决问题
练习七 虚拟存储
7.1 介绍
7.1.1 虚拟地址空间
7.1.2 虚拟存储区
7.1.3 地址变换
7.1.4 缺页处理程序
7.1.5 主存分配
7.2 问题陈述
7.2.1 部分A
7.2.2 部分B
7.3 解决问题
练习八 同步机制
8.1 介绍
8.1.1 阻塞任务
8.1.2 等待队列
8.1.3 使用等待队列
8.2 问题陈述
8.2.1 部分A
8.2.2 部分B
8.3 解决问题
练习九 调度程序
9.1 介绍
9.1.1 进程管理
9.1.2 进程状态
9.1.3 调度程序实现
9.1.4 公平共享调度
9.2 问题陈述
9.2.1 部分A
9.2.2 部分B
9.3 解决问题
9.3.1 设计解决方案
9.3.2 比较调度程序的性能
练习十 设备驱动程序
10.1 介绍
10.1.1 驱动程序组织结构
10.1.2 可装载内核模块驱动程序
10.1.3 示例:磁盘驱动程序
10.2 问题陈述
10.2.1 部分A
10.2.2 部分B
10.3 解决问题
练习十一 文件系统
11.1 介绍
11.1.1 虚拟文件系统
11.1.2 目录
11.1.3 示例:MS-DOS文件系统
11.2 问题陈述
11.2.1 部分A
11.2.2 部分B
11.2.3 部分C
11.3 解决问题
11.3.1 MS-DOS磁盘格式
11.3.2 MS-DOS FAT
11.3.3 使用软盘API
11.3.4 设计解决方案
练习十二 文件I/O
12.1 介绍
12.1.1 打开与关闭操作
12.1.2 读写操作
12.1.3 块分配
12.1.4 缓冲区管理
12.2 问题陈述
12.2.1 部分A
12.2.2 部分B
12.2.3 部分C
12.2.4 部分D
12.3 解决问题
12.3.1 open()函数
12.3.2 缓冲FAT
12.3.3 解决方案
进一步学习
附录A Linux Mandrake 7.0快速安装指南
附录B GNU通用公共许可证(版本2,1991.6)
参考文献