磁盘的逻辑结构

é»è¾ç»æå¾2

磁道:

当磁盘旋转时,磁头若保持在一个位置上,则每个磁头都会在磁盘表面划出一个圆环轨迹,这些圆环轨迹就叫做磁道。也就是说磁道具有一定的宽度。磁道与磁道之间通常会有一定的间隔(逻辑上的间隔,物理上依靠磁头的移动来确定磁道)。

扇区:

磁盘上的每个磁道被等分为若干个弧段,这些弧段便是磁盘的扇区,每个扇区可以存放512个字节的信息(通常情况下是512字节),磁盘驱动器在向磁盘读取和写入数据时,要以扇区为单位。(图一中连续的黑线标示)。通常扇区与扇区之间也有一定间隔(逻辑上的间隔,物理上没有任何间隔,但是每个扇区的开头都有一个同步信息,外围电路可以用来判断一个扇区的开始。)。

柱面:

硬盘通常由重叠的一组盘片构成,每个盘面都被划分为数目相等的磁道,并从外缘的"0"开始编号,从图2这张放大的硬盘结构图我们可以看出,具有相同编号的磁道形成一个圆柱,称之为磁盘的柱面。磁盘的柱面数与一个盘面上的磁道数是相等的。

盘片:

硬盘最基本的组成部分是由坚硬金属材料制成的涂以磁性介质的盘片,不同容量硬盘的盘片数不等。一个盘片有两个盘面,每个盘面有一个磁头。

CHS:

所谓硬盘的CHS,即Cylinder(柱面)、Head(磁头)、Sector(扇区),只要知道了硬盘的CHS的数目,即可确定硬盘的容量,硬盘的容量=柱面数×磁头数×扇区数×512B。

簇:

簇是一个或多个扇区组成的单位。

文件占用磁盘空间时,基本单位不是字节而是簇。簇的大小与磁盘的规格有关,一般情况下,软盘每簇是1个扇区,硬盘每簇的扇区数与硬盘的总容量大小有关,可能是4、8、16、32、64……

通常在Windows平台下使用的3种文件系统是FAT(文件分区表),FAT32(32位文件分区表)和NTFS(NT文件系统)。在FAT文件系统下,每一个磁盘被分成固定大小的簇。簇最少为512个字节,其大小可以成倍增长,最大为32K。每个簇都是由唯一的索引号——一个16位二进制数来标识。因为16位二进制数最大为65536,所以FAT分区所拥有的簇的数量不可能超过65536个。簇的数量和大小的限制,就是FAT分区为什么不能超过2GB的原因。
FAT中的入口连接着组成一个文件的各个簇,文件的目录入口包含其第一个簇的索引号,而该簇在FAT中的入口又包含着下一个簇的索引号,依此类推。一个文件的最后一簇对应的FAT入口则包含着一个特殊的文件终止符,未使用的簇和损坏的簇也会用特殊代码标识出来。FAT32文件的原理几乎与此相同,但它的簇更小,而且由于FAT32入口是32位,所以其容量理论上可以超过40亿个字节。
NTFS是一个相当高级的文件系统。它的主文件表(MFT)是一个非常完整的数据库,它负责对磁盘上的每个文件进行索引。每个MFT的入口通常为1K大小,其中记录了大量的文件信息。NTFS可以在文件的MFT入口中存储非常小的文件的全部内容;对于大一些的文件,这些入口会标识出包含文件数据的簇。

其中的编号方式是,磁道是从外到内,从0开始编号,即最外面的一圈为第0磁道 
           扇区的编号方式为固定标记某块为1号,然后顺时针编号(这个不太确定标记方式) 
           磁头则是决定读/写面号的结构,从0开始顺序编号 

存储容量 = 磁头数 × 磁道(柱面)数 × 每道扇区数 × 每扇区字节数

 下面讲一下现代磁盘,在老式磁盘中,尽管磁道周长不同,但每个磁道上的扇区数是相等的,越往圆心扇区弧段越短,但其存储密度越高。不过这种方式显然比较浪费空间,因此现代磁盘则改为等密度结构,这意味着外围磁道上的扇区数量要大于内圈的磁道,寻址方式也改为以扇区为单位的线性寻址。为了兼容老式的3D寻址方式,现代磁盘控制器中都有一个地址翻译器将 3D 寻址参数翻译为线性参数。

下面主要讲述一下磁盘的寻址

CHS是早期在IBM PC架构上面用来进行磁盘寻址的办法。CHS(Cylinder/Head/Sector----柱面/盘面/扇区)寻址模式也称为3D模式。

CHS是一个三元组,组成如下:

1.      一共24个 bit位。

2.      其中前10位表示cylinder,中间8位表示head,后面6位表示sector。

3.      最大寻址空间

随着科技大发展,磁盘容量大幅提升。远远超过了8GB寻址范围,如何对8GB之外空间进行寻址?历史上曾经CHS从24位扩展到多28位,实现寻址128GB,但是面对现在磁盘2TB容量还是无能为力,下面我们请出最终解决方案LBA。

什么是LBA(logical block addressing)

正如上文所说,LBA是用来取代CHS。那么LBA是怎么实现磁盘寻址?

1.       LBA是一个整数,通过转换成CHS格式完成磁盘具体寻址。

