; X86平台系统启动流程 (Blog 9) | Linux运维部落

X86平台系统启动流程 (Blog 9)

POST –> BootSeqence(BIOS) –> Bootloader(MBR) –> Kernel(initrd) –> init(/etc/inittab)

适用环境:MBR类的X86PC兼容架构;不适用于其它架构或UEFI的PC架构;

系统组成:
Mage1

内核功能
文件系统、进程管理、网络协议栈、内存管理、驱动、安全加密
内核功能实现通过内核模块;装载模块就有此功能,不装载就没有此功能;

内核特点
支持模块化
支持动态装载或卸载
使用缓冲和缓存来加速对磁盘上的文件访问

操作系统的组成

运行中的内核
Kernel + 根文件系统
内核空间 + 用户空间

从磁盘的视角
内核只是一个静态文件;

如何将一个静态的内核启动起来?
启动:将内核加载至内存中,运行起来;
没有那么契机,没有唐僧揭去压猴石条,猴子是蹦不出来的;

内核通过根文件系统的驱动关联根文件系统;文件系统驱动在根上;
内核需要自带驱动:
如果是自己使用:仅编译进一个硬盘的驱动;

如果是所有人都使用这个内核:就要将所有的硬盘的驱动全部编译进内核;缺点:内核体积大。
为了解决这个问题:通过ramdisk一个临时的根文件系统,仅有当前系统独有的驱动,在操作系统安装后动态生成;

注意:ramdisk并非是必须的,完全可以将驱动编译进内核供自己使用;

内核的组成:
内核文件: /boot/vmlinuz-VERION-release
根文件系统: 遵循FHS层级结构标准,内核启动后关联的分区;有bin, sbin, lib, lib64, etc, proc, sys, var, usr等目录
内核模块:/lib/modules/VERSION-release/ 目录下有各种驱动,为实现内核功能,例如:文件系统模块;网络协议栈;安全加密;内核管理;等;
磁盘映像:/boot/initrd-VERSION-release.img 或 /boot/initramfs-VERSION-release.img

ramdisk:基于内存中的磁盘映像
CentOS5: initrd
CentOS6,7: initramfs

区别:
initrd: 基于内存中的磁盘映像
initramfs: 基于内存中的文件系统

内核特性之一:使用缓冲和缓存来加速对磁盘上的文件访问
所有initrd本身在内存中,仍需要缓冲一次;
initramfs:本身是文件系统不需要再缓冲;

完整的系统启动流程
内核空间 –> 用户空间

CentOS 系统启动流程

LILO启动次序:POST –> bootloader –> kernel(ramdisk) –> init(/etc/inittab)
GRUB启动次序:POST –> bootloader(1st) –> grub(2nd) –> kernel(ramdisk) –> init(/etc/inittab)

POST(Power On SafeTesting)
ROM芯片中COMS提供的BIOS指令完成加电自检;
内核运行在硬件之上,硬件是提供计算能力的最基础的保证;

Boot Seqence
BIOS从启动次序中查找第一个可引导设备(MBR),即为本次要启动的设备

Bootloader
MBR前446Bytes是Bootloader;
Bootloader功能:提供一个菜单,允许用户选择要启动的系统或不同内核版本;把用户选定的内核装载到RAM中的特定空间中,解压、展开,而后把系统控制权移交给内核;
安装在U盘、光盘、硬盘中第0磁盘的第0扇区

MBR组成:
446Bytes: bootloader
64Bytes: fat
4Bytes: 磁盘有效标识

Bootloader分类:
Windows:ntloader
Linux:
LILO: 用446Bytes(ASCII码;一个1Bytes对应一个字符)写bootloader程序是极困难的;
GRUB: 通过驱动完成加载磁盘,实现更多的功能;
GRUB 0.x: grub legacy
GRUB 1.x:grub2

Kernel
被加载至内存的内存,自解压展开;内核初始化,即内核空间;
内核初始化:
(1) 探测可识别的所有硬件设备;
(2) 加载硬件驱动程序;有可能借助于ramdisk加载驱动;
(3) 以只读方式挂载根文件系统;
(4) 运行用户空间的第一个程序/sbin/init
注意:加载init后,内核只会参与发生中断后运行内核空间代码的过程

init(/etc/inittab文件)
init被创建,即用户空间;人间的一切事务均由其代理完成;
设定默认运行级别
初始化
(1) 主机名
(2) 欢迎信息
(3) 激活udev和selinux
(4) 挂载/etc/fstab中定义的所有文件系统
(5) 检测根文件系统,重新挂载根
(6) 设备系统时间
(7) 根据/etc/sysctl.conf设置内核参数
(8) 激活lvm及软RAID
(9) 激活swap设备
(10) 加载额外驱动
(11) 清理临时文件,初始化过程中生成的临时文件;
关闭和启动服务
打印登陆提示符

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:/89053

发表评论

电子邮件地址不会被公开。 必填项已用*标注

联系我们

400-080-6560

在线咨询:点击这里给我发消息

邮件:1660809109@qq.com

工作时间:周一至周五,9:30-18:30,节假日同时也值班

友情链接:guoqibee.com  万达注册  万达娱乐注册  万达娱乐主管  万达开户  万达招商  guoqibee.com  万达娱乐主管  万达娱乐平台  万达娱乐直属