这两天没事干,翻了翻大话存储,简单的做一下概念记录,看到的观众,不喜勿喷(喷不了,本博客谢绝评论)

----------------------------------------------------------------------------------------------------------


在这篇小文字形成之前看到了一篇关于存储额文章——很生动,连接在此:

http://mp.weixin.qq.com/s?__biz=MjM5ODI5Njc2MA==&mid=2655807958&idx=1&sn=1c3d68684bf5e52d757132a5123a268b&chksm=bd7424018a03ad17b9b1d799d908f23208a330c77f906f4f83cccf274d09dfdf366cae76fd17#rd


存储的本质就是信息的记录

一种形式的信息转换为另一种形式(给文字加上声音形成语言)
见到的所谓物质,到底有没有,谁也不知道,因为这只是信息对大脑的刺激而产生的意识而已,感觉不到任何刺激的人,核爆也没什么
人利用文字交流,将头脑内的意识转换为文字表达出来,听者接收后又还原这种意识活动,类似网络通信
数据影响人类的行为
从古至今信息记录介质发展:
 竹简纸张 - 选数管 - 穿孔卡 - 穿孔纸带 - 磁带 - 磁鼓存储器 - 磁盘驱动器 - 软盘 - 光盘 - flash芯片和卡式存储(硅技术)(falsh芯片+usb接口=u盘(闪存))
 磁盘阵列(磁盘组+冗余纠错技术)-  大型网络化磁盘阵列
 
 将数据放到磁盘上,需要有一定的组织,组织数据的任务就由文件系统来担当。(文件系统是在磁盘技术上发展起来的,方便应用程序管理磁盘上数据)
 计算机启动:加电后cpu首先按照ROM里的指令逐条执行,先检查硬件,ROM最后一条指令是让CPU跳转到磁盘的0磁道来执行存储在此处的程序。
 
 利用信息来存储信息,文件来存储文件,这里体现了归一的思想。
 
 大脑利用神经网络将获取到的信息传输到神经中枢,而计算机利用各种总线技术将信息传递给CPU进行计算;
 同理,大脑利用神经网络将计算好的信息传递给四肢等“设备”,从而驱动这些“设备”运作,而计算机同样利用总线将数据传递给外部设备。
 
 计算机存储领域所研究的就是怎样为计算机又快又高效的提供数据以便辅助其计算。
 
 将多块磁盘做成RAID(Redundant Arrays Of Independent Disks)系统。
 由于计算机技快速发展,对容量要求越来越大,将磁盘放置在主机箱内的做法已经不能满足应用对空间的需求,这就催生了网络存储技术。
 
 网络存储系统将存储扩展到了网络上,使得存储设备成了网络上的一个节点,以供其他节点访问,如此计算机内部可以不用硬盘,
 也可以通过网络来存取存储设备上数据。网络存储技术关注的是如何在网络上向其他计算机提供数据流服务,基于网络存储又带来了其他技术发展
 如容灾技术。
 
 计算机组成: CPU、内存 、IO(IO是相对的,如cpu的IO,磁盘的IO等)
 IO的通路 —— 总线 :计算机中IO是通过共享一条总线的方式实现的。
 总线 —— 是一条或多条物理导线组成,每个部件都接到这些导线上,导线上的电位每个时刻都是相等的,
         这样总线上的所有设备都会收到同样信号,即总线是共享的,同一时刻只能有一个部件在收发信息,是半双工的模式。
         所有部件按照另一条总线,即仲裁总线或中断总线上给出的信号来判断这个时候总线可以由哪个部件使用。
         产生仲裁或中断信号的可以使CPU,也可以是总线上的其他设备;如果CPU要向某设备做输出操作,那么就有CPU主动做中断,
         如果某个设备请求向cpu发送信号,则有该设备主动产生中断信号来通知CPU。cpu运行OS内核的设备管理程序,从而产生这些信号。
 
主板上的每个组件都是通过总线连接起来,每种类型的总线(系统总线、内存总线、IDE总线等)的条数很多可能是16、32、64等,这些导线密密麻麻的
印刷在电路板上,由于导线很密集,在高频振荡时会产生干扰,所以人们将导线分组印刷到不同的电路板上,然后再将这些电路板压合到一起形成一块板子,
其实这就是多层印刷电路板(多层PCB),这样每张板上导线数目降低,而板子之间信号屏蔽很好,不会相互干扰。

