目录
1.1BIOS 引导阶段
1.2引导加载阶段
1.3内核初始化阶段
1.4系统服务启动阶段
1.5用户登录阶段
1.1BIOS 引导阶段
- 计算机通电后,首先由 BIOS(基本输入输出系统)或 UEFI(统一可扩展固件接口)进行初始化。它们负责进行硬件自检,检查硬件是否正常工作,如 CPU、内存、硬盘等设备是否存在故障。
- 接着,会根据预设的启动顺序,查找可启动设备,如硬盘、光盘、U 盘等,找到后将其第一个扇区(MBR)加载到内存的特定位置,如 0x7c00 ,并将控制权交给该扇区中的引导程序(如GRUB程序)
- MBR 位于硬盘的第一个扇区(512 字节),其中包含了一小段引导代码(446 字节)和分区表信息(64 字节)。这段引导代码就是最开始的引导加载程序,它的主要任务是找到并加载真正的操作系统引导程序,如 GRUB(GRand Unified Bootloader)。
1.2引导加载阶段
- 常见的引导加载程序有 GRUB 等,它主要有两个阶段,Stage1 被安装到磁盘的 MBR,负责直接加载 Stage2 并执行跳转.
- Stage2 则负责加载内核及相关文件,它会先把系统切换到保护模式,设置好 C 语言运行环境,然后查找配置文件,根据配置文件中的信息找到内核镜像和初始内存盘镜像,并将它们加载到内存中.
1.3内核初始化阶段
- 内核镜像被加载到内存后,系统会对其进行解压缩操作,并开始执行内核的初始化代码(后面详细过程) 。内核初始化过程中会进行一系列的操作,如检测硬件设备、初始化内存管理、建立进程调度等,为系统的运行建立基本的环境。
- 内核还会加载必要的驱动程序,以使硬件设备能够正常工作,比如硬盘控制器驱动、网络适配器驱动等2.
1.4系统服务启动阶段
- 内核初始化完成后,会启动系统的第一个进程,通常是 init 进程。在不同的 Linux 发行版中,init 进程可能会有所不同,如 SysVinit、Upstart、Systemd 等13.
- 以 Systemd 为例,它会按照配置文件中的顺序,启动各个系统服务和守护进程,如网络服务、文件系统服务、打印服务等,这些服务的启动顺序和依赖关系在配置文件中有明确的定义13.
1.5用户登录阶段
- 系统服务启动完成后,会显示登录界面,等待用户输入用户名和密码进行登录13.
- 用户登录后,系统会根据用户的权限和配置文件,为用户启动相应的环境和应用程序,如 shell 环境、桌面环境等,用户就可以开始使用系统了
1.linux操作系统的引导
1.1 linux是如何从硬盘中读取文件的
1.2 linux在启动过程前是如何拿到硬件参数的
1.3linux在初始运行中都做了什么
trap.c trap_init()
mktime.c time_init()
sched.c sched_init
BIOS/Bootloader:
由PC机的BIOS基本输入输出系统(0xFFFF0:BIOS存储的总线地址)把Bootsect从某个固定的地址拿到了内存中的某个固定地址,并且进行了一系列的硬件初始化和参数设置。
Bootsect.s
磁盘引导块程序,在磁盘的第一个扇区中的程序。
作用:首先将后续的setup.s代码从磁盘中加载到紧接着bootsect.s的地方,在显示屏上面显示loading system再将sysytem(操作系统)模块加载到0x10000的地方,最后跳到setup.s中去运行。
setup.s 1.解析BIOS/BOOTLOADER传递来的参数 2.设置系统内核运行的ILDT(局部描述符)IDT(中断描述符寄存器)全局描述符(设置全局描述符寄存器)设置中断控制芯片,进入保护模式运行 3.跳转到system模块的最前面的代码运行head.s
head.s 1.加载内核运行时的各数据段寄存器,重新设置中断描述符表开启内核正常运行时的协处理器等资源 2.设置内存管理的分页机制 3.跳转到main.c开始运行
2.启动流程
8.操作系统启动初始化程序 init 讲解 1_哔哩哔哩_bilibili
爆肝一晚上,希望用动画带你理解操作系统的启动_哔哩哔哩_bilibili
从BIOS开始画图了解Linux启动过程_哔哩哔哩_bilibili |