前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >xv6(8) 磁盘及分区理论

xv6(8) 磁盘及分区理论

原创
作者头像
rand_cs
发布于 2023-12-06 08:19:52
发布于 2023-12-06 08:19:52
3490
举报
文章被收录于专栏:计算机学习计算机学习

磁盘及分区理论

温彻斯特硬盘

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

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

盘片盘面磁头

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

磁道扇区

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

柱面

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

相关计算

硬盘容量

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

访问时间

寻道时间

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

旋转时间

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

传送时间

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

看几个经典例题:

寻道时间:$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$ 是因为 $LBA$ 从 $0$ 开始编号,这个转换只适用于每个磁道扇区数一样多的磁盘,现在的磁盘都不是这样的了,有 LBA 与 CHS 有更复杂的转换机制,这都不是我们需要考虑的了,硬件厂商已经为我们做好了。

FAQ

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

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

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

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

扇区信息

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

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

扇区、块/簇、页

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

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

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

MBR分区

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

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

  1. 引导程序和一些参数,$446$ 字节
  2. 分区表 $DPT$,$64$ 字节
  3. 结尾标记 $0x55$ 和 $0xAA$,2字节

分区表

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

扩展分区

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

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

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

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

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

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

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 磁盘,其结构布局如下所示:

保护性MBR

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

分区表头

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

分区表项

位于 LBA2—LBA33 ,结构如下:

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

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
浅析BMP位图文件结构(含Demo)
    关于BMP位图格式在网上可以找到比较详细的相关文档,有兴趣的可以搜索标题为“BMP文件结构的探索”的文章,可以在搜索结果中找到一个WORD文档,里面有很详细的介绍。很感谢这个文档的作者(ID是WhatIf),总结得很详细而且还附有详细的应用代码(文档我会放在本文最后面的附件部分)。因为文档中写得很详细,所以我在此就结合自己写的程序示例来介绍下位图的主要结构,用兴趣的可以将附件文件下载下来,结合本节给的相关测试代码进行学习和研究。下面直接引用其描述:
用户1170933
2022/05/10
7490
浅析BMP位图文件结构(含Demo)
vc++如何将客户区存为bmp和VC实现自绘图形输出到bmp文件
BOOL CTestestView::WriteWindowToDIB(LPTSTR szFile, CWnd *pWnd)
阳光岛主
2019/02/19
1.3K0
WinCE中解决“图片采集及压缩”问题的开发历程
   让WinCE工控板上的摄像头拍照,然后将图片数据通过GPRS发送到指定的主机数据库中。
