SCSI代码分析(0)SCSI层框架

SCSI代码分析(1)SCSI HOST的管理

SCSI代码分析(2)SCSI设备的管理1

SCSI代码分析(3)SCSI设备的管理2

SCSI代码分析(4)SCSI层IO下发和完成

SCSI代码分析(5)SCSI驱动编程模式

SCSI代码分析(6)错误处理

SCSI代码分析(7)错误处理(续)

        SCSI即Small Computer System Interface,是一种存储的传输/控制协议。SCSI不是单个协议,而是一组协议,包括SAM-5/SPC/SBC等。这里跳过对协议的介绍,当涉及到时再介绍。

1. SCSI层框架

        内核SCSI层(主要代码在drivers/scsi/目录下)负责对接BLOCK层,将上层的IO转化为SCSI命令,完成IO下发和完成;负责SCSI设备的管理;负责HBA的管理;负责错误的处理与恢复;负责与下层的对接等。

SCSI架构 scsi层_错误处理

其中:

  1. SCSI Upper Layer:对不同类型设备的扫描(包括disk/tape/CDROM等);
  2. SCSI Middle Layer:负责IO下发和完成,设备的管理,以及错误处理等;
  3. SCSI Low Level Layer:不同的SCSI驱动;

HBA:Host Bus Adapter主机适配器,一般指控制器,如SAS控制器,SATA控制器

2. HBA与硬盘之间的连接

        HBA与硬盘之间有两种连接:直接连接和通过expander扩展连接。直接连接是硬盘直接与HBA相连,没有中间介质,一般HBA可外接的接口有限,因此能够连接的硬盘有限;expander扩展连接时HBA与硬盘之间通过expander扩展连接,有些可以多级扩展,这样大大增加了外接硬盘的数量。

        相比直接连接,expander扩展连接的设备拓扑相对复杂,因此需要软件能够识别负责的设备拓扑。目前SCSI层不包含对复杂设备拓扑的识别,一般交给底层驱动来做。如libsas负责识别设备拓扑。

SCSI架构 scsi层_代码分析_02

后续章节准备从以下几个方面对SCSI层代码做介绍:

  1. SCSI HOST的识别和管理
  2. SCSI设备的识别和管理
  3. SCSI层IO下发和完成
  4. SCSI命令的执行
  5. SCSI错误处理
  6. SCSI驱动编程模式