Linux内核启动揭秘:实模式到保护模式转变与启动流程

需积分: 15 30 下载量 134 浏览量 更新于2024-08-23 收藏 1.37MB PPT 举报
本篇文章是陈香兰教授对中国科学技术大学计算机系学生讲解Linux内核源代码的入门教程,特别聚焦于基于x86架构的Linux 2.6.26版本的启动过程。文章首先回顾了编译得到的bzImage的结构,它由Setup.bin、vmlinux.bin(具有自解压功能)、head_32.o、misc.o、piggy.o等部分组成。vmlinux是核心内核代码,而Head-y、init-y和main则是启动过程中关键的部分。 在深入理解Linux内核启动流程时,文章提到了BIOS(基本输入输出系统)在计算机启动过程中的作用,包括软盘和硬盘启动方式,以及引导装载程序如GRUB和LILO的选择。此外,作者强调了启动协议的重要性,特别提到了BIOS中第一个扇区的特殊地位,它是0x07C0地址,其中包含设置启动环境的关键代码。 文章指出,实模式是早期CPU兼容性的体现,i386系统初始运行在此模式下,特点是地址总线只有20位,内存范围限于0-1MB,逻辑地址由段地址和段内偏移构成。段寄存器cs、ds、es、fs、gs在实模式下使用,并且长度为16位。进入保护模式后,地址总线扩展到32位,支持更大的内存空间,段寄存器转变为段选择子,与全局描述符表(GDT)和中断描述符表(IDT)一起工作。 为了访问保护模式下的内存,需要设置全局描述符表和中断描述符表,这通常在装载GDT和IDT后进行。控制寄存器(如CS)通常通过长跳转指令加载,而其他数据段寄存器则直接设置。阅读documentation/i386/boot.txt有助于更深入地理解这些概念。 本文通过详细的讲解,帮助读者理解Linux内核启动过程中的基础原理,特别是处理器模式转换、内存管理和中断处理机制,对于学习和研究Linux内核源码具有重要的参考价值。