zoukankan      html  css  js  c++  java
  • Linux系统启动过程详解

    Linux系统启动过程:
        BIOS自检-读取MBR-执行引导程序GRUB-加载内核-执行init——系统初始化
    1.BOIS:基本输入输出系统
        BIOS自检主要工作:侦测电脑周边配套设备,如:CPU类型,速度,缓存等;内存的速度,容量;硬盘的大小类型和工作模式;
                      检查这些设备能否通过检测
    2.读取MBR
        BISO自检后读取第一启动设备硬盘的第一个扇区——MBR,然后执行里面的存储程序
        MBR扇区512字节大小,其中后64字节存储磁盘分区信息,最后两个字节存储磁盘的有效标志,其余466字节空间保存启动程序,然后由这个i小程序加载
        存储其他位置的操作系统,即启动GRUB程序
    3.执行引导程序——GRUB
        GRUB程序配置文件/boot/grub/grub.conf

     1 [root@H0f ~]# cat /boot/grub/grub.conf
     2 # grub.conf generated by anaconda
     3 #
     4 # Note that you do not have to rerun grub after making changes to this file
     5 # NOTICE:  You have a /boot partition.  This means that
     6 #          all kernel and initrd paths are relative to /boot/, eg.
     7 #          root (hd0,0)
     8 #          kernel /vmlinuz-version ro root=/dev/sda2
     9 #          initrd /initrd-[generic-]version.img
    10 #boot=/dev/sda
    11 default=0      #引导程序的第一个操作系统开机,对应硬盘的第一个分区
    12 timeout=5      #进入GRUB的画面后,5秒选择使用哪个操作系统开机
    13 splashimage=(hd0,0)/grub/splash.xpm.gz#开机背景图案,hd0表示第一个硬盘,0指硬盘第一个分区,背景图像文件名
    14 hiddenmenu     #隐藏开机选项
    15 title CentOS 6 (2.6.32-642.el6.x86_64)#开机选项标题名称
    16     root (hd0,0)  #0是介绍文件位于哪个目录中
    17     kernel /vmlinuz-2.6.32-642.el6.x86_64(#表示kernel存放内核的位置) ro(#表示 read only)
    18     root=UUID=130776d3-1cb4-415a-bed2-b4a4bf861f47 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet(#不显示错误信息) selinux=0
    19     initrd /initramfs-2.6.32-642.el6.x86_64.img    #将initrd映像文件加载到内存


    4.加载内核
        Linux内核保存在/boot 名字一般为vmlinux-版本号
    内核作用:《取得BOIS检测到的硬件设备信息,然后将硬件设备进行管理,这样才能够提供给Linux系统使用》
    接着加载相应设备驱动程序,之后挂载文件系统,加载开机所需要的库文件程序等
    因此Linux下主要目录必须在同一分区上,否则将开机失败
    dmesg 查看本次启动内核输出信息

     1 [root@H0f rc.d]# dmesg |more 100
     2 Initializing cgroup subsys cpuset
     3 Initializing cgroup subsys cpu
     4 Linux version 2.6.32-642.el6.x86_64 (mockbuild@worker1.bsys.centos.org) (gcc version 4.4.7 20120313
     5  (Red Hat 4.4.7-17) (GCC) ) #1 SMP Tue May 10 17:27:01 UTC 2016
     6 Command line: ro root=UUID=130776d3-1cb4-415a-bed2-b4a4bf861f47 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF
     7 -8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb q
     8 uiet selinux=0
     9 KERNEL supported cpus:
    10   Intel GenuineIntel
    11   AMD AuthenticAMD
    12   Centaur CentaurHauls
    13 Disabled fast string operations
    14 BIOS-provided physical RAM map:
    15  BIOS-e820: 0000000000000000 - 000000000009ec00 (usable)
    16  BIOS-e820: 000000000009ec00 - 00000000000a0000 (reserved)
    17  BIOS-e820: 00000000000dc000 - 0000000000100000 (reserved)
    18  BIOS-e820: 0000000000100000 - 00000000bcee0000 (usable)
    19  BIOS-e820: 00000000bcee0000 - 00000000bceff000 (ACPI data)
    20  BIOS-e820: 00000000bceff000 - 00000000bcf00000 (ACPI NVS)
    21  BIOS-e820: 00000000bcf00000 - 00000000bd000000 (usable)

    5.执行init
    ps -aux 查看当前系统内的所有进程,PID为1的进程永远是init,即系统第一个进程,也是所有进程的父进程

    1 [root@H0f ~]# ps -aux
    2 Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
    3 USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    4 root          1  0.2  0.0  19344  1544 ?        Ss   13:57   1:19 /sbin/init
    5 root          2  0.0  0.0      0     0 ?        S    13:57   0:00 [kthreadd]

    6.系统初始化
    init程序读取/etc/inittb 配置文件的设置,根据配置文件来决定接下来操作系统将如何开展工作
    (1).runlevel:系统常用运行级别0,1,3,5

    1 # Default runlevel. The runlevels used are:
    2 #   0 - halt (Do NOT set initdefault to this) #关机
    3 #   1 - Single user mode                      #单用户模式
    4 #   2 - Multiuser, without NFS (The same as 3, if you do not have networking)#可以使用所有用户登录,但没有网络功能,不启用NFS working
    5 #   3 - Full multiuser mode                   #可以使用所有用户登录,具有所有功能
    6 #   4 - unused                                #用户自定义,默认与3相同
    7 #   5 - X11                                     #与3相同,开机是图形化界面
    8 #   6 - reboot (Do NOT set initdefault to this)#重启

    (2)执行初始化程序
    /etc/rc.d/rc.sysinit程序作用:

    •     设定计算机名称,hostname在/etc/sysconfig/network文件中
    •     设定系统时间
    •     定义键盘,加载键盘驱动,识别键盘以便于信息收集
    •     启用交换(swap)分区
    •     检查根目录,且挂载成可读可写状态
    •     加载其他设备,比如RAID和逻辑卷LVM

    (3)执行runlevel对应程序

    不同的级别对应执行/etc/rc.d 目录下不同的文件

    1 [root@H0f rc.d]# cd /etc/rc.d
    2 [root@H0f rc.d]# ls
    3 init.d  rc  rc0.d  rc1.d  rc2.d  rc3.d  rc4.d  rc5.d  rc6.d  rc.local  rc.sysinit
  • 相关阅读:
    js 平坦化控制流
    js变量名混淆
    ERR_CERT_INVALID
    ERR_CERT_AUTHORITY_INVALID
    @babel/preset-env
    @babel/plugin-transform-runtime
    terminal
    @babel/plugin-proposal-class-properties
    Zotero
    随记 日后整理
  • 原文地址:https://www.cnblogs.com/someone9/p/8624070.html
Copyright © 2011-2022 走看看