D_D系统构建-文件分布及说明

上回书说到了些原因及环境准备,本书将说说我们将要设计的小系统的划分。

我们的小系统整体上分为MBR, LOADER, KERNEL, USER_APP,至于这些个东西是个什么玩意,别急,下面我会隆重介绍下,准备好你们的小板凳,坐好。

MBR:系统上电后第一个加载 的程序, 存放在磁盘0.一般前446字节保存代码,后64字节为分区表信息,最后两个字节标明MBR(0xaa55);它的命令是加载 Loader到内存,并将运行权利交由loader,然后就game over. 它的大小为512字节,工作在实模式。

LOADER:由mbr加载,它的功能是加载会加载core到内存,开启保护模式,突破内存0x100000的访问限制。loader我们限定不超过64K,

CORE:通过loader加载到内存,主要完成:1.内部中断处理,2.打开页功能 3.程序调度 等其它功能。它的大小不固定

USER-APP:用户程序,开始验证时代码中固定,后面通过终端加载来动态实现 。

它们的调用关系如下:


调用

这里有同学会发现上面说到mbr会工作在实模式,loader /core/app会工作在保护模式,这两个模式是什么意思?下面和大家一起研究研究。

实模式:这里面的实可不是老实的意思,其实,这种模式可是一点都不老实,大大的狡猾。这么说吧,在这个模式下,你想干嘛就干嘛,看谁不爽就可以伸脚踹,可以随意访问空间,随意修改代码,大家都是赤裸相待,有什么东西都看的一清二楚,就像活在原始社会,没有约束,自由自在。Just follow your heart. 但这个模式就像原始社会人的活动范围一样,是受限制的(最大访问1M内存,再多也不好意思,用不了,就像新大陆一样,你知或者不知,它都在那里)。毕竟吃都吃不饱,哪里有力气瞎逛。

保护模式:实模式的升级版本,原始社会进化的产物。说白了,你愿意你们家的大门向谁都敞开吗?进来吃你家的,喝你家的,关键手脚还不老实,一对老鼠绿豆王八眼还贼兮兮的看着你的老婆!如果你这都可以忍受,请把你家的地址告诉我(当然我不是老鼠绿豆王八眼)!当你受够了实模式下的担惊受怕后,不妨引入保护模式,这个模式化对所有的人都划定的条条框框,没有你的允许,不许乱伸手伸脚,连你们家的大门地址都摸不到!这要是搁宋朝,那哪还有西门大官人什么事啊,我们的大郎也不要喝药了,宋江那帮反贼也就歇菜了。当然这个模式也有好处,就是活动范围广了,理论上你可以在4G的范围内逛。


还有就是为什么要引入Loader,直接一步到位引入core企不是更好?如果我说是为了展示我那二逼的编程能力,你们估计板凳口水都上来了。其实这也是无奈。MBR只有512个字节。随便加点指令就满了,搞不好连分区信息表都要占用掉(当前也不是没有办法,就是繁琐点,把mbr拆分成几段,加载 Mbr时,第一件事就把自己剩余的部分都加载内存中,有兴趣的可以后面尝试下,但不要把mbr标识符占用掉)。


既然要运行程序 ,必然在内存中进行,我们当前把内存分布按照如下进行。

加载MBR后的内存分布(MBR固定从0x7C00处加载, 512字节)

地址

说明

0x100000及以上

别想了,我们的MBR访问不了。。

0xFFFFF

设备映射区

0xA0000

0x9FFFF

暂时未用

0x7E00

0x7DFF

MBR

0x7C00

0x7BFF

暂时未用

0x400

0x3FF

中断向量表(IVT)

0x0


2.加载loader后的地址

地址

说明

0x100000及以上

开保护后,可以访问。

0xFFFFF

设备映射区

0xA0000

0x9FFFF

暂时未用

0x20000

0x1FFFF

Loader

0x10000

0xFFFF

暂时未用

0x7E00

0x7DFF

MBR(这块可回收了)

0x7C00

0x7BFF

暂时未用,

0x400

0x3FF

中断向量表(IVT)(这块可回收了)

0x0


在进入loader后,mbr所有的区域可以回收;在打开保护模式时,会先关闭中断,IVT区域也可以回收了。

地址

说明

0x100000及以上

开保护后,可以访问。

0xFFFFF

设备映射区

0xA0000

0x9FFFF

暂时未用

0x20000

0x1FFFF

Loader

0x10000

0xFFFF

暂时未用

0x0



3.加载core,理论上core在loader打开保护模式后加载 的,因此可以加载到内部可用的任何内存处。

地址

说明

0x100000及以上

开保护后,可以访问。

0xFFFFF

设备映射区

0xA0000

0x9FFFF

kernel

0x20000

0x1FFFF

Loader

0x10000

0xFFFF

暂时未用

0x0


在内核运行后,loader的使命就over了,它的空间释放 

地址

说明

0x100000及以上

开保护后,可以访问。

0xFFFFF

设备映射区

0xA0000

0x9FFFF

kernel

0x20000

0x1FFFF

暂时未用

0x0


4.加载用户程序 ,与core一样,可以加载到任何位置,具体 的位置将由core指定


当前除了mbr的起始地址外,剩余的地址你自己都可以随意指定,毕竟你的地盘你做主。


时间不早了,下回书我们聊聊我们的文件系统作用及它的实现,

好了。都散了吧,回去看看你们家大门有没有关好。微笑




















  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值