第1章 操作系统概论 1
1.1 操作系统的地位及作用 1
1.1.1 操作系统的地位 1
目录 1
1.1.2 操作系统的作用 4
1.2 操作系统的功能 6
1.2.1 单道系统与多道系统 6
1.2.2 操作系统的功能 8
1.3.1 批处理操作系统 11
1.3 操作系统的分类 11
1.3.2 分时操作系统 12
1.3.3 实时操作系统 13
习题一 14
第2章 Linux概述 16
2.1 Linux的发展及背景 16
2.1.1 Linux的发展历史 16
2.1.2 Linux与GNU 17
2.2.1 Linux的优越性能 19
2.2 Linux的性能和特点 19
2.2.2 Linux的技术特点 20
2.3 Linux内核 23
2.3.1 Linux内核的版本 23
2.3.2 Lirux内核的组成及功能 24
习题二 26
第3章 进程管理 27
3.1 进程的基本概念 27
3.1.1 程序的顺序执行 27
3.1.2 程序的并发执行 29
3.1.3 进程的定义和特性 32
3.2 进程状态和进程控制 33
3.2.1 进程的状态及转换 34
3.2.2 进程的实体 35
3.2.3 进程控制 38
3.3 进程调度 40
3.3.1 进程调度的功能 40
3.3.2 进程调度性能准则 40
3.3.4 进程调度算法 41
3.3.3 进程调度方式 41
3.4 进程的互斥与同步 45
3.4.1 进程的互斥 45
3.4.2 进程的同步 48
3.5 P、V操作 49
3.5.1 P、V操作原语 49
3.5.2 用P、V操作实现进程互斥 51
3.5.3 用P、V操作实现进程同步 52
3.5.4 生产者—消费者问题 54
3.6.2 消息通信 56
3.6 进程通信 56
3.6.1 进程通信机制 56
3.6.3 信箱通信 59
3.7 死锁 62
3.7.1 死锁的产生 62
3.7.2 发生死锁的必要条件 64
3.7.3 死锁的预防 65
3.7.4 死锁的避免 66
习题三 68
3.7.5 死锁的检测和恢复 68
第4章 Linux进程管理 71
4.1 Linux进程概述 71
4.1.1 Linux进程的组成 71
4.1.2 进程在处理机上的执行状态 74
4.1.3 进程空间和系统空间 75
4.1.4 进程上下文和系统上下文 76
4.2 Linux进程的状态和标识 78
4.2.1 Linux进程的状态及转换 78
4.2.2 Linux进程的标识 81
4.2.3 进程标识哈希表 83
4.3 Linux的进程调度 84
4.3.1 Linux进程调度策略 84
4.3.2 Linux进程调度依据 85
4.3.3 Linux进程调度的加权处理 86
4.3.4 Linux进程调度方法 87
4.3.5 进程调度时机 87
4.4 Linux进程的创建和撤消 90
4.4.1 Linux进程的族亲关系 91
4.4.2 Linux进程的创建 92
4.4.3 进程创建的过程 94
4.4.4 进程程序的执行 95
4.4.5 进程的终止和撤消 96
4.5 Linux信号 97
4.5.1 信号的作用和种类 98
4.5.2 信号的处理 100
4.5.3 信号处理函数 101
4.6 Linux管道 104
4.6.1 管道的概念 104
4.6.2 无名管道 105
4.6.3 命名管道 108
4.7 IPC信号量机制 111
4.7.1 信号量与信号量集合 112
4.7.2 信号量集合的创建和检索 113
4.7.3 信号量PV操作 114
4.7.4 信号量操作等待队列 115
4.7.5 信号量控制操作 116
4.7.6 信号量的程序例 118
4.8.1 消息队列的结构 120
4.8 IPC消息队列 120
4.8.2 消息队列的生成与控制 122
4.8.3 消息的发送与接收 123
4.8.4 消息队列的程序例 124
4.9 IPC共享内存 129
4.9.1 共享内存 129
4.9.2 共享内存的生成与控制 130
4.9.3 共享内存的结合与分离 131
4.9.4 共享内存的程序例 132
4.9.5 IPC对象 134
习题四 136
第5章 存储管理 139
5.1 存储管理的目的与功能 139
5.2 地址重定位 141
5.2.1 作业的地址空间 141
5.2.2 静态地址重定位 142
5.2.3 动态地址重定位 144
5.3 分区存储管理 145
5.3.1 固定分区管理 146
5.3.2 可变分区管理 147
5.3.3 分区管理的存储保护 150
5.4 分页存储管理 151
5.4.1 简单分页存储管理 152
5.4.2 逻辑地址和物理地址 152
5.4.3 页表 154
5.4.4 快表 155
5.4.5 主存空间管理 157
5.4.6 存储保护和存储共享 158
5.5 存储扩充技术 161
5.5.1 覆盖技术 161
5.5.2 交换技术 162
5.5.3 虚拟存储技术 163
5.5.4 请求式分页存储管理 165
5.6 分段存储管理 167
5.6.1 分段存储管理原理 168
5.6.2 段表 169
5.6.3 地址转换 170
5.6.4 存储共享 171
5.6.5 存储保护 172
5.7 段页式存储管理 173
5.7.1 段页式存储管理原理 173
5.7.2 段页式存储管理的地址转换 174
习题五 175
第6章 Linux存储管理 179
6.1 80x86的分段机制 179
6.1.1 80x86的虚拟存储空间 179
6.1.2 段描述符表 181
6.1.3 逻辑地址向线性地址的转换 184
6.2 选段符与段描述符 186
6.2.1 选段符 186
6.2.2 段描述符 187
6.2.3 分段机制的存储保护 189
6.3 80x86的分页机制 190
6.3.1 80x86的分页机制 191
6.3.2 分页机制的地址转换 192
6.3.3 页表目录与页表的表项 194
6.3.5 快表TLB 195
6.3.4 分页机制的存储保护 195
6.4 Linux的分段和分页结构 196
6.4.1 Linux的分段结构 196
6.4.2 Linux的三级分页结构 198
6.4.3 内核页表和进程页表 200
6.5 Linux进程地址空间管理 201
6.5.1 进程地址空间用户区的管理 201
6.5.2 虚存区域 202
6.5.3 虚存区域的建立和映射 204
6.6.1 Linux的物理内存空间 208
6.6 Linux物理内存管理 208
6.6.2 物理页面的管理 210
6.6.3 空闲页面管理——Buddy算法 212
6.7 内存的分配与释放 215
6.7.1 物理内存分配的数据结构 215
6.7.2 物理内存分配函数 219
6.7.3 虚拟内存分配函数 219
习题六 220
7.1.2 文件的种类 222
7.1.1 文件 222
7.1 文件与文件系统 222
第7章 文件管理 222
7.1.3 文件系统及其功能 223
7.2 文件的组织结构 226
7.2.1 文件的逻辑结构 226
7.2.2 文件的物理结构 228
7.3 文件目录结构 231
7.3.1 文件说明 231
7.3.2 文件目录的结构 232
7.3.3 当前目录和目录文件 235
7.4 文件存取与操作 236
7.4.1 文件的存取方法 236
7.4.2 文件存储设备 237
7.4.3 活动文件 238
7.4.4 文件操作 239
7.5 文件存储空间的管理 242
7.5.1 空闲块表 242
7.5.3 空闲块链 243
7.5.2 空闲区表 243
7.5.4 位示图 244
7.6 文件的共享和保护 245
7.6.1 文件存取控制 246
7.6.2 文件共享的实现方法 248
7.6.3 文件的备份转储 249
习题七 249
第8章 Linux文件管理 252
8.1 Linux文件系统概论 252
8.1.1 Linux文件系统的树型结构 252
8.1.2 Linux文件的类型 253
8.1.3 文件的访问权限 255
8.2 EXT2文件系统 255
8.2.1 EXT2文件系统的构造 256
8.2.2 EXT2超级块 256
8.2.3 组描述符 259
8.3 EXT2的inocde和文件结构 260
8.3.1 EXT2文件系统inode结构 260
8.2.4 块位图 260
8.3.2 inode表和inode位图 262
8.3.3 EXT2文件的物理结构 263
8.3.4 EXT2的目录结构 264
8.4 虚拟文件系统VFS 265
8.4.1 VFS的工作原理 265
8.4.2 VFS超级块 268
8.4.3 VFS的inode 269
8.5.1 文件系统的安装 272
8.5 文件系统的安装与注册 272
8.5.2 文件系统的注册 274
8.6 文件管理和操作 276
8.6.1 系统对文件的管理 277
8.6.2 进程对文件的管理 278
8.6.3 文件操作函数 280
习题八 282
第9章 设备管理 284
9.1 设备与设备管理 284
9.1.1 设备的分类 284
9.1.2 设备管理的设计目标 285
9.1.3 设备管理的功能 286
9.2 I/O控制方式 287
9.2.1 CPU控制方式 287
9.2.2 通道方式 289
9.3 缓冲技术 292
9.3.1 缓冲技术的引进 292
9.3.2 缓冲器的种类 293
9.4 设备分配 294
9.4.1 设备管理的数据结构 295
9.4.2 设备分配策略 297
9.4.3 设备分配算法 298
9.5 设备处理程序与I/O进程 298
9.5.1 设备处理程序 298
9.5.2 I/O进程 300
习题九 301
第10章 Linux设备管理 303
10.1 Linux设备分类与识别 303
10.1.1 Linux设备的分类 303
10.1.2 设备文件 304
10.1.3 Linux设备的识别 305
10.2 设备驱动程序与设备注册 306
10.2.1 设备驱动程序 307
10.2.2 设备注册 308
10.3 Linux的I/O控制方式 311
10.3.1 查询等待方式 311
10.3.2 中断方式 312
10.3.3 DMA方式 314
10.4.1 设备I/O操作 317
10.4 Linux设备I/O操作 317
10.4.2 字符设备的操作 320
10.4.3 块设备的操作 321
习题十 324
第11章 作业管理 326
11.1 作业的组织 326
11.1.1 作业与作业步 326
11.1.2 作业的分类 327
11.1.3 作业的状态 327
11.1.4 作业控制块 328
11.2 操作系统的用户接口 329
11.2.1 程序级接口 329
11.2.2 作业控制级接口 331
11.3 作业调度 333
11.3.1 作业调度程序的功能 333
11.3.2 作业调度策略 334
11.3.3 作业调度算法 335
11.4 作业控制 337
11.4.1 脱机控制方式 337
11.4.2 联机控制方式 339
习题十一 341
第12章 Linux网络管理 342
12.1 网络通信基础知识 342
12.1.1 计算机网络通信 342
12.1.2 网络体系的层次结构 343
12.1.3 TCP/IP协议的结构 344
12.1.4 TCP协议 345
12.1.5 IP协议 347
12.2 Linux套接字 349
12.1.6 端口 349
12.2.1 套接字的概念 350
12.2.2 套接字的种类和套接字域 351
12.2.3 套接字结构体 352
12.2.4 套接字地址结构 353
12.3 协议注册与套接字的建立 354
12.3.1 通信协议的注册 354
12.3.2 套接字的建立 357
12.4.1 数据的封装和拆封 360
12.4 Linux网络缓冲区 360
12.4.2 套接字缓冲区 361
12.4.3 套接字缓冲区操作 364
12.5 套接字网络通信 366
12.5.1 套接字操作函数 366
12.5.2 客户/服务器通信 370
12.5.3 客户/服务器程序实例 371
习题十二 374
参考文献 376