十、硬盘驱动程序

来源:互联网 发布:python np.max 编辑:程序博客网 时间:2024/05/16 17:31

硬盘分区表

磁盘简介

文件系统是运行在操作系统中的软件模块,是操作系统中提供的一套管理磁盘文件读写方法和数据组织、储存形式。因此文件系统是程序。它的管理对象是文件,管辖范围是分区,因此文件系统是建立在分区的基础上,每个分区都可以有不同的文件系统。
扇区:是硬盘读写的基本单位,扇区从1开始编号,大小字节数=256*N,N一般为2,因此扇区大小为512字节。
磁道:是扇区的载体,从0开始,是盘片上的一个一个的同心圆。
磁头:一个盘片有两个磁头,由0开始
柱面:不同盘面编号相同的磁道组成的柱面,从0开始。是为了实现并行写入,即多磁头写入而设计的。当读写一个文件时,由多个磁头同时写入到不同的盘面中编号位置相同的磁道上。
分区:由多个编号连续的柱面组成的,因此分区在物理上的表现是由某段范围内的所有柱面组成的通信环。分区不能跨柱面,也就是同一个柱面不能包含两个分区,一个柱面只属于一个分区,分区的起始和终止都落在完整的柱面上。
一般情况下,每磁道扇区数都是63,扇区大小都是512字节。所以硬盘容量=每磁道扇区数*柱面数*512字节*磁头数。所以在分区时候,我们只要设置合理的柱面数和磁头数。
分区是逻辑上划分磁盘空间的方式,归根结底是人为地将硬盘上的柱面扇区划分为不同的分组,每个分组都是单独的分区。各分区都有描述符来描述分区本身,比如起止界限等。
在MBR的512字节中,前446字节是硬盘的参数和引导,然后是64字节的分区表,一个16字节,所以最多支持4个分区,最后是魔数 55aa。磁盘分区表简称 DPT ,是由多个分区元信息汇成的表,表中的每一个表项都对应一个分区,主要记录各分区的起始扇区地址、大小界限等。一般分区表是由分区工具创建好后,操作系统才安装在某个分区上的。
最初的磁盘分区表位于MBR引导扇区中,MBR位于CHS001或者LBA0中。
在硬盘中,最开始的扇区是MBR引导扇区,接着是空闲的多个扇区,随后是具体分区。因为分区要占用完整的柱面,柱面肯定不能跨磁道,而第0块又被MBR引导扇区占据了,因此MBR所在的磁道不能被划入分区了,故分区起始地址要偏移1个磁道大小,一个磁道63个扇区,即这个磁道的其他62个扇区不能参与分区了。

MBR、EBR、OBR

MBR的分区表64字节,一个分区表是16字节,所以最多支持4个分区表。所以有了扩展分区,扩展分区有没有都行,如果硬盘中有了扩展分区,那么其他三个分区就是主分区。扩展分区分出的子分区叫做逻辑分区。这个扩展分区为总扩展分区,将它划分成多个子扩展分区,每个子扩展分区逻辑上相当于硬盘,因此每个子扩展分区都有个“MBR”,都可以有一个分区表,分区表也只能有4个表项。
各分区表在各个子扩展分区最开始的扇区中,该扇区同 MBR 引导扇区结构相同,由于是总扩展分区划出来的,所以称它们为 EBR--扩展引导记录。(MBR与EBR所在的扇区称为引导扇区,MBR与EBR结构相同的,MBR的内容EBR中也有)。子扩展分区的结构和整个硬盘也一样,最开始是引导扇区,中间都是空闲一小部分扇区,最后的大片扇区空间作为分区,一个子扩展分区只能分出一个逻辑分区。可以理解为:总扩展分区被直接分为多个子扩展分区,子扩展分区又被拆分成 EBR 引导扇区、空闲扇区和逻辑分区。
EBR 中分区表有4个表项,第一分区表项用来描述包含的逻辑分区的元信息,第二个表项用来描述下一个子扩展分区的地址,第三第四表项未用到。注意:第一和第二个分区表项都是指向第一个分区的起始,起始地址都是个扇区地址,不过第一个分区分区表项指向的是该逻辑分区最开始的扇区,此扇区称为操作系统引导扇区,即 OBR引导扇区,第二个分区表项存的是指向下一个子扩展分区的 EBR引导扇区。注意:EBR不属于分区之内,不属于操作系统管理的范围,而 OBR引导扇区位于分区最开始的扇区,属于操作系统管理的范围。
活动分区是指引导程序所在的分区,活动分区标记是给MBR看的,它们通过此位来判断该分区的引导扇区中是否有可执行的引导程序,这个引导程序一般是内核加载器,叫做OBR--OS Boot Record。如果MBR 发现该分区表的活动分区标记为 0x80 ,就表示该分区的引导扇区中有引导程序。注意:OBR引导扇区并不是EBR或MBR引导扇区,它们虽然都包含引导程序和55aa结束,但是区别是 MBR 和 EBR 有分区表,它们所在的扇区不属于分区范围之内,由分区工具创建的,OBR 中没有分区中最开始的扇区,由操作系统的文件系统管理。因此操作系统通常往 OBR 引导扇区中添加 内核加载器,分区工具通常往 MBR 和 EBR 中添加代码。
一个分区的位置和大小可以用分区起始偏移扇区分区容量扇区数来确定。就是分区表项的第 8 字节和第 12 字节。
分区起始偏移扇区:是个相对量,它表示各分区的起始扇区地址是相对于某基准的偏移扇区数。分区的绝对扇区LBA地址=基准的绝对扇区起始LBA地址+各分区的起始偏移扇区。这个基准指定是所依赖的上层对象,或者说是创建该分区的父对象。
对于逻辑分区:基准是子扩展分区的起始扇区LBA地址
对于子扩展分区:基准是总扩展分区的起始扇区LBA地址
对于主分区或总扩展分区:基准是是0。
我一般的分区是:把整个硬盘先分成一个主分区和一个总扩展分区,这样MBR中的分区表项中第2、3项为0,只有第1、4项有内容。然后从总扩展分区中分区子扩展分区(一个子扩展分区有一个逻辑分区)。

硬盘驱动程序

硬盘初始化

硬盘上有两个IDE通道。每个通道上面都可以挂两个硬盘,一个master,一个slaver。第一个IDE通道上的两个硬盘的中断信号挂在8259A从片的 IRQ14上,这两个硬盘共享一个IRQ接口。第二个IDE通道上的两个硬盘的中断信号挂着从片的 IRQ15上。两个硬盘共享一个信号,CPU 怎么样区分是哪一个硬盘?因为硬盘能够发中断是因为在之前我们对某个硬盘进行了操作,在这个操作中我们就已经确定好了哪个硬盘了,所以这个通道的中断信号就是这个硬盘发出的。





原创粉丝点击