用户1170933
2022/05/10
1.4K0
单片机拍照_将采集的RGB图像封装为BMP格式保存到SD卡
BMP (Bitmap) 图像格式是一种无损压缩的位图文件格式,最初由微软公司在Windows操作系统中引入,用于存储图像数据。BMP格式的主要优点是它简单易用,且支持多种颜色深度。这种格式不包含任何压缩算法,这意味着图像的质量不会因为保存而损失,但这也导致了文件大小相对较大。
DS小龙哥
2025/05/27
870
单片机拍照_将采集的RGB图像封装为BMP格式保存到SD卡
百问FB显示开发图像处理 - BMP图像处理
​ 前言:所有的图像文件,都是一种二进制格式文件,每一个图像文件,都可以通过解析文件中的每一组二进制数的含义来获得文件中的各种信息,如图像高度,宽度,像素位数等等。只是不同的文件格式所代表的二进制数含义不一样罢了。我们可以通过UltraEdit软件打开图像文件并查看里面的二进制数排列。
阿志小管家
2024/11/29
2410
百问FB显示开发图像处理 - BMP图像处理
YV12转RGB24的计算转换和bmp(dib)文件的显示保存
最近又接触到图像处理这一块,翻查到一年前自己写的代码http://blog.csdn.net/gongluck93/article/details/52813042,发现有点看不懂了! 所以自己又整理了一波(YV12转RGB24,显示和保存dib): #include "stdafx.h" /******************************************************************* * Copyright(c) 2017 * All rights rese
_gongluck
2018/03/09
1.4K0
【C】用C语言提取bmp图片像素,并进行K-means聚类分析——容易遇到的问题
关于bmp图片的格式,网上有很多文章,具体可以参考百度百科,也有例子程序。这里只提要注意的问题。 (1)结构体定义问题:首先按照百度百科介绍的定义了结构体,但是编译发现重定义BITMAPFILEHEADER等。其实只要包含了Windows.h,里面的wingdi.h就已经定义了处理bmp的结构体,故不需要自己再重复定义。 (2)读取文件的字节对其问题:要使用#pragma pack (1)来方便读取文件头的结构体,否则结构体的大小会由于字节对齐问题改变。不知是否头文件中已经使用了该宏,在我的代码中注释掉#p
ascii0x03
2018/04/12
2.6K0
RGB24,RGB565,RGB444图片质量比较
以下图片,第二幅是RGB24的原图。第一幅是对第二幅进行RGB444的有损变换图,第三幅是对第二幅进行RGB565的有损变换图。其中肉眼很难分辨RGB565和RGB24的差别。RGB444有明显噪点。
xiny120
2019/06/11
5.3K0
RGB24,RGB565,RGB444图片质量比较
ov7725 stm32_如何给实验培养皿拍照
平台:STM32ZET6(核心板)+ST-LINK/V2+SD卡+USB串口线+鹰眼OV7725摄像头(注意,为了减少摄像头连线的麻烦,建议初学者选取单片机时选用带有摄像头接口的板子)
全栈程序员站长
2022/11/09
6740
ov7725 stm32_如何给实验培养皿拍照
GDI编程
由于最近一直在搞GDI(GDI+)和图片处理的东西,怕自己忘记(其实已经忘得差不多),就仿照网上的BITMAPINFO查看器,写了个东西。 工程下载地址:点击打开链接 运行效果如图: 虽然比较(很)难
_gongluck
2018/03/08
1.3K0
GDI编程
【第3版emWin教程】第18章 emWin6.x的2D图形库之绘制流位图(SPI Flash方案)
教程不断更新中:http://www.armbbs.cn/forum.php?mod=viewthread&tid=98429 第18章 emWin6.x的2D图形库之绘制流位图(SPI
Simon223
2021/06/29
9220
Linux应用开发-libjpeg库交叉编译与使用
在开发板上如果想要显示jpeg格式的图片,必须用到libjpeg库,不可能自己去编写jpg的解码代码。
DS小龙哥
2022/05/09
4.1K0
Linux应用开发-libjpeg库交叉编译与使用
Win32/C# 应用不依赖任何库使用纯 GDI+ 对窗口截图(BitBlt)
在 Windows 上有 GDI+ 来操作位图,不止能完成很多的位图操作,还提供了与 Win32 窗口的互操作,可以截到 Win32 窗口的图片。
walterlv
2023/10/22
8750
VB.NET 直接读取CAD DWG文件转换成BMP位图进行预览
vb.net 直接从DWG文件中提取位图放在PictureBox中预览 Imports System.IO Public Class Form1 Private Sub Button1_Cl
办公魔盒
2019/07/22
4.3K1
VB.NET 直接读取CAD DWG文件转换成BMP位图进行预览
C++屏幕截图 图片转JPEG
C#实现同屏的时候,频繁截屏内存并不能很好的释放,所以就打算用C++实现这部分的功能。
码客说
2021/07/13
2.4K1
【第3版emWin教程】第17章 emWin6.x的2D图形库之绘制流位图(QSPI Flash内存映射方案)
教程不断更新中:http://www.armbbs.cn/forum.php?mod=viewthread&tid=98429 第17章 emWin6.x的2D图形库之绘制流位图(QSPI
Simon223
2021/06/29
8220
BMP文件解析_图片分析
BMP(全称Bitmap)是Window操作系统中的标准图像文件格式,可以分成两类:设备相关位图(DDB)和设备无关位图(DIB),使用非常广。它采用位映射存储格式,除了图像深度可选以外,不采用其他任何压缩,因此,BMP文件所占用的空间很大。BMP文件的图像深度可选lbit、4bit、8bit、16bit、24bit或者32bit。BMP文件存储数据时,图像的扫描方式是按从左到右、从下到上的顺序。 由于BMP文件格式是Windows环境中交换与图有关的数据的一种标准,因此在Windows环境中运行的图形图像软件都支持BMP图像格式。
全栈程序员站长
2022/11/15
1.9K0
[2021]Linux下C语言qrencode二维码生成库的基本使用和ARM开发板移植
因为我们的嵌入式设备使用的是C语言,所以如何不想自己从头造轮子的话,就需要找一个比较合适的C语言的二维码生成的库。
手撕代码八百里
2021/08/10
3.8K0
深入探索视频帧中的颜色空间—— RGB 和 YUV
接触前端音视频之后,需要掌握大量音视频和多媒体相关的基础知识。在使用 FFmpeg + WASM 进行视频帧提取时,涉及到视频帧和颜色编码等相关概念。本文将对视频帧中的颜色空间进行介绍。 一、视频帧 对于视频,我们都知道是由一系列的画面在一个较短的时间内(通常是 1/24 或 1/30 秒)不停地下一个画面替换上一个画面形成连贯的画面变化。这些画面称之为视频帧。 对于视频帧,在现代视频技术里面,通常都是用 RGB 颜色空间或者 YUV 颜色空间的像素矩阵来表示。在 ffmpeg 里面,我们可以看到源码 li
用户1097444
2022/06/29
2K0
深入探索视频帧中的颜色空间—— RGB 和 YUV
C#中使用FreeImage库加载Bmp、JPG、PNG、PCX、TGA、PSD等25种格式的图像(源码)。
该文介绍了如何使用FreeImage库来读取、写入、显示、处理各种图像格式,并包含详细的代码示例。同时,还提供了关于图像处理工具和技术的一些思考,以及如何使用FreeImageNET库进行更高级的图像处理。
用户1138785
2018/01/03
3K0
C#中使用FreeImage库加载Bmp、JPG、PNG、PCX、TGA、PSD等25种格式的图像(源码)。
推荐阅读
相关推荐
浅析BMP位图文件结构(含Demo)
更多 >
LV.1
中信银行信用卡中心资深数据库工程师
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档