Linux---内核初始化
内核初始化
引导加载程序(BootLoader)
计算机首先加载引导(GRUB)。引导加载程序的任务是从存储介质(硬盘、光盘等)加载操作系统内核到内存中,并跳转到内核的启动位置。
设置堆栈和切换到保护模式
内核初始开始时,计算机可能仍让处于实模式。内核会设置堆栈,切换到保护模式或长模式(64位系统),以获得更高的内存访问和保护机制。
源码位置init/main.c中的start_kernel()。
建立内存管理(mm_init())
内核需要建立内存管理单元(Memory Management Unit,MMU)以启用虚拟内存。这里包括初始化页表、启用分页机制、配置内存保护等。
初始化中断和异常处理(trap_init())
内核会初始化中断描述符(Interrupt Descriptor Table,IDT)和中断服务例程,以便能够处理硬件中断和异常。这里包括设置中断处理程序的地址、启用和配置中断控制器等。
初始进程管理0进程 INIT_TASK(init_task)
内核会创建第一个进程(通常时init进程或systemd),这是用户空间的第一个进程。进程管理的初始化还包括建立进程控制块(Process Control Block,PCB)和设置调度器(sched_init())。
初始化文件系统(register_filesystem())
如果支持文件系统,内核会初始化文件系统相关的数据结构,挂载根文件系统,并为文件操作做好准备。这里包括虚拟文件系统(VFS)、超级快和安装文件系统驱动程序。
设备驱动初始化(platform_device_register())
内核会初始化系统调用接口,这是用户空间程序与内核交互的方式。系统调用表会被设置,以便用户程序可以请求内核提供的服务。
启动用户空间
一旦内核初始化完毕,它会启动用户空间,执行第一个用户空间进程,该进程通常是init/systemd。用户空间进程将接管系统管理任务。
进入正常运行
此时,操作系统已经初始化完毕,可以接受用户程序的执行。操作系统将处理进程调度、文件管理、内存管理、网络通信等任务,以确保系统正常运行。
本文作者:不会笑的孩子
本文链接:https://www.cnblogs.com/doubleconquer/p/17728827.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话