1. BIOS启动
在开机时,计算机首先执行基本输入/输出系统(BIOS)代码。BIOS是一种固件,负责初始化硬件并检测系统中的所有设备。BIOS还负责查找并加载操作系统(OS)。
BIOS的作用:
进行自检(POST):BIOS会自检硬件并检查是否有任何错误。
加载引导程序:BIOS会查找并加载位于启动设备(通常是硬盘)上的引导程序(bootloader)。
传递控制权给引导程序:一旦加载引导程序,BIOS就会将控制权传递给引导程序,让其启动操作系统。
2. 引导程序的执行
2.1 MBR和主引导记录
主引导记录(MBR)是存储在启动设备的第一个扇区的特殊区域。MBR包含了一个引导加载程序,负责加载操作系统的核心组件。当BIOS加载了MBR后,它将执行该引导加载程序。
引导加载程序的作用:
读取分区表:引导加载程序会读取MBR中的分区表,以确定系统上存在哪些操作系统。
选择操作系统:引导加载程序根据分区表选择要启动的操作系统。
加载核心组件:引导加载程序将控制权传递给所选操作系统的核心组件,以便启动操作系统。
/* 这是一个简化的引导加载程序示例 */
int main() {
// 读取分区表
partition_table = read_partition_table();
// 选择操作系统
os = choose_operating_system(partition_table);
// 加载核心组件
os->load_kernel();
// 启动操作系统
os->start();
}
2.2 GRUB引导程序
GNU GRUB(GRand Unified Bootloader)是一种常用的引导程序,用于引导多个操作系统。GRUB具有丰富的功能,可以在引导时提供菜单界面以供用户选择操作系统。
GRUB的作用:
提供菜单界面:用户可以在GRUB的菜单界面中选择要启动的操作系统。
加载操作系统:GRUB加载用户所选择的操作系统。
启动操作系统:GRUB将控制权传递给所选操作系统,以启动操作系统。
3. Linux内核的加载和初始化
一旦引导程序选择了要启动的Linux操作系统,它会加载Linux内核到内存,并传递控制权给内核。Linux内核是操作系统的核心组件,负责管理系统的资源、调度进程、提供系统服务等。
Linux内核的加载和初始化过程:
内核加载:引导程序加载Linux内核的镜像文件(通常为vmlinuz)到内存。
初始化过程:
初始化内存管理:Linux内核会初始化系统的内存管理,包括设置页面表、分配内存给进程等。
初始化进程:Linux内核会启动第一个进程(通常是init进程),这个进程是整个系统的父进程。
初始化子系统:Linux内核会初始化各种子系统,如文件系统、网络子系统等。
运行init进程:一旦内核完成初始化过程,它会启动init进程,init进程将继续系统的初始化和启动用户空间的服务和进程。
4. 用户空间的初始化
一旦init进程开始运行,它将启动用户空间的服务和进程。用户空间是操作系统中的非内核部分,包括各种系统服务和用户级的应用程序。
用户空间的初始化过程:
运行系统初始化脚本:init进程会运行系统初始化脚本(如/etc/init.d/rcS),该脚本负责启动系统的基本服务,如网络服务、时间同步服务等。
启动用户服务:init进程会根据配置文件(如/etc/inittab)启动各种用户空间的服务,如登录服务、打印服务等。
启动用户进程:init进程会根据配置文件启动用户级的应用程序,如窗口管理器、终端程序等。
综上所述,Linux系统的开机过程可以分为BIOS启动、引导程序的执行、Linux内核的加载和初始化以及用户空间的初始化。每个阶段都承担着不同的任务,最终完成了系统的启动和用户空间的初始化。