SAS结构分层
同OSI七层模型一样,SAS也有分层。
Application layer:使不同协议命令能够被认识,即兼容SMP,SSP,STP。
Transport layer:定义传输的各种信息格式和结构,以及任何相关的控制信息,如流控制和acknowledgement。还有就是定义了SSP和SMP的报文格式。说白了就是对各种报文的封装。
Port layer:选择哪个PHY进行通信连接。并进行open/close 连接操作。有点像OIS里面的网络层,即路由。
Link layer:对报文添加/摘除头(SOF)和尾(CRC,EOF)。同时也定义了SSP的流控制和acknowledgement。如果是SMP/STP,则流控制和acknowledgement依靠协议自身实现,而不是link layer。有点混乱了,和transport layer的功能比较。
网络分层和报文封装示意图如下所示:


SAS,SCSI Bus,Fibre channel 和SATA之间的关系
SAS其实也是在传输SCSI命令。因为SCSI命令已经相当成熟,没有必要推到重来。事实上,利用SAS进行SCSI操作的报文就像利用Fibre channel接口进行SCSI操作的报文一样,非常相似。
SAS expander仲裁机制
我们知道,SCSI BUS是共享机制,所以必须存在仲裁机制以防止多个设备同时发起请求。

在SAS expan中,仲裁也是需要的。因为存在多个PHY同时去连接某一个PHY。circuit switching 和frame switching
SAS有两种通信操作模式,即circuit和frame。
circuit:就是在两个PHY之间建立circuit连接,则paht和resources将会被分配给该连接,无论是否有数据包进行传输。在SAS下,通过OPEN 地址帧在两个PHY之间建立circuit。当通信完成后,就关闭该circuit。
frame:在该模式下,报文可以独立路由。不需要circuit或connection的建立,也不需要path或resources的分配。一旦frame发送出去,它可以路由到available path,只要resources允许。说白了就是路由器的功能。