深入理解 Linux 内核启动流程

目录

[一、BIOS 与 Bootloader](#一、BIOS 与 Bootloader)

[1.BIOS(Basic Input/Output System)](#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.建立内存管理系统

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

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

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

三、系统初始化

1.运行级别切换

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

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

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

3.用户登录

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

四、总结

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

相关推荐
Ahern_2 分钟前
RHEL 7.5 源码安装 mysql-5.7.17 数据库
linux·数据库·mysql
少年、潜行29 分钟前
树莓派3B+驱动开发(8)- i2c控制PCF8591
驱动开发·树莓派·3b+
初学者丶一起加油1 小时前
C语言基础:数组(字符数组)
linux·c语言·开发语言·数据结构·vscode·算法·ubuntu
vvw&1 小时前
如何在 Ubuntu 22.04 服务器上安装 Jenkins
linux·运维·服务器·ubuntu·ci/cd·自动化·jenkins
青灯文案11 小时前
Linux 显示系统活动进程状态命令 ps 详细介绍
linux·运维
aashuii1 小时前
linux上抓包RoCEv2
linux·运维·服务器
给我买个墨镜戴2 小时前
leetcode 栈部分笔记
linux·笔记·leetcode
孙克旭_2 小时前
day09-Linux文件类型及查找文件
linux·运维