[系列]OS学习-自己写操作系统(5)-loader的产生

本文详细介绍了从保护模式转到Loader的过程,解释了为何需要Loader以及其在操作系统启动中的作用。通过FAT12文件系统解析,阐述了如何在磁盘中定位并加载Loader文件。在Loader中,主要任务包括初始化GDT/LDT,设置堆栈,以及准备加载内核。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

终于从保护模式走出来了。太艰难了。

现在我们将正式从引导扇区开始,编写Loader和内核。

由于引导扇区只有512字节,不够完成初始化和载入内核的工作,所以我们要写一个Loader,从引导扇区跳到Loader,由loader完成一切准备工作,然后进入内核。

用bximage创建软盘,在freedos中使用format B格式化B盘,用ultraISO向软盘中加入文件。

在centos中安装bochs,很艰难,递归解决了将近一百个包依赖。x11等

一、FAT12格式

可是引导扇区怎么找到loader?说的轻巧,loader将是一个文件,这就涉及到在软盘中寻找目标文件的工作。

FAT12详解 这位前辈的文章写的清楚明了,值得一看。为了在软盘中找到对应文件,

FAT12文件系统使用情况: 引导扇区(1)->FAT1(9)->FAT2(9)->根目录区(any)->数据区(other)

根目录区的第一个字节地址是0x2600H = 19*512D,如图:

那么根目录区占了多少簇?

根目录中一个条目占32字节,最多0xE0个条目,所以根目录占0xE0*32个字节,除以512 = 14,所以根目录占14个簇。(在这里一个簇只包含一个扇区)

所以数据区开始于19+14=33号扇区,即第34个扇区(扇区号从0开始),即地址为33*512 = 0x4200H,为数据区的开始。


这张图可以证明。我们在软盘中成功找到了文件。

别忘了还有FAT1/2表,这两个表里面存储的是什么呢?在FAT表中,每12位称为一个FAT项,代表一个簇。

第0个和第1个FAT项从不使用,从第二个FAT项开始表示数据区的每一个簇。这也对应着数据区的第一个簇的簇号是2。

每一个FAT项的值代表文件下一个簇号;

如果文件在这个簇结束,则值>=0xFF8;

如果这个簇坏了,值==0xFF7。

二、如何在磁盘中找到LOADER

在回答这个问题之前,有一个问题更加重要:为什么需要Loader?

众所周知,操作系统是从引导扇区开始启动的,那我们直接在引导扇区中加载内核不就可以了吗?问题并不如此简单。事实上,引导扇区只是一个扇区,只有512字节大小;而内核装载之前要完成的任务有很多:例如初始化GDT/LDT,坚持硬件,跳

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值