第1章 计算机系统导论 1
1.1 计算机系统硬件组织结构 1
1.1.1 计算机主要配件及其组装结构 1
1.1.2 计算机系统的逻辑组织结构 1
1.1.3 Intel 8086的存储器组织模型 5
1.1.4 堆栈的组织模型 5
1.1.5 32位微处理器 7
1.1.6 保护模式下的全局段描述符 9
1.1.7 保护模式下的寻址方式 10
1.2 中断机制 11
1.3 指令、机器语言与汇编语言 12
1.3.1 指令 12
1.3.2 机器语言与汇编语言 13
1.3.3 Intel 8086指令系统 13
1.4 形成层次结构的存储设备 18
1.5 利用操作系统管理计算机硬件、软件资源 19
1.5.1 操作系统综述 19
1.5.2 操作系统抽象 23
习题 26
上机实践 27
第2章 程序的机器层级表示 28
2.1 程序汇编与机器编码 28
2.1.1 机器代码 29
2.1.2 指令与数据格式 32
2.1.3 访问信息 32
2.1.4 数据传送指令 34
2.2 算术和逻辑操作 35
2.3 控制 36
2.3.1 条件码 36
2.3.2 应用条件码 36
2.3.3 循环 38
2.4 过程调用 39
2.4.1 栈帧结构 39
2.4.2 转移控制 40
2.4.3 寄存器使用惯例 40
2.4.4 过程应用示例 40
习题 42
上机实践 45
第3章 内核与进程控制 46
3.1 内核控制 46
3.1.1 内核的结构模式 46
3.1.2 内核的体系结构 48
3.2 CPU的分段保护工作模式 52
3.2.1 保护机制综述 52
3.2.2 使用调用门进行控制转移 54
3.2.3 使用中断门或陷阱门进行控制转移 55
3.2.4 支持分段保护的硬件设施及内核数据结构 56
3.2.5 任务状态段TSS及其结构 57
3.3 利用进程实现并发多任务 58
3.3.1 进程概念的引入 58
3.3.2 进程的定义 62
3.3.3 进程控制块 63
3.4 进程状态及转换 65
3.5 进程控制 66
3.5.1 创建新进程 67
3.5.2 终止进程 69
3.6 线程控制 70
3.6.1 线程的概念 70
3.6.2 线程的实现 70
3.6.3 线程与进程的比较 70
3.6.4 Linux的线程机制 71
3.6.5 Windows的线程机制 72
习题 72
上机实践 74
第4章 调度与死锁处理 75
4.1 调度技术基础 75
4.1.1 调度策略 76
4.1.2 调度器的触发时机 76
4.1.3 上下文切换 78
4.1.4 CPU调度的主要类型 78
4.1.5 衡量调度性能的原则 79
4.2 常规调度算法 80
4.2.1 先到先服务算法 80
4.2.2 最短作业优先算法 81
4.2.3 时间片轮转调度算法 82
4.2.4 优先权调度算法 82
4.2.5 多级反馈队列调度算法 84
4.2.6 最高响应比优先调度算法 85
4.2.7 实时系统及其调度算法 86
4.3 Linux及Windows系统调度程序分析 86
4.3.1 Linux系统调度程序分析 87
4.3.2 Windows系统调度程序分析 90
4.4 多处理机调度 93
4.4.1 多处理机环境下的进程调度概述 93
4.4.2 自调度技术 94
4.5 死锁及其处理 96
4.5.1 死锁及其产生原因 96
4.5.2 产生死锁的必要条件和死锁处理方法 97
4.5.3 利用银行家算法避免死锁 98
4.5.4 死锁的检测和解除 102
习题 103
第5章 进程同步与通信 108
5.1 多进程计算环境下的潜在问题 108
5.1.1 多进程计算环境下的资源及其特性 108
5.1.2 多进程并发可能引发的潜在问题 109
5.1.3 问题的复杂性、困难性和应对策略 110
5.2 临界区同步问题 110
5.2.1 什么是临界区 110
5.2.2 临界区问题的引出 111
5.2.3 临界区问题处理方法分析 111
5.2.4 几种临界区问题的初步解决方案及有效性分析 112
5.3 用信号量机制实现同步 117
5.3.1 信号量原理与定义 117
5.3.2 信号量分类与用途 119
5.3.3 信号量实现 120
5.3.4 用信号量解决几个经典同步问题 122
5.3.5 Windows的信号量实现及其应用 128
5.3.6 Linux的信号量实现及其应用 131
5.4 进程间通信 135
5.4.1 进程间通信概述 135
5.4.2 共享内存区 136
5.4.3 管道通信 136
5.4.4 基于消息块传递的进程间通信 138
5.4.5 一种基于端口的消息通信机制(实现模型) 140
习题 144
上机实践 148
第6章 存储管理 149
6.1 存储管理概述 149
6.1.1 计算机的存储器组织 149
6.1.2 存储管理的主要功能与目标 153
6.1.3 传统的存储管理技术体系 153
6.2 基于连续分配的存储管理技术 154
6.2.1 单一分区连续分配管理 154
6.2.2 固定分区连续分配管理 154
6.2.3 可变分区连续分配管理 155
6.3 基于离散分配的存储管理技术 158
6.3.1 内存地址分类 158
6.3.2 段式存储分配管理 159
6.3.3 页式存储分配管理 162
6.3.4 段页式存储分配管理 170
6.4 虚拟存储管理技术 171
6.4.1 虚拟存储器技术概述 171
6.4.2 基于请求分页的虚拟存储管理技术 175
6.4.3 页面调度管理 177
6.4.4 物理页框管理 184
6.5 程序的编译、链接与加载 184
6.5.1 ELF可重定位目标文件组织格式 186
6.5.2 ELF可执行目标文件组织格式 189
6.5.3 链接器工作原理分析 192
6.5.4 动态链接 196
6.5.5 映射可执行文件到存储器 199
6.5.6 小结 201
6.6 Linux存储管理 203
6.6.1 Linux虚拟空间管理的主要数据结构 203
6.6.2 Linux的虚拟空间映射方案 204
6.6.3 Linux的分段机制 206
6.6.4 Linux的分页机制 208
6.6.5 Linux的存储器映射 208
6.6.6 Linux的物理内存管理 209
习题 214
上机实践 221
第7章 设备管理 222
7.1 设备管理概述 222
7.1.1 I/O系统的组织与结构 222
7.1.2 I/O硬件及其控制基础知识 224
7.1.3 设备管理的基本目标与功能 226
7.2 设备I/O控制 226
7.2.1 程序直接控制方式 227
7.2.2 中断驱动的I/O控制方式 227
7.2.3 DMA控制方式 228
7.2.4 通道控制方式 229
7.3 设备缓冲技术 230
7.3.1 专用缓冲 231
7.3.2 公共缓冲池 233
7.3.3 字符设备的公共缓冲池 235
7.3.4 磁盘高速缓冲 236
7.4 设备使用与设备驱动程序 237
7.4.1 设备的三种使用方法 237
7.4.2 设备驱动程序 241
7.5 设备分配与处理 248
7.5.1 设备分配 248
7.5.2 设备处理 251
7.5.3 设备独立性的表现与优势 254
习题 255
上机实践 257
第8章 文件管理 259
8.1 文件系统 259
8.1.1 文件的概念 259
8.1.2 文件的组织结构 261
8.1.3 文件系统综述 261
8.2 文件存储空间布局与管理 265
8.2.1 磁盘及其相关知识 266
8.2.2 几种常见的文件系统及其卷布局 270
8.2.3 文件存储空间的管理 274
8.2.4 磁盘空闲空间的管理 275
8.3 目录管理 278
8.3.1 目录管理概述 278
8.3.2 目录的结构与操作 279
8.3.3 索引节点 283
8.4 文件使用与控制 284
8.4.1 基本文件操作及实现机制 284
8.4.2 利用虚存映射机制读写文件 287
8.5 文件共享 288
8.5.1 早期实现文件共享的方法 288
8.5.2 基于索引节点的共享方式(硬链接) 289
8.5.3 利用符号链实现共享(软链接) 290
8.6 文件保护 291
8.6.1 文件的口令保护 292
8.6.2 文件的密码保护 292
8.6.3 基于数字证书的用户身份认证 293
8.6.4 访问控制 293
8.6.5 分级安全管理 295
习题 296
第9章 Linux文件系统 300
9.1 Linux标准文件系统EXT2 300
9.1.1 EXT2分区存储布局概述 300
9.1.2 EXT2分区存储布局结构分析 301
9.2 VFS接口 310
9.2.1 VFS的工作原理 310
9.2.2 VFS的四种基本对象 313
9.2.3 与进程访问文件相关的数据结构 318
9.3 文件系统注册、安装与卸载 320
9.3.1 文件系统注册 320
9.3.2 文件系统安装 321
9.3.3 文件系统卸载 322
9.4 编写文件系统驱动程序 323
9.4.1 文件系统驱动程序实现的要素 323
9.4.2 文件系统驱动程序实现框架示例 324
习题 329
上机实践 331
参考文献 332