内容简介
第一部分 Solaris内核简介
第1章 Solaris入门
1.1 Solaris简史
1.2 关键的不同之处
1.3 内核概述
1.3.1 Solaris内核体系结构
1.3.2 内核的模块化实现
1.4 进程、线程和调度
1.4.1 两级线程模型
1.4.2 全局进程优先级和调度
1.5 进程间通信
1.5.1 传统的UNIX IPC
1.5.2 System V IPC
1.5.3 POSIX IPC
1.5.4 高级Solaris IPC
1.6 信号
1.7 存储管理
1.7.1 全局内存分配
1.7.2 内核存储管理
1.8 文件和文件系统
1.8.1 文件描述符和文件系统调用
1.8.2 虚拟文件系统结构
1.9 I/O体系结构
第2章 内核服务
2.1 访问内核服务
2.2.1 上下文
2.2 进入内核模式
2.2.2 内核线程和中断上下文
2.2.3 UltraSPARC Ⅰ Ⅱ陷阱
2.3 中断
2.3.1 中断优先级
2.3.2 中断监控
2.3.3 处理器内部中断和交叉调用
2.4 系统调用
2.4.1 一般的系统调用
2.4.2 快速陷阱系统调用
2.5.1 Solaris 2.6和7的标注表
2.5 内核标注表
2.5.2 Solaris 2.5.1标注表
2.6 系统时钟
2.6.1 进程执行时间的统计
2.6.2 高频时钟中断
2.6.3 高频计时器
2.6.4 日期时间时钟
3.2 并行系统体系结构
3.1 同步
第3章 内核同步原语
3.3 加锁和同步的硬件考虑
3.4 关于同步对象的介绍
3.4.1 同步过程
3.4.2 同步对象操作向量
3.5 互斥锁
3.5.1 概述
3.5.2 Solaris 7互斥锁的实现
3.6.1 Solaris 7中的读/写锁
3.6 读/写锁
3.6.2 Solaris 2.6中RW锁的差异
3.6.3 Solaris 2.5.1中的RW锁的差异
3.7 旋转栅门和优先级继承
3.7.1 Solaris 7中的旋转栅门
3.7.2 Solaris 2.5.1和2.6中的旋转栅门
3.8 调度锁
3.9 内核信号量
4.1 内核的目录层次
第4章 内核引导和初始化
4.2 内核引导和初始化
4.2.1 加载引导块
4.2.2 加载ufsboot
4.2.3 定位核心内核映像和链接
4.2.4 加载内核模块
4.2.5 创建内核结构、资源和组件
4.2.6 完成引导过程
4.2.7 引导过程中创建系统内核线程
4.3 内核模块的加载和链接
5.1 为什么需要虚拟内存系统
第5章 Solaris内存体系结构
第二部分 Solaris内存管理
5.2 模块化的实现
5.3 虚拟地址空间
5.3.1 可执行代码和库的共享
5.3.2 SPARC地址空间
5.3.3 Intel芯片地址空间的布局
5.3.4 进程内存分配
5.3.6 地址空间管理
5.3.5 栈
5.3.7 虚拟内存保护模式
5.3.8 地址空间的页错误
5.4 内存的段
5.4.1 vnode段:seg_vn
5.4.2 写入时拷贝
5.4.3 页保护与通知
5.5 匿名内存
5.5.1 匿名内存层
5.5.2 Swapfs层
5.5.3 匿名内存统计
5.6 虚拟内存观测点
5.7 全局页管理
5.7.1 页——Solaris内存的基本单元
5.7.2 页的Hash列表
5.7.3 特定MMU的页结构
5.7.4 物理页列表
5.7.5 页级函数接口
5.7.7 页面大小
5.7.6 页的中止
5.7.8 页的分配
5.8 页扫描程序
5.8.1 页扫描程序的操作
5.8.2 出页算法和参数
5.8.3 共享库的优化
5.8.4 优先级分页算法
5.8.5 页扫描程序的实现
5.8.6 内存调度程序
5.9 硬件地址转换层
5.9.1 虚拟内存上下文和地址空间
5.9.2 UltraSPARC-Ⅰ和Ⅱ型的HAT
5.9.3 地址空间标识符
5.9.4 大页面
第6章 内核内存
6.1 内核虚拟地址规划
6.1.1 内核地址空间
6.1.5 可加载的内核模块正文和数据
6.1.4 SPARC V8和V9内核的核心程序
6.1.3 虚拟内存数据结构
6.1.2 内核正文段和数据段
6.1.6 内核地址空间和段
6.2 内核内存的分配
6.2.1 内核映射
6.2.2 资源映射分配程序
6.2.3 内核内存段驱动程序
6.2.4 内核内存片分配程序
7.1.2 内核内存
7.1.1 物理内存总数
第7章 内存的监控
7.1 内存监控的简单介绍
7.1.3 空闲内存
7.1.4 文件系统缓存内存
7.1.5 内存不足的检测
7.1.6 交换空间
7.2 内存监控工具
7.3 vmstat命令
7.3.1 空闲内存
7.3.4 进程内存的使用情况,ps和pmap命令
7.3.2 交换空间
7.3.3 页调度计数器
7.4 MemTool:没有绑定的内存工具
7.4.1 Memtool的实用程序
7.4.2 命令行工具
7.4.3 MemTool的图形用户界面
7.5 其他内存工具
7.5.1 运行空间的监视程序:wsm
7.5.2 一个扩充vmstat的命令:memstat
第8章 Solaris多线程的进程体系结构
8.1 Solaris进程简介
第三部分 线程、进程和IPC
8.1.1 进程的体系结构
8.1.2 进程映像
8.2 进程结构
8.2.1 进程结构
8.2.2 用户区
8.2.3 轻量级进程
8.2.4 内核线程
8.3.1 进程限制
8.3 内核进程表
8.3.2 LWP限制
8.4 进程创建
8.5 进程终止
8.5.1 LWP/kthead模型
8.5.2 deathrow
8.6 Procfs——进程文件系统
8.6.1 Procfs的实现
8.6.2 进程资源使用
8.6.3 微状态计数器
8.7 信号
8.7.1 信号的实现
8.7.2 SIGWAITING特殊信号
8.8 会话和进程组
第9章 Solaris内核调度程序
9.1 概述
9.1.1 调度等级
9.1.2 调度表
9.2 内核调度程序
9.2.1 调度队列
9.2.2 线程优先级
9.2.3 调度程序功能
9.3 内核睡眠/唤醒程序
9.3.1 条件变量
9.3.2 睡眠队列
9.3.3 睡眠过程
9.3.4 唤醒机制
9.4 调度程序激活
9.4.1 用户线程激活
9.4.2 LWP池激活
9.5 内核处理器控制和处理器集
9.5.1 处理器控制
9.5.2 处理器集
第10章 进程间通信
1O.1 通用System V IPC支持
10.1.1 模块创建
10.1.2 资源映射
10.2 System V共享内存
10.2.1 共享内存内核实现
10.2.2 相似共享内存
10.3 System V信号量
10.3.1 信号量内核资源
10.3.2 System V信号量的内核实现
10.3.3 Solaris内部的信号量操作
10.4 System V消息队列
10.4.1 消息队列使用的内核资源
10.4.2 消息队列的内核实现
10.5 POSIX IPC
10.5.1 POSIX共享内存
10.5.2 POSIX信号量
10.5.3 POSIX消息队列
10.6 Solaris门
10.6.1 门概述
10.6.2 门实现
第四部分 文件和文件系统
第11章 Solaris文件和文件I/O
11.1 Solaris的文件
11.2 文件的应用程序编程接口
11.2.1 标准I/O
11.2.2 C运行期文件句柄
11.2.3 标准I/O缓冲区大小
11.3 系统文件I/O
11.3.1 文件I/O系统调用
11.3.2 文件打开模式和文件描述符标志
11.4 异步I/O
11.4.1 文件系统异步I/O
11.4.2 内核异步I/O
11.5 内存映射文件I/O
11.5.1 映射选项
11.5.2 为存储系统提供建议
11.6 Solaris中的64位文件
11.6.1 Solaris 2.0中的64位设备支持
11.6.2 Solaris 2.5.1中的64位文件应用程序编程接口
11.6.3 Solaris 2.6:大文件OS
11.6.4 文件系统对大文件的支持
第12章 文件系统综述
12.1 为什么要有文件系统
12.3 普通文件系统
12.2 支持多个文件系统类型
12.3.1 分配和存储策略
12.3.2 文件系统容量
12.3.3 支持可变块大小
12.3.4 访问控制列表
12.3.5 文件系统日志报表
12.3.6 扩大和缩小文件系统
12.3.7 直接I/O
13.1.2 文件系统框架程序
13.1.1 统一的文件系统接口
13.1 Solaris文件系统框架
第13章 文件系统框架
13.2 vnode
13.2.1 vnode类型
13.2.2 Vnode方法
13.2.3 vnode引用计数
13.2.4 分页vnode缓存的接口
13.2.5 vnode页上的块I/O
13.3 vfs对象
13.3.1 文件系统交换表
13.3.2 安装的vfs列表
13.4 文件系统I/O
13.4.1 内存映射I/O
13.4.2 系统调用read()和write()
13.4.3 Seg_map段
13.5 路径名管理
13.5.1 lookupname()和lookuppn()方法
13.5.2 vop_lookup()方法
13.5.3 vop_readdir()方法
13.5.4 路径名遍历函数
13.5.5 目录名查询缓存
13.5.6 文件系统模块
13.5.7 安装和拆卸
13.6 文件系统刷新守护进程
第14章 UNIX文件系统
14.1 UFS发展历史
14.2.1 UFS Inode
14.2.2 UFS目录
14.2 UFS磁盘格式
14.2.3 UFS硬链接
14.2.4 UFS结构
14.2.5 磁盘块定位
14.2.6 UFS块分配
14.2.7 UFS分配和参数
14.3 UPS的实现
14.3.1 文件映射到磁盘块
14.3.2 读写UFS文件的方法
14.3.3 核心内的UFS Inode
14.3.4 UFS目录和路径名
15.1 文件缓存简介
15.1.1 Solaris页缓存
第15章 Solaris文件系统缓存
15.1.2 块缓冲区缓存
15.2 页缓存和虚存系统
15.3 分页对系统到底好不好
15.4 影响文件系统性能的分页参数
15.5 用直接I/O绕过页缓存
15.5.1 UFS直接I/O
15.6 目录名缓存
15.5.2 Veritas VxFS的直接I/O
15.7 Inode缓存
15.7.1 UFS Inode缓存大小
15.7.2 VxFS Inode缓存
第五部分 附录
附录A 内核的调整、开关和限制参数
附录B 内核虚拟地址映射
附录C 一个Procfs程序示例
参考文献