Linux内核启动流程详解:从bootsect.s到main.c的执行关键步骤

版权申诉
0 下载量 42 浏览量 更新于2024-07-02 收藏 1.85MB DOC 举报
本文档深入探讨了Linux内核的执行流程,主要分为两个阶段:从BIOS引导到main.c函数的启动过程以及从main.c开始到系统准备完毕的进程初始化。 第一阶段,从开机到main.c(内核版本0.11): 1. 启动BIOS,它负责设置实模式下的中断向量表(IVT)和中断服务程序,确保硬件中断可以正确传递到操作系统。 2. 通过BIOS中断(如0x19h)从启动设备(通常是硬盘)加载bootsect.s到内存0x07c00,然后执行此代码。接着,bootsect.s将自身复制到0x90000处,并加载setup.s到0x90200。 3. bootsect.s继续执行,将后续的硬盘扇区加载到内存0x10000~0x2EFFF,期间通过BIOS的中断服务程序获取内核运行所需的系统数据,并替换bootsect.s的代码。 4. 在执行setup.s时,中断被关闭,系统代码复制到内存的0x00000区域,覆盖原中断向量表和BIOS数据,同时创建新的地址映射结构(页目录和页表)以支持32位保护模式。 5. head.s(约25KB)被执行,划分出内存用于不同的用途,如页目录、页表、软盘缓冲区、中断描述符表和全局描述符表等。 第二阶段,从main.c函数开始到系统准备完毕: 1. 在main.c中,进程0(通常是第一个用户空间进程)被创建,其初始化包括根设备和硬盘参数的复制(102、110、111行),以及物理内存的规划和配置,确保进程能够在保护模式下进行高效运算。 2. 随着进程的初始化,系统会继续执行其他关键任务,如设备驱动加载、内存管理、文件系统挂载、初始化进程调度机制等,直至完成系统的基本准备,为用户空间操作提供支持。 文档详细地介绍了Linux内核启动初期的硬件交互、内存布局调整以及核心功能的初始化过程,这些都是理解操作系统底层工作原理的重要组成部分。通过这些步骤,Linux能够逐步建立起一个稳定且功能丰富的运行环境。