zoukankan      html  css  js  c++  java
  • 磁盘基础知识

    磁盘基础知识

    物理结构

    磁盘(disk)是由表面涂有磁性物质的金属或塑料构成的圆型盘片(platter),通过一个称为磁头(head)的导体线圈从磁盘中读取数据。在读/写操作期间,磁头固定,磁盘在下面高速旋转。磁盘的盘面上的数据存储在一组同心圆中,称为磁道(track)。每个磁道与磁头一样宽,一个盘面有上千个磁道。磁道又划分为几百个扇区(sector),每个扇区固定存储大小(通常为512B)。相邻磁道及相邻扇区通过一定的间隙分隔开,以避免精度错误。由于扇区按固定的圆心角度划分,又因为扇区的存储大小固定,所以扇区的存储密度从外道向里道增加。

    磁盘安装在一个磁盘驱动器中,它由磁头臂、用于旋转磁盘的主轴和用于数据输入/输出的电子设备组成。如下图所示,多个盘片垂直堆叠,组成磁盘组,每个盘面对应一个磁头,所有磁头固定在一起,与磁盘中心的距离相同且一起移动。所有盘片上相对位置相同的磁道组成柱面(cylinder)。按照这种物理结构组织,扇区就是磁盘可寻址的最小存储单元,磁盘地址用“柱面(磁道)号·磁头(盘面)号·扇区号”表示,即CHS寻址模式

    磁盘的寻址模式

    CHS寻址模式

    早期系统使用的是CHS寻址,这需要分别存储每个区域的柱面、磁头和扇区三个参数,使用时再分别读取三个参数,然后在送到磁盘控制器去执行。CHS的BIOS规范只有24位,用10b来存储柱面地址,用8b来存储磁头地址,用6b来存储扇区地址,而一个扇区共有512B,这样使用CHS寻址一块硬盘最大容量为1024 * 256 * 63 * 512B = 8064 MB(1MB = 1048576B)(若按1MB=1000000B来算就是8.4GB)。注意CHS模式扇区是从1开始算,所以在这个规范中扇区数最多只有63个。随着硬盘技术的进步,硬盘容量越来越大,CHS模式无法管理超过8064 MB的硬盘,因此工程师们发明了更加简便的LBA寻址方式。

    LBA寻址模式

    在LBA地址中,地址不再表示实际硬盘的实际物理地址(柱面、磁头和扇区)。LBA编址方式将CHS这种三维寻址方式转变为一维的线性寻址,它把硬盘所有的物理扇区的C/H/S编号通过一定的规则转变为一线性的编号,系统效率得到大大提高,避免了烦琐的磁头/柱面/扇区的寻址方式。在访问硬盘时,由硬盘控制器再这种逻辑地址转换为实际硬盘的物理地址。

    CHS地址可用以下公式转成LBA,

    #lba=(#c*H+#h)*S+#s-1
    

    其中,

    • #c#h#s分别是磁柱、磁头、扇区的编号
    • #lba是逻辑区块编号
    • H=heads per cylinder,每个磁柱的磁头数
    • S=sectors per track,每磁道的扇区数

    LBA可用以下公式对应到CHS:

    #c=#lba/(S*H)
    #h=(#lba/S)%H
    #s=(#lba%S)+1
    

    逻辑扇区(logical sector)

    关于物理扇区(physical setctor)与逻辑扇区,这个还得扯上扇区大小,由于近年来,随着对硬盘容量的要求不断增加,为了提高数据记录密度,硬盘厂商往往采用增大扇区大小的方法,于是出现了扇区大小为4096字节的硬盘。我们将这样的扇区称之为物理扇区(physical setctor)。但是这样的大扇区会有兼容性问题,有的系统或软件无法适应。为了解决这个问题,硬盘内部将物理扇区在逻辑上划分为多个扇区片段并将其作为普通的扇区(一般为512字节大小)报告给操作系统及应用软件。这样的扇区片段我们称之为逻辑扇区(logical sector)。实际读写时由硬盘内的程序(固件)负责在逻辑扇区与物理扇区之间进行转换,上层程序“感觉”不到物理扇区的存在。

    逻辑扇区是硬盘可以接受读写指令的最小操作单元,是操作系统及应用程序可以访问的扇区,多数情况下其大小为512字节。我们通常所说的扇区一般就是指的逻辑扇区。物理扇区是硬盘底层硬件意义上的扇区,是实际执行读写操作的最小单元,是只能由硬盘直接访问的扇区。操作系统及应用程序一般无法直接访问物理扇区。一个物理扇区可以包含一个或多个逻辑扇区(比如多数硬盘的物理扇区包含了8个逻辑扇区)。当要读写某个逻辑扇区时,硬盘底层在实际操作时都会读写逻辑扇区所在的整个物理扇区。

    磁盘块

    磁盘块是逻辑上的概念,或者说是虚拟出来的概念。磁盘块是操作系统中最小的逻辑存储单位。操作系统与磁盘打交道的最小单位是磁盘块。磁盘块可以包括2n个扇区。块(Block)簇(cluster)分别对应Linux与Windows操作系统中磁盘块的概念。磁盘控制器除了读取数据、控制磁头等作用外,还有映射扇区和磁盘块的关系的功能。

    引入磁盘块的意义:

    • 读取方便:由于扇区的数量比较小,数目众多在寻址时比较困难,所以操作系统就将相邻的扇区组合在一起,形成一个块,再对块进行整体的操作。
    • 分离对底层的依赖:操作系统忽略对底层物理存储结构的设计。通过虚拟出来磁盘块的概念,在系统中认为块是最小的单位。

    分区及其格式化

    磁盘在使用之前必须要先分区并格式化。简单的理解,分区就是指从磁盘上划分出来的一大片连续的扇区。格式化则是对分区范围内扇区的使用进行规划。比如文件数据的储存如何安排、文件属性储存在哪里、目录结构如何存储等等。分区经过格式化后,就可以存储文件了。格式化程序会将分区里面的所有扇区从头至尾进行分组,划分为固定大小的“簇”,并按顺序进行编号。每个“簇”可固定包含一个或多个扇区,其扇区个数总是2的n次方。格式化以后,分区就会以“簇”为最小单位进行读写。文件的数据、属性等等信息都要保存到“簇”里面。

    分区对齐

    为磁盘划分分区时,是以逻辑扇区为单位进行划分的,分区可以从任意编号的逻辑扇区开始。如果分区的起始位置没有对齐到某个物理扇区的边缘,格式化后,所有的“簇”也将无法对齐到物理扇区的边缘。如下图所示,每个物理扇区由4个逻辑扇区组成。分区是从3号扇区开始的。格式化后,每个簇占用了4个扇区,这些簇都没有对齐到物理扇区的边缘,也就是说,每个簇都跨越了2个物理扇区。

    分区未对齐

    由于磁盘总是以物理扇区为单位进行读写,在这样的分区情况下,当要读取某个簇时,实际上总是需要多读取一个物理扇区的数据。比如要读取0号簇共4个逻辑扇区的数据,磁盘实际执行时,必须要读取0号和1号两个物理扇区共8个逻辑扇区的数据。同理,对“簇”的写入操作也是这样。显而易见,这样会造成读写性能的严重下降。

    下面再看对齐的情况。如下图所示,分区从4号扇区开始,刚好对齐到了物理扇区1的边缘,格式化后,每个簇同样占用了4个扇区,而且这些簇都对齐到了物理扇区的边缘。

    分区对齐

    在这样对齐的情况下,当要读取某个簇,磁盘实际执行时并不需要额外读取任何扇区,可以充分发挥磁盘的读写性能。显然这正是我们需要的。

    由此可见,对于物理扇区大小与逻辑扇区大小不一致的磁盘,分区4K对齐才能充分发挥磁盘的读写性能。而不对齐就会造成磁盘读写性能的下降。

    参考文献

    1. 2019年操作系统考研复习指导
    2. MBR与GPT
    3. 磁盘寻址方式--CHS和LBA寻址方式
    4. 【FAQ】存储基础知识 - 磁盘寻址(CHS寻址方式、LBA寻址方式)
    5. 逻辑区块地址-Wiki
    6. 存储基础知识:扇区与块/簇
    7. 电脑中常用的“扇区”、“簇”、“块”、“页”等概念
    8. 分区4K对齐那些事,你想知道的都在这里
  • 相关阅读:
    STL源码剖析之_allocate函数
    PAT 1018. Public Bike Management
    PAT 1016. Phone Bills
    PAT 1012. The Best Rank
    PAT 1014. Waiting in Line
    PAT 1026. Table Tennis
    PAT 1017. Queueing at Bank
    STL源码剖析之list的sort函数实现
    吃到鸡蛋好吃,看看是哪只母鸡下的蛋:好用的Sqlite3
    cJSON
  • 原文地址:https://www.cnblogs.com/zerxoi/p/13227310.html
Copyright © 2011-2022 走看看