深入理解 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 系统的工作原理,为系统的维护和优化提供帮助。

相关推荐
A小辣椒1 天前
TShark:Wireshark CLI 功能
linux
A小辣椒1 天前
TShark:基础知识
linux
AlfredZhao1 天前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao2 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334662 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪2 天前
linux 拷贝文件或目录到指定的位置
linux
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
bush43 天前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5203 天前
Linux 11 动态监控指令top
linux
不会C语言的男孩3 天前
Linux 系统编程 · 第 8 章:进程基础
linux·c语言