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运维部落立场,如若转载,请注明出处:http://www.178linux.com/89053

(0)
逆神阳逆神阳
上一篇 2017-11-27
下一篇 2017-11-27

相关推荐

  • Linux之sed的使用

    sed的工作原理         sed是一种流编辑器以行为单位来处理文本的一款功能十分强大的编辑器,一次只处理一行内容,当处理文本是,将要处理的行放置在模式空间里(缓冲区),接下来sed命令处理模式空间里的内容,处理完成后,把模式空间里处理后的内容送至屏幕打印输出,接下来处理下…

    Linux干货 2016-08-09
  • 负载调度器:调度算法

    调度算法(ipvs scheduler) 起点公平:平均分配,不管分别干的怎么样。 结果公平:谁现在还剩下的在处理的少,就分配给谁。      根据其调度时是否考虑各RS当前的负载状态,可分为静态方法和动态方法两种: 静态方法 静态方法:仅根据算法本身进行调度; RR      …

    2016-10-28
  • 程序包管理之YUM解析

    前言:    yum是rpm的前端程序,用来解决软件包相关依赖性,可以在多个库之间定位软件包,如果直接使用rpm直接安装程序包也可以,但是需要自己手工解决程序包依赖性的问题,可能程序包的依赖性非常复杂,那么直接使用rpm安庄,就会非常麻烦,而使用YUM安装就会自动解决依赖性的问题。大大简化了安装过程。  YUM客户端配置文件: …

    Linux干货 2016-08-24
  • shell中测试命令

    shell中测试命令        test命令提供了if–than语句中测试不同条件的途径。如果test命令中列出的条件成立,test命令就会退出并返回退出状态吗0 。这样if–than语句就与其他编程语言中的if–than语句类似的方式工作了。如果条件不成立,…

    Linux干货 2017-04-16
  • 循环语句for、while、until

    作用:    循环语句的作用是它可以让一段代码重复的执行,直到所需条件不满足为止。 在linux中变量的赋值方式有三种:       第一:直接等于号赋值       第二:通过read交互赋值       第三:for循环的赋值 bash脚本中的循…

    Linux干货 2016-08-22
  • 计算机的一些简单认识

      完整的计算机系统包括硬件和软件两大部分,硬件是指计算机系统中的各种看得见摸得着的物理装置。例如主板,网卡,显示器等。软件是指计算机运行所以需要的各种程序。例如操作系统:linux,windows。办公软件office等等。可以这样理解为软件是对硬件功能通过复杂的编程封装,让人们得以实现计算机应用于生活。 早期的计算机: 英国曼彻斯特科学工业博物…

    2017-09-11