xv6(8)磁盘及分区理论

磁盘及分区理论

温彻斯特硬盘

今天我们所使用的机械硬盘实质上都是温彻斯特硬盘,最早是在 1973 年由 IBM 研制的一种新型硬盘 IBM 3340。它使用了一种了不起的技术:磁头不与盘片接触,只有不予接触才可能有着更高的转速而且磁盘才不易损坏。至于这个名字的来历,是因为 IBM3340 拥有两个 30MB de 存储单元,而当时一种很有名的 “温彻斯特来福枪” 的口径和装药也恰好包含了两个数字 “30”;于是这种硬盘的内部代号就被定为 “温彻斯特”。

我们来看看这种硬盘的结构图:

image.png

盘片盘面磁头

上图中光盘状的东西就是盘面,有两个面叫做盘面,上面分布着磁性介质。每个盘面都有个磁头,用来读写盘面上的数据。

磁道扇区

image.png

上图中灰色的圆环就是磁道,磁道上的绿色的一段弧为扇区,扇区是磁盘读写的基本单位,通常为512字节

柱面

image.png

每个磁道由外向里从 0 编号,不同盘面上编号相同的磁道组成的圆柱称为磁盘的柱面

相关计算

硬盘容量

容量 = 盘片数 \times 2 \times 磁道数 \times 扇区数 \times 512

访问时间

寻道时间

将磁头移动到相应的磁道上所需要的时间

旋转时间

将目标扇区的第一位移动到磁头下面所需要的时间,计算时一般用平均旋转时间即旋转半圈需要的时间。

传送时间

也就是磁盘旋转读取数据的时间,一般也取决于旋转速度。

看几个经典例题:

image.png

寻道时间:6ms

平均旋转时间:\frac{60}{10000} \times 1000 \div 2 = 3ms

传送时间:这里给出了传输速率那就直接用他给的这个速率来算:4 \div 1024 \div 20 \times 1000 \approx 0.2ms

所以总时间再加上磁盘控制器的延迟则为:6+3+0.2+0.2=9.4ms

寻址

CHS

CHS 即 Cylinder(柱面)、Heads(磁头)、Sector(扇区),使用这三个参数来定位一个扇区,柱面参数使磁头臂移动到某个半径,磁头参数确定是哪个盘面上的磁道,扇区参数则确定该磁道上某个扇区的具体位置

柱面,磁头一般都是从 0 开始编号,扇区从 1 开始编号

早期 CHS 这个三元组用 24 位来表示,前 10位 表示柱面,中间 8 位表示磁头,后面 6 位表示扇区,最大寻址空间为 2^{10}\times2^8\times2^6\times512\div2^{30} = 2^3=8GB

LBA

LBA(Logical Block Addressing),逻辑块地址实际上就是 CHS 的转化,将三元组转换为一维的线性地址。转换方式如下:

CHS = (C,H,S)

LBA = (C\times磁头数+H)\times扇区数+(S-1)

最后加上 S - 1 是因为 LBA0 开始编号,这个转换只适用于每个磁道扇区数一样多的磁盘,现在的磁盘都不是这样的了,有 LBA 与 CHS 有更复杂的转换机制,这都不是我们需要考虑的了,硬件厂商已经为我们做好了。

FAQ

每个磁道的扇区数一样多吗?

前面也回答了,不是,早期的硬盘每个磁道的扇区数是一样的,外磁道和内磁道的记录密度是不等的,外磁道稀疏内磁道密集,这也造成了很多浪费。因此后来出现了 ZBR(Zone Block Record),采用等密度结构,即外磁道的扇区数多于内磁道的扇区数,如下图所示:

image.png

显然,因为磁道的扇区数可能不一样,逻辑地址和物理地址之间的转换将更加复杂精细,这一部分都是由磁盘控制器来做的,根据各个磁盘的特性设置芯片来具体工作,不需要我们认为操心了解即可。

另外硬盘的旋转速度一般是保持恒定的,而外磁道的扇区数又要多于内磁道,所以单位时间内扫过的扇区数明显外磁道是要多于内磁道的,因此外磁道的数据传输速度是要快于内磁道的。

扇区信息

扇区一般由两部分组成,一部分是头区域,另一部分是数据区域。数据区域不用多说,就是存储数据的部分,而头区域则包括包含驱动器和控制器使用的信息,具体来说就是一些地址标识,缺陷标识以及错误检测和纠正信息。

寻找相应的扇区就是依靠扇区记录的头信息来寻找的,期间磁盘控制器需要检验这些头部信息和传输数据,需要花费一定时间才能访问下一个扇区,所以扇区号的物理排列不应是连续的,如果连续的话有可能刚处理完当前扇区,磁头已经转到之后的好几个扇区了,再想处理下一个扇区的话得等待许久。所以磁盘出厂时一般都会做低级格式化,跳跃着将扇区编号,给检验传输等留出足够的时间。而高级格式化就是给磁盘分区制作文件系统。

扇区、块/簇、页

扇区:硬盘最小的读写单元

