joyfire的linux内核笔记
Linux内核启动过程是操作系统核心运行的起点,涉及到一系列复杂而精细的操作。本文将深入解析joyfire的Linux内核笔记中关于启动流程的关键步骤。 当个人计算机(PC)启动时,Intel系列CPU进入实模式,从地址0xFFFF0处执行ROM-BIOS的代码。BIOS执行自检、初始化中断向量表,并加载启动磁盘的第一个扇区(通常为MBR,主引导记录)到内存0x7C00地址,然后执行该处的代码。这是启动内核的起始点。 Linux内核的早期版本使用8086汇编语言编写,其启动过程包括: 1. **启动步骤**:内核首先加载到0x90000地址,然后将2k字节的数据移动到0x90200,接着加载剩余部分到0x10000。启动时显示"Loading...",随后控制权转到`boot/Setup.S`。 2. **Setup.S**:这部分汇编代码负责初始化硬件设备,并将内核从0x10000移动到0x1000,从而进入保护模式。 3. **head.S**:0x1000处的代码初始化寄存器,调用`decompress_kernel()`函数,该函数由`Boot/inflate.c`, `Boot/unzip.c`和`Boot/misc.c`组成,用于解压缩内核。 4. **解压缩**:解压缩后的内核数据被放置在0x100000,这也是Linux要求至少2MB内存的原因。 5. **start_kernel**:解压后,从0x1010000开始执行,包括设置IDT(中断描述符表)、GDT(全局描述符表)和LDT(本地描述符表),处理器初始化,内存分页配置,最终调用`start_kernel()`函数。 `start_kernel()`是内核启动的核心,涉及多个初始化函数,如: - **trap_init**:初始化陷阱处理程序。 - **init_IRQ**:初始化中断处理。 - **sched_init**:调度器初始化。 - **softirq_init**:软中断初始化。 - **time_init**:时间管理初始化。 - **console_init**:控制台初始化。 - **init_modules**(如果启用模块支持):初始化模块。 - **kmem_cache_init**:内存缓存初始化。 - **sti**:开启中断。 - **calibrate_delay**:延迟计时器校准。 - **mem_init**:内存初始化。 - **pgtable_cache_init**:页表缓存初始化。 - **fork_init**:进程创建初始化。 - **proc_caches_init**、**vfs_caches_init**:进程和虚拟文件系统缓存初始化。 - **buffer_init**:缓冲区初始化。 - **page_cache_init**:页面缓存初始化。 - **signals_init**:信号处理初始化。 - **proc_root_init**(如果启用PROC文件系统):PROC根目录初始化。 - **ipc_init**(如果启用SYSVIPC):系统VIPC初始化。 - **check_bugs**:检查硬件bug。 - **smp_init**:多处理器初始化。 - **rest_init**:剩余初始化。 - **kernel_thread**、**unlock_kernel**:创建内核线程,解锁内核。 - **cpu_idle**:CPU进入空闲状态。 这些初始化函数构建了Linux内核的基础架构,使得操作系统能够管理和调度系统资源,提供服务,并与硬件交互。了解这些启动步骤和初始化过程对于深入理解Linux内核的工作原理至关重要,有助于开发者调试和优化内核,以及解决与系统启动和资源管理相关的问题。
剩余63页未读,继续阅读
- fzw1802012-05-14网上对这个文档的评价比较高,个人感觉有点资料有点老!
- 粉丝: 0
- 资源: 4
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于opencv-dnn和一些超过330 FPS的npu
- 房屋租赁管理系统 java项目ssm框架开发,全套视频教程
- MATLAB代码:计及电转气协同的含碳捕集与垃圾焚烧电厂优化调度 关键词:碳捕集 电厂 需求响应 优化调度 电转气协同调度 参考文档:《计及电转气协同的含碳捕集与垃圾焚烧电厂优化调度》完全复现
- 关键词:微网 优化调度 深度强化学习 A3C 需求响应 编程语言:python平台 主题:基于改进A3C算法的微网优化调度与需求响应管理 内容简介: 代码主要做的是基于深度强化学习的微网
- web网页,三次平时作业+大作业+Acwing笔记
- cruise软件模型,混动仿真模型,IMMD架构混联混动仿真模型,Cruise混动仿真模型,混联混动汽车动力性经济性仿真 关于模型 1.本模型是基于IMMD架构搭载的混联混动仿真模型,关于IMMD架
- C#上位机开发源码 上位机项目源代码 采用基于RS485通讯总线的ModbusRtu协议,支持用户权限管理、sqlite数据库、实时曲线、历史曲线、历史报表、导出Excel、主界面布局可调带记忆等功能
- 基于plc的污水处理,组态王动画仿真,带PLC源代码,组态王源代码,图纸,IO地址分配
- Rhino(犀牛)插件ladybug-tools-1-8-0
- 三相10Kw光伏并网逆变器 包含全套理图 PCB 源代码