总线(数据总线、控制总线、地址总线、中断总线有时也就是控制总线),一般按数据总线的条数来确认一个总线或设备的位宽
    (CPU是按其内部寄存器到内存单元之间的总线数目来确定位数)。
    如32位PCI总线,则表明这条总线有32根导线用于传输数据信号,PCI可以终结在一个插槽,用于将PCI接口的板卡接入PCI总线,
    也可以直接与设备相连。后者一般用于集成在主板上的设备,因为他们之间不需使用插槽来连接。
    
    PCI总线:是目前台式机与服务器普遍使用的一种南桥与外设连接的总线技术。
    PCI总线的地址总线与数据总线是分时复用的,PCI总线在同一时刻只能供一对设备完成传输
系统总线——cpu与北桥连接的线,也叫前端总线
内存总线——内存与北桥连接总线
由北桥速度太快,而IO相对北桥而言太慢,所以北桥和IO总线之间要加一个网桥,叫南桥,在南桥上一般集成很多外设的控制器(如磁盘控制器,usb控制器)
    
网络通信: 连、找、发
 连:物理连接,将物理层(可以使导线、电磁波等)连接起来
 找: 意味着编码,编址
 发:数据传输

CPU读取磁盘信息:
    cpu发送指令到磁盘控制器(在PCI或南桥),然后由控制器控制磁盘读取某个扇区、磁道等,通过DMA从而完成数据读取操作。

磁盘控制器对磁盘发出指令分两大体系: ATA 、 SCSI指令集
        SCSI指令比ATA指令高效,所以一般用在服务器或磁盘阵列中。

磁盘组成: 盘片、读写头、马达、底座、电路板等
    盘片:盘片的基板由金属或玻璃材质,将磁粉镀到基板表面,在涂上保护润滑层(不含杂质的磁粉、将磁粉均匀的溅镀(溅镀的密度相当高)到基板上),磁头是利用气流漂浮在盘片上
    磁头:磁盘存储原理是将数据利用其控制电路通过硬盘读写头去改变磁盘表面上极其细微的磁性离子簇的N、S极性来加以存储,
            磁头的飞行高度非常小,每个盘片的每个面都有磁头(磁头有一个启停区-着陆区,该区域不含磁粉)
    
