• Linux 系统的启动顺序


    • 第一步:加载BIOS
    1. 当你打开ia计算机的电源,计算机会首先加载计算机主板的BIOS信息,因为它包含了CPU的相关信息,设备启动顺序[安装系统的U盘启动顺序],内存信息,时钟信息,PnP特性等等, 以后计算机会按照顺序读取硬件设备了。
    • 第二步:读取MBR
    1. 众所周知,硬盘上第0磁道第一个扇区被称为MBR,也就是Master Boot Record,即主引导记录,它的大小是512字节,别看地方不大,可里面却存放了预启动信息、分区表信息。
      系统找到BIOS所指定的硬盘的MBR后,就会将其复制到0×7c00地址所在的物理内存中。其实被复制到物理内存的内容就是Boot Loader,而具体到你的电脑,那就是lilo或者grub了。
    • 第三步:Boot Loader
    1. Boot Loader 就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核做好一切准备
      Boot Loader有若干种,其中Grub、Lilo和spfdisk是常见的Loader。
      我们以Grub为例来讲解吧,毕竟用lilo和spfdisk的人并不多。
      系统读取内存中的grub配置信息(一般为menu.lst或grub.lst),并依照此配置信息来启动不同的操作系统。
    • 第四步:加载内核
    1. 根据grub 设定的内核映像所在路径,系统读取内存影像,并进行解压缩操作,此时,屏幕一般会输出 “Uncompressing Linux " 的提示,当解压缩内核完成后,屏幕输出”ok , botting the kernel " ,也就是内核加载完毕的意思,系统将解压好的内核放置到内存之中,并调用start_kernel()函数 来启动一系列的初始化函数并初始化各种设备,完成Linux核心环境的建立,至此,Linux内核已经初始化完毕了,基于Linux 的程序 应该可以正常运行了。
    • 第五步:用户层init依据inittab文件来设定运行等级
    1. 内核被加载后,第一个运行的程序是/sbin/init ,该文件会读取/etc/inittab 文件,并根据次文件进行初始化的工作。/etc/inittab文件就死设定linux的运行等级,其设定形式如下:
    # inittab is no longer used when using systemd.
    #
    # ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
    #
    # Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
    #
    # systemd uses 'targets' instead of runlevels. By default, there are two main targets:
    #
    # multi-user.target: analogous to runlevel 3
    # graphical.target: analogous to runlevel 5
    #
    # To view current default target, run:
    # systemctl get-default
    #
    # To set a default target, run:
    # systemctl set-default TARGET.target
    #
    

      0 :关机

           1 :单用户

           2 :无网络支持的多用户模式

           3 :用网络支持的多用户模式

          4  :保留,暂未使用

          等等

        不同的linux 发行版本,对于启动的控制不一样

    • 第六步 :
    1.        设定了运行等级之后,Linux执行的地一个用户层文件就是 /etc/rc.d/rc.sysinit脚本程序,里面会进行设定 PATH,设定网络配置[/etc/sysconfig/network],启动swap分区,设定/proc等等
    • 第七步:启动内核模块
    1. 具体是根据/etc/modules.conf文件或者/etc/modules.d目录下的文件来装载内核模块。
    • 第八步:执行不同的运行级别的脚本程序
    1. 根据运行级别的不同,系统会运行rc0.d到rc6.d中的相应的脚本程序,来完成相应的初始化工作和启动相应的服务。
    • 第九步: 执行/etc/rc.d/rc.local
    1. 你如果打开了此文件,里面有一句话,读过之后,你就会对此命令的作用一目了然:
      # This script will be executed *after* all the other init scripts.
      # You can put your own initialization stuff in here if you don’t
      # want to do the full Sys V style init stuff.
      rc.local就是在一切初始化工作后,Linux留给用户进行个性化的地方。你可以把你想设置和启动的东西放到这里。
    • 第十步:执行/bin/login程序,进入登录状态
    1. 就是linux的登录界面,等待用户输入用户名和密码了。
    • 备注:以上可以参照centos7以上的版本,相关的文件都比较容易查看的。
    • 文章参考地址:http://m.blog.chinaunix.net/uid-26495963-id-3066282.html?winzoom=1.375
  • 相关阅读:
    浅谈Dotnet的数据定位和匹配
    聊聊Dotnet的垃圾回收
    Dotnet中Span, Memory和ReadOnlySequence之浅见
    Dotnet的局部函数和委托的对比
    一文说通Dotnet的委托
    开发进阶:Dotnet Core多路径异步终止
    冷饭新炒:理解布隆过滤器算法的实现原理
    冷饭新炒:理解JWT的实现原理和基本使用
    冷饭新炒:理解JDK中UUID的底层实现
    起飞,会了这4个 Intellij IDEA 调试魔法,阅读源码都简单了
  • 原文地址:https://www.cnblogs.com/bing-yu12/p/7619869.html
Copyright © 2020-2023  润新知