块/簇:多个扇区组合在一起为一个块,一般是 2^n 个扇区,是操作系统对硬盘读写最小单元

页:操作系统与内存之间操作的最小单元,一般 4KB

MBR分区

关于分区前面说过一些,这里再仔细讲讲。这儿主要讲的是传统的 MBR 分区。

MBR(Main Boot Record)主引导记录,它位于整个硬盘的第一个扇区即 0 柱面,0 磁头,1 扇区(前面说过 CHS 方式以 1 开始编号)。分为三部分:

  1. 引导程序和一些参数,446 字节
  2. 分区表 DPT64 字节
  3. 结尾标记 0x550xAA,2字节

分区表

分区表有 4 个表项,每个表项 16 字节,结构如下:

image.png

扩展分区

分区表只有 4 个表项,也就是说只能原生支持 4 个分区,现在来说 4 个分区远远不够,于是有了扩展分区。

扩展分区是可选项可有可无,有最多只有一个,为了区分其他的三个分区称为主分区

扩展分区可以分为多个子扩展分区,子扩展分区就像是一个单独的硬盘,最开始的扇区为扩展引导扇区 EBR,结构同 MBR,只是分区表只用了两项,第一项表示该子扩展分区的逻辑分区,第二项表示下一个子扩展分区,其他两项为 0 。因此扩展分区就像是构建了一个单链表,将各个子扩展分区连起来

关于 MBR,EBR 的分区表项中起始偏移扇区注意以下几点:

  1. MBR 的分区表项中,起始偏移扇区的基准为 0
  2. EBR 描述逻辑分区的起始偏移扇区基准为该子扩展分区的地址,也就是上一个子扩展分区中 EBR 记录的下一个子扩展分区的偏移扇区
  3. EBR 描述下一个子扩展分区的起始偏移扇区基准为总扩展分区地址,也就是 MBR 中记录的扩展分区的偏移扇区

来看一看一个硬盘的分区布局图:

image.png

OBR(OS Boot Record),位于主分区/逻辑分区的第一个扇区,称为操作系统引导扇区,还记得分区表项中第 0 个字节吗,如果为 0x80 则说明该分区有 OBR 存在操作系统,能够引导是为活动分区

MBR,EBR,OBR 这三个不要弄混淆了,MBR 位于整个磁盘的第一个扇区,里面的分区表描述的是主分区和总扩展分区。而 EBR 位于子扩展分区的第一个扇区,分区表描述的是是逻辑分区和下一个子扩展分区。OBR 位于实际分区的第一个扇区,它是操作系统的引导程序,用来加载操作系统

但实际上述讲述的这些规则 xv6 一个都没用上,想想 xv6 的启动,简化了很多很多,基本不沾边。

FAQ

每个分区最大容量是多少?

分区表项中最后 4 字节表示容量,因为只用了 4 字节来表示总的扇区数,如果每个扇区的容量为 512 字节的话,则每个分区最大容量为:

2^{32}\times512 \div 2^{40} = 2TB

空闲扇区

分区时不能跨柱面,也就不能跨磁道,而 MBR,EBR 需要占用一个扇区,分区不会与它们处于同一个磁道,因此分区通常会偏移一个磁道的大小,期间这没用的扇区就是空闲扇区。

GPT分区

传统的 MBR 分区有许多限制,比如只能支持 4 个主分区,而且每个分区大小不能超过 2TB 等等,所以后来提出了一种新的方案 GPT,它有着以下优点:

  1. 每个硬盘的分区数分区大小几乎没有限制
  2. 分区表有备份,磁盘首位分别保存了一份相同的分区表
  3. 关键数据结构有循环冗余检测
  4. 使用全局标识符(GUID)来标识分区类型
  5. 每个分区有名称

使用 GPT 分区的磁盘叫做 GPT 磁盘,其结构布局如下所示:

image.png

保护性MBR

位于 LBA0,第 0 个扇区,为了兼容性考虑还是存储的传统的 MBR,叫做保护性 MBR,只有一个类型为 0xEE 的分区表项表示该磁盘使用 GPT 分区,保护性 MBR 的主要作用是保护不能识别 GPT 分区的磁盘工具对其进行操作

分区表头

位于 LBA1,第 1 个扇区,主要结构如下:

image.png

分区表项

位于 LBA2—LBA33 ,结构如下:

image.png

各个字节表示什么应该很清楚了,就不具体解释了,LBA33 之后就是各个具体的分区,然后磁盘最后 33 个扇区是倒着存放的分区表头和分区表。这就是整个 GPT 磁盘的布局,再回头去看看整个分区布局图,应该会很清晰了。

好了本节就这样吧,有什么问题还请批评指正,也欢迎大家来同我讨论交流学习进步。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,039评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,426评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,417评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,868评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,892评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,692评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,416评论 3 419
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,326评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,782评论 1 316
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,957评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,102评论 1 350
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,790评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,442评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,996评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,113评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,332评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,044评论 2 355

推荐阅读更多精彩内容