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

相关推荐

  • bash脚本编程之select语句、函数

    概述     承接上篇,继续介绍一下另一个循环语句select,还有脚本中函数的相关内容,分为三个部分:         1、select语句的介绍和效果演示       &nbs…

    Linux干货 2016-08-21
  • linux命令的使用格式

    Linux命令的一般格式为: [root@node1 ~]#command [选项] [参数] 1、ifconfig 设备 参数 参数: up:启动指定设备 down:关闭指定设备 arp:指定设备是否支持ARP协议 -a:显示全部接口信息 例如:[root@node1 ~]#ifconfig eth0 up #启动eth0网卡 2、echo打印 &nbsp…

    Linux干货 2016-09-17
  • shell编程之数组及变量的多功能用法

    数组及变量的多功能用法   一、数组: 1、数组:存储多个元素的连续的内存空间,相当于多个变量的集合(变量:存储单个元素的内存空间)。 2、数组名和索引 索引:编号从0开始,属于数值索引 bash的数组支持稀疏格式(索引不连续) 注意:索引可支持使用自定义的格式,而不仅是数值格式,即为关联索引,bash4.0版本之后开始支持。 声明数组: decl…

    Linux干货 2016-08-26
  • 搭建基于http的本地yum源服务器

    概述 yum相较于rpm,能够更好地解决安装软件时的依赖包问题,使用yum安装更简单更方便。搭建本地YUM源服务器,可以避免升级安装软件时占用公网带宽;有了本地YUM源服务器,可以解决无法连接Internet的其他YUM客户端的软件升级和安装。 本文主要介绍了以下内容: 通过编译Apache源码包安装httpd服务; 搭建基于HTTP的yum源服务器; 将I…

    Linux干货 2016-08-24
  • 小白易患错误之绝对路径和相对路径的操作错误

    小白易患错误之绝对路径和相对路径的操作错误 作为一个不安稳的小白,一天都在那路乱折腾,恰巧,老师课程题目中有一题将/etc/skel 这个目录的文件除了..和. 复制到/home/USRNAEM 的家目录下。然后自以为是不按照老师的方法,自己折腾用了这样一条命令 [root@local skel]# ls -A .bash_lo…

    Linux干货 2016-08-05
  • linux用户,组及权限管理

      写在前面: 本博客详解命令如下: useradd, userdel,usermod, passwd,  chage, groupadd,  groupdel, groupmod, gpasswd ,newgrp, chsh, id, su,  chmod,  chowm,  chgrp, &nb…

    Linux干货 2015-12-19