物理内存布局
本小节我们来考察Pc物理内存布局.
早期Intel 8088处理器
在早期的处理器,比如经典的Intel 8088处理器,只有16位的地址总线.可以寻址的空间就是2^16字节,换算下就是1MB.
整个可用的物理内存空间就是0x00000000 ~ 0x000FFFFF,其中前640KB地址空间被称为Low Memory
,是这些早期Pc可以使用的.而事实上,当时的Pc实际使用的内存往往只有16KB~64KB.
剩下从0x000A0000~0x000FFFFF的384KB内存空间,则被保留作为特殊用途.比如作为VGA显示,硬件内存和一些固件.
其中最重要的是BIOS,它占据了从0x000F0000~0x000FFFFF之间的64KB内存.BIOS负责硬件系统的初始化,包括激活显卡,检测可用内存等等.在初始化完成后,BIOS还需要将操作系统从存储器中载入,并运行.
Intel 80286&&80386处理器
在80286时,处理器支持的内存大小已经增长到了16MB.而到了80386时期,内存可寻址范围更是到了4GB.为了和之前的软件兼容,80286和80386依然保持着8088时期的内存布局,这样现在计算机的可用内存在0x000A0000~0x0010000之间出现了一块空白,可用内存是起始的640kb以及1MB之后的空间.
值得一提的是在32位寻址的电脑上,物理内存顶部的一部分空间被BIOS分配给了PCI设备.目前我们基本都是使用64位系统,这样内存可寻址范围在可见的时间内基本是用不完了.基于同样的前向兼容的目的,64位系统在物理内存布局上,出现了第二块空白,位置在32位可寻址空间的顶部.
JOS支持的物理内存为256MB,所以我们不需要考虑第二块空白的问题.
物理内存布局问题,既要给我们的物理内存分配地址,也要给其他硬件分配地址.这在操作系统开发中,一直是挑战.