第1章 Linux概述 1
1.1 Linux操作系统简介 1
1.1.1 Linux操作系统的发展 1
1.1.2 Linux操作系统的特点 2
1.1.3 目前流行的Linux版本 3
1.2 基于Linux内核的操作系统实验体系 4
1.2.1 操作系统实验的现状 4
1.2.2 选择Linux的原因 5
1.2.3 实验设计思想 6
1.2.4 实验体系的构成 7
第2章 Linux内核分析 9
2.1 Linux内核结构概述 9
2.2 Linux进程管理 9
2.2.1 描述进程的数据结构 10
2.2.2 进程调度 12
2.2.3 创建进程 15
2.2.4 进程通信机制 15
2.3 Linux存储管理 19
2.3.1 物理内存管理器 20
2.3.2 内核内存管理器 23
2.3.3 虚拟内存管理器 29
2.3.4 Linux的高速缓存机制 38
2.4 Linux设备管理 39
2.4.1 Linux设备管理结构 39
2.4.2 I/O控制方式 40
2.4.3 Linux设备驱动程序 41
2.4.4 字符设备驱动程序 44
2.4.5 块设备驱动程序 47
2.5 Linux文件系统 51
2.5.1 Linux文件系统概述 51
2.5.2 虚拟文件系统 52
2.5.3 EXT2文件系统 57
2.5.4 Linux的几个重要文件系统 62
第3章 Linux的使用 64
3.1 安装Red Hat Linux 64
3.2 Linux文件系统结构 65
3.2.1 Linux目录结构 65
3.2.2 目录功能简介 66
3.2.3 Linux文件系统的装载和卸载 67
3.3 Linux系统的基本操作 69
3.3.1 Linux系统的启动与退出 69
3.3.2 Linux系统对文件和目录的操作命令 70
3.3.3 文档备份与压缩命令 76
3.3.4 权限改变命令 79
3.3.5 Linux与用户有关的命令 81
3.3.6 Linux系统管理命令 82
3.3.7 Linux磁盘管理命令 82
3.3.8 进程管理命令 85
3.3.9 Linux其他命令 87
3.4 vi的使用 89
3.4.1 vi的操作模式 89
3.4.2 vi的进入与退出 90
3.4.3 vi的常用命令 90
3.5 Linux的编译器gcc 94
3.6 shell程序设计 95
3.6.1 shell程序的编写和执行 95
3.6.2 shell基础 96
3.6.3 shell程序设计 99
3.6.4 shell程序的调试 104
第4章 进程管理实验 110
4.1 实验目的 110
4.2 准备知识 110
4.2.1 基本概念 110
4.2.2 系统调用 110
4.2.3 相关函数 112
4.3 实验内容 116
4.3.1 编制程序实现进程的软中断通信 116
4.3.2 编制程序实现进程的管道通信 116
4.4 实验指导 116
4.4.1 进程的软中断通信 116
4.4.2 进程的管道通信 120
第5章 存储器管理实验 123
5.1 实验目的 123
5.2 准备知识 123
5.3 实验内容 123
5.4 实验指导 124
5.4.1 FIFO页面置换算法 124
5.4.2 LRU页面置换算法 125
5.4.3 NUR页面置换算法 126
5.4.4 OPT页面置换算法 127
5.5 参考源程序代码 128
5.6 程序运行 134
第6章 用户接口实验 135
6.1 实验目的 135
6.2 准备知识 135
6.2.1 控制台命令接口 135
6.2.2 添加系统调用 137
6.3 实验内容 138
6.3.1 控制台命令接口实验 138
6.3.2 系统调用实验 138
6.4 实验指导 139
6.4.1 控制台命令接口实验 139
6.4.2 系统调用实验 139
第7章 模块编程实验 143
7.1 实验目的 143
7.2 准备知识 143
7.2.1 模块的组织结构 144
7.2.2 模块的编译 145
7.2.3 模块的加载 147
7.2.4 模块的卸载 148
7.2.5 模块链接到内核的示意图 148
7.2.6 模块管理程序中的文件操作 148
7.2.7 i386的寄存器 151
7.3 实验内容 152
7.3.1 编写一个简单的内核模块 152
7.3.2 用户空间和内核空间的比较 152
7.3.3 向模块中添加新函数 153
7.3.4 系统核心寄存器数值的获取 153
7.4 实验指导 153
7.4.1 一个简单的内核模块 153
7.4.2 用户空间和内核空间的比较 155
7.4.3 向模块中添加新函数 157
7.4.4 系统核心寄存器数值的获取实验 158
第8章 设备管理实验 168
8.1 实验目的 168
8.2 准备知识 168
8.2.1 设备驱动程序简介 168
8.2.2 设备驱动程序与外界的接口 169
8.2.3 设备驱动程序的组织结构 170
8.2.4 设备驱动程序的代码 170
8.3 实验内容 177
8.3.1 字符类型设备的驱动程序 177
8.3.2 块类型设备的驱动程序 177
8.4 实验指导 177
8.4.1 字符类型设备的驱动程序 177
8.4.2 块类型设备的驱动程序 187
8.5 参考源程序代码 196
8.5.1 字符设备驱动程序 196
8.5.2 块设备驱动程序 200
第9章 文件系统实验 208
9.1 实验目的 208
9.2 准备知识 208
9.2.1 外存管理 208
9.2.2 目录管理 209
9.2.3 文件系统的接口 210
9.2.4 Linux的EXT2文件系统 210
9.2.5 可能用到的编程技术 212
9.2.6 用内存来模拟外存 212
9.3 实验内容 213
9.4 实验指导 213
9.4.1 二级文件系统的设计与实现 213
9.4.2 EXT2文件系统跟踪程序的设计与实现 233
第10章 时钟管理实验 244
10.1 实验目的 244
10.2 准备知识 244
10.2.1 GTK图形库简介 244
10.2.2 Linux的时钟函数 245
10.3 实验内容 246
10.4 实验指导 247
10.4.1 软件结构设计 247
10.4.2 数据结构设计 247
10.4.3 时间显示 249
10.4.4 时间设置 251
10.4.5 设置定时任务 252
10.4.6 闹钟功能实现 254
第11章 系统信息显示实验 256
11.1 实验目的 256
11.2 准备知识 256
11.2.1 proc文件系统简介 256
11.2.2 proc中的硬件信息 257
11.2.3 proc中的软件信息 260
11.2.4 实验中使用的库函数 263
11.2.5 实验中使用的编程技术 265
11.3 实验内容 267
11.4 实验指导 267
11.4.1 系统信息显示实验 267
11.4.2 内存信息监测实验 275
第12章 操作系统构成实验 286
12.1 实验目的 286
12.2 准备知识 286
12.2.1 Linux操作系统的启动流程 286
12.2.2 开机载入程序——引导软件LILO 287
12.2.3 Linux根文件系统简介 287
12.3 实验内容 289
12.4 实验指导 289
12.4.1 实验设计思想 289
12.4.2 配置新内核bzImage 290
12.4.3 制作引导盘 291
12.4.4 制作根文件系统盘 293
12.4.5 系统整合 298
12.4.6 系统测试 298
参考文献 301