• CentOS 系统启动流程


    CentOS 系统启动流程

    1. linux系统的组成部分 内核 + 根文件系统

    ​ 内核: 进程管理 内存管理 网络协议栈 文件系统 驱动程序 安全功能

    ​ IPC : inner Proccess communication

    ​ 本地进程间通信机制 消息对列 semerphor shm

    ​ 远程通信机制 socket

    运行中的系统分为两层 内核空间 用户空间

    ​ 用户空间: 应用程序(进程或线程)

    ​ 内核空间:内核空间(系统调用)

    启动分区:/boot

    rootfs: FHS /bin /sbin /lib /etc /proc /sys /dev , init 是最关键的 /boot

    这些都存在于磁盘 谁加载他们?

    内核设计流派:

    1. 单内核设计 所有功能集成

      linux

    2. 微内核设计 每个功能使用子系统实现

      windows、Solaris

    linux 内核特点:

    - 支持模块化  .ko (kernel object)
    - 支持模块运行时的动态装在和卸载
    

    组成部分:

    - 核心文件  /boot/vmlinuz-3.10.0-862.14.4.el7.x86_64c
    - 模块文件  /lib/modules/3.10.0-862.14.4.el7.x86_64/
    

    2. ramdisk

    要加载内核和根文件系统,需要首先加载根文件系统下的 fs 模块

    要实现这个操作 需要使用一个临时的根系统首先加载 fs 模块。

    这个临时根系统叫做ramdisk: 使用内存的一部分加载 内核模块。

    使用ramdisk 加载完内核后,ramdisk 会释放

    ramdisk路径

    ​ centos6、7 :initramfs-3.10.0-862.14.4.el7.x86_64kdump.img 使用fs(文件系统) 比 rd 避免了双缓存,提高效率。

    3. CentOS 启动流程(内核)

    内核级别: POST -> BootSequence(BiOS) --> BOOTLoader(MBR) --> kernel(ramdisk) -->rootfs(readoly) --> /sbin/init

    1.POST: Power ON Self Test 加电自检

    ​ ROM:CMOS

    ​ BIOS: 基本输入输出系统

    ROM(Read Only Memory),只读存储器,ROM是非挥发性内存,在没有通电的时候,也能将数据记录下来。

    BIOS(Basic Input Output System)是一套程序,这套程序写死在ROM上。BIOS是系统开机时首先去读的程序,用来读取和更新CMOS内的数据。

    CMOS用来保存主板上组件的参数,如是否启动网卡或显卡,CMOS芯片需要借助额外的电源来发挥记录功能,这也会主板上会有一个电池的缘故,将该电源断电会重置各项主板组件参数。

    2. 根据BIOS 的bootSequence设置 按次序去查找第一个有引导程序的设备

    • windows ntloader

    • linux:

      • LILO(不支持1024以后的柱面 太小, 但是andrid 使用 即手机使用)
      • GRUB
        • 0.X Grub Legacy
        • 1.X Grub2

      功能: 提供一个菜单,让用户选择内核版本

      ​ 将内核加载到RAM 空间中,解压展开,然后将系统的控制权移交给内核;

      MBR:Master Boot Record

      ​ 硬盘 头 512 bytes

      ​ 446bytes bootloader

      ​ 64bytes 分区表

      ​ 2bytes 55AA (表示MBR可用)

      GRUB:

      ​ bootloader: 第一阶段

      ​ Parttion: 1.5 阶段 文件系统驱动 filesystem driver

      ​ Parttion: /boot/grub 第二阶段

      UEFI ,GPT

    3. 加载内核 kernel 阶段

    自身初始化:

    ​ 探测可识别到的所有硬件设备

    ​ 加载硬件驱动程序;

    ​ 以 只读方式挂载跟文件系统

    ​ 运行用户态的第一个应用程序 /sbin/init

    ​ CentOS 5 : /etc/inittab

    ​ CentOS 6 : /etc/init/*.conf

    ​ CentOS 7 : /etc/systemd/system /usr/lib/systemd/system

    ​ ramdisk

    ​ linux 内核的特性之一 使用缓冲和缓存来加速对磁盘上的文件访问:

    ​ ramdisk ——> ramfs

    ​ CentOS5 :initrd

    ​ CentOS 6,7 dracut , initrd

    4. init 级别(用户空间)

     0  关机
     1  单用户模式
     2  多用户模式,无nfs
     3  多用户模式  完全功能模式
     4  预留级别
     5  多用户级别 完全功能 图形界面
     6  重启 reboot
    

    配置文件 /etc/inittab

    初始化脚本/etc/rc.d/rc.sysint

    • 设置主机名称
    • 设置欢迎信息
    • 激活udev 和 selinux
    • 挂载/etc/fstab 中定义的文件系统
    • 检测根文件系统,并以读写方式重新挂载
    • 设置系统时钟;
    • 激活lvm 以及软raid设备;
    • 激活swap 设备
    • 加载额外设备的驱动程序
    • 清理操作

    CentOS5

    总结用户空间运行流程(sbin/inittab)

    设置默认的运行级别 --> 运行系统的初始化脚本 --> 关闭对应级别下需要停止的服务,启动对应级别下需要开启的服务--> 设置登录终端 -->启动图形终端

    CentOS6

    init 程序:upstart 但名称依然是/sbin/init

    配置文件/etc/init/*.cnf(将配置文件切割成多个片段

    /etc/inittab(仅配置运行级别)

    CentOS7

    init 程序:systemd 配置文件 /usr/lib/systemd/system/* /etc/systemd/system/*

    兼容SysV脚本机制,建议使用systemctl 来控制服务

    5. 启动总结

    CentOS6

    POST --> BOIS BOOT Sequence --> Boot Load --> kernel(RAMdisk) --> rootfs(只读) --> 加载/sbin/init --> /etc/inittab /etc/init/*.conf --> 设置默认运行级别 --> 运行 初始化脚本 --> 启动或者关闭对应运行级别的服务 --> 启动终端

    6 grub

    功能:

    1. 提供菜单 并提交交互时接口

    ​ e: 编辑模式 用于编辑菜单

    ​ c: 命令模式 交互式接口

    2)加载用户选择的内核或者操作系统

    3) 为菜单提供保护机制

  • 相关阅读:
    LeetCode234回文链表
    LeetCode445两数相加II
    LeetCode24两两交换链表中的节点
    LeetCode19删除链表的倒数第N个节点
    LeetCode513找树左下角的值
    LeetCode637二叉树的层平均值
    LeetCode671二叉树中第二小的节点
    LeetCode337打家劫舍III
    LeetCode124二叉树中的最大路径和
    LeetCode687最长同值路径
  • 原文地址:https://www.cnblogs.com/pythonPath/p/12527277.html
Copyright © 2020-2023  润新知