硬盘作为基本单元,通过各种总线,网络将硬盘连接成不同层次和不同规模的存储系统,就构成了我们目前的网络存储系统。例如:由硬盘组加上冗余纠错技术构成磁盘阵列,再由磁盘阵列通过局部高速网络连接形成存储区域网;又如,通过包含硬盘的大规模集群和文件系统形成的海量存储系统成为大型网站和数据中心新的存储架构。
第一章:
1、Flash芯片就是用于永久存储数据的芯片,可以将flash芯片用USB接口接入主机总线网络,这就是U盘,或说是闪存。
存储卡是另一种形式的flash芯片集成产品。
2、计算机存储领域所研究的就是怎样为计算机又快又高效地提供数据以便辅助其计算。为了追求高速度,人们把多块磁盘做成RAID(RedundantArrays of independent disks)系统,也就是将每个独立的磁盘组成阵列,联合存储数据,加快数据存储速度。
3、传统的将硬盘存放到计算机主机箱内的做法已经不能满足现代应用程序对存储容量的需求,这就催生了网络存储技术。
网络存储是将存储系统扩展到了网络上,使存储设备成为网络上的一个节点,以供其它节点访问。
网络存储技术,它关注的是如何在网络上向其他节点提供数据流服务。
第二章 IO大法
1、组成计算机的三大件是CPU、内存和IO。
对于CPU来说,从内存提取数据,就是IN。运算完后将数据直接发送到某些其它阵脚或者放回内存,这个过程就是OUT。
对于磁盘来说,IN是指数据写入磁盘的过程,OUT则是数据从磁盘读出的过程。
2、IO的通路--------总线
2.1、现代计算机中,IO是通过共享一条总线的方式来实现的。
总线就是一条或者多条物理上的导线。
2.2、每个部件都接在总线上,总线上的电位每个时刻都是相等的,这样总线上的所有部件都回收到相同的信号,这就是所谓的总线共享。但是同一时刻只能有一个部件在接收或发送,使半双工的工作模式。
所有部件按照另一条总线(仲裁总线或中断总线)给出的信号来判断这个时刻,总线可以由哪个部件使用。产生仲裁总线或者中断电位的可以是CPU,也可以是总线上的其它设备。如果CPU要向某个设备做输出操作,那么就由CPU主动做中断,如果某个设备请求CPU发送信号,则由这个设备来主动产生中断信号通知CPU,CPU运行操作系统内核的设备管理程序,从而产生这些信号。(最终哪个部件使用的信号还是由CPU发出)
2.3、一般按照数据总线的条数来确认一个总线或设备的位宽(CPU是按照其内部寄存器到运算单元之间的总线数目来确定位数),例如32位PCI总线,则表明这条总线共有32根线用于传递数据信号。
2.4、目前最新的主板架构中,高速总线往往是直接接入北桥,南桥只连接低速总线。
3、PCI总线
3.1、PCI总线是目前台式机与服务器所普遍使用的一种南桥与外设连接的总线技术。
3.2、PCI总线的地址总线与数据总线是分时复用的。这样有两点好处:一是节省引脚数,二是便于实现突发数据传输。
在数据传输时,一个PCI设备作为发起者,另一个PCI设备作为目标,总线上的所有时序都是由发起者产生与控制。PCI总线在同一时刻只能供一对设备完成传输,这就要求有一个仲裁机构(Arbiter),来决定谁有权利拿到总线的主控权。
PCI总线操作过程:
首先,发起者先置REQ#信号,来请求总线的使用权,当得到仲裁器(Arbiter)的许可时(GNT#信号),会将FRAME#信号(传输开始或结束信号)置低,并在地址总线(也就是数据总线,因为PIC总线地址总线与数据总线是分时复用的)上放置Slave信号地址,同时C/BE#(命令信号)放置命令信号,用来说明接下来的传输类型。
所有PCI总线上的设备都需要对此地址译码,被选中的设备要置DEVSEL#(被选中信号)以声明自己被选中。当IRDY#(发起者可以发送数据)与TRDY#(接收者可以接收数据)都置低时,可以进行数据传输。当发起者数据传输结束前,将FRAME#置高以标明只剩最后一组数据要传输,并在完成数据后放开IDRY#以释放总线控制权。
3.3、PCI总线的中断共享
即不同设备使用同一个中断而不发生冲突。
硬件上,采用点评触发的办法:中断信号在系统的一侧用电阻接高,而要产生中断的板卡利用三极管的集电极将信号拉低。这样不管有几块板产生中断,中断信号都是低信号;而只有当所有板卡的中断都处理后,中断信号才会恢复高电平。
软件上,采用中断链的方法:假设系统启动时,发现板卡A 用了中断7,就将中断7对应的内存区指向A卡对应的中断服务程序入口ISR_A;然后系统发现板卡B也使用中断7,这时就会将中断7对应的内存区指向ISR_B,同时将ISR_B的结束指向ISR_A。依次类推,就会形成一个中断链。而当有中断发生时,系统跳转到中断7对应的内存,也就是ISR_B。ISR_B就要检查是不是B卡的中断,如果是则处理,并将板卡上的拉低电路放开,如果不是,则呼叫ISR_A。这就是中断共享。
4、计算机内部通信
通俗讲,网络就是将要通信的所有节点连接起来,然后找到目标,找到后就发送数据。冬瓜头称他为“连找发”网络三元素模型。
连:就是保证每个网络点到其它网络点总有通路,总是可达的。在OSI模型中链路层实现的功能。
找:就是提供区分机制。比如说命名。在目前广泛使用的网络互联协议TCP/IP中,IP这种命名方式占主导地位,统一了天下。其它的命名方式到了TCP/IP协议的国度,都要映射成IP地址(比如说MAC地址和IP的映射),然后再实现节点到节点的通信。这时网络层实现的功能。
发:发数据就是由传输层提供保障,至于发什么数据,数据什么格式属于OSI模型中的上三层内容。
5、IO 总线是不是可看作网络
CPU和内存因为足够快,它们之间单独使用一条总线连接。这个总线和慢速IO总线之间通过一个桥接芯片连接,也就是主板上的北桥芯片。这个芯片连接了CPU、内存和IO总线。
CPU和北桥连接的总线叫做系统总线,也称为前端总线。这个总线的传输频率和CPU的自身频率是两个不同概念,总线频率相当于CPU向外部存储数据时的数据传输速率,而CPU自身的频率则表示CPU运算时电路产生的频率。
前端总线的条数,比如说64条或128条,就叫做总线的位数。这个位数与CPU内部的位数也使不同概念,CPU位数指寄存器和运算单元之间总线的条数。
内存与北桥连接的总线叫内存总线。由于北桥速度太快,而IO总线相对北桥显得太慢,所以北桥和IO总线之间,往往要增加一个网桥,叫南桥。在南桥上一般集成了众多外设的控制器。
IO总线其实不是一条总线,而是分为数据总线、地址总线和控制总线。
6、CPU、内存和磁盘之间通过网络来通信
链路层:相当于一个司机,它把货物运输到对端。司机的作用就是驾驶车辆,而且要判断交通规则做出配合。
计算机总线组成的网络不需要链路层,因为各个节点之间的路实在太短太稳定。所以,计算机总线网络只有一个物理层、网络层和上三层的网络。
7、按照“连找发”三元素理论,分析CPU向磁盘要数据的例子。
“连”元素已经具备;
“找”,就是找区分,区分体现在主机总线中就是设备地址映射。每个IO设备在启动时都要向内存中映射一个或者多个地址,这个地址有8位长,又被称为IO端口。针对这个地址的数据,统统被北桥芯片重定向到总线上实际的设备上。假如,IDE磁盘控制器地址被映射到地址为0XA0,CPU根据程序,向这个地址发出多条指令来完成一个读操作,这就是“找”。
“发”,首先CPU将这个IO地址放到系统总线上,北桥接收后,会等待CPU发送第一个针对这个外设的指令。然后CPU发送如下3条指令。
第一条指令:指令中包含了表示当前指令是读还是写的位,同时包含一些其它选项,比如说,操作完成时是否用中断来同志CPU处理,是否启用磁盘缓存等等。
第二条指令:指明应该读取的硬盘逻辑块号(LBA)。逻辑块就是对磁盘上存储区域的一种抽象。(后面会讲到)
第三条指令:给出了读取出来的内容应该存放到内存中哪个地址中。
(简单说第一条说是读还是写,第二条说读取磁盘的哪个位置,第三条说读出来放到内存哪个位置)
这3条指令被北桥依次发送给IO总线上的磁盘控制器来执行。磁盘控制器收到第一条指令后,知道这是读命令,而且知道这个操作的一些选项,比如完成是否发中断,是否启用磁盘缓存等,然后磁盘控制器会继续等待下一条指令,即逻辑块地址。磁盘控制器收到指令后,会进行磁盘实际扇区和逻辑块的对应查找,可能一个逻辑块对应多个扇区,查找完后,控制驱动磁头寻道,等盘体旋转到那个扇区,磁头开始读取数据。与此同时,磁盘控制器会接收第三条指令,也就是CPU给出的数据应该存放在内存中的地址。有了这个地址,数据读出之后直接通过DMA技术(就是说磁盘控制器可以直接对内存寻址并执行写操作而不必先转到CPU,然后再从CPU存到内存)。数据存到内存之后,CPU就从内存中取数据,进行其它运算。
控制器对磁盘的一系列指令形成两大体系:ATA指令集;SCSI指令集
SCSI指令集比ATA指令集高效,所以广泛用于服务器和磁盘阵列环境中。