Linux内核启动解析:从start_kernel到保护模式
需积分: 15 11 浏览量
更新于2024-08-23
收藏 1.37MB PPT 举报
"陈香兰的Linux内核源代码解读,主要关注start_kernel函数在Linux启动过程中的作用。本文档详细阐述了Linux内核从启动到start_kernel的流程,包括BIOS、软硬磁盘启动、启动加载器如GRUB和LILO的工作原理,以及实模式、保护模式和分页模式的转换。此外,还介绍了i386架构下的地址空间、段寄存器、GDT和IDT表等关键概念。"
在深入理解Linux内核启动过程时,我们首先要明白的是,start_kernel是Linux内核初始化的核心部分,它标志着从硬件初始化阶段过渡到操作系统核心功能的构建。当系统通过BIOS加载启动加载器(如GRUB或LILO)并读取到kernel镜像(如bzImage)后,会进一步执行内核的启动代码。这部分代码最初是在实模式下运行的,因为i386架构的CPU启动时默认处于实模式。
实模式下,地址总线只有20位,能够访问的内存限制在1MB之内。地址计算依赖于段地址和段内偏移,其中段地址是16位的段寄存器值左移4位。实模式的主要目的是为了保持与早期8086处理器的兼容性。
在启动过程中,内核需要进入更高级别的保护模式,以利用32位地址空间和内存管理功能。这涉及切换到分页模式,通过全局描述符表(GDT)和中断描述符表(IDT)来管理内存和中断处理。GDT存储段选择子,这些选择子与段寄存器(如cs、ds、es、fs和gs)结合使用,确定实际的内存访问地址。IDT则用于定义中断和异常的处理程序。
start_kernel作为内核启动的第一个进程(0号进程),它的任务不仅仅是初始化硬件,还包括创建系统的第一号进程,即init进程。这个进程负责进一步的系统初始化,例如设置文件系统、网络和设备驱动等,最终找到一个init程序来构建完整的Linux运行环境。
在启动过程中,还会涉及到控制寄存器的设置,如控制分页机制的CR0寄存器。一旦内核完成所有必要的初始化,它会调用cpu_idle,将当前进程转换为idle进程,等待后续的任务调度。
start_kernel是Linux内核启动的关键步骤,它涵盖了从低级硬件初始化到高级系统服务设置的全过程。理解这一过程对于深入学习Linux内核的工作原理至关重要。通过陈香兰的讲解,我们可以更清晰地看到这个过程的细节,从而更好地理解和调试内核代码。
2010-04-07 上传
2010-04-12 上传
涟雪沧
- 粉丝: 21
- 资源: 2万+
最新资源
- 高清艺术文字图标资源,PNG和ICO格式免费下载
- mui框架HTML5应用界面组件使用示例教程
- Vue.js开发利器:chrome-vue-devtools插件解析
- 掌握ElectronBrowserJS:打造跨平台电子应用
- 前端导师教程:构建与部署社交证明页面
- Java多线程与线程安全在断点续传中的实现
- 免Root一键卸载安卓预装应用教程
- 易语言实现高级表格滚动条完美控制技巧
- 超声波测距尺的源码实现
- 数据可视化与交互:构建易用的数据界面
- 实现Discourse外聘回复自动标记的简易插件
- 链表的头插法与尾插法实现及长度计算
- Playwright与Typescript及Mocha集成:自动化UI测试实践指南
- 128x128像素线性工具图标下载集合
- 易语言安装包程序增强版:智能导入与重复库过滤
- 利用AJAX与Spotify API在Google地图中探索世界音乐排行榜