对于一个完整的Linux来说,主要由内核(kernel)和文件系统(rootfs)组成,其中内核包括了:进程管理、网络管理、驱动程序、文件系统、安全功能等。rootfs又包括程序和gilbc库。内核提供了操作系统的功能,rootfs文件系统包含着普通文件系统的存储数据的功能,他还是没和启动时所挂载的第一个文件系统,内核的所有数据文件都存放在这个跟文件系统之下,系统引导启动程序会在根文件系统挂载之后从中把一些初始化脚本(如rcS,inittab)和服务加载到内存中去运行。
Centos6启动流程
我们先来看一张图大致了解一下Linux的启动过程,POST–>BIOS–>MBR(GRUB)–>Kernel–>Init程序。
POST加电自检(Power-OnSelf-Test):是BIOS的一个功能,主要检查硬件设备和查找和加载磁盘上的MBR。
MBR(Master Boot Record):主引导记录,位于磁盘的第一个扇区,大小为512bytes,其中,446bytes用于存储BootLoader程序,64bytes用于存储分区表信息,最后2bytes用于MBR的有效性检查。
GRUB(Grand Unified Bootloader):它是一个多重操作系统启动管理器,用来引导操作系统,负责加载、传输控制到操作系统的内核。
内核(Kernel):又有微内核和宏内核
宏内核(monolithic kernel):又称单内核和强内核,Unix,Linux把所有系统服务都放到内核里,所有功能集成于同一个程序,分层实现不同功能,系统庞大复杂,Linux其实在单内核内核实现了模块化,也就相当于吸收了微内核的优点
微内核(micro kernel):Windows,Solaris,HarmonyOS简化内核功能,在内核之外的用户态尽可能多地实现系统服务,同时加入相互之间的安全保护,每种功能使用一个单独子系统实现,将内核功能移到用户空间,性能差
内核在整个操作系统中占存储很小,以压缩文件的形式保留了基本的模块,它是整个操作系统的核心,整个操作系统都是围绕这个kernel建立起来。
操作系统在启动过程中课有下面概述:
- 加载BIOS的硬件信息,获取第一个启动设备
- 读取第一个启动设备MBR的引导加载程序(grub)的启动信息
- 加载核心操作系统的核心信息,核心开始解压缩,并尝试驱动所有的硬件设备
- 核心执行init程序,并获取默认的运行信息
- init程序执行/etc/rc.d/rc.sysinit文件,重新挂载根文件系统
- 启动核心的外挂模块
- init执行运行的各个批处理文件(scripts)
- init执行/etc/rc.d/rc.local
- 执行/bin/login程序,等待用户登录
- 登录之后开始以Shell控制主机