2.      LBA采用48个bit位寻址,最大寻址空间128PB。

LBA与CHS转换规则是怎么样的?

另外由于老硬盘的扇区划分方式对硬盘利用率不高,因此出现了现在的等密度盘,外圈的扇区数要比内圈多,原来的3D寻址方式也就不能适应这种方式,因此也就出现了新的寻址方式LBA,这是以扇区为单位进行的线性寻址方式,即从最外圈柱面0开始,依次将扇区号编为0、1….等等,举个例子,假设硬盘有1024个柱面,由于是等密度硬盘,柱面0(最外圈)假设有128个扇区,依次编号为0-127,柱面1有120个扇区,则依次编号为127-246,…..依次最内圈柱面127只有扇区64个,则编号到最后。因此要定位到硬盘某个位置,只需要给出LBA数即可,这个就是逻辑数。

在 LBA 模式下,为了保留原来CHS时的概念,也可以设置柱面、磁头、扇区等参数,但是他们并不是实际硬盘的物理参数,只是为了计算方便而出的一个概念,1023之前的柱面号都一一物理对应,而1023以后的所有柱面号都记录成1023磁头最大数可以设置为255,而扇区数一般是每磁道63个,硬盘控制器会把由柱面、磁头、扇区等参数确定的地址转换为LBA数。这里我们再此明确两个概念:

 物理扇区号:
一般我们称CHS模式下的扇区号为物理扇区号,扇区编号开始位置是1

 逻辑扇区号:
LBA下的编号,扇区编号是从0开始。

CHS模式转换到逻辑扇区号LBA

计算公式
LBA(逻辑扇区号)=磁头数 × 每磁道扇区数 × 当前所在柱面号 + 每磁道扇区数 × 当前所在磁头号 + 当前所在扇区号 – 1

例如:CHS=0/0/1,则根据公式LBA=255 × 63 × 0 + 63 × 0 + 1 – 1= 0

也就是说物理0柱面0磁头1扇区,是逻辑0扇区。
 

硬盘分区

我们知道,一般使用硬盘,我们首先会对硬盘进行分区,然后对分区使用某个文件系统格式(NTFS、FAT、ext2/ext3)进行分区格式化,然后才能正常使用。那么分区是怎么回事呢?我们常见的windows中说到的c、d、e盘是怎么划分出来的呢?其实,在装windows系统过程中,一般我们只需要填写每个分区的大小,看不出来分区过程的实际工作情况,我们可以从linux系统分区过程反而能反应底层实际分区情况。

柱面是分区的最小单位,即分区是以某个某个柱面号开始到某个柱面号结束的。

 

如图,柱面1~200我们可以分为一个区,柱面201~500再划分为一个区,501~1000再划分为一个区,以此类推。大家可以看到,柱面0没有在任何分区里面,为何?这里说说,前面说到硬盘从外圈(柱面0)到内圈扇区是依次编号,看似各个扇区没有什么区别,但是这里硬盘的柱面0的第一个扇区(逻辑扇区0,CHS表示应该是0/0/1)却是最重要的,因为硬盘的第一个扇区记录了整个硬盘的重要信息,第一个扇区(512个字节)主要记录了两部分:

①    MBR(Master Boot Record):主引导程序就放在这里,主引导程序是引导操作系统的一个程序,但是这部分只占446字节。

②    DPT(Disk Partition table):硬盘分区表也在这里,分区表就是用来记录硬盘的分区情况的,例如c盘是1~200柱面,d盘是201~500柱面,分区表总共只占64字节,可以看出,分区其实很简单,就是在这个表里面修改一下记录就重新分区了,但是由于只有64字节,而一条记录就要占用16字节,这个分区表最多只能记录4个分区信息,为了继续分出更多分区来,引入了扩展分区的概念,也就是说,在这4个分区中,可以使用其中一条记录来记录扩展分区的信息,然后在扩展分区中再继续划分逻辑分区,而逻辑分区的分区记录则记录在扩展分区的第一个扇区中,如此则可以像链表一样划分出很多分区来。但是请注意,一个分区表中可以有1~4条主分区,但是最多只能有1个扩展分区。

举例,主分区可以是P1:1~200,扩展分区P2: 2~1400,扩展分区开始的第一个扇区可以用来记录扩展分区中划分出来的逻辑分区。

 

分区表链

       分区表之间是如何关联的,详细讲一下,分区表是一个单向链表,第一个分区表,也就是位于硬盘第一个扇区中的DPT,可以有一项记录扩展分区的起始位置柱面,类似于指针的概念,指向扩展分区(图3),根据这项记录我们可以找到扩展分区的某柱面0磁头1扇区(CHS),而这个扇区中又存放了第二个分区表,第二个分区表第一项记录一般表述了当前所在的逻辑分区的起始/终止柱面,第二项记录表述了下一个逻辑分区所在的0磁头1扇区(CHS),第三、第四项记录不存任何信息(图4)。

  请看下图,主引导记录/分区表所在的是硬盘第一个分区,基本分区1、基本分2、基本分区3都是主分区、扩展分区内有2个逻辑分区,每个逻辑分区的第一个扇区都是分区表,至于引导扇区(DBR),在系统启动一节中会提及。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值