现在的位置: 首页 > 综合 > 正文

<<自己动手写操作系统>>学习笔记(一)—MBR,PBR,BPB,文件系统

2013年07月19日 ⁄ 综合 ⁄ 共 1655字 ⁄ 字号 评论关闭

本来是想去学NASM的,又发现CSDN论坛中有人有FASM写简单的系统,由于熟悉FASM所以还是用这个吧。
结合书本又查阅了下资料,现在我们所使用的计算机引导过程应该是这样的:
BIOS->MBR->活动分区->PBR->OS LOADER->加载内核
MBR=Master Boot Record,结构如下:

;主引导记录,512字节
struct STRUCT_MASTER_BOOT_RECORD
	Codes				rb	446
	Partition1	STRUCT_PARTITION_TABLE
	Partition2	STRUCT_PARTITION_TABLE
	Partition3	STRUCT_PARTITION_TABLE
	Partition4	STRUCT_PARTITION_TABLE
	;结束标志=0x55AA
	Flag				dw	?
ends

这也就是为什么一个硬盘最多有四个分区(主分区和扩展分区,不算逻辑分区)。
此结构包含了分区表结构,如下:

;分区表结构=16字节
struct STRUCT_PARTITION_TABLE
	;分区状态,0=未激活,0x80=激活
	State						db	?
	;起始磁头号
	BeginHead				db	?
	;起始扇区(低6位)和柱面号(高10位)
	BeginSC					dw	?
	;分区类型
	FSID						db	?
	;结束磁头号
	EndHead					db	?
	;结束扇区和柱面号,同BeginHead
	EndSC						dw	?
	;相对扇区地址
	InfoAreaSectors	dd	?
	;总扇区数
	Sectors					dd	?
ends

BIOS把MBR加载到0x7C00地址后会跳转到Codes的代码处执行。
而Codes的作用就是寻找活动分区,并把其PBR加载到0x7C00处,跳转到它的代码中。

PBR=Partition Boot Record,结构如下:

;分区引导记录=512字节
struct STRUCT_PARTITION_BOOT_RECORD
	;短跳转代码
	CodeJmp			rb	3
	;厂商名(字符串)
	OEMName			rb	8
	;BIOS_PARAMETER_BLOCK
	BPB					STRUCT_BIOS_PARAMETER_BLOCK_FAT
	;中断13的驱动器号
	DrvNum			db	?
	;磁头号(书上说这一字节是保留的)
	Head				db	?
	;扩展引导标记=0x29
	BootSig			db	?
	;卷序列号
	VolID				dd	?
	;卷标(字符串)
	VolLab			rb	11
	;文件系统类型(字符串)
	FileSysType	rb	8
	;代码,数据等
	Others			rb	448
	;标志=0x55AA
	Flag				dw	?
ends

PBR描述了此分区的属性,如果这个分区是活动的,则会获得CPU控制权(由MBR转移过来的)。
此结构包含了另一个结构BPB,如下:

;FAT磁盘参数表,25字节,FAT12和FAT16应该是一样的
struct STRUCT_BIOS_PARAMETER_BLOCK_FAT
	;每扇区字节数
	BytsPerSec	dw	?
	;每簇扇区数
	SecPerClus	db	?
	;Boot记录占用多少扇区
	RsvdSecCnt	dw	?
	;共有多少FAT表
	NumFATs			db	?
	;根目录文件数最大值
	RootEntCnt	dw	?
	;扇区总数
	TotSec16		dw	?
	;介质描述符
	Media				db	?
	;每FAT扇区数
	FATSz16			dw	?
	;每磁道扇区数
	SecPerTrk		dw	?
	;磁头数(面数)
	NumHeads		dw	?
	;隐藏扇区数
	HiddSec			dd	?
	;如果TotSec16=0则由这个记录扇区数
	TotSec32		dd	?
ends

这个是FAT的,好像12、16、32都是一样的,但NTFS的就不知道了,有心人知道的话麻烦告知一下。
MBR加载活动分区的PBR后会跳转到JmpCode中,虽说是个短调转,但主体代码是在Others中。
活动分区的PBR的作用就是寻找OS LOADER,加载到内存,转移控制权。

为什么要那么麻烦呢?因为一个扇区为512字节,不足以存放加载系统内核的代码,如果代码是作为硬盘数据存在的,则没有这个限制。
后面的内容就不说了,我现在还没写好MBR和PBR呢,争取成品能够兼容windows的MBR。
待续。。。。。。

抱歉!评论已关闭.