大学学过微机原理,里面介绍一个计算机最小组成单元-cpu,内存,磁盘。相应的这三者也构成所谓的图灵机,即有限状态机。 在主机主板中还包含了南北桥芯片,前者的设计意图是接入低速的io设备,后者是创建cpu和内存南桥的通道。缓存
cpu和北桥链接是总线为系统总线,总线频率为cpu从外部存取数据的数据传输速率,cpu自身的震荡频率为cpu计算的频率。 内存和北桥链接的总线为内存总线。北桥的速率高于外设的传输速率,因此在io总线链接北桥中引入南桥,其集成了不少外设的控制器,好比磁盘控制器,usb控制器等。优化
对于io总线,其并不是只有一条总线,而是分为地址总线,控制总线,数据总线。操作系统
注:cpu发送的指令是到南桥芯片上集成的控制器,控制器对磁盘发出一系列指令分为两个体系,一个是ATA指令集,一种是SCSI指令集,scsi指令集比ata指令集高效。设计
通常咱们录音带这中存储介质是没办法随机定位的,这种存储称为流式存储,对于硬盘这种分扇区,能够定位到扇区位置的存储方式称为块式存储。所以磁带这种存储方式只能用于数据容灾备份。server
普通磁盘的数据组织通常由多个双边盘面,每一个盘面有多条磁盘,每一个同心同磁道不是连续记录数据,而是划分为一段段的圆弧,根据角速度一致,外圈的数据读取速度比内圈的快。每段圆弧称为一个扇区,这个是io读写的最小单位。 同一个磁道下全部盘面构成一个柱面,磁头读写首先从同一个柱面内从0磁头开始进行操做,依次向下在不一样盘面进行操做,写完后再转移到下一个柱面。(减小寻轨,电信号切换远快于机械切换)接口
扇区:每一个扇区能够存放512b数据和一些其余信息,扇区通常有两个主要部分,一个是存储数据地址的标识符,另外一个是存储数据的数据段。前期扇区的头标包括组成扇区三级地址的三个数字(扇区所在的磁道,扇区所在的柱面,扇区所在位置。称为CHS地址),后面换成LBA编址方式,lba编址再也不区分柱面磁道这些概念,而是提供一个线性的地址,而后这些物理信息由磁盘自己保存。这个关系保存在磁盘控制器电路的ROM芯片中,磁盘初始化时载入缓存中以便查询。扇区头标中包含一个字段代表扇区是否能可靠存储数据,而且扇区头标以循环冗余crc值做为结束。队列
最简单的扇区编号方式是采用线性顺序编号,但这个方法存在一个问题,但扇区在处理一个扇区数据期间,可能因为磁头转得太快,直接就进入下一个扇区头标部分,这个时候磁盘就须要空转一周才能从新写入。针对这个状况,ibm一位工程师就采起一个交叉因子的方式进行编号,好比3:1表明磁盘第一个扇区为1号,跳过两个扇区到第四个扇区为2号。内存
对于磁盘而言,最小写入单位是一个扇区,对于操做系统的page,文件系统的block通常是4KB大小,io对于越上层而已越清晰简洁,而越底层io越复杂。好比文件系统的io比卷管理程序的io简单,卷管理程序对应到磁盘控制器更简单。io
对于一个小白而已,磁盘能够当作一张空白的纸,咱们经过位置信息能够找到咱们须要的写入或者读取的位置,而对于这个寻址即相似上面LBA寻址方式。当寻找到对应位置后,咱们须要向磁盘发送须要写入的数据,针对这个问题,人们抽象出一套接口系统,专门用于计算机和其外设交互数据,称为scsi接口协议。class
想象一个场景,当多个io下发到磁盘中,a须要读取中间的数据,b要读取最左边的数据,c要读取最右边的数据。假设咱们按照先进先服务的原则,这个时候显然效率并非最好的,因此这个就涉及一个优化问题,如何使得磁盘的执行序列最优。固然这个问题并不能只在磁盘驱动器上考虑,还必须在磁盘控制器上考虑,由于磁盘控制器默认行为是读取驱动器上的缓存,若是数据乱序后就会引起不少问题。(磁盘控制器和磁盘驱动器的步伐不是一致,驱动器只能预先读取数据存在其缓存中,等待控制器去主动读取)