4.内核在物理内存中的布局

图3-11给出物理内存最低几兆字节的布局,以及内核映像的各个部分在其中的驻留情况。

 

 

该图给出了物理内存的前几兆字节,具体的长度依赖于内核二进制文件的长度。前4 KiB是第一个页帧,一般会忽略,因为通常保留给BIOS使用。接下来的640 KiB原则上是可用的,但也不用于内
核加载。其原因是,该区域之后紧邻的区域由系统保留,用于映射各种ROM(通常是系统BIOS和显卡ROM)。不可能向映射ROM的区域写入数据。但内核总是会装载到一个连续的内存区中,如果要
从4 KiB处作为起始位置来装载内核映像,则要求内核必须小于640 KiB
为解决这些问题,IA-32内核使用0x100000作为起始地址。这对应于内存中第二兆字节的开始处。从此处开始,有足够的连续内存区,可容纳整个内核。
内核占据的内存分为几个段,其边界保存在变量中。
 _text和_etext是代码段的起始和结束地址,包含了编译后的内核代码。
 数据段位于_etext和_edata之间,保存了大部分内核变量。
 初始化数据在内核启动过程结束后不再需要(例如,包含初始化为0的所有静态全局变量的BSS段)保存在最后一段,从_edata到_end。在内核初始化完成后,其中的大部分数据都可以从内存删除,给应用程序留出更多空间。这一段内存区划分为更小的子区间,以控制哪些可以删除,哪些不能删除,但这对于我们现在的讨论没多大意义。
posted @ 2022-03-17 21:13  while(true);;  阅读(89)  评论(0)    收藏  举报