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 23:14
下一篇 2017-11-27 23:25

相关推荐

  • 查找与压缩

    文件查找 在文件系统上查找符合条件的文件;  文件查找:locate, find locate :非实时查找(数据库查找) find :实时查找 locate 1.查询系统上预建的文件索引数据库 /var/lib/mlocate/mlocate.db  2.依赖于事先构建的索引,索引的构建是在系统较为空闲时自动进行(周期性任务);管理需要员手动更新数据库…

    Linux干货 2016-08-22
  • Shell脚本编程基础中() (()) [ ] [[ ]] 的使用

    Shell脚本编程基础中() (()) [ ] [[ ]] 的使用 () 生成子进程,括号内的命令将会在子进程中运行,父进程不能够读取在子进程中创建的变量 例: 新建个脚本文件,写入 则执行结果为 $()相当于 ` `  ,返回括号内命令执行结果 (( )) 用作四则运算和逻辑运算,并且支持多个表达式 例: 当 (( )) 加$,则是将获得表达式值,赋值给左…

    2017-11-26
  • 计算机的组成及其功能

    计算机现如今已经成为了我们生活中不可缺少的一部分,那么它是由什么组成的呢?简单来说,计算机系统是由硬件系统(hardware system)和 软件系统(software system)两部分组成。 Mac电脑背景图.jpg 下面我们来罗列一下计算机系统的主要组成,请看下图 计算机系统组成.png 计算机的功能 我们知道计算机十分强大,那么它都有哪…

    Linux干货 2017-08-23
  • Jmeter性能测试 入门

    Jmeter是一款优秀的开源测试工具, 是每个资深测试工程师,必须掌握的测试工具,熟练使用Jmeter能大大提高工作效率。 熟练使用Jmeter后, 能用Jmeter搞定的事情,你就不会使用LoadRunner了。 【小坦克Jmeter教程】,将会覆盖Jmeter的各个功能,并且会通过丰富的实例,让读者快速掌握Jmeter的各种用法 。 本文将通过一个实际的…

    Linux干货 2015-03-06
  • 创建CA 和申请证书

    创建CA 和申请证书1生成私有CA的私钥:(umask 066;openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)注:CA的私钥文件必须放在/etc/pki/CA/private/cakey.pem 这个路径里2创建序列号 ,数据库文件touch  /etc/pki/CA/index.tx…

    Linux干货 2017-07-17
  • yum用法第一篇-简介及常见用法使用总结

    一、简介     yum( 全称为:Yellow dog Updater, Modified),是红帽(RedHat)家族(RedHat、Fedora、CentOS)中的前端shell的软件包管理器,主要基于对RPM包的管理,能够根据配置文件(类似于svn资源库配置文件)从指定的服务器自动下载RPM包进行安装,其最大的优势就是可…

    Linux干货 2015-09-22