日期:2014-05-16  浏览次数:20654 次

linux0.11内核源代码中system模块问题
RT,0.11内核中,bootsect.s首先将system模块从磁盘扇区复制到0x10000到0x8ffff上,后setup.s又将其移动到0x00000处,不是多此一举吧,直接移到0x00000不就行了么

------解决方案--------------------
因为系统启动时处于实模式,这时候基本内存中开头一部分空间是保留给BIOS自己用的,比如0x00000到0x0003FF共1KB的空间用于存放中断向量表。每个中断向量占用4个字节,共可存储256个中断向量。setup.S要读取系统内存大小、显卡模式、磁盘等参数,这些都是通过BIOS中断调用完成的,这时候BIOS的保留区不能被破坏,所以bootsect.s首先将system模块从磁盘扇区复制到0x10000到0x8ffff上。

然后setup.S会建立全局描述符表,中断描述符表,进入保护模式,这时候BIOS就没有用了,可以将其移动到0x00000处了。