出版社:电子工业出版社
年代:2011
定价:118.0
本书通过对Linux 2.6内核源代码的分析,详细讨论存储技术的内在实现原理。分为三条主线:解释PCI设备、SCSI设备以及块设备的发现过程;跟踪存储I/O路径,即用户对文件的读/写请求怎么通过中间各个层次,最终到达磁盘介质;此外,还简要介绍主机适配器、块设备驱动以及文件系统等编程框架。书中将设计一些主要的场景,跟踪实现的各个层次,对其中的主要函数进行代码级的讲解。在分析每个模块时,会给出整体框架、主要数据结构之间的关系,并列出各个域的详细含义。
第一部分 存储技术
第1章 存储技术概论
1.1 存储系统元素
1.1.1 磁盘驱动器
1.1.2 存储设备
1.1.3 服务器部件
1.1.4 存储软件
1.2 存储相关技术
1.2.1 备份技术
1.2.2 快照技术
1.2.3 连续数据保护技术
1.2.4 RAID技术
1.2.5 “多路径”技术
1.2.6 虚拟化技术
1.3 网络存储结构
1.3.1 直接连接存储
1.3.2 网络连接存储
1.3.3 存储区域网络
1.4 存储I/O通道
1.4.1 存储I/O物理通道
1.4.2 存储I/O逻辑通道
1.4.3 虚拟机I/O逻辑通道
1.5 存储应用举例
1.5.1 同时提供文件服务和块服务
1.5.2 按需扩容、随需取用延缓企业投资
1.5.3 计算与存储分离便于故障恢复和系统升级
1.5.4 为高可用性集群提供共享存储
1.5.5 利用快照技术恢复被病毒破坏的数据
1.5.6 基于文件的数据备份和远程镜像方案
1.5.7 利用PXE和iSCSI实现远程引导和映像恢复
1.5.8 虚拟机故障的检测及迁移
第二部分 设备
第2章 Linux驱动模型
2.1 概述
2.2 引用计数
2.3 内核对象及集合
2.3.1 创建或初始化内核对象
2.3.2 将内核对象添加到sysfs文件系统
2.3.3 创建、初始化、添加内核对象集
2.3.4 发送内核对象变化事件到用户空间
2.4 sysfs文件系统
2.4.1 构建内核对象、对象属性和对象关系的内部树
2.4.2 对sysfs文件的读/写转换为对属性的show和store操作
2.4.3 为具体内核对象定义属性的规范流程
2.5 kobject编程模式
2.6 驱动模型对象
2.6.1 总线类型
2.6.2 设备
2.6.3 驱动
2.6.4 类
2.6.5 接口
2.7 驱动模型编程模式
第3章 PCI子系统
3.1 概述
3.2 PCI子系统对象
3.2.1 pci_bus:PCI总线
3.2.2 pci_dev:PCI设备
3.3 PCI核心初始化
3.4 配置访问方法
3.4.1 机制#1方式
3.4.2 PCIBIOS方式
3.4.3 配置访问接口
3.5 PCI总线扫描
3.5.1 PCI总线编号范例
3.5.2 PCI总线扫描流程
3.6 PCI中断路由
3.6.1 中断路由初始化
3.6.2 查找中断路由表
3.6.3 查找中断路由驱动
3.6.4 分配ISA IRQ号
3.7 PCI资源分配
3.7.1 PCI资源分配范例
3.7.2 PCI资源分配流程
3.8 PCI设备驱动编程模式
3.8.1 定义PCI驱动结构
3.8.2 定义支持设备ID列表
3.8.3 实现probe回调方法
3.8.4 实现remove回调方法
3.8.5 实现其他回调方法
3.8.6 注册与注销PCI驱动
第4章 SCSI子系统
4.1 概述
4.2 SCSI子系统对象
4.2.1 scsi_host_template:SCSI主机适配器模板
4.2.2 Scsi_Host:SCSI主机适配器
4.2.3 scsi_target:SCSI目标节点
4.2.4 scsi_device:SCSI逻辑设备
4.2.5 scsi_cmnd:SCSI命令
4.3 SCSI子系统初始化
4.4 添加适配器到系统
4.5 SCSI设备探测
4.5.1 探测流程入口
4.5.2 探测逻辑单元
4.5.3 添加SCSI设备
4.6 SCSI磁盘驱动
4.6.1 同步执行部分
4.6.2 异步执行部分
4.6.3 重新校验磁盘
4.6.4 让磁盘转起来
4.7 SCSI命令执行
4.8 SCSI错误恢复
4.8.1 命令进入错误恢复
4.8.2 错误恢复线程执行
4.8.3 发送错误恢复命令
4.9 SCSI低层驱动编程模式
4.9.1 定义主机适配器模板
4.9.2 完善探测回调处理逻辑
4.9.3 实现queuecommand回调函数
4.9.4 实现中断处理函数
4.9.5 实现其他回调函数
4.9.6 模块加载和卸载
第三部分 存储I/O
第5章 块I/O子系统
5.1 概述
5.2 块I/O子系统对象
5.2.1 gendisk:通用磁盘
5.2.2 hd_struct:分区
5.2.3 block_device:块设备
5.2.4 request_queue:请求队列
5.2.5 request:块设备驱动层请求
5.2.6 bio:通用块层请求
5.3 添加磁盘到系统
5.3.1 分配通用磁盘描述符
5.3.2 添加到sysfs文件系统
5.3.3 获取磁盘块设备描述符
5.3.4 打开磁盘块设备描述符
5.3.5 重新扫描磁盘分区
5.3.6 设备号映射机制
5.4 请求处理过程
5.4.1 上层向块I/O子系统提交请求
5.4.2 构造、排序或合并请求
5.4.3 SCSI策略例程逐个处理请求
5.4.4 为请求构造SCSI命令
5.4.5 为SCSI命令准备聚散列表
5.4.6 派发SCSI命令到低层驱动
5.5 I/O调度算法
5.5.1 为请求队列建立关联的I/O调度队列
5.5.2 判断bio是否可以被合并到request
5.5.3 将请求添加到I/O调度队列或请求队列
5.5.4 从I/O调度队列派发请求到请求队列
5.6 请求处理完成
5.6.1 低层驱动调用完成回调函数
5.6.2 引发块I/O子系统的软中断
5.6.3 调用请求队列的软中断回调
5.6.4 调用上层的完成回调函数
5.7 屏障I/O处理
5.7.1 屏障I/O接口
5.7.2 添加屏障请求
5.7.3 处理屏障请求
5.7.4 完成屏障请求
5.8 完整性保护
5.8.1 数据完整性对象
5.8.2 为块设备注册完整性能力
5.8.3 为bio准备完整性元数据
5.8.4 校验完整性元数据
5.8.5 修正bio基准标签
5.9 磁盘类设备驱动编程模式
5.9.1 定义磁盘类设备私有数据结构
5.9.2 定义和实现块设备操作表
5.9.3 分配和初始化磁盘类设备相关结构
5.9.4 为磁盘类设备准备请求队列并添加通用磁盘到系统
第6章 Multi-Disk(MD)模块
6.1 概述
6.2 RAID模块对象
6.2.1 mddev_t:RAID设备
6.2.2 mdk_rdev_t:成员磁盘
6.2.3 mdk_personality:MD个性
6.3 MD模块初始化
6.4 MD设备创建
6.4.1 从用户空间打开MD设备
6.4.2 用户空间发送ioctl创建MD
6.4.3 自动检测和运行RAID
6.5 MD设备请求执行
6.6 MD个性化编程模式
6.6.1 定义私有数据结构
6.6.2 声明个性化结构
6.6.3 实现个性化方法
6.6.4 实现模块加载和卸载方法
6.7 RAID0模块
6.7.1 为RAID0设备构造条带区域
6.7.2 查找包含给定偏移的条带区域
6.7.3 映射到成员设备及其扇区偏移
6.8 RAID5模块
6.8.1 RAID5模块对象
6.8.2 请求执行过程
6.8.3 同步和恢复过程
第7章 Device Mapper模块
7.1 概述
7.2 Device Mapper对象
7.2.1 dm_table:映射表结构
7.2.2 dm_target:映射目标结构
7.2.3 mapped_device:映射设备结构
7.2.4 dm_dev:低层设备结构
7.2.5 target_type:映射目标类型
7.3 Device Mapper模块初始化
7.4 映射设备的创建
7.4.1 分配映射设备描述符
7.4.2 加载映射表
7.4.3 恢复映射设备
7.5 映射设备的请求执行
7.5.1 添加到延迟链表
7.5.2 分割与处理bio
7.6 内核复制线程
7.6.1 准备复制任务
7.6.2 任务处理流程
7.7 Device Mapper目标类型编程模式
7.7.1 定义私有数据结构
7.7.2 声明目标类型结构
7.7.3 实现目标类型方法
7.7.4 实现模块加载和卸载方法
7.8 条带映射模块
7.8.1 构造函数
7.8.2 析构函数
7.8.3 映射函数
7.8.4 end_io函数
7.9 快照映射模块
7.9.1 快照映射对象
7.9.2 快照源构造
7.9.3 快照构造
7.9.4 快照源读/写
7.9.5 快照读/写
7.9.6 例外仓库
第8章 文件系统
8.1 概述
8.2 文件系统对象
8.2.1 file_system_type:文件系统类型
8.2.2 super_block:VFS超级块
8.2.3 inode:VFS索引节点
8.2.4 dentry:VFS目录项
8.2.5 vfsmount:文件系统装载
8.3 装载文件系统
8.3.1 mount系统调用的处理流程
8.3.2 构建子文件系统装载实例
8.3.3 关联文件系统的超级块实例
8.3.4 调用回调函数填充超级块
8.3.5 装载到全局文件系统树
8.4 路径查找
8.4.1 路径查找入口
8.4.2 逐个分量解析
8.4.3 解析单个分量
8.4.4 上溯通过装载点
8.4.5 下溯通过装载点
8.4.6 处理符号链接
8.5 打开文件
8.5.1 open系统调用的处理流程
8.5.2 解析路径最后一个分量
8.5.3 填充文件描述符的内容
8.6 读文件
8.6.1 read系统调用的处理流程
8.6.2 基于缓冲页面构造I/O请求
8.6.3 直接针对页面构造I/O请求
8.6.4 从文件块编号推导磁盘块编号
8.7 写文件
8.7.1 write系统调用的处理流程
8.7.2 通知为缓冲写请求作准备
8.7.3 通知数据已复制到缓冲区
8.8 冲刷文件
8.8.1 BDI相关对象
8.8.2 注册后备设备信息
8.8.3 forker线程执行流程
8.8.4 flusher线程执行流程
8.8.5 同步相关系统调用
8.9 块设备文件
8.9.1 块设备的主inode和次inode
8.9.2 对块设备文件的操作转换为对块设备的操作
8.9.3 对块设备文件的读/写作用于块设备之上
8.10 文件系统编程模式
主要参考文献
《存储技术原理分析:基于Linux 2.6内核源代码》通过对Linux 2.6内核源代码的分析,详细讨论存储技术的内在实现原理。分为三条主线:解释PCI设备、SCSI设备以及块设备的发现过程;跟踪存储I/O路径,即用户对文件的读/写请求怎么通过中间各个层次,最终到达磁盘介质;此外,还简要介绍主机适配器、块设备驱动以及文件系统等编程框架。
书中将设计一些主要的场景,跟踪实现的各个层次,对其中的主要函数进行代码级的讲解。在分析每个模块时,会给出整体框架、主要数据结构之间的关系,并列出各个域的详细含义。
采用这种方式,我们希望读者能对存储相关概念(如RAID、快照等)的内在实现有具体的了解,也试图帮助读者理解Linux内核设计和开发的一些思想,为进一步分析其他模块(如进程管理、内存管理等)起借鉴作用。
读者对象:《存储技术原理分析:基于Linux 2.6内核源代码》适合作为高校计算机相关专业本科生和研究生学习操作系统的辅助和实践教材,也适合作为Linux爱好者学习内核的参考书籍。同时,它也是存储从业工程师深入理解存储架构,以及软件开发工程师掌握软件架构的有效工具。
《存储技术原理分析:基于Linux 2.6内核源代码》通过分析Linux内核源代码,讲解存储、网络和虚拟机的相关技术,您将从中领悟到:设备发现过程了解操作系统如何发现PCI设备、SCSI设备、块设备,并和驱动绑定起来;存储l,O路径了解用户对文件的读/写请求怎么通过I/O路径,最终到达磁盘介质上;内核编程模式理解PCI-SCSIHBA驱动、块设备驱动,以及文件系统等编程框架。
书籍详细信息 | |||
书名 | 存储技术原理分析站内查询相似图书 | ||
9787121144325 如需购买下载《存储技术原理分析》pdf扫描版电子书或查询更多相关信息,请直接复制isbn,搜索即可全网搜索该ISBN | |||
出版地 | 北京 | 出版单位 | 电子工业出版社 |
版次 | 1版 | 印次 | 1 |
定价(元) | 118.0 | 语种 | 简体中文 |
尺寸 | 20 × 26 | 装帧 | 平装 |
页数 | 796 | 印数 |