3.1.2 二级推进系统——内核非压缩部分

内核的保护模式部分是经过压缩的,因此运行前需要解压缩,但是谁来负责内核映像的解压呢?解铃还须系铃人,既然内核在构建时自己压缩了自己,当然解压缩也要由内核映像自己完成。

内核在压缩的映像外包围了一部分非压缩的代码,Bootloader在加载内核映像后跳转至外围的这段非压缩部分。这些没有经过解压缩的指令可以直接送给CPU执行,由这段CPU可执行的指令负责解压内核的压缩部分。

除了解压以外,非压缩部分还负责内核重定位。内核可以配置为可重定位的(relocatable),所谓可重定位即内核可以被Bootloader加载到内存任何位置。但是在链接内核时,链接器需要假定一个加载地址,然后以这个假定地址为参考,为各个符号分配运行时地址。显然,如果加载地址和链接时假定的地址不同,那么需要对符号的地址进行重新修订,这就是内核重定位。

内核非压缩部分工作在保护模式下,其占用的内存在完成使命后将会被释放。