当前位置: 首页 > article >正文

深入理解 Linux 内核启动流程

 

目录

一、BIOS 与 Bootloader

1.BIOS(Basic Input/Output System)

2.Bootloader(引导加载程序)

二、内核初始化

1.解压内核映像

2.初始化硬件设备

3.建立内存管理系统

4.启动第一个进程(init)

三、系统初始化

1.运行级别切换

2.启动系统服务和守护进程

3.用户登录

四、总结


        在 Linux 系统中,内核的启动是一个复杂而关键的过程,它为整个操作系统的运行奠定了基础。本文将详细探讨 Linux 内核的启动流程,帮助读者更好地理解这个神秘而重要的过程。

一、BIOS 与 Bootloader

1.BIOS(Basic Input/Output System)

  • 当计算机启动时,BIOS 首先被执行。它负责硬件的初始化,包括检测硬件设备、设置硬件参数等。BIOS 还会查找可引导设备,通常是硬盘、U 盘或光盘。
  • 如果找到了可引导设备,BIOS 会将引导扇区(通常是硬盘的第一个扇区)加载到内存中,并将控制权转移给引导扇区中的代码。

2.Bootloader(引导加载程序)

  • Bootloader 是位于引导扇区或其他特定位置的程序,它的主要任务是加载 Linux 内核到内存中,并将控制权转移给内核。常见的 Bootloader 有 GRUB、LILO 等。
  • Bootloader 首先会进行一些初始化工作,如设置内存布局、检测硬件设备等。然后,它会读取内核映像文件,并将其加载到内存中的特定位置。最后,Bootloader 会跳转到内核的入口点,将控制权转移给内核。

二、内核初始化

1.解压内核映像

Linux 内核通常以压缩的形式存储在磁盘上,以便节省空间。当 Bootloader 将内核映像加载到内存中后,内核首先会进行解压缩操作。解压缩后的内核映像会被放置在内存中的特定位置,准备进行进一步的初始化。

2.初始化硬件设备

  • 内核在启动过程中会对各种硬件设备进行初始化。这包括 CPU、内存、中断控制器、定时器、设备总线等。内核会检测硬件设备的存在和状态,并为它们分配资源,如内存地址、中断号等。
  • 对于一些重要的硬件设备,内核还会加载相应的驱动程序,以便在系统运行时能够正确地操作这些设备。

3.建立内存管理系统

  • 内存管理是内核的一个重要功能,它负责为系统中的进程分配和管理内存资源。在启动过程中,内核会建立内存管理系统,包括初始化内存页表、设置内存分配策略等。
  • 内核还会检测系统中的物理内存大小,并将其划分为不同的内存区域,如内核空间和用户空间。内核空间是供内核代码和数据使用的内存区域,而用户空间是供用户进程使用的内存区域。
mm_init_cpumask(&init_mm); /*和内存有关的初始化 */

 

4.启动第一个进程(init)

  • 当内核完成了硬件设备的初始化和内存管理系统的建立后,它会启动第一个进程,通常是init进程。init进程是系统中的第一个用户空间进程,它的任务是初始化系统环境、启动其他系统服务和守护进程等。
  • init进程会根据系统的配置文件(如/etc/inittab)来确定系统的运行级别,并启动相应的服务和守护进程。例如,在系统启动时,init进程可能会启动网络服务、文件系统服务、登录服务等。

三、系统初始化

1.运行级别切换

  • 根据系统的配置文件,init进程会切换到不同的运行级别。每个运行级别代表了系统的一种特定状态,例如单用户模式、多用户模式、图形界面模式等。
  • 在不同的运行级别下,系统会启动不同的服务和守护进程,以满足用户的需求。例如,在图形界面模式下,系统会启动图形界面服务和相关的应用程序,而在单用户模式下,系统只启动必要的服务,以便进行系统维护和修复。

2.启动系统服务和守护进程

  • init进程会根据系统的运行级别启动相应的系统服务和守护进程。这些服务和守护进程包括网络服务、文件系统服务、打印服务、数据库服务等。它们负责为用户提供各种系统功能和服务,确保系统的正常运行。
  • 系统服务和守护进程通常以后台进程的形式运行,它们会在系统启动时自动启动,并在系统运行过程中持续运行,直到系统关闭。

3.用户登录

  • 当系统服务和守护进程启动完成后,系统会进入用户登录界面。用户可以通过输入用户名和密码登录到系统中,开始使用系统的各种功能和服务。
  • 用户登录后,系统会为用户创建一个用户环境,包括设置用户的工作目录、环境变量等。用户可以在这个环境中运行各种应用程序,进行文件操作、网络通信等。

四、总结

        Linux 内核的启动流程是一个复杂而精细的过程,它涉及到硬件设备的初始化、内存管理、进程管理等多个方面。通过了解这个过程,我们可以更好地理解 Linux 系统的工作原理,为系统的维护和优化提供帮助。


http://www.kler.cn/a/444099.html

相关文章:

  • Qt5HttpServer : Qt官方的HTTP服务器
  • 大数据机器学习算法和计算机视觉应用07:机器学习
  • web实验三
  • Loki 微服务模式组件介绍
  • 【C#】try-catch-finally语句的执行顺序,以及在发生异常时的执行顺序
  • springboot 与 oauth2 版本对应关系
  • 力扣45. 跳跃游戏 II
  • 基于springboot社区服务系统
  • 如何区分PHP和java?原生源码和次生源码的区别?
  • 前端本地数据存储方式有哪些
  • 基于QT(C++)实现的日历程序
  • QT基础和练习
  • 利用Python爬虫获取微店商品详情API接口的深入指南
  • 蓝桥杯——竞赛省赛国赛题分享
  • React中定义和使用函数式组件
  • 天天 AI-241215:今日热点-OpenAI发布ChatGPT Projects,万能工具箱上线!
  • Vue零基础教程|从前端框架到GIS开发系列课程(五)组件式开发
  • Quartz 架构和单体应用介绍
  • 汽车IVI中控开发入门及进阶(三十八):HiCar开发
  • 数据结构,链表的简单使用
  • UDP基本了解
  • 为什么要用单例模式?
  • windows C#-命名实参和可选实参(下)
  • C/C++语言——解题
  • 机试题——维修工
  • UI框架DevExpress XAF v24.2新功能预览 - .NET Core / .NET增强