操作系统系统启动流程
Posted "sudo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了操作系统系统启动流程相关的知识,希望对你有一定的参考价值。
文章目录
系统启动流程(Linux)
1. Bios 加电自检
2. 把 MBR 加载到内存
3. 加载 grub 引导程序
4. Kernel 自身初始化
5. 启动第一个程序 systemd
BIOS
- 初始化硬件
- 查找启动设备
1 - CD-DVD - 光驱启动
2 - PXE - 网络启动
3 - USB - USB启动
4 - HDD (硬盘启动 - Hard Disk) MBR - 主引导记录
MBR
1 - 446B BootLoader:安装GRUB的stage1 或 GRUB2的 boot.img
2 - 64B partition table 主分区表:四个主分区
3 - 2B magic number AAH 55H 标识
GRUB2启动引导
1 - boot.img 唯一作用是在系统启动时装载 core.img ,即装载内核
2 - core.img 是GRUB2的核心映像文件
3 - *.mod 可以动态加载的模块
4 - grub.cfg
如果 /boot 在独立分区,则:/grub2/grub.cfg
如果 /boot 不在独立分区,则: /boot/grub2/grub.cfg
内核引导
1 - /boot/vmlinuz Linux内核映像及内核参数传递
2 - /boot/initramfs
首先:在内存中释放供内核使用的根文件系统(/boot/initramfs)
然后,挂载真正的根文件系统,然后执行 /usr/lib/systemd/systemd
systemd
1 - 读取 /etc/systemd/system
2 - default.target - 链接文件
3 - graphical.target - 图形界面
4 - 启动 图形界面用户登录 进程
固件和BIOS
早期,BIOS是烧在主板上的;
计算机主板上的BIOS在以前就被称为固件
【蓝屏,硬件出现问题】
BIOS分类
1 - legacy
legacy启动模式是当前最常用的BIOS启动模式,读取MBR引导记录表
2 - uefi
Unified Extensible Firware Interface
译:统一的可扩展固件接口
- 是一种新型BIOS
- 兼容传统的legacy启动方式
关于legacy
MBR 介绍
采用MBR(Main Boot Record,译 主引导记录)分区表
主引导分区:共512字节(1 Byte = 8 bit
),分为三部分
1 - 主引导程序 446B - 主引导程序所在位置
2 - 磁盘分区表 DPT 64B - 读取分区表
分区一 16B:
第1个字节:0x80 表示激活 - 激活的分区拥有控制权,四个分区只有一个是激活的
第2-4字节:分区第一个扇区的物理位置
第5个字节:主分区类型
第6-8字节:分区最后一个扇区的物理位置
第9-12字节:分区已用完的扇区数
第13-16字节:分区扇区总数
4 字节,32 位
一个主分区的扇区总数不超过:2^32个
每个扇区大小为 512 字节
单个分区最大空间为:2^32 * 512 = 2T
分区二 16B:
分区三 16B:
分区四 16B:
3 - 结束标志 2B 分区结束
MBR 局限性
1 - 最多四个主分区,或 最多支持 3个主分区+一个扩展分区
2 - 每个分区最大 2T
关于uefi
kylin OS:
存在一个 ESP 分区(EFI系统分区)
uefi的引导程序是以后缀名为 .efi 的文件存放在 ESP 分区中,ESP 分区采用 fat32 文件系统
kylinos将 ESP 分区挂载到 /boot/efi ,直接用文件夹浏览器进去就可以查看到 .efi 文件
GPT
采用GPT(GUID Partition Table)分区表
译:全局唯一标识磁盘分区表
优势
- 大小可支持到128个分区
- 每个分区大小可为 2^64 *512
- 容错性、兼容性
bootloader 启动管理器
计算机读取MBR前面的446B的机器码后,会将控制权交给Boot Loader
Linux下的Bootloader有:
- grub
- grub2
- lilo
- spfdisk
BootLoader的主要功能
1 - 提供菜单
用户可以选择不同的启动项
2 - 加载内核文件
直接指向可启动的程序区段来开始操作系统
3 - 转交给其他 Loader
将引导装载功能转交给其他Loader负责
kernel初始化
kernel文件很小,只保留了最基本的模块,并以压缩的文件形式存储在硬盘中
内核文件放置在 /boot
目录下
BIOS - bootloader - kernel
initrd - 镜像文件
systemd - 守护进程
- systemd 是Linux系统工具,用来启动守护进程,已成为大多数发行版的标准配置
- systemd取代了initd,成为系统的第一个进程(PID=1),其他进程都是它的子进程
- systemd ,可以并发,可以触发进程组
- systemd - 不是一个命令,是一组命令
- systemd - 位于 /etc/systemd/system
kylinos采用过多种启动方式
1 - Sysvinit
2 - upstart
3 - system
4 - systemd
1 - systemd 执行的第一个目标是: default.target;实际上,图形化系统的default.target是指向graphical.target的软链接 (.target 是一组命令)
常用target对应到Sysvinit的运行级别
运行级别 runlevel | 名称 | 描述 |
---|---|---|
basic.target | 启动基本系统,该目标间接并包含了所有的本地挂载点单元以及其他必须的系统初始化单元 | |
default.target | 默认的启动目标,通常指向 multi-user.target 或者 graphical.target | |
5 | graphical.target | 专用于启动图形化登录界面的目标单元,其中包含了 multi-user.target 单元 |
0 | halt.target | 专用于关闭系统但不切换电源时启动的单元 |
0 | poweroff.target | 停止系统运行并切断电源 |
local-fs.target | 专用于集合本地文件系统挂载点的目标单元 | |
3 | multi-user.target | 专用于 多用户 且 命令行模式 下 启动的单元,其[install]段都应该加上WantedBy=multi-user.target指令 |
1 | rescure.target | 专用于启动基本系统并打开一个救援shell时需要启动的单元 |
emergency.target | 单用户模式,没有服务程序运行,文件系统也没有挂载。这是一个最基本的运行级别,仅在主控制台上提供一个shell用于用户与系统进行交互。 | |
local-fs-pre.target | 此目标单元自动排在所有 需要自动挂载的本地文件系统挂载点 之前。可用于确保在 挂载本地文件系统 之前启动某些单元。 | |
6 | reboot.target | 重启系统,专用于重启系统时需要启动的单元 |
挂载文件系统后,再依次运行各target,最后才会运行到default.target 链接到的target(默认是 grapgical.target 和 multi-user.target),至此用户就可以通过图形或者控制端来登录系统
系统启动完成
总结
1 - 计算机加电到完成启动,包含多个进程;
2- 系统启动需要固件支持。legacy 采用的时 MBR分区表,MBR分区表的结构决定了它支持的分区数量和大小;
3 - 当主机存在多个操作系统时,需要bootloader管理和启动系统;
4 - kylinos V10 目前采用的初始化进程是 systemd
5 - 当systemd作为启动进程进行时,它将初始化系统,也就是启动并维护各种用户空间的服务
以上是关于操作系统系统启动流程的主要内容,如果未能解决你的问题,请参考以下文章