书籍详情
UNIX Internals:The New Frontiers
作者:(美)Uresh Vahalia
出版社:机械工业出版社
出版时间:2015-05-01
ISBN:9787111491453
定价:¥119.00
购买这本书可以去
内容简介
《深入理解UNIX系统内核》由国际资深UNIX专家撰写,深入剖析UNIX操作系统的内核技术,包含丰富的图示与细节展示。作者从操作系统设计的角度来审视UNIX系统内核,针对内核中的每个模块,深入探讨其结构和设计,详细阐释主流UNIX系统如何选择具体模块的实现方法,以及每种方法的优缺点,为读者更好地理解操作系统内核知识、提升操作系统开发能力提供翔实指导。《深入理解UNIX系统内核》共17章:第1章追溯UNIX系统的演变并分析影响系统主要变化的因素;第2~7章介绍进程子系统,包括线程及其在内核和用户库中的实现,信号、作业控制及登录会话管理,UNIX调度器和对实时应用程序的支持,进程间通信的技术(IPC),Mach系统架构,以及在现代单处理器和多处理器系统中应用的同步框架;第8~11章介绍文件系统,内容涵盖用户可见的文件系统接口、定义内核和文件系统交互的vnode/vfs接口,原始的System V文件系统(s5fs)和伯克利快速文件系统(FFS)等一些具体文件系统的实现细节,还包括太阳微系统的网络文件系统(NFS)、AT&T的远程文件共享(RFS)和Transarc公司的分布式文件系统(DFS)等分布式文件系统,以及一些使用日志提供更高可靠性和性能的高级文件系统,同时介绍一种基于堆栈式vnode层的新文件系统框架;第12~15章介绍内存管理,涉及内核内存分配、虚拟内存的概念、SVR4和Solaris的虚拟内存架构、Mach和4.4BSD内存模型,以及旁路转换缓冲和虚拟地址缓存;第16~17章主要介绍I/O子系统,内容包括设备驱动程序框架、内核与I/O子系统的交互、SVR4设备驱动程序接口、内核与驱动程序交互接口规范,以及STREAMS框架。
作者简介
Uresh Vahalia,EMC公司副总裁,主管企业存储部门,领导美国和印度团队构建EMC下一代存储产品。Uresh专注于操作系统和存储技术的研发,在存储和操作系统领域拥有30余项专利和科研著作,并多次代表EMC参加SNIA、IEEE、CIFS和NFSv4工作组的行业论坛及专家座谈。李雨,阿里巴巴(中国)有限公司资深内核开发工程师,参与Linux内核的开发与维护,涉及内存管理、设备驱动等多个子系统,主要负责Linux内核的网络协议栈。他的研究兴趣是Linux内核和网络技术。薛磊,现就职甲骨文系统研发中心,负责Solaris内核中网络协议的开发。他是开源的拥趸,开发并维护了一些开源工具软件,还负责Solaris内核中iSCSI协议、iSER协议的开发和维护。黄庆新,毕业于厦门大学,曾是华为程序员,参与了标准协议栈(TCP/IP)和电信业务网关的开发。现就职于福建某网络公司,从事底层开发工作。
目录
出版者的话
译者序
序言
前言
第1章 从头说起
1.1简介
1.1.1 UNIX简史
1.1.2 起源
1.1.3 扩散
1.1.4 BSD
1.1.5 System V
1.1.6 商业化
1.1.7 Mach
1.1.8 标准
1.1.9 OSF和UI
1.1.10 SVR4及其之后
1.2 变革使命
1.2.1 功能
1.2.2 网络
1.2.3 性能
1.2.4 硬件变化
1.2.5 质量提升
1.2.6 变革
1.2.7 其他应用程序领域
1.2.8 小即是美
1.2.9 灵活性
1.3 回顾过去,展望未来
1.3.1 UNIX系统的优点是什么
1.3.2 UNIX系统的缺点是什么
1.4 本书内容说明
参考文献
第2章 进程与内核
2.1 简介
2.2 模式、空间和上下文
2.3 进程抽象
2.3.1进程状态
2.3.2 进程上下文
2.3.3 用户凭据
2.3.4 u区和proc结构
2.4 执行在内核态中
2.4.1 系统调用接口
2.4.2 中断处理
2.5 同步
2.5.1 阻塞操作
2.5.2 中断
2.5.3 多处理器
2.6 进程调度
2.7 信号
2.8 新的进程和程序
2.8.1 fork和exec
2.8.2 进程的创建
2.8.3 fork的优化
2.8.4 调用新的程序
2.8.5 进程终止
2.8.6 等待进程终止
2.8.7 僵死进程
2.9 小结
2.10 练习题
参考文献
第3章 线程和轻量级进程
3.1 简介
3.1.1 动机
3.1.2 多线程和多处理器
3.1.3 并发和并行
3.2 基本抽象
3.2.1 内核线程
3.2.2 轻量级进程
3.2.3 用户线程
3.3 轻量级线程设计时要考虑的问题
3.3.1 fork的语义
3.3.2 其他系统调用
3.3.3 信号传递和处理
3.3.4 可见性
3.3.5 栈增长
3.4 用户级别的线程库
3.4.1 编程接口
3.4.2 线程库的实现
3.5 调度器激活
3.6 Solaris和SVR4上的多线程
3.6.1 内核线程
3.6.2 轻量级进程的实现
3.6.3 用户线程
3.6.4 用户线程的实现
3.6.5 中断处理
3.6.6 系统调用处理
3.7 Mach的线程
3.7.1 Mach抽象:任务和线程
3.7.2 Mach的C-threads
3.8 Digital UNIX
3.8.1 UNIX接口
3.8.2 系统调用和信号
3.8.3 pthreads库
3.9 Mach 3.0的continuation
3.9.1 编程模型
3.9.2 使用continuation
3.9.3 优化
3.9.4 分析
3.10 小结
3.11 练习题
参考文献
第4章 信号和会话管理
4.1 简介
4.2 信号生成和处理
4.2.1 信号处理
4.2.2 信号的生成
4.2.3 典型场景
4.2.4 睡眠与信号
4.3 不可靠的信号
4.4 可靠的信号
4.4.1 主要特性
4.4.2 SVR3实现
4.4.3 BSD信号管理
4.5 SVR4上的信号
4.6 信号的实现
4.6.1 信号生成
4.6.2 交付和处理
4.7 异常
4.8 Mach的异常处理
4.8.1 异常端口
4.8.2 错误处理
4.8.3 调试器交互
4.8.4 分析
4.9 进程组和终端管理
4.9.1 基本概念
4.9.2 SVR3模型
4.9.3 限制
4.9.4 4.3BSD的进程组和终端
4.9.5 缺点
4.10 SVR4的会话体系结构
4.10.1 动机
4.10.2 会话和进程组
4.10.3 数据结构
4.10.4 控制终端
4.10.5 4.4BSD的会话实现机制
4.11 小结
4.12 练习题
参考文献
第5章 进程调度
5.1 简介
5.2 时钟中断处理
5.2.1 callout
5.2.2 告警
5.3 调度器目标
5.4 传统的UNIX调度
5.4.1 进程优先级
5.4.2 调度器的实现
5.4.3 运行队列的操作
5.4.4 分析
5.5 SVR4调度器
5.5.1 类无关层
5.5.2 调度类的接口
5.5.3 分时类
5.5.4 实时类
5.5.5 priocntl系统调用
5.5.6 分析
5.6 Solaris 2.x调度的改善
5.6.1 可抢占的内核
5.6.2 多处理器的支持
5.6.3 隐式调度
5.6.4 优先级反转
5.6.5 优先级继承的实现
5.6.6 优先级继承的局限性
5.6.7 turnstile
5.6.8 分析
5.7 Mach上的调度
多处理器支持
5.8 Digital UNIX的实时调度
多处理器支持
5.9 其他调度实现
5.9.1 公平调度方法
5.9.2 最终期限驱动调度方法
5.9.3 三级调度器
5.10 小结
5.11 练习题
参考文献
第6章 进程间通信
6.1 简介
6.2 通用的IPC方法
6.2.1 信号
6.2.2 管道
6.2.3 SVR4管道
6.2.4 进程跟踪
6.3 System V IPC
6.3.1 公共元素
6.3.2 信号量
6.3.3 消息队列
6.3.4 共享内存
6.3.5 讨论
6.4 Mach IPC
基本概念
6.5 消息
6.5.1 消息数据结构
6.5.2 消息传递接口
6.6 端口
6.6.1 端口命名空间
6.6.2 端口数据结构
6.6.3 端口转换
6.7 消息传递
6.7.1 转换端口权利
6.7.2 out-of-line内存
6.7.3 控制流
6.7.4 通知
6.8 端口操作
6.8.1 销毁端口
6.8.2 备份端口
6.8.3 端口集合
6.8.4 端口插补
6.9 扩展性
6.10 Mach 3.0的增强
6.10.1 一次性的发送权利
6.10.2 Mach 3.0的通知
6.10.3 发送权利的用户引用计数
6.11 讨论
6.12 小结
6.13 练习题
参考文献
第7章 同步和多处理器
7.1 简介
7.2 传统UNIX内核里的同步机制
7.2.1 中断屏蔽
7.2.2 睡眠和唤醒
7.2.3 传统方法的局限性
7.3 多处理器系统
7.3.1 内存模型
7.3.2 同步支持
7.3.3 软件体系架构
7.4 多处理器的同步问题
7.4.1 唤醒丢失问题
7.4.2 惊群问题
7.5 信号量
7.5.1 信号量提供互斥操作
7.5.2 使用信号量提供事件等待
7.5.3 使用信号量来控制可计数的资源
7.5.4 信号量的缺点
7.5.5 Convoy
7.6 自旋锁
7.7 条件变量
7.7.1 实现问题
7.7.2 事件
7.7.3 阻塞锁
7.8 读写锁
7.8.1 设计考虑
7.8.2 实现
7.9 引用计数
7.10 其他考虑
7.10.1 死锁避免
7.10.2 递归锁
7.10.3 阻塞还是自旋
7.10.4 锁什么
7.10.5 粒度和持续时间
7.11 案例研究
7.11.1 SVR4.2/MP
7.11.2 Digital UNIX
7.11.3 其他实现
7.12 小结
7.13 练习题
参考文献
第8章 文件系统接口和框架
8.1 简介
8.2 文件的用户接口
8.2.1 文件和目录
8.2.2 文件属性
8.2.3 文件描述符
8.2.4 文件I/O
8.2.5 分散-聚集I/O
8.2.6 文件锁机制
8.3 文件系统
8.4 特殊文件
8.4.1 符号链接
8.4.2 管道和FIFO
8.5文件系统框架
8.6Vnode/Vfs架构
8.6.1目标
8.6.2 从设备I/O得到的注解
8.6.3 vnode/vfs接口概览
8.7 实现概览
8.7.1 目标
8.7.2 Vnodes以及打开文件
8.7.3 Vnode
8.7.4 Vnode引用计数
8.7.5 Vfs对象
8.8 文件系统相关对象
8.8.1 每个文件的私有数据
8.8.2 vnodeops结构
8.8.3 vfs层中文件系统相关部分
8.9 挂载文件系统
8.9.1 虚拟文件系统转换表
8.9.2 mount函数实现
8.9.3 VFS_MOUNT过程
8.10 文件操作
8.10.1 路径遍历
8.10.2 目录名查找缓存
8.10.3 VOP_LOOKUP操作
8.10.4 打开文件
8.10.5 文件I/O
8.10.6 文件属性
8.10.7 用户凭据
8.11 分析
8.11.1 SVR4系统实现的缺点
8.11.2 4.4BSD模型
8.11.3 OSF/1方法
8.12 小结
8.13 练习题
参考文献
第9章 文件系统的实现
9.1 简介
9.2 System V文件系统(s5fs)
9.2.1 目录
9.2.2 inode
9.2.3 超级块
9.3 s5fs内核组织
9.3.1 内存inode
9.3.2 inode查找
9.3.3 文件I/O
9.3.4 inode的分配和回收
9.4 s5fs的分析
9.5 伯克利快速文件系统(FFS)
9.6 硬盘结构
9.7 磁盘组织
9.7.1 块和片段
9.7.2 分配策略
9.8 FFS的增强功能
9.9 分析
9.10 临时文件系统
9.10.1 内存文件系统
9.10.2 tmpfs文件系统
9.11 特殊用途文件系统
9.11.1 specfs文件系统
9.11.2 /proc文件系统
9.11.3 处理器文件系统
9.11.4 Trans lucent文件系统
9.12 旧的缓冲区缓存
9.12.1 基本操作
9.12.2 缓冲区头结构
9.12.3 优点
9.12.4 缺点
9.12.5 保证文件系统的一致性
9.13 小结
9.14 练习题
参考文献
第10章 分布式文件系统
10.1 简介
10.2 分布式文件系统的一般特征
10.3 网络文件系统
10.3.1 用户视角
10.3.2 设计目标
10.3.3 NFS的组件
10.3.4 无状态设计
10.4 NFS协议集
10.4.1 外部数据表示
10.4.2 远程过程调用
10.5 NFS实现
10.5.1 控制流
10.5.2 文件句柄
10.5.3 挂载操作
10.5.4 路径名的查找
10.6 UNIX语义
10.6.1 打开文件许可
10.6.2 已打开文件的删除
10.6.3 读写操作
10.7 NFS性能
10.7.1 性能瓶颈
10.7.2 客户端缓存
10.7.3 延迟写
10.7.4 重传缓存
10.8 专用NFS服务器
10.8.1 Auspex的Functional Multiprocessor 架构
10.8.2 IBM的HA-NFS服务器
10.9 NFS安全
10.9.1 NFS访问控制
10.9.2 UID重映射
10.9.3 根用户重映射
10.10 NFS版本
10.11 远程文件共享
10.12 RFS架构
10.12.1 远程消息协议
10.12.2 有状态操作
10.13 RFS实现
10.13.1 远程挂载
10.13.2 RFS客户端和服务器
10.13.3 崩溃恢复
10.13.4 其他问题
10.14 客户端缓存
10.15 Andrew文件系统
10.15.1 可伸缩架构
10.15.2 存储和命名空间的组织
10.15.3 会话级语义
10.16 AFS实现
10.16.1 缓存与一致性
10.16.2 路径名查找
10.16.3 安全性
10.17 AFS的不足
10.18 DCE的分布式文件系统
10.18.1 DFS架构
10.18.2 缓存一致性
10.18.3 令牌管理器
10.18.4 DFS的其他服务
10.18.5 分析
10.19 小结
10.20 练习题
参考文献
第11章 高级文件系统
11.1 简介
11.2 传统文件系统的局限
11.3 文件系统簇(SUN-FFS)
11.4 日志方法
11.5 日志结构文件系统
11.6 4.4BSD日志结构文件系统
11.7 元数据日志
11.8 Episode文件系统
11.9 "看门狗"监视器
11.10 4.4BSD的portal文件系统
11.11 可堆叠文件系统层次
11.12 4.4BSD文件系统接口
11.13 小结
11.14 练习题
参考文献
第12章 内核内存分配
12.1 简介
12.2 功能需求
12.3 资源映射分配器
12.4 简单的幂空闲链表分配器
12.5 McKusick-Karels分配器
12.6 伙伴系统
12.7 SVR4的惰性伙伴算法
12.8 Mach和OSF/1的区块分配器
12.9 一种针对多处理器系统的分层式分配器
12.10 Solaris 2.4的Slab分配器
12.11 小结
12.12 练习题
参考文献
第13章 虚拟内存
13.1 简介
13.2 按需分页
13.3 对硬件的需求
13.4 4.3BSD-案例研究
13.5 4.3 BSD 内存管理操作
13.6 分析
13.7 练习题
参考文献
第14章 SVR4 VM架构
14.1 简介
14.2 内存映射文件
14.3 VM的设计理念
14.4 基础抽象
14.5 段驱动程序
14.6 交换层
14.7 VM操作
14.8 与vnode子系统的交互
14.9 Solaris的虚拟交换空间
14.10 分析
14.11 性能改进
14.12 小结
14.13 练习题
参考文献
第15章 其他内存管理技术
15.1 简介
15.2 Mach的内存管理设计
15.3 内存共享机制
15.4 内存对象与Pager
15.5 外部pager和内部pager
15.6 页面替换
15.7 分析
15.8 4.4BSD的内存管理
15.9 旁路转换缓冲区的一致性
15.10 Mach中的TLB击落算法
15.11 SVR4和SVR4.2 UNIX中的TLB一致性
15.12 其他TLB一致性算法
15.13 虚拟地址缓存
15.14 练习题
参考文献
第16章 设备驱动和I/O
16.1 简介
16.2 概述
16.3 设备驱动程序框架
16.4 输入输出(I/O)子系统
16.5 poll系统调用
16.6 块设备I/O操作
16.7 DDI/DKI规范
16.8 更新的SVR4发行版
16.9 未来方向
16.10 小结
16.11 练习题
参考文献
第17章 STREAMS
17.1 动机
17.2 概述
17.3 消息和队列
17.4 流I/O
17.5 配置和设置
17.6 STREAMS的ioctl命令
17.7 内存分配
17.8 多路复用
17.9 FiFO和管道
17.10 网络接口
17.11 小结
17.12 练习题
参考文献
译者序
序言
前言
第1章 从头说起
1.1简介
1.1.1 UNIX简史
1.1.2 起源
1.1.3 扩散
1.1.4 BSD
1.1.5 System V
1.1.6 商业化
1.1.7 Mach
1.1.8 标准
1.1.9 OSF和UI
1.1.10 SVR4及其之后
1.2 变革使命
1.2.1 功能
1.2.2 网络
1.2.3 性能
1.2.4 硬件变化
1.2.5 质量提升
1.2.6 变革
1.2.7 其他应用程序领域
1.2.8 小即是美
1.2.9 灵活性
1.3 回顾过去,展望未来
1.3.1 UNIX系统的优点是什么
1.3.2 UNIX系统的缺点是什么
1.4 本书内容说明
参考文献
第2章 进程与内核
2.1 简介
2.2 模式、空间和上下文
2.3 进程抽象
2.3.1进程状态
2.3.2 进程上下文
2.3.3 用户凭据
2.3.4 u区和proc结构
2.4 执行在内核态中
2.4.1 系统调用接口
2.4.2 中断处理
2.5 同步
2.5.1 阻塞操作
2.5.2 中断
2.5.3 多处理器
2.6 进程调度
2.7 信号
2.8 新的进程和程序
2.8.1 fork和exec
2.8.2 进程的创建
2.8.3 fork的优化
2.8.4 调用新的程序
2.8.5 进程终止
2.8.6 等待进程终止
2.8.7 僵死进程
2.9 小结
2.10 练习题
参考文献
第3章 线程和轻量级进程
3.1 简介
3.1.1 动机
3.1.2 多线程和多处理器
3.1.3 并发和并行
3.2 基本抽象
3.2.1 内核线程
3.2.2 轻量级进程
3.2.3 用户线程
3.3 轻量级线程设计时要考虑的问题
3.3.1 fork的语义
3.3.2 其他系统调用
3.3.3 信号传递和处理
3.3.4 可见性
3.3.5 栈增长
3.4 用户级别的线程库
3.4.1 编程接口
3.4.2 线程库的实现
3.5 调度器激活
3.6 Solaris和SVR4上的多线程
3.6.1 内核线程
3.6.2 轻量级进程的实现
3.6.3 用户线程
3.6.4 用户线程的实现
3.6.5 中断处理
3.6.6 系统调用处理
3.7 Mach的线程
3.7.1 Mach抽象:任务和线程
3.7.2 Mach的C-threads
3.8 Digital UNIX
3.8.1 UNIX接口
3.8.2 系统调用和信号
3.8.3 pthreads库
3.9 Mach 3.0的continuation
3.9.1 编程模型
3.9.2 使用continuation
3.9.3 优化
3.9.4 分析
3.10 小结
3.11 练习题
参考文献
第4章 信号和会话管理
4.1 简介
4.2 信号生成和处理
4.2.1 信号处理
4.2.2 信号的生成
4.2.3 典型场景
4.2.4 睡眠与信号
4.3 不可靠的信号
4.4 可靠的信号
4.4.1 主要特性
4.4.2 SVR3实现
4.4.3 BSD信号管理
4.5 SVR4上的信号
4.6 信号的实现
4.6.1 信号生成
4.6.2 交付和处理
4.7 异常
4.8 Mach的异常处理
4.8.1 异常端口
4.8.2 错误处理
4.8.3 调试器交互
4.8.4 分析
4.9 进程组和终端管理
4.9.1 基本概念
4.9.2 SVR3模型
4.9.3 限制
4.9.4 4.3BSD的进程组和终端
4.9.5 缺点
4.10 SVR4的会话体系结构
4.10.1 动机
4.10.2 会话和进程组
4.10.3 数据结构
4.10.4 控制终端
4.10.5 4.4BSD的会话实现机制
4.11 小结
4.12 练习题
参考文献
第5章 进程调度
5.1 简介
5.2 时钟中断处理
5.2.1 callout
5.2.2 告警
5.3 调度器目标
5.4 传统的UNIX调度
5.4.1 进程优先级
5.4.2 调度器的实现
5.4.3 运行队列的操作
5.4.4 分析
5.5 SVR4调度器
5.5.1 类无关层
5.5.2 调度类的接口
5.5.3 分时类
5.5.4 实时类
5.5.5 priocntl系统调用
5.5.6 分析
5.6 Solaris 2.x调度的改善
5.6.1 可抢占的内核
5.6.2 多处理器的支持
5.6.3 隐式调度
5.6.4 优先级反转
5.6.5 优先级继承的实现
5.6.6 优先级继承的局限性
5.6.7 turnstile
5.6.8 分析
5.7 Mach上的调度
多处理器支持
5.8 Digital UNIX的实时调度
多处理器支持
5.9 其他调度实现
5.9.1 公平调度方法
5.9.2 最终期限驱动调度方法
5.9.3 三级调度器
5.10 小结
5.11 练习题
参考文献
第6章 进程间通信
6.1 简介
6.2 通用的IPC方法
6.2.1 信号
6.2.2 管道
6.2.3 SVR4管道
6.2.4 进程跟踪
6.3 System V IPC
6.3.1 公共元素
6.3.2 信号量
6.3.3 消息队列
6.3.4 共享内存
6.3.5 讨论
6.4 Mach IPC
基本概念
6.5 消息
6.5.1 消息数据结构
6.5.2 消息传递接口
6.6 端口
6.6.1 端口命名空间
6.6.2 端口数据结构
6.6.3 端口转换
6.7 消息传递
6.7.1 转换端口权利
6.7.2 out-of-line内存
6.7.3 控制流
6.7.4 通知
6.8 端口操作
6.8.1 销毁端口
6.8.2 备份端口
6.8.3 端口集合
6.8.4 端口插补
6.9 扩展性
6.10 Mach 3.0的增强
6.10.1 一次性的发送权利
6.10.2 Mach 3.0的通知
6.10.3 发送权利的用户引用计数
6.11 讨论
6.12 小结
6.13 练习题
参考文献
第7章 同步和多处理器
7.1 简介
7.2 传统UNIX内核里的同步机制
7.2.1 中断屏蔽
7.2.2 睡眠和唤醒
7.2.3 传统方法的局限性
7.3 多处理器系统
7.3.1 内存模型
7.3.2 同步支持
7.3.3 软件体系架构
7.4 多处理器的同步问题
7.4.1 唤醒丢失问题
7.4.2 惊群问题
7.5 信号量
7.5.1 信号量提供互斥操作
7.5.2 使用信号量提供事件等待
7.5.3 使用信号量来控制可计数的资源
7.5.4 信号量的缺点
7.5.5 Convoy
7.6 自旋锁
7.7 条件变量
7.7.1 实现问题
7.7.2 事件
7.7.3 阻塞锁
7.8 读写锁
7.8.1 设计考虑
7.8.2 实现
7.9 引用计数
7.10 其他考虑
7.10.1 死锁避免
7.10.2 递归锁
7.10.3 阻塞还是自旋
7.10.4 锁什么
7.10.5 粒度和持续时间
7.11 案例研究
7.11.1 SVR4.2/MP
7.11.2 Digital UNIX
7.11.3 其他实现
7.12 小结
7.13 练习题
参考文献
第8章 文件系统接口和框架
8.1 简介
8.2 文件的用户接口
8.2.1 文件和目录
8.2.2 文件属性
8.2.3 文件描述符
8.2.4 文件I/O
8.2.5 分散-聚集I/O
8.2.6 文件锁机制
8.3 文件系统
8.4 特殊文件
8.4.1 符号链接
8.4.2 管道和FIFO
8.5文件系统框架
8.6Vnode/Vfs架构
8.6.1目标
8.6.2 从设备I/O得到的注解
8.6.3 vnode/vfs接口概览
8.7 实现概览
8.7.1 目标
8.7.2 Vnodes以及打开文件
8.7.3 Vnode
8.7.4 Vnode引用计数
8.7.5 Vfs对象
8.8 文件系统相关对象
8.8.1 每个文件的私有数据
8.8.2 vnodeops结构
8.8.3 vfs层中文件系统相关部分
8.9 挂载文件系统
8.9.1 虚拟文件系统转换表
8.9.2 mount函数实现
8.9.3 VFS_MOUNT过程
8.10 文件操作
8.10.1 路径遍历
8.10.2 目录名查找缓存
8.10.3 VOP_LOOKUP操作
8.10.4 打开文件
8.10.5 文件I/O
8.10.6 文件属性
8.10.7 用户凭据
8.11 分析
8.11.1 SVR4系统实现的缺点
8.11.2 4.4BSD模型
8.11.3 OSF/1方法
8.12 小结
8.13 练习题
参考文献
第9章 文件系统的实现
9.1 简介
9.2 System V文件系统(s5fs)
9.2.1 目录
9.2.2 inode
9.2.3 超级块
9.3 s5fs内核组织
9.3.1 内存inode
9.3.2 inode查找
9.3.3 文件I/O
9.3.4 inode的分配和回收
9.4 s5fs的分析
9.5 伯克利快速文件系统(FFS)
9.6 硬盘结构
9.7 磁盘组织
9.7.1 块和片段
9.7.2 分配策略
9.8 FFS的增强功能
9.9 分析
9.10 临时文件系统
9.10.1 内存文件系统
9.10.2 tmpfs文件系统
9.11 特殊用途文件系统
9.11.1 specfs文件系统
9.11.2 /proc文件系统
9.11.3 处理器文件系统
9.11.4 Trans lucent文件系统
9.12 旧的缓冲区缓存
9.12.1 基本操作
9.12.2 缓冲区头结构
9.12.3 优点
9.12.4 缺点
9.12.5 保证文件系统的一致性
9.13 小结
9.14 练习题
参考文献
第10章 分布式文件系统
10.1 简介
10.2 分布式文件系统的一般特征
10.3 网络文件系统
10.3.1 用户视角
10.3.2 设计目标
10.3.3 NFS的组件
10.3.4 无状态设计
10.4 NFS协议集
10.4.1 外部数据表示
10.4.2 远程过程调用
10.5 NFS实现
10.5.1 控制流
10.5.2 文件句柄
10.5.3 挂载操作
10.5.4 路径名的查找
10.6 UNIX语义
10.6.1 打开文件许可
10.6.2 已打开文件的删除
10.6.3 读写操作
10.7 NFS性能
10.7.1 性能瓶颈
10.7.2 客户端缓存
10.7.3 延迟写
10.7.4 重传缓存
10.8 专用NFS服务器
10.8.1 Auspex的Functional Multiprocessor 架构
10.8.2 IBM的HA-NFS服务器
10.9 NFS安全
10.9.1 NFS访问控制
10.9.2 UID重映射
10.9.3 根用户重映射
10.10 NFS版本
10.11 远程文件共享
10.12 RFS架构
10.12.1 远程消息协议
10.12.2 有状态操作
10.13 RFS实现
10.13.1 远程挂载
10.13.2 RFS客户端和服务器
10.13.3 崩溃恢复
10.13.4 其他问题
10.14 客户端缓存
10.15 Andrew文件系统
10.15.1 可伸缩架构
10.15.2 存储和命名空间的组织
10.15.3 会话级语义
10.16 AFS实现
10.16.1 缓存与一致性
10.16.2 路径名查找
10.16.3 安全性
10.17 AFS的不足
10.18 DCE的分布式文件系统
10.18.1 DFS架构
10.18.2 缓存一致性
10.18.3 令牌管理器
10.18.4 DFS的其他服务
10.18.5 分析
10.19 小结
10.20 练习题
参考文献
第11章 高级文件系统
11.1 简介
11.2 传统文件系统的局限
11.3 文件系统簇(SUN-FFS)
11.4 日志方法
11.5 日志结构文件系统
11.6 4.4BSD日志结构文件系统
11.7 元数据日志
11.8 Episode文件系统
11.9 "看门狗"监视器
11.10 4.4BSD的portal文件系统
11.11 可堆叠文件系统层次
11.12 4.4BSD文件系统接口
11.13 小结
11.14 练习题
参考文献
第12章 内核内存分配
12.1 简介
12.2 功能需求
12.3 资源映射分配器
12.4 简单的幂空闲链表分配器
12.5 McKusick-Karels分配器
12.6 伙伴系统
12.7 SVR4的惰性伙伴算法
12.8 Mach和OSF/1的区块分配器
12.9 一种针对多处理器系统的分层式分配器
12.10 Solaris 2.4的Slab分配器
12.11 小结
12.12 练习题
参考文献
第13章 虚拟内存
13.1 简介
13.2 按需分页
13.3 对硬件的需求
13.4 4.3BSD-案例研究
13.5 4.3 BSD 内存管理操作
13.6 分析
13.7 练习题
参考文献
第14章 SVR4 VM架构
14.1 简介
14.2 内存映射文件
14.3 VM的设计理念
14.4 基础抽象
14.5 段驱动程序
14.6 交换层
14.7 VM操作
14.8 与vnode子系统的交互
14.9 Solaris的虚拟交换空间
14.10 分析
14.11 性能改进
14.12 小结
14.13 练习题
参考文献
第15章 其他内存管理技术
15.1 简介
15.2 Mach的内存管理设计
15.3 内存共享机制
15.4 内存对象与Pager
15.5 外部pager和内部pager
15.6 页面替换
15.7 分析
15.8 4.4BSD的内存管理
15.9 旁路转换缓冲区的一致性
15.10 Mach中的TLB击落算法
15.11 SVR4和SVR4.2 UNIX中的TLB一致性
15.12 其他TLB一致性算法
15.13 虚拟地址缓存
15.14 练习题
参考文献
第16章 设备驱动和I/O
16.1 简介
16.2 概述
16.3 设备驱动程序框架
16.4 输入输出(I/O)子系统
16.5 poll系统调用
16.6 块设备I/O操作
16.7 DDI/DKI规范
16.8 更新的SVR4发行版
16.9 未来方向
16.10 小结
16.11 练习题
参考文献
第17章 STREAMS
17.1 动机
17.2 概述
17.3 消息和队列
17.4 流I/O
17.5 配置和设置
17.6 STREAMS的ioctl命令
17.7 内存分配
17.8 多路复用
17.9 FiFO和管道
17.10 网络接口
17.11 小结
17.12 练习题
参考文献
猜您喜欢