本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名原文链接~~~

Linux基础(55)之CentOS 5或6的启动流程

微信搜索 zze_coding 或扫描 👉 二维码关注我的微信公众号获取更多资源推送:


CentOS 5或6的启动流程

现在我们能见到的服务器体系结构当中大多数都是 x86,这里先以 x86 系列的 CentOS 5 或 6 的主机为例,看一下它的开机过程:

  • POST(Power On Self Test,加电自检):当接通电源时,整个硬件平台要检测自己所需要的各个组件是否正常工作;

加电自检的整体过程就跟主板上的 ROM 芯片中所定义的程序(CMOS)来实现,而 CMOS 可以做一些设定,这个设定就是通过BIOS(Basic Input And Ouput System)来实现,它用来设定硬件彼此之间的协作方式,可以理解为 BIOS 也是一个程序,只是它并不是装在硬盘上,而是是存储在 ROM 芯片上。
当开机以后,主机激活 CPU,CPU 就会被传递第一条指令——叫醒指令,CPU 这个时候会接收到传递给它当前主机上某 ROM 地址空间中的某一特定地址,而后,CPU 就会加载并执行这个特定地址空间中所给定的指令,从而完成自检等相关操作。
整个硬件的 RAM 地址空间不是仅由内存组成的,而是由 ROM + RAM 组成的,内存是使用 16 进制数字或 32 位数字进行编址的,编址的地址可能是从 32 个 0 起始到 32 个 1 结束,但是这 32 个 0 开始的地方并不是直接就编址 RAM 了,而是 ROM,ROM 编址完后剩余的空间给 RAM 了,而 ROM 中有一个特定位置自检程序,通过此自检程序完成自检操作。
如果自检没问题了,就会出现 BIOS 的设定界面。

  • 根据 BIOS 中设置的 BOOT SEQUENCE 寻找启动要使用的设备(硬盘);

任何一个硬件设备它是不可能自我工作,而是必须要结合软件来实现,所以任何一个计算机拿到以后我们就要去装操作系统,操作系统一般在外部的存储设备上,而外部的存储设备可以有多个,那我们的操作系统到底在哪一个设备上呢?
而在 BIOS 中就有一项设定非常重要,那就是 BOOT SEQUENCE,它可以用来设定系统的引导次序。

  • 在设备中加载 BOOT LOADER,如 GRUB;

BIOS 会根据设定的引导次序逐一在各个硬盘中去查找引导设备,找到第一个存在引导程序(BootLoader,引导加载器)的设备就不会继续往后查找了。
对 Linux 而言有两种引导加载器,早些年有一个 LILO(Linux Loader),而 LILO 只能装载在使用小存储 ROM 芯片的主机上,而服务器或个人桌面系统上常用的引导加载器叫做 GRUB(Grand Uniform BootLoader,它支持启动 Windows,还能启动 BSD Unix),在 CentOS 7 之前 GRUB 使用的都是 0.x 的版本(GRUB Legacy),称为第一代;而在 CentOS 7 之后的 GRUB 用到了 1.x 的版本,也称为 GRUB2,即第二代。GRUB2 和 GRUB 虽然都叫 GRUB,但是 GRUB2 其实是完全重写的,二者区别非常之大。

  • 通过 GRUB 指定加载的内核或系统;

加载器是用来做什么?
说白了就是找到操作系统所在的磁盘分区,把内核加载至内存中,并且将控制权能正常转交给内核的一个程序。
那 BootLoader 在哪儿呢?以硬盘为例它就放在硬盘的 MBR 中。
前面有说过 MBR 分区中可分为三段空间,446 个字节来存放 BootLoader,后面 64 个字节就是磁盘分区表(FAT),后面 2 个字节用来标记 BootLoader 是否有效。
GRUB 使用了非常精巧的设计方式,突破了 446 字节的限制,它能够提供一个菜单,允许用户选择要启动的系统或不同的内核版本,把用户选定的内核装载至内存的特定空间中、展开,之后将整个系统的控制权转交给内核,至此 BIOS 的使命完成并终止了。

  • 内核自装载及自身初始化,安装访问硬件的相关驱动(有可能借助于 ramdisk 加载驱动),运行相关内核进程到内核空间;
  • 以只读方式加载根文件系统;
  • 运行用户空间下的第一个应用程序:/sbin/init
# Linux 基础  

如果这篇文章对您有帮助,可点击下方链接分享给你的朋友们😋,如果遇到问题欢迎评论、留言~~~😇

评论

公众号:zze_coding

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×