Linux内核启动解析:从实模式到保护模式

需积分: 15 30 下载量 72 浏览量 更新于2024-08-23 收藏 1.37MB PPT 举报
"Linux内核源代码导读-陈香兰-基于x86的Linux 2.6.26的启动" 这篇文档是关于Linux内核源代码的解读,特别关注了在x86架构上的Linux 2.6.26版本的启动过程。作者是中国科学技术大学计算机系的陈香兰教授,她详细讲解了从BIOS启动到内核加载的关键步骤和技术。 首先,Linux内核的启动过程始于一个名为`bzImage`的编译产物,它包含了`Setup.bin`和`vmlinux.bin`两部分,具备自解压能力。`Setup.bin`和`misc.o`、`piggy.o`等组件一起构建了启动流程的初始阶段,而`vmlinux`则包含了内核的主体部分,如`Head-y`、`init-y`和`main`。 计算机启动通常由BIOS(基本输入输出系统)引导,可以是通过软盘或硬盘启动。在x86平台上,常见的启动加载器有GRUB和LILO。启动协议定义了如何从这些启动媒介过渡到内核加载。在这一过程中,BIOS会将控制权交给位于0x07c0地址处的引导扇区。这个扇区通常包含一段简单的代码,负责加载更复杂的引导程序。 实模式是x86处理器的一种工作模式,它是为兼容早期8086处理器而设计的。在这种模式下,地址总线为20位,可访问的内存空间限制在1MB以内。地址计算基于段地址和段内偏移,每个段寄存器(如CS、DS、ES、FS、GS)与16位的段地址关联,通过左移4位来扩大寻址范围。 保护模式是现代x86处理器的主要工作模式,它提供了更高级的安全性和内存管理功能。在这个模式下,地址总线扩展至32位,允许访问4GB的内存。段寄存器现在作为段选择子,它们与全局描述符表(GDT)配合工作,GDT由GDTR寄存器指示其位置和长度。此外,还有中断描述符表(IDT),用于处理中断和异常。 在进入保护模式后,系统需要加载GDT和IDT,并重新初始化段寄存器。CS通常通过长跳转指令来设置,其他数据段寄存器则直接设置。控制寄存器(如CR0、CR3等)也在此阶段被用来启用分页机制和其他特性。 这个文档深入探讨了x86架构下Linux内核启动的底层细节,涵盖了从实模式到保护模式的转变,以及分页、GDT、IDT等核心概念,对于理解Linux内核的启动流程和x86体系结构具有极高的价值。