为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

硬盘的寻址模式

2012-03-22 18页 doc 960KB 25阅读

用户头像

is_723759

暂无简介

举报
硬盘的寻址模式1 硬盘寻址与容量解决    对于大部分拥有硬盘的用户来说,特别对于那些正在准备升级到大硬盘但是却不打算升级系统的其它部分的用户,它们首先考虑的是自己的系统是否支持这么大容量的硬盘。这个问题同硬盘结构、BIOS和操作系统息息相关--归根到底这些问题的出现是由于当时的人们由于条件所限制而缺乏长远考虑的结果。在当时这样的设计根本没有问题,但是随着技术的进一步发展这些问题就曝露了出来,而且影响颇广。 好在这些问题都已经被通过不同的方式解决了。本章节将会同大家一起来谈谈容量限制的问题。下面的容量限制分别采用两种方式表示,前面的一种...
硬盘的寻址模式
1 硬盘寻址与容量解决    对于大部分拥有硬盘的用户来说,特别对于那些正在准备升级到大硬盘但是却不打算升级系统的其它部分的用户,它们首先考虑的是自己的系统是否支持这么大容量的硬盘。这个问题同硬盘结构、BIOS和操作系统息息相关--归根到底这些问题的出现是由于当时的人们由于条件所限制而缺乏长远考虑的结果。在当时这样的根本没有问题,但是随着技术的进一步发展这些问题就曝露了出来,而且影响颇广。 好在这些问题都已经被通过不同的方式解决了。本章节将会同大家一起来谈谈容量限制的问题。下面的容量限制分别采用两种方式表示,前面的一种采用的是1GB=1000MB和1MB=1000KB的换算,而后面的容量采用的是1GB=1024MB和1MB=1024KB的换算。 528MB/504MB容量限制 这并不是历史上第一个硬盘 HYPERLINK "http://www.raid-recovery.org/Article/glossary/disk/200602/124.html" 容量限制问题,但是它是第一个引起人们广泛关注的容量限制问题。这之前硬盘的容量限制问题也一再的出现过,但是因为PC用户非常的少,所以很多人并不知道这些问题,这里我们做一个简短的回顾: · 10.4 MB容量限制:这个问题出现在最早的IBM PC/XT上,这种设备使用了一种专门设计的硬盘,它有312个柱面(cylinders)、4个磁头和17个扇区,这样算来它的最大容量只能为10MB,这种容量限制来自于硬盘。 · 16MB FAT12容量限制:第一种用于硬盘的FAT是12bit的,它最多能容纳4086个大小为4096字节的簇,因此总容量为16,736,256字节,也就是大约16MB。 · 32MB DOS 3容量限制: 为了解决16 MB容量限制,DOS 3.x开始支持FAT16文件系统,不过由于这种文件系统只能允许16384个容量为=2048字节的簇,所以它就造成了32MB的容量限制问题,不过由于多分区的概念的引入,硬盘的容量并没有因此受到太大的限制,只是每个分区的容量不能超过32MB。 · 128MB DOS 4容量限制:DOS 4.x开始支持65526个容量为2048字节的簇,所以其容量上限提升到了128MB 可以看到上面的这些容量限制的问题大都是由于MS-DOS系统所引起的,这之后的DOS 5允许每个簇的最大容量为8192字节,因此最大分区容量限制为512 MB,不过这个容量限制并没有引起人们的广泛关注,因为在这之前由于BIOS和IDE规范所引起的504MB容量限制首先曝露了出来(大约是1994年左右)。如下表所示: 用于柱面的Bit 用于磁头的Bit 用于扇区的Bit 用于定义整个结构的Bit IDE/ATA 16 4 8 28 BIOS Int 13h 10 8 6 24 最小定义 10 4 6 20 可以看到IDE/ATA标准和Int 13h组织的标准非常的不一致,因此当分别符合这两个标准的设备配合使用的时候,只能遵循其中的最小规范。下面我们把bit所代表的容量换算了出来: Standard 最大柱面数 最大磁头数 最大扇区数 最大容量 IDE/ATA 65,536 16 256 128 GB BIOS Int 13h 1,024 256 63 7.88 GB 最小定义 1,024 16 63 504 MB 对于上面的数字是这样算出来的:1024x16x63x512/1024x1024=504MB,如果不除以1024x1024而是除以1000000的话得到的数字是528MB--按照不同的换算方法,得到的容量不同但是其实指的是一个意思。 2.11/1.97GB容量限制 前面的504MB容量障碍的成因之一是BIOS无法支持超过1024柱面,不过现在的BIOS系统都能支持超过1024柱面。不过当时的部分BIOS系统虽然却只能支持不超过4095个柱面,这是因为它采用了12bit来表示柱面,这样所支持的最大容量就是4096 x 16 x 63 x 512字节了,也就是1.97GB。这个问题是在1996年左右浮现出来的,可以通过软件的方法来解决。 2.11/2GB容量限制 这个容量限制注意的人们会更多一些,它也是由于文件系统的定义造成的分区容量限制,同BIOS没有什么关系。从DOS 6和Windows 3.x以后开始支持FAT16文件系统,如果在这些系统使用容量超过2GB的硬盘必须对于硬盘进行分区,而且每个分区的容量不会超过2GB。 FAT16最大只能支持65536个32KB容量的簇,那么也就意味着每个分区不能超过2GB的容量。估计现在没有用户还会遇到这个问题了,因为只有DOS、Window 3.x和Windows 95第一版会有这个问题,升级到更高版本的支持FAT32或者NTFS文件系统的操作系统(Windows 95 OEM SR2、Windows 98、Windows ME、Windows 2000和Windows XP都支持FAT32,其中后两者都支持NTFS文件系统)就没有这个问题了。 3.26/3.04GB容量限制 这种容量限制的影响范围也非常的小,只是在一些特殊的机型中才出现过,它的出现是由于BIOS无法正确的识别超过6322桌面而造成的--如果用户试图设置高于6322的柱面,系统将会挂起。这个容量限制是这样计算的:6322柱面 x 16头 x 63 扇区 x 512 字节=3GB Phoenix BIOS容量限制 这是一个比较特别的容量限制,而且范围也非常的小,只是Phoenix BIOS 4.03和4.04这两个版本上出现的问题。它其实只是BIOS设计的一个对于硬盘 HYPERLINK "http://www.raid-recovery.org/Article/glossary/disk/200602/124.html" 容量计算错误的bug,基于这两个版本BIOS推出主板的主板厂商有的矫正的这个问题,有的则没有,因此也不是一个绝对的情况,不过这里还是告诉大家,万一有用户遇到一些不能解释的问题,或许这是一个启发。 这个问题比较怪异,如果用户把IDE设备的磁头数目设置为16,而扇区设置为63,那么柱面设置为6349一下不会有任何问题,也就是说硬盘 HYPERLINK "http://www.raid-recovery.org/Article/glossary/disk/200602/124.html" 容量不能超过3.05 GB;如果把柱面数目设置为6350-8322之间,程序将会死锁;如果柱面设置为8323-14671之间,那么系统可以正常的工作,但是硬盘的容量无法正常的显示。不过以后版本的BIOS都修正了这个问题。 4.22/3.94GB容量障碍 在解决了504MB容量限制之后,业界对于通过BIOS结构转换(geometry translation)来解决这个问题驾轻就熟。这种方法主要是把硬盘的柱面数除以转换系数来把IDE/ATA的柱面数限制在BIOS能转换的范围之内(也就是1024之内),当然为了保证正确识别硬盘 HYPERLINK "http://www.raid-recovery.org/Article/glossary/disk/200602/124.html" 容量在IDE/ATA磁头数目乘以同一个系数(因为BIOS支持的磁头数是256),从而实现对于超过BIOS Int13h规范的硬盘的正确支持。不过这样依然会存在一个3.94GB的容量限制。 下面的表格所表示的是如何让一个符合BIOS int13h规范的BIOS正确的支持容量为6.4GB的硬盘:   柱面数目 磁头数目 扇区 容量 IDE/ATA 限制 65,536 16 256 137 GB 硬盘逻辑结构 12,496 16 63 6.45 GB BIOS转换系数 除以16 乘以16 -- -- BIOS转换后的结构 781 256 63 6..45 GB BIOS Int 13h 限制 1,024 256 63 7.88 GB 这款6.4GB的硬盘的逻辑结构为12496柱面、16磁头和63扇区,但是BIOS int13h规范最大只能支持1024个柱面,因此通过除以16使得柱面数目低于1024,而磁头数目乘以16这样的方式,既不会影响硬盘的总容量却巧妙的解决了IDE/ATA和int 13h之间不统一的问题。不过,部分BIOS无法正常的支持256逻辑磁头的转换,所以人们变通了一下,把转换系数改为了15:   柱面数目 磁头数目 扇区 容量 IDE/ATA 限制 65,536 16 256 137 GB 硬盘逻辑结构 12,496 16 63 6.45 GB BIOS转换系数 除以15 乘以15 -- -- BIOS转换后的结构 833 240 63 6..45 GB BIOS Int 13h 限制 1,024 256 63 7.88 GB 可以看到当转换系数改为15之后,依然可以满足BIOS柱面要求,而磁头数目只有240。 7.93/7.38GB容量限制 这个容量限制主要是由于接口的限制所形成的,因为这个。不过,在部分系统上由于Int13h接口的限制它的最大容量只有7.38 GB。 其实这个容量限制的成因前面已经提到了,虽然Int13h接口规范支持1024柱面、256磁头和63个512字节的柱面,不过DOS和部分版本的Windows无法转换256逻辑磁头,因此只有使用15做为转换系数,这样最大的磁头数目只能是240,因此这个容量限制为: 1024 x 240 x 63 x 512= 7,927,234,560字节 解决这个问题只有通过Int13h扩展。 8.46/7.88GB容量限制 这个容量限制更加通俗的称为8GB容量限制,估计很多看到这篇文章的朋友都经历过这次容量限制。起因还是因为Int 13h规范,它仅仅使用10bit来定义柱面数(最大1024),使用8bit定义磁头数目(最大256),使用6bit定义扇区数目(最大64,但是因为不使用0,所以最大是63),每个扇区的容量是512字节,那么最大的容量为8,455,716,864,这个容量限制是无法通过逻辑结构转换来避免的。 这个时候显然必须要对于Int13接口规范进行修改了,Int 13扩展规范则解决了这个问题。因为操作系统也是通过Int 13h来访问硬盘的,所以实现对于Int13扩展接口规范的支持也需要操作系统的支持,DOS 6.22及其以前的版本、Windows NT 3.5都不支持Int13h扩展,因此使用这些系统无法支持8.4GB以上的硬盘。 32/29.8GB容量限制 微软在1999年宣布Windows 95将不支持容量超过32GB的硬盘,不过Windows 98以及Windows Me都对于32GB以上的硬盘提供了很好的支持,其主要的原因是Windows 95中的Scandisk在保护模式下对于容量超过32GB的硬盘进行磁盘扫描的时候,对于967363以后的柱面全部柱面都报错,显然这仅仅是一个软件错误,但是微软宣布Windows 95不支持超过32GB容量的硬盘,显然是不希望用户再使用这个“古老”的系统了。 33.8GB/32GB容量限制 其实这个容量显示是我们通常所说的32GB容量限制,它的起因还是BIOS。部分版本的Award BIOS无法识别超过65535个柱面,最大只能支持16个逻辑磁头和63个扇区,这样最大支持支持32GB左右的容量。这个问题出现在1999年左右,这之后的产品已经很好的解决了这个问题。 其实为了解决8GB容量限制的问题,人们做了比较长远的打算,开始使用LBA来代替原来的使用柱面、磁头、扇区定位的方式,因此对于出现这个32GB容量限制的问题非常的令人费解。 137/128GB容量限制 这个容量限制是由LBA形成的,LBA通过一个28bit的地址定义了268435456个扇区,每个扇区的容量为512字节,这样LBA最大可以支持137438953472字节的容量,以1000字节=1GB来换算的话,就是大约137GB容量。在BIOS中引入LBA模式时可以计算到这个容量限制为137GB,不过那个时候的硬盘 HYPERLINK "http://www.raid-recovery.org/Article/glossary/disk/200602/124.html" 容量只有几个GB,137GB只是一个笑话而已,然后硬盘 HYPERLINK "http://www.raid-recovery.org/Article/glossary/disk/200602/124.html" 容量的发展速度的确超乎了人们了想像,目前200GB的容量的硬盘已经在市场上销售了。 那么这些大容量 HYPERLINK "http://www.raid-recovery.org/Article/glossary/disk/Index.htm" 硬盘是如何得到正确的支持的呢?Technical Committee T13组织通过一个48bit的地址来定义了更多的扇区,不出意外的相当长的时间里这个解决方案都不会遇到容量障碍的问题(144155188 GB)。不过由于,现在的用于PC的Windows操作系统都是32bit的,这样就带来了一个2200 GB的容量限制,如果最近几年我们使用的操作系统不能过渡到64bit的话,我们很快就会遇到这个容量限制的。 硬盘结构 硬盘有很多盘片组成,每个盘片的每个面都有一个读写磁头。如果有N个盘片。就有2N个面,对应2N个磁头(Heads),从0、1、2开始编号。每个盘片 的半径均为固定值R的同心圆再逻辑上形成了一个以电机主轴为轴的柱面(Cylinders),从外至里编号为0、1、2……。每个盘片上的每个磁道又被划 分为几十个扇区(Sector),通常的容量是512byte,并按照一定规则编号为1、2、3……形成Cylinders×Heads×Sector个 扇区。 主引导扇区 主引导扇区位于整个硬盘的0柱面0磁头1扇区{(柱面,磁头,扇区)|(0,0,1)},bios在执行自己固有的程序以后就会jump到MBR中的第一 条指令。将系统的控制权交由mbr来执行。主引导扇区主要由三部分组成:主引导记录 MBR(Master Boot Record或者Main Boot Record)、硬盘分区表 DPT(Disk Partition Table)和结束标志字三大部分组成。 INCLUDEPICTURE "http://hiphotos.baidu.com/gilbertjuly/pic/item/41b86312270c843a58af534d.jpg" \* MERGEFORMATINET 对于硬盘而言,一个扇区可能的字节数为128×2n (n=0,1,2,3)。大多情况下,取n=2,即一个扇区(sector)的大小为512字节。在总共512byte的主引导记录中,MBR的引导程序 占了其中的前446个字节(偏移0H~偏移1BDH),随后的64个字节(偏移1BEH~偏移1FDH)为DPT(Disk PartitionTable,硬盘分区表),最后的两个字节“55 AA”(偏移1FEH~偏移1FFH)是分区有效结束标志。 主引导记录MBR(master boot record) 主引导记录中包含了硬盘的一系列参数和一段引导程序。其中的硬盘引导程序的主要作用是检查分区表是否正确并且在系统硬件完成自检以后引导具有激活标志的分 区上的操作系统,并将控制权交给启动程序。MBR是由分区程序(如Fdisk)所产生的,它不依赖任何操作系统,而且硬盘引导程序也是可以改变的,从而能 够实现多系统引导。 硬盘分区表DPT(Disk Partition Table) 硬盘分区表占据MBR扇区的64个字节(偏移01BEH--偏移01FDH),可以对四个分区的信息进行描述,其中每个分区的信息占据16个字节。具体每个字节的定义可以参见硬盘分区结构信息。 分区文件系统标志: 分区未用: 0x00H. 扩展分区: 0x05H, 0x0FH. FAT16分区: 0x06H. FAT32分区: 0x0BH, 0x1BH, 0x0CH, 0x1CH. NTFS分区: 0x07H. 分区表项有几个字节比较重要,下面分别阐述之: 1、(1,2,3)字节 磁头号由(1)字节8位表示,其范围为(0 -- 28 - 1),也即(0 磁头-- 254磁头)。 扇区号由(2)字节低6位表示,其范围为(0 -- 26 - 1),由于扇区号从1开始,所以其范围是(1扇区-- 63扇区)。 柱面号由(2)字节高2位 + (3)字节,共10位表示,其范围为(0 --2 10 - 1),也即(0 柱面-- 1023柱面)。 当柱面号超过1023时,这10位依然表示成1023,需要注意。 (5,6,7)字节含义同上。 2、(8, 9, 10, 11)字节 如果是主分区表,则这4 个字节表示该分区起始逻辑扇区号与逻辑0扇区(0柱面,0磁头,1扇区)之差。如果非主分区表, 则这4 个字节要么表示该分区起始逻辑扇区号与扩展分区起始逻辑扇区号之差,要么为63。详细情况在后面有所阐述。 注意: 1、扇区上的字节是按左边低位,右边高位的顺序排列的。所以在取值时,需要把字节再反一下,让高位字节在左边,低位字节在右边, 这一点在读取逻辑起始扇区号和分区大小时需要注意。举个例子:第一项的逻辑起始扇区为(3F 00 00 00),转换为十进制前要先反一下字 节顺序,为(00 00 00 3F)然后在转换为十进制,即63 .同理分区大小为(3F 04 7D 00),先反为(00 7D 04 3F)再转换为十进制, 即8193087。 2、逻辑扇区号与(柱面,磁头,扇区)的相互转换: 令L = 逻辑扇区号,C = 柱面号,H = 磁头号,S = 扇区号。 每道扇区数 = 63 每柱面磁头数 = 255 每柱面扇区数 = 每道扇区数* 每柱面磁头数 = 63 × 255 = 16065 柱面号下标从0开始。磁头号[0 -- 254],扇区号[1 -- 63]。 逻辑扇区号下标也从0开始。 (柱面,磁头,扇区)转换成逻辑扇区号的公式为: L = C×16065 + H ×63 + S - 1 ; 比如(1柱面,1磁头,1扇区),其逻辑扇区号为: L = 1×16065 + 1×63 + 1 - 1 = 16128 逻辑扇区号转换成(柱面,磁头,扇区) 公式为: C = L / 16065 H = (L % 16065) / 63 S = (L % 16065) % 63 + 1 比如逻辑扇区号 16127: C = 16127 / 16065 = 1 H = (16127 % 16065) / 63 = 0 S = (16127 % 16065) % 63 + 1 = 63 即(1柱面,0磁头,63扇区) 3、分区表上有四项,每一项表示一个分区,所以一个分区表最多只能表示4个分区。主分 区表上的4项用来表示主分区和扩展分区的信息。因为扩展分区最多只能有一个,所以硬盘 最多可以有四个主分区或者三个主分区,一个扩展分区。余下的分区表是表示逻辑分区的。 这里有必要阐述一点:逻辑区都是位于扩展分区里面的,并且逻辑分区的个数没有限制。 4、分区表所在扇区通常在(0磁头,1扇区),而该分区的开始扇区通常位于(1磁头,1扇区),中间隔了63 个隐藏扇区。 三.分区表链的查找   分区表链实际上相当于一个单向链表结构。第一个分区表,也即主分区表,可以有一项 描述扩展分区。而这一项就相当于指针,指向扩展分区。然后我们根据该指针来到扩展分 区起始柱面的0头1扇区,找到第二个分区表。对于该分区表,通常情况下:第一项描述了 扩展分区中第一个分区的信息,第二项描述下一个分区,而这第二项就相当于指向第二个分 区的指针,第三项,第四项一般均为0。我们可以根据该指针来到扩展分区中第二个分区起 始柱面的0头1扇区,找到第三个分区表。以此类推,只到最后一个分区表。而最后一个分 区表只有第一项有信息,余下三项均为0.相当于其指针为空.所以只要找到了一个分区表就可 以推导找出其后面所有分区表。不过该分区表前面的分区表就不好推导出来了。但令人高兴 的是这个链表的头节点,也即主分区表的位置是固定的位于(0柱面, 0磁头, 1扇区)处, 我们可以很轻易的找到它,然后把剩下的所有分区表一一找到。 以笔者的硬盘为例:一个主分区(C盘), 一个扩展分区.扩展分区中有两个逻辑分区(D盘,E盘)其分区表链示意图如下: 图一 分区表链示意图 (一).读取(0柱面,0磁头,1扇区)处C盘的主分区表: [80 01 01 00 0B FE 7F FD 3F 00 00 00 3F 04 7D 00 ] [00 00 41 FE 0F FE FF FF 7E 04 7D 00 1F 2C B4 00 ] [00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ] [00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ] 第一项: (80)(01 01 00)(0B)(FE 7F FD )(3F 00 00 00 )(3F 04 7D 00) 描述的是C盘的情况。 1.(80):表示C盘为活动分区。即系统会从C盘启动。 2.(01 01 00):表示C盘的起始扇区为(0柱面,0磁头,1扇区)。 3.(0B):表示C盘的文件系统为FAT32。 4.(FE 7F FD): (FE) 16 = (254) 10 (7F) 16 = (0111 1111) 2 (FD) 16 = (1111 1101) 2 磁头号:(254) 10; 扇区号:(11 1111) 2 = (63) 10. 柱面号:(01 1111 1101) 2 = (509) 10 故C盘结束扇区为(509柱面,254磁头,63扇区)。 5.(3F 00 00 00): 反向,(00 00 00 3F) 16 = (63) 10,为C盘起始逻辑扇区号与逻辑0扇区号之差。表示C盘前面已有63个扇区,这63个扇区为系统隐藏扇区。 6. (3F 04 7D 00): 反向,(00 7D 04 3F) 16 = (8193087) 10。表明C盘有8193087个扇区。即(0柱面,1磁头,1扇区)至(509柱面,254磁头,63扇区) 共有8193087个扇区。 第二项: (00)(00 41 FE)(0F)(FE FF FF)(7E 04 7D 00)(1F 2C B4 00) 描述的是扩展分区的情况。 1. (00): 表示该分区不是活动分区。 2. (00 41 FE): (00) 16 = (0) 10  (41) 16 = (0100 0001) 2 (FE) 16 = (1111 1110) 2 磁头号:(0) 10; 扇区号:(00 0001) 2 = (1) 10. 柱面号:(01 1111 1110) 2 = (510) 10 所以扩展分区的起始扇区为(510柱面,0磁头,1扇区)。 3. (0F): 表示该分区为扩展分区。 4. (FE FF FF): (FE) 16 = (254) 10 (FF) 16 = (1111 1111) 2 (FF) 16 = (1111 1111) 2; 磁头号:(254) 10; 扇区号:(11 1111) 2 = (63) 10. 柱面号:(11 1111 1111) 2 = (1023) 10 但这是不准确的,因为当柱面号的真实值超过1023时,表示柱面号的10位也依然是1023。 5. (7E 04 7D 00): 反向,(00 7D 04 7E) 16 = (8193150) 10. 表示扩展分区的起始扇区号为8193150,即(510 柱面,0磁头,1扇区)。这是真实准确的, 我一般都用这一项来定位分区起点。 6. (1F 2C B4 00): 反向, (00 B4 2C 1F) 16 = (11807775) 10. 表示扩展分区共有11807775个扇区。通过上面得到的起点和分区的大小, 可以推导出扩展分区的结束位置:8193150 + 11807775 = 20000925号扇区,即(1244 柱面,254磁头,63扇区)。 二.查找D盘分区表  根据上面的信息,第二个分区表,也即D盘分区表在(510柱面,0磁头,1扇区)处。读取该扇区,得到分区表如下: [00 01 41 FE 0B FE FF 7B 3F 00 00 00 BF A3 5D 00 ] [00 00 C1 7C 05 FE FF FF FE A3 5D 00 21 88 56 00 ] [00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ] [00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ] 第一项: (00)(01 41 FE)(0B)(FE FF 7B)(3F 00 00 00 )(BF A3 5D 00) 描述的是D盘的情况。 1.(00):表示D盘不是活动分区。 2.(01 41 FE): (01) 16 = (1) 10 (41) 16 = (0100 0001) 2 (FE) 16 = (1111 1110) 2. 磁头号:(1) 10; 扇区号:(00 0001) 2 = (1) 10. 柱面号:(01 1111 1110) 2 = (510) 10; 故D盘开始扇区为(510柱面,1磁头,1扇区)。 3.(0B):表示D盘的文件系统为FAT32。 4.(FE FF 7B): (FE) 16 = (254) 10 。 (FF) 16 = (1111 1111) 2 (7B) 16 = (0111 1011) 2. 磁头号:(254) 10; 扇区号:(11 1111) 2 = (63) 10. 柱面号:(11 0111 1011) 2 = (891) 10 故D盘结束扇区为(891柱面,254磁头,63扇区)。 5.(3F 00 00 00): 反向,(00 00 00 3F)16 = (63)10,为D盘起始逻辑扇区号(510柱面,1磁头,1扇区)与扩展分区起始逻辑扇区号 (510柱面,0磁头,1扇区)之差。表示D盘前面已有63个扇区,这63个扇区为系统隐藏扇区。 6. (BF A3 5D 00): 反向,(00 5D A3 BF) 16 = (6136767) 10。表明D盘有6136767个扇区。 通过上面得到的起点和分区的大小,可以推导出D盘的结束位置:8193150 + 63 + 6136767 = 14329980号扇区。 即(891柱面,254磁头,63扇区)。与上面的正好吻合。 第二项: (00)(00 C1 7C)(05)(FE FF FF)(FE A3 5D 00)(21 88 56 00) 描述的是E盘的情况。 1. (00): 表示E盘不是活动分区。 2. (00 C1 7C): (00) 16 = (0) 10 (C1) 16 = (1100 0001) 2 (7C) 16 = (0111 1100) 2 磁头号:(0) 10 扇区号:(00 0001) 2 = (1) 10 柱面号:(11 0111 1100) 2 = (892) 10 所以E盘的起始扇区为(892柱面,0磁头,1扇区)。 3. (05): 表示E盘的在扩展分区里面。 4.(FE FF FF): (FE) 16 = (254) 10 (FF) 16 = (1111 1111) 2 (FF) 16 = (1111 1111) 2 磁头号:(254) 10 扇区号:(11 1111) 2 = (63) 10 柱面号:(11 1111 1111) 2 = (1023) 10 但这是不准确的,原因同上。 5.(FE A3 5D 00): 反向,(00 5D A3 FE) 16 = (6136830) 10. 这一项非常重要,它定位了E盘分区表所在扇区。其值为E盘分区表所在扇区号 与扩展分区起始扇区号之差。所以,E盘分区表所在扇区号为: 8193150 + 6136830 = 14329980。即(892柱面,0磁头,1扇区)。 6.(21 88 56 00): 反向,(00 56 88 21) 16 = (5670945) 10.表示E盘共有11807775个扇区。通过上面得到的起点和分区的大小,可以推导出E 盘的结束位置:14329980 + 5670945 = 20000925号扇区,即(1244 柱面,254磁头,63扇区)。 三.查找E盘分区表 根据上面的信息,第三个分区表,也即E盘分区表在(892柱面,0磁头,1扇区)处。读取该扇区,得到分区表如下: [00 01 C1 7C 0B FE FF FF 3F 00 00 00 E2 87 56 00] [ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ] [00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ] [00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ] 该分区表第二项全为0,说明没有下一个分区表了。该分区表就是分区表链的最后一个节点。 第一项: (00)(01 C1 7C)(0B)(FE FF FF)(3F 00 00 00 )(E2 87 56 00) 该项与D盘分区表的第二项描述的都是E盘的情况,但它们在某些细节上又有所区别。 1.(00):表示E盘不是活动分区。 2.(01 C1 7C): (01) 16 = (1) 10 (C1) 16 = (1100 0001) 2 (7C) 16 = (0111 1100) 2. 磁头号:(1) 10 扇区号:(00 0001) 2 = (1) 10 柱面号:(11 0111 1100) 2 = (892) 10 故E盘起始扇区为(892柱面,1磁头,1扇区)。 3.(0B):表示E盘的文件系统为FAT32。 4.(FE FF FF): (FE) 16 = (254) 10 。 (FF) 16 = (1111 1111) 2 (FF) 16 = (1111 1111) 2. 磁头号:(254) 10; 扇区号:(11 1111) 2 = (63) 10. 柱面号:(11 1111 1111) 2 = (1023) 10 但这是不准确的,原因同上。 5.(3F 00 00 00): 反向,(00 00 00 3F) 16 = (63) 10.这一项与D盘分区表相应项有所不同.为E盘起始逻辑 扇区号(892柱面,1磁头,1扇区)与(892柱面,0磁头,1扇区)之差。表示E盘前面已有63个扇区, 这63个扇区为系统隐藏扇区。 操作系统无法对这些扇区进行读写,所以可以把自己的秘密信息写在这里. 6. (E2 87 56 00): 反向,(00 56 87 E2) 16 = (5670882) 10。表明E盘有5670882个扇区。而D盘分区表相应项为5670945. 5670945 - 5670882 = 63. 正好等于63个隐藏扇区.这是因为D盘分区表描述的是(892柱面,0磁头,1扇区) 到 (1244 柱面,254磁头,63扇区) 之间的扇区数。 而E盘分区表描述的是(892柱面, 1磁头,1扇区) 到 (1244 柱面,254磁头,63扇区) 之间的扇区数。 BI电脑启动过程 · 系统开机或者重启。 · BIOS 加电自检 ( Power On Self Test -- POST )。BIOS执行内存地址为 FFFF:0000H 处的跳转指令,跳转到固化在ROM中的自检程序处,对系统硬件(包括内存)进行检查。 · 读取主引导记录(MBR)扇区。当BIOS检查到硬件正常并与 CMOS 中的设置相符后,按照 CMOS 中对启动设备的设置顺序可用的启动设备。BIOS将相应启动设备的第一个扇区(也就是MBR扇区)读入内存地址为0000:7C00H 处。 · 检查0000:7DFEH-0000:7DFFH(MBR的结束标志位)是否等于 AA55H,若不等于则转去尝试其他启动设备,如果没有启动设备满足要求则显示"NO ROM BASIC"然后死机。 · 当检测到有启动设备满足要求后,BIOS将控制权交给相应启动设备。启动设备的MBR将自己复制到0000:0600H处, 然后继续执行。 · 在主分区表中搜索标志为活动的分区,也就是检验磁盘分区表DPT的首字节是不是80H。如果检测到80H,则表示该分区为活动分区,将该活动分区的第一个扇区(操作系统引导记录区,Dos Boot Recorder,DBR)读入内存地址 0000:7C00H 处。 · 检查0000:7DFEH-0000:7DFFH(DBR的结束标志位)是否等于 AA55H, 若不等于则显示 : "Missing Operating System" 然后停止。 · 当检测到有分区满足要求后,MBR将控制权交给相应的活动分区。 OS -> 硬盘MBR -> 活动分区DBR -> 操作系统 主引导扇区与硬盘分区 从主引导扇区的结构可以知道,它仅仅包含一个64个字节的硬盘分区表。由于每个分区信息需要16个字节,所以对于采用MBR型分区结构的硬盘(其磁盘卷标 类型为MS-DOS),最多只能识别4个主要分区。所以对于一个采用此种分区结构的硬盘来说,想要得到4个以上的主要分区是不可能的。这里就需要引出扩展 分区了。扩展分区也是Primary partition的一种,但它与主分区的不同在于可以划分为无数个逻辑分区。 扩展分区中逻辑驱动器的引导记录是链式的。每一个逻辑分区都有一个和MBR的分区表结构类似的扩展引导记录(EBR),其分区表的第一项指向该逻辑分区本 身的引导扇区,第二项指向下一个逻辑驱动器的EBR。对于Windows系统而言,一般都是只划分一个主分区给系统,剩余的部分全部划为扩展分区。 蓝色是主分区;绿、红、紫是逻辑分区;灰色包含着逻辑分区是扩展分区; 实例分析: winhex左下角的扇区数:斜线左边是扇区编号,从0开始(这个是当前扇区的LBA线性绝对地址?);右边是磁盘总扇区数,数值为最后一个扇区编号+1。 图中下部浅蓝色标注部分为第二分区的信息,共16个字节 00 00 C1 FF 07 FE FF FF 28 58 7D 02 D8 A8 71 0D 其中的08h~0bh :28 58 7D 02,为在线性寻址方式下的该分区的首扇区地址(或该分区起点之前已用了的扇区数), 16进制数据为:027D5828,换算为10进制为(可以用windows的计算器试试!winhex数据解释器也有显示!):41769000,如下图 第二分区的信息,共16个字节:00 00 C1 FF 07 FE FF FF 28 58 7D 02 D8 A8 71 0D 02h~03h 数值:C1 FF,二进制为:11000001  11111111 02h 低6位为分区起始扇区号,起始扇区为1扇区, 02h 其高2位为分区起始柱面号的高位,03h 分区起始柱面号的低8位 二进制数值为:1111111111,十进制为1023,起始柱面号为1023(柱面号超过1023的,此位置均显示为1023?)。 05h~07h 数值:FE FF FF,06h~07h 数值:FF FF,二进制为:11111111  11111111 05h 分区结束磁头号FE,即磁头号为254, 06h 低6位为分区结束扇区号,即扇区号为63 06h 其高2位为分区结束柱面号的高位,07h 分区结束柱面号的低位,结束柱面号为1023(柱面号超过1023的,此位置均显示为1023?)。 0ch~0fh 数值:D8 A8 71 0D 此4个字节为以扇区为单位的该分区大小(总扇区数),16进制数据为:0D71A8D8,算为10进制为:225552600。 如上述,第二分区起点之前已用了的扇区数为:41769000,加上第二分区大小(总扇区数)225552600,则第三分区起点之前已用了的扇区数(或在线性寻址方式下的第三分区的首扇区地址)为:267321600,大家可以核对一下上面截图的数值。
/
本文档为【硬盘的寻址模式】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索