Linux内核执行流程解析:从实模式到保护模式

版权申诉
0 下载量 91 浏览量 更新于2024-07-20 收藏 1.82MB DOC 举报
"简析linux内核的内核执行流程" Linux内核的执行流程是操作系统启动的核心部分,它从硬件初始化开始,逐步进入用户空间提供服务。本文主要基于Linux内核版本0.11,详细解析其从开机到main.c执行的整个过程。 首先,计算机启动时,BIOS(基本输入输出系统)接管硬件,完成自检(POST)并准备实模式下的中断向量表和中断服务程序。中断向量表位于内存的0x00000到0x003FF,包含每个中断处理程序的地址。接下来,BIOS会从启动设备(通常是硬盘)加载操作系统引导扇区(bootsect.s)到内存的0x07c00处。 bootsect.s加载后,它的任务是将自身复制到内存的0x90000位置,然后加载setup.s到0x90200。setup.s负责加载剩余的内核扇区到内存,并获取系统配置信息。在此过程中,bootsect.s的代码被覆盖,只保留2字节的空间。 为了扩展内存寻址能力,setup.s会开启地址线A20,使得处理器能够访问4GB的内存空间。同时,它会重新配置8259中断控制器,以适应保护模式下的中断处理。接着,执行head.s,这个阶段会设置页目录和页表,为内存管理的分页机制打下基础,同时创建中断描述符表和全局描述符表,这两个表格是保护模式下访问内存和处理中断的关键。 进入第二阶段,main.c开始执行。这是内核初始化的重要步骤,主要包括: 1. 创建进程0:这是系统中的第一个进程,它负责后续所有进程的管理和调度。 2. 复制根设备和硬盘参数表:这些信息用于驱动设备和读取文件系统。 3. 物理内存规划:main.c会根据内核的需求分配内存区域,例如,为内核模块、页缓存等预留空间。 4. 初始化必要的系统数据结构:如进程表、文件系统信息等。 5. 启动设备驱动程序:使系统能够与硬件交互,如键盘、显示器、硬盘等。 6. 设置系统调用表:定义用户空间可以调用的系统服务接口。 7. 最后,通过switch_to()函数,从内核模式切换到用户模式,准备执行用户空间的第一个进程(通常是init进程),至此,系统准备完毕,可以开始执行用户程序。 这个过程展示了Linux内核从硬件层面到软件层面的逐步构建,体现了操作系统的启动逻辑和内存管理策略。理解这一过程对于深入学习Linux内核以及系统级编程至关重要。