1. 引导程序(Bootloader)
Linux系统启动的第一步是引导程序的加载和执行。引导程序负责从计算机的硬盘或其他启动介质中加载操作系统的内核。常用的引导程序有GRUB和LILO。
在x86架构的计算机上,引导程序的启动过程通常包括以下几个步骤:
1.1 BIOS/UEFI初始化
计算机加电后,首先执行固件(Firmware)中的启动代码,主要是BIOS(Basic Input/Output System)或者UEFI(Unified Extensible Firmware Interface)的初始化。这些固件的作用是进行硬件的初始化和自检,并加载引导程序。
1.2 引导程序的加载
BIOS或UEFI初始化后,会从指定的启动设备(通常是硬盘)的特定扇区加载引导程序。引导程序通常存放在硬盘的MBR(Master Boot Record)或UEFI固件的系统分区中。
引导程序的代码是由汇编语言写成的。以下是一个简化的引导程序代码示例:
BITS 16 ; 16位实模式
ORG 0x7C00 ; 引导扇区的偏移地址
start:
mov ax, 0x07C0 ; 设置段寄存器
mov es, ax
mov ds, ax
; 这里是引导程序的具体代码
jmp $ ; 无限循环
times 510 - ($-$$) db 0 ; 填充剩余空间
dw 0xAA55 ; 引导扇区的结束标志
1.3 引导程序的执行
引导程序加载到内存后,会执行其中的引导代码。这段代码负责进一步初始化硬件、加载内核和设备驱动程序,并将控制权转交给内核。
2. 内核加载与初始化
引导程序将控制权交给内核后,内核开始加载并初始化系统。
2.1 内核的加载
内核加载的过程包括解压缩、解析、并将内核映像加载到内存中。
2.2 系统初始化
一旦内核加载完成,它会首先初始化系统设备和驱动程序,包括初始化CPU、内存管理、设备驱动和文件系统。
文件系统初始化是非常重要的一步,它负责挂载根文件系统,并对文件系统执行一些必要的检查和修复工作。
3. 用户空间初始化
在内核初始化之后,系统会进一步初始化用户空间的环境。
3.1 init进程
在Linux系统中,init进程是用户空间的第一个进程,其进程ID为1。它负责启动系统中的其他所有进程,并提供基本的服务。当init进程启动后,它会根据配置文件(通常是/etc/inittab)来启动其他进程。
3.2 启动系统服务
一旦init进程启动后,它会根据配置文件来启动系统所需的各种服务,如网络服务、文件系统服务和登录服务等。
3.3 用户登录
最后,系统在用户空间的初始化过程中提供用户登录界面,用户可以使用登录名和密码登录系统。
4. 用户登录后的初始化
当用户成功登录系统后,系统会进一步为用户初始化并提供各种服务。
4.1 Shell环境
用户成功登录后,系统会为用户创建一个Shell环境,默认情况下是Bash Shell。Shell环境提供了用户与操作系统交互的接口,用户可以执行命令、管理文件和进程等。
4.2 配置文件加载
用户登录后,系统会根据不同的配置文件来初始化用户环境和加载用户的个人设置。例如,.bashrc文件用于配置Bash Shell的环境变量和别名。
4.3 启动用户服务
最后,系统会根据用户的配置来启动用户所需的服务和应用程序,如邮件客户端、编辑器和窗口管理器等。
以上就是Linux系统启动的详细过程和步骤。从引导程序的加载和执行,到内核的加载和初始化,再到用户空间和用户登录后的初始化,每个步骤都至关重要,确保系统正常启动并为用户提供所需的功能和服务。