• 简述linux操作系统启动流程


    Linux启动流程#####

    POST-->BootSequence(BIOS)->Bootloader(MBR,grub)-->kernnel(ramdisk,initrd)-->rootfs(只读)-->switchroot-->/sbin/init-->社会默认运行级别-->运行系统初始化脚本,完成系统初始化-->关闭对应级别下需要停止的服务,启动对应级别下需要开启的服务-->设置登录终端-->启动图形端

    init程序的类型:
    * SysV:init,CentOS 5之前,配置文件:/etc/inittab
    * Upstart:init,Centos 6,配置文件:/etc/inittab,/etc/init/*.conf
    * Systemd:systemd,Centos7,配置文件:/usr/lib/systemd/system、/etcsystemd/system
    

    1. POS
      power on self test,即加电自检,它是BIOS功能的一部分,完成对cpu、主板、内存、软硬盘子系统、显示子系统(包括显示缓存)、串并行接口、键盘、CD-ROM光驱等的检测,主要检测硬件的好坏。
    2. BootSequence
      bootsequence为启动顺序,可在BIOS中设置,BIOS会根据次序查找各引导设备,其查找到第一个有引导程序(bootloader)的设备即为本次启动要用到的设备。以硬盘启动为例,BIOS此时去读取硬盘驱动器的第一个扇区(MBR,512字节),然后执行里面的代码。实际上这里BIOS并不关心启动设备第一扇区中是什么内容,它只是负责读取该扇区内容、并执行。
    3. Bootloader(MBR)
      MBR:Master Boot Record,即主引导记录,是硬盘驱动器上的第一个扇区,它的大小为512Bytes,由三个部分组成。分别为主引导程序(Bootloader)、硬盘分区表DPT(Disk Partition table)和硬盘有效标志(55AA),其大小分别为446Bytes,64Bytes和2Bytes。BootLoader是在操作系统内核运行之前运行的程序。它可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境。
    4. Kernel
      内核阶段会去读/boot下的内核文件,并根据该配置文件来加载Kernel(内核)镜像和initrd至内存,此时内存将得到系统控制权并理解初始化系统中各设备并做相关配置工作,其中包括CPU、I/O、存储设备等。initrd:bootloader initalized RAM disk,即为bootloader初始化的内存盘。因为内核在初始化系统各硬件设备时需要加载不同驱动程序,而每个系统的硬件框架结构不是相同的,内核编译了一部分硬件驱动,而另一部分则被放置在initrd中。
    5. /sbin/init
    运行级别#####
    用来初始化系统的进程,它是所有进程的父进程。当/sbin/init 进程获得系统的控制权之后,他会先读取/etc/initab文件确定系统的运行级别。
    Centos6的/etc/inittab文件:
    ```
    # inittab is only used by upstart for the default runlevel.
    #
    # ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
    #
    # System initialization is started by /etc/init/rcS.conf
    #
    # Individual runlevels are started by /etc/init/rc.conf
    #
    # Ctrl-Alt-Delete is handled by /etc/init/control-alt-delete.conf
    #
    # Terminal gettys are handled by /etc/init/tty.conf and /etc/init/serial.conf,
    # with configuration in /etc/sysconfig/init.
    #
    # For information on how to write upstart event handlers, or how
    # upstart works, see init(5), init(8), and initctl(8).
    #
    # Default runlevel. The runlevels used are:
    #   0 - halt (Do NOT set initdefault to this)
    #   1 - Single user mode
    #   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
    #   3 - Full multiuser mode
    #   4 - unused
    #   5 - X11
    #   6 - reboot (Do NOT set initdefault to this)
    #
    id:3:initdefault:
    ```
    运行级别是为了系统的运行或维护等目的而设定的机制,一共有7个级别,分别用数字0-6表示:
    * 运行级别0:关机,shutdown
    * 运行级别1:单用户模式(single user),root用户,无需认证;维护模式
    * 运行级别2:多用户模式(multi user),会启动网络功能,但不会启动NFS;维护模式
    * 运行级别3:多用户模式(multi user),完全功能模式;文本界面,无图形界面
    * 运行级别4:预留模式,系统未使用,保留
    * 运行级别5 :X11控制台,登录后进入图形GUI模式
    * 运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动
    默认级别一般为3或5
    
    系统初始化#####
    确定运行级别后,/sbin/init程序会读取/etc/rc.d/rc.sysinit这个系统初始化脚本进行系统初始化操作,包括以下部分:
    * 读取/etc/sysconfig/network文件来设置主机名
    * 设置欢迎信息
    * 激活udev和selinux
    * 挂载/etc/fstab文件中定义所有文件系统
    * 检测根文件系统,并以读写方式重新挂载根文件系统
    * 设置系统时钟
    * 根据/etc/sysctl.conf 文件来设置内核参数
    * 激活lvm及软raid
    * 加载额外设备的驱动程序
    * 清理操作  
    
    服务启停#####
    系统初始化之后,系统就可以使用了,但是往往还需要启动一些相应的服务来时网络或主机功能。此时/sbin/init程序会读取/etc/rc.d/rc文件并根据运行级别来判断停止某些服务并启
    动某些服务。
    
    启动终端#####
    在启动所有需要服务之后,系统会启动终端或图形终端来等待用户登录。
  • 相关阅读:
    js实现粘贴板复制
    oracle分页查询
    [小技巧]window10删除此电脑左侧栏中的非磁盘文件夹
    [web]2019第一起数据泄露事件
    [xml]AttributeError: 'xml.etree.ElementTree.Element' object has no attribute 'getroot'
    [python]Mongodb
    [urllib]urlretrieve在python3
    [flask]邮件配置-20171227
    [PowerShell]Python虚拟环境激活失败
    [git]git入门
  • 原文地址:https://www.cnblogs.com/kangfeng/p/8427694.html
Copyright © 2020-2023  润新知