OS_3

setup.s模块:完成OS启动前的设置,为操作系统管理硬件做准备。

例如:

读内存大小并保存起来,操作系统要管理内存得知道他多大。

 获取光标的位置,显卡参数,根设备号等信息后,操作系统会形成很多数据结构来管理这些设备,来形成表来管理内存,这时候就是操作系统开始接管硬件。

后面会将操作系统移动到0地址。如果操作系统很长,用的地址超过了0x7c00,即bootset的地址向上移动。操作系统以上的的地址就用来放应用程序

所以开机的过程就是 读取操作系统,初始化操作系统。

 setup最后会进入保护模式,jmpi 0,8.。把0赋给IP,把8赋给CS,那么CS<<4+IP是80,但这是错的。应该跳到0地址处。所以这时候寻址方式改变了,即从16位机切换到32位机,切换到32位的寻址模式。

16位和32位的区别是,cpu的解释程序不一样。32位要走另一条电路来实现。切换的方法是通过一条指令 mov cr0 ,ax。cr0是一个寄存器,最低位PE为1启动保护模式,为0就是是实模式,这也让CPU走另一条电路。

保护模式下的地址翻译,即gdt的作用,gdt用硬件来做速度快。保护模式下根据CS查表+ip,CS放的是查表的下标,CS被称为选择子,从表中选出基址,表里的内容是物理内存地址。setup会初始化表。

保护模式下中断处理函数入口,即idt的作用,IDT表内的是中断处理函数入口。

 

setup建立表是为了跳入head.s的代码,head.s是system的第一个文件,且head.s还会再次初始化表。

 

posted @ 2021-04-08 11:15  Mrsdwang  阅读(51)  评论(0编辑  收藏  举报