linux0.11启动时bootsect.s和setup.s的主要作用

cpu启动时为实模式,此时硬烧录的将cs=0xFFFF,ip=0x0,并自动开始执行0xFFFF0(ROM-BIOS的地址)的代码,BIOS会自检,并在0x0地址处设置中断向量表,此后实模式的int中断全部依赖此表,并将0磁道0扇区的512字节(引导扇区,放bootsect.s)读入内存0x7c000处,并跳转到此地址.

bootsect.s只能占512字节,功能有限,所以需要setup.s, 首先bootsect.s将自身从0x7c000移动到0x90000(为setup.s将system移动到0x00000时腾地方),并将setup.s读入到内存0x90200处,将system模块读入内存0x10000处.转入0x90200(setup.s)执行.

setup.s通过int中断获取硬件参数并放置在内存合适位置,为system模块运行做准备,并将system从内存0x10000移动到0x00000处(此时system中的模块中的逻辑内存地址就是真实的物理地址,而且BIOS中设置的int中断向量表就被覆盖了,int中断用不了了),设置GDT表,将cr0寄存器PE设为1,开启保护模式(指令集改变为32or64位的cpu指令集,寻址方式也改变),PG设为1,启动分页,并跳转(jmpi 0,8)到0x00000,操作系统正式启动!

tip1:自80386开始,除了bootsect.s和setup.s执行在实模式(实模式不区分特权级和用户级,能运行就是最大权限),操作系统和用户程序全部在保护模式下.

tip2:实模式是十六位机,保护模式根据cpu不同有32和64位,所以保护模式最多寻址1MB(16位有20根地址总线),而32位(32根地址总线)可寻址4GB,64(64根地址总线)更是256TB

tip3:实模式和保护模式的区别一个是寻址能力,一个是寻址方式,以及是否区分特权级和用户级.

tip4:之所以现代cpu中仍旧保存实模式的一大原因是与老的cpu或软件保持兼容,实模式本身是一种落后的淘汰设计.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值