内容简介
第一章 引言
1.1 什么是操作系统
1.2 早期的系统
1.3 简单的监控程序
1.4 性能
1.5 批量系统与spooling技术
1.6 多道程序系统
1.7 分时系统
1.8 实时系统
1.9 多处理机系统
1.10 操作系统的外部环境
1.10.1 操作系统与硬件的关系
1.10.2 操作系统与其它系统软件的关系
1.10.3 操作系统与用户的关系
1.11 练习
第二章 操作系统的服务
2.1 服务的种类
2.2 用户观点
2.2.1 系统调用
2.2.2 系统调用的实现
2.2.3 系统程序
2.3 操作系统观点
2.3.1 系统调用
2.3.2 I/O设备中断
2.3.3 程序错误
2.3.4 一般流程
2.4 小结
第三章 文件系统
3.1 文件概念
3.1.1 文件类型
3.1.2 基于磁带的系统
3.1.3 基于磁盘的系统
3.1.4 分块
3.1.5 文件操作
3.2 文件支持
3.2.1 文件操作
3.2.2 设备目录
33 存取方式
3.3.1 顺序存取
3.3.2 直接存取
3.3.3 其它存取方式
3.4 分配方式
3.4.1 空闲空间管理
3.4.2 毗连分配
3.4.3 链接分配
3.4.4 索引分配
3.4.5 性能
3.5 目录系统
3.5.1 单级目录
3.5.2 二级目录
3.5.3 树结构目录
3.5.4 非循环图目录
3.5.5 普通图目录
3.6 文件保护
3.6.1 命名
3.6.2 口令
3.6.3 存取控制
3.7 实现问题
3.8 小结
3.9 练习
第四章 处理机调度
4.1 多道程序概念的回顾
4.2 调度的概念
4.2.1 基本构成
4.2.2 调度队列
4.2.3 调度程序
4.3 调度算法
4.3.1 性能准则
4.3.2 先来先服务
4.3.3 最短作业优先调度算法
4.3.4 优先数
4.3.5 抢占算法
4.3.6 轮转算法
4.3.7 多队列调度
4.3.8 多级反馈队列
4.4 算法评估
4.4.1 分析评估法
4.4.2 模拟方法
4.4.3 实现法
4.5 多处理机调度
4.6 小结
4.7 练习
第五章 存贮管理
5.1 预备知识
5.2 裸机
5.3 常驻监控程序
5.3.1 保护设施
5.3.2 重定位
5.4 交换
5.4.1 后援存贮器
5.4.2 交换时间
5.4.3 重叠交换
5.5 多重分割
5.5.1 保护设施
5.5.2 固定区
5.5.3 可变分割
5.6 分页管理
5.6.1 硬件
5.6.2 作业调度
5.6.3 页表的实现
5.6.4 共享页面
5.6.5 保护
5.6.6 两种存贮观点
5.7 分段存贮管理
5.7.1 用户的内存观点
5.7.2 硬件
5.7.3 段表的实现
5.7.4 保护和共享
5.7.5 碎片
5.8 联合系统
5.8.1 分段分页技术
5.8.2 分页分段存贮管理
5.9 小结
5.10 练习
第六章 虚拟存贮器
6.1 复盖
6.2 请求式页面调度
6.3 请式调页的性能
6.4 页面替换
6.5 虚拟存贮器概念
6.6 页面替换算法
6.6.1 FIFO
6.6.2 最佳替换
6.6.3 LRU算法
6.6.4 LRU的近似法
6.7 分配算法
6.7.1 块的极小数
6.7.2 全局分配与局部分配
6.7.3 分配算法
6.8 颠簸
6.8.1 局部性
6.8.2 工作集模型
6.8.3 缺页中断率
6.9 其它考虑
6.9.1 预分页
6.9.2 I/O互锁
6.9.3 页面大小
6.9.4 程序结构
6.9.5 存贮层次
6.10 小结
6.11 练习
第七章 磁盘调度
7.1 物理特性
7.2 先来先服务调度
7.3 最短查找时间优先
7.4 SCAN
7.5 盘调度算法的选择
7.6 扇区排队
7.7 小结
7.8 练习
第八章 死锁处理
8.1 死锁问题
8.1.1 系统模型
8.1.2 死锁定义
8.2 死锁特性
8.2.1 必要条件
8.2.2 资源分配图
8.2.3 解决死锁的方法
8.3 死锁预防
8.3.1 互斥
8.3.2 占用并等待
8.3.3 非抢占
8.3.4 循环等待
8.4 死锁避免
8.4.1 多个示例的资源类
8.4.2 单一示例的资源类
8.5 死锁检测
8.5.1 资源类型中含若干示例
8.5.2 每类资源仅有单个示例
8.5.3 检测算法的应用
8.6 死锁恢复
8.6.1 终止进程
8.6.2 资源抢占
8.7 处理死锁的混合方法
8.8 小结
8.9 练习
第九章 并发进程
9.1 优先图
9.1.1 定义
9.1.2 并发条件
9.2 规格说明
9.21 Fork和Join结构
9.2.2 并发语句
9.2.3 比较
9.3 进程概念的回顾
9.3.1 进程的状态
9.3.2 与优先图的关系
9.4 进程层次
9.4.1 进程上的操作
9.4.2 静态和动态进程
9.5 临界段问题
9.5.1 临界段问题的定义
9.5.2 两进程的软件解决方法
9.5.3 N进程的软件解决方法
9.5.4 硬件解决方法
9.6 信号量
9.6.1 用法
9.6.2 实现
9.7 经典的进程协同问题
9.7.1 有界缓冲区问题
9.7.2 Readers/Writers问题
9.7.3 哲学家用餐问题
9.8 进程间通讯
9.8.1 命名方式
9.8.2 缓冲
9.8.3 异常条件的处理
9.9 小结
9.10 练习
第十章 并发程序设计
10.1 动机
10.2 模块化
10.2.1 进程
10.2.2 过程
10.2.3 抽象数据类型
10.3 同步
10.3.1 临界域
10.3.2 条件临界域
10.3.3 管程
10.4 练习
第十一章 保护
11.1 保护目标
11.2 机制和策略
11.3 保护领域
11.4 存取矩阵
11.5 存取矩阵的实现
11.5.1 全局表
11.5.2 存取表
11.5.3 权能表
11.5.4 锁钥机制
11.5.5 比较
11.5.6 策略
11.6 动态保护结构
11.7 取消
11.8 几个系统的保护方案
11.8.1 Unix
11.8.2 Multics
11.8.3 Hydra
11.9 基于语言的保护
11.10 保护问题
11.11 安全性
11.12 小结
11.13 练习
第十二章 设计原理
12.1 目标
12.1.1 使用者目标
12.1.2 系统目标
12.2 机制与策略
12.3 分层方法
12.4 虚拟机
12.5 多处理器
12.6 实现
12.7 系统生成
12.8 小结
12.9 练习
第十三章 分布式系统
13.1 为什么需要分布式系统
13.1.1 资源共享
13.1.2 计算机速度的提高
13.1.3 可靠性
13.1.4 通讯
13.2 拓扑结构
13.2.1 全互连结构
13.2.2 部分互连结构
13.2.3 层次结构
13.2.4 星结构
13.2.5 环结构
13.2.6 多存取总线结构
13.3 通讯
13.3.1 发送策略
13.3.2 连结策略
13.3.3 争夺
13.3.4 保密
13.3.5 设计观点
13.4 系统类型
13.4.1 计算机网络
13.4.2 局部网络
13.5 文件系统
13.5.1 Arpanet FTP
13.5.2 集中式途径
13.5.3 分布式途径
13.6 资源共享
13.6.1 数据迁移
13.6.2 作业迁移
13.7 事件定序
13.7.1 事发前关系
13.7.2 实现
13.8 同步
13.8.1 集中式途径
13.8.2 全分布途径
13.8.3 令牌传递途径
13.9 死锁处理
13.9.1 时间戳定序途径
13.9.2 死锁检测
13.10 坚固性
13.10.1 故障检测
13.10.2 重构
13.10.3 故障恢复
13.11 选择算法
13.11.1 恶霸算法
13.11.2 环算法
13.12 小结
13.13 练习
第十四章 Unix操作系统
14.1 Unix的历史
14.2 设计思想
14.3 程序员界面
14.3.1 文件操作
14.3.2 进程控制
14.3.3 信号
14.3.4 信息操作
14.3.5 库子程序
14.4 用户界面
14.4.1 shell和命令
14.4.2 标准I/O
14.4.3 管道、过滤和shell脚本
14.5 文件系统
14.5.1 块和段
14.5.2 索引结
14.5.3 目录
14.5.4 文件描述字与索引结之间的映象
14.5.5 磁盘结构
14.5.6 实现
14.5.7 设计和分配策略
14.6 进程管理
14.6.1 进程控制块
14.6.2 cpu调度
14.7 内存管理
14.7.1 交换
14.7.2 分页
14.8 I/O系统
14.8.1 高速块缓存
14.8.2 原始设备界面
14.8.3 C—表
14.9 进程间通讯
14.9.1 socket
14.9.2 网络支持
14.10 小结
附录 历史回顾
1 Atlas
2 XDS—940
3 THE
4 RC4000
5 CTSS
6 Multics
7 OS/360
8 其它系统
参考文献