磁盘上数据的组织:
    磁盘盘片首先在逻辑上划分成磁道、柱面、扇区(磁道编号由外而内,距离主轴最远的为0磁道,磁盘数据存放就从最外层开始)
    0磁道定位:0磁道检测器负责磁盘的初始定位,0磁道存放操作系统启动的代码,BIOS总是默认从零磁道读取程序来执行
    盘面:一般由铝合金做基片,高速磁盘也有用玻璃做基片的(玻璃更容易达到所需平面度与光洁度);
            每个盘片有两面,都可存数据,每个盘面都有一个编号,编号从上到下从0开始,在硬盘系统中,盘面号又叫磁头号,
    磁头传动装置:该装置是负责磁头的径向移动,通常有两种:步进电机传动装置、音圈电机传动装置,主要作用就是变换磁道。
    
    磁道:磁盘在格式化时被划分成许多同心圆,这些同心圆轨道就叫磁道,磁道从最外圈开始编号;
          这些同心圆磁道不是连续记录数据,而是被划分成一段段的圆弧,这些圆弧的角速度一样,而线速度则外圈较大,
          外圈在相同时间内转过的弧长度比内圈大,因此外圈读写速度比内圈快;
          每一段圆弧叫做一个扇区,扇区从1开始编号,每个扇区的数据作为一个单元同时读出或写入,是读写的最小单位;
          磁头只能定位到一个扇区的开始或结束,而不能再扇区内部定位,所以不会发生只读取了扇区的部分,
          所以一个扇区内的数据是连续流式记录的。
          磁道肉眼不可见,只是一种特殊的磁化方式,划分磁道和扇区的过程叫低级格式化,通常在硬盘出厂时已经完成了,
          相对低级格式化,高级格式化指的是对磁盘上所存储的数据进行文件系统的标记而不是对扇区和磁道进行标记。
    柱面:所有盘面上的同一磁道,在竖直方向上构成一个圆柱,就叫柱面,每个圆柱上的磁头从0开始编号,自上而下。
          数据的读写按柱面进行,即磁头读写数据时首先在同一柱面内从0磁头开始操作,依次向下,在同一柱面的不同盘面上操作,
          只有在该柱面写完后才会移到下一个柱面,磁头选取只需电子操作,而柱面选择需通过机械装置切换,即寻道。
          因此数据的读写按柱面进行,而不是盘面(因电子操作比机械操作快的多)。
          即一个磁道写满后会在该磁道同柱面的下一个盘片上写,一个柱面写满后才移到到下一个柱面开始写(减少寻道频次)。
          
          一块磁盘的盘面的磁道数、圆柱数不仅取决于每条磁道的宽窄,也与磁头大小有关,如果磁头足够精细,则可以大大提高磁道数与存储容量。
    扇区:每个扇区可以存储512B数据和一些其他信息;柱面、磁头、扇区三者简称CHS,所有扇区地址又成CHS地址
          扇区有两个主要部分:存储数据地点的标识符(CHS)和存储数据的数据段,磁头可以读取扇区的头标中的CHS地址即可知道当前在盘片的那个位置
          (同一时刻只能有一个磁头在读写)。
          CHS地址是小容量磁盘的使用,对当下的大容量磁盘不在适用,而转为LBA编址方式,LBA编址不在划分柱面和磁头号,这些数据有硬盘自身保留,
          而磁盘对外提供的地址全部为线性地址,及LBA地址((Logical Block Address),逻辑区块地址)。
          所谓线性,及将磁盘看做一个磁道,无线长,扇区是这个磁道上的等长度的线段,从1开始编号,从而屏蔽了柱面、磁头等信息,利于编程。
          
    磁盘控制电路:
          磁盘靠磁性子来存储数据,该“子”,是指一个区域,该区域后很多磁性分子,这些分子聚集到一起,直到磁头可以感觉到其磁性为止
    磁盘IO:对磁盘而言,磁头的一次连续的读或写叫做一次IO。
    磁盘中队列
    磁盘缓存:接收指令和数据

硬盘接口技术;
    目前硬盘提供的物理接口包括:
        用于ATA指令系统的IDE接口、用于ATA指令系统的SATA接口、
        用于SCSI指令系统的并行SCSI接口、用于SCSI指令的串行SCSI接口、SCSI指令的光纤通道协议串行FC接口
        IDE:电子集成驱动器,本意指将控制电路、盘片、磁头放于一个容器中硬盘驱动器。
              IDE接口也称为PATA (Parallel ATA-并行传输ATA)
              IDE数据传输模式: PIO-编程输入输出模式、DMA模式-不经过CPU而直接访问内存的方式
        SATA硬盘接口:全称为 Serial ATA ,仍然使用ATA指令集
        SCSI硬盘接口:SCSI与ATA是目前两大主机与外设通信协议规范,且各自都有物理定义,ATA是IDE接口,而SCSI是SCSI接口,
                      SCSI设备一般需要配备SCSI卡一起使用,SCSI必须要有一块SCSI控制卡才能支持SCSI设备,与IDE不同,SCSI控制卡
                      上有一块相当于CPU的芯片,对SCSI设备进行控制,从而减少系统CPU的占用
                      
                      普通的台式机一般不集成SCSI控制器,若想接入SCSI硬盘,需要增加SCSI卡,该卡一端接入主机的PCI总线,
                      另一端用一个SCSI控制器接入SCSI总线
        SCSI总线寻址:
                按照控制器——通道——SCSI ID——LUN ID来寻址
                控制器级别寻址:SCSI控制器集成在南桥上或独立于某个PCI插槽,不论在那都连接到主机IO总线上,IO总线上可能有多个SCSI控制器,
                                每个SCSI控制器又分为多个通道,通道也就是SCSI总线,一条SCSI总线就是一条通道,一个控制器可能有多条通道(SCSI总线)
                                每个通道(总线)可以接入8、16个SCSI设备,SCSI ID就是针对每个设备的编号,但SCSI ID并不是SCSI总线网络中的最后一层,
                                SCSI ID本身表示的是一个物理设备,该设备可以被逻辑的分割,每个SCSI ID上可以划分多个LUN ID。
                                习惯上把磁盘阵列生成的虚拟磁盘称为LUN。
