操作系统的实现(3)实现loader

本文探讨了在操作系统实现中如何突破引导扇区512字节的限制,通过创建loader来扩展功能。介绍了FAT12文件系统,详细阐述了引导扇区、FAT表、根目录区和数据区的结构。加载loader的步骤包括添加BPB头信息、编写loader、读取扇区以及执行loader。加载过程中涉及到了FAT项的解析和簇的查找,以确保大文件能正确加载到内存中。
摘要由CSDN通过智能技术生成

主要内容

突破引导扇区512字节的限制。

理论

为了添加更多的内容,引导扇区的512字节显得不足,所以添加一个模块loader将任务交给他来做,而引导扇区负责将loader加载入内存。为了以后操作方便,将软盘做成FAT12格式。
FAT12:从DOS时代就开始使用的文件系统,将磁盘分为扇区,簇,分区等层次。
扇区:磁盘上最小的数据单元
簇:一个或多个扇区
分区:整个文件系统
引导扇区就是整个软盘的第0个扇区,引导扇区有一个叫做BPB的数据结构(在被识别时起作用),在引导扇区之后是两个完全相同的FAT表(表二看作表一的备份),每个占用9个扇区,FAT表之后是根目录区,根目录区之后是数据区。
在这里插入图片描述
寻找loader并把他加载入内存的思路:遍历根目录找到相同文件名的文件(规定loader放在根目录中)。

根目录的条目有固定格式(重点关注文件名和开始簇号)。
/数据区的第一个簇的簇号是2,当文件的开始簇号为2时就位于数据区第一个簇。/
在这里插入图片描述
通过开始簇号找到数据区的相应位置即可找到数据,对于大于512字节的文件,需要FAT表来找齐所有的簇。
FAT表:每12位称为一个FAT项(一个半字节),代表一个簇,第0和第1个FAT项不使用,从第二个FAT项开始表示数据区的簇,FAT项的值代表文件的下一个簇号,当大于等于0xFF8时,表示本文件最后一个簇,当为0xFF7时,表示是一个坏簇。
在这里插入图片描述

实现

1.添加BPB等头信息,以便识别


	; 下面是 FAT12 磁盘的头
	BS_OEMName	DB 'ForrestY'	; OEM String, 必须 8 个字节
	BPB_BytsPerSec	DW 512		; 每扇区字节数
	BPB_SecPerClus	DB 1		; 每簇多少扇区
	BPB_RsvdSecCnt	DW 1		; Boot 记录占用多少扇区
	BPB_NumFATs	DB 2		; 共有多少 FAT 表
	BPB_RootEntCnt	DW 224		; 根目录文件数最大值
	BPB_TotSec16	DW 2880		; 逻辑扇区总数
	BPB_Media	DB 0xF0		; 媒体描述符
	BPB_FATSz16	D
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值