磁盘控制器:
    硬盘的接口包括物理接口(具体的针数),还有一套指令系统,叫逻辑接口,硬盘通过物理接口连接到磁盘控制器后,就可以利用ATA或ACSI指令来存取数据。
    
    应该将磁盘控制器与磁盘驱动器的控制电路分开,二者是作用于不同物理位置的,磁盘驱动器控制电路位于磁盘驱动器上,用于负责驱动磁头臂做运动读取数据;
    而主板上的磁盘控制器专门用来向磁盘驱动器的控制电路发送指令从而控制磁盘驱动器读写数据,cpu只需操作控制器就可以了:
    cpu发送SCSI或ATA指令(CDB)给同样位于主板上的磁盘控制器,磁盘控制器继而通过电缆控制磁盘驱动器
    在系统加电还没加载操作系统时,是如何读取磁盘的呢? 系统BIOS中包含基本的磁盘控制器的驱动程序。
    
并行传输:要求通信双方距离足够短,否则影响通信质量,长距离的并行通信并无优点

IO延迟:指的是控制器发出指令后,知道IO完成的过程中所消耗的时间,业界认为延迟在20ms内则IO性能对应用来说是可以接受的
Queue Depth、IO、IOPS 三者关系: IOPS = (Queue Depth)/ (IO Latency)

磁盘的IOPS与传输带宽:
    磁盘IOPS:即每秒能完成多少次IO。
            如何才算一次IO呢?一次IO在系统路径的每个层次上都有定义。系统由模块构成,模块间由接口连接,在接口间流动的就是IO。
            (e.g. 应用向操作系统请求资源、文件系统向磁盘驱动器发出请求等不同层次上的IO)其实系统上层的一次IO会演变成下层的多次IO。

固态硬盘(SSD-solid state drive):使用flash芯片或DRAM做数据永久存储的硬盘。Flash Drive 不在使用磁技术来存储数据。
    利用DRAM做永久存储的叫 RAM-Dsk,其内部使用SDRAM内存条来存储数据,所有在外部电源断开后需要电池来维持DRAM中数据。
    当前较常见SSD是基于Flash介质的。所有类型的ROM及Flash芯片都采用一种叫做“福东门场效应晶体管”的晶体管来保存数据,每个这样的管子叫“cell”,
    cell分两类:SLC-每个cell可保存1B,MLC-每个cell可保存2B数据,每个cell可储存4个状态。 场效应管为何可以保存数据?
从Flash芯片读取数据:
    Flah芯片通病:写之前需要先擦除原来的数据(放电-状态变为1),否则写数据时会受到干扰,存在写惩罚
                  wear off:充放电次数增多,二氧化硅绝缘层破坏,导致该cell宣判下岗,继而导致该cell所在的page被标记为损坏。
                  SSD的寻址及IO组小单位是page。
RAID :
    raid实现可以由软件或硬件(RAID卡)实现。
    RAID0 :条带写入,数据被并行写入条带中所有磁盘,raid0并不是真正raid结构,他没有冗余,至少需要2块以上磁盘。
            raid0使得顺序的数据请求被分散到所有的硬盘中同时执行
            RAID 0至少需要两块硬盘才能够实现,它的容量为组成这个系统的各个硬盘容量之和,这几块硬盘的容量要相同
    RAID1 : Mirror或Mirroring--镜像  ,把一个磁盘的数据镜像到另一个磁盘上,具有很高的数据冗余能力,但磁盘利用 率为50%,故成本最高
            RAID 1的每一个磁盘都具有一个对应的镜像盘,任何时候数据都同步镜像,系统可以从一组 镜像盘中的任何一个磁盘读取数据
           只要系统中任何一对镜像盘中至少有一块磁盘可以使用
           当读取数据时,系统先从RAID1的源盘读取数据,如果读取数据成功,则系统不去管备份盘上的数据;如果读取源盘数据失败,
           则系统自动转而读取备份盘 上的数据,不会造成用户工作任务的中断
    RAID2: 使用单独的盘做校验盘(海明码)
    RAID3:带奇偶校验码的并行传送
    RAID4:带奇偶校验码的独立磁盘结构
    RAID5:分布式奇偶校验的独立磁盘结构