1. 开机后系统首先在实地址模式下工作(只有1MB的寻址空间)
  2. 开机过程中,需要先准备在实模式下的中断向量表和中断服务程序。通常,由固化在主板上一块ROM芯片中的BIOS程序完成
  3. 加载BIOS的硬件信息,BIOS程序检测显卡、键盘、内存等,并在00000H~003FFH区建立中断向量表,在中断向量所指主存区建立相应的中断服务程序。并依据设定取得第一个可开机的装置。
  4. BIOS利用INT指令执行特定的中断服务程序把OS从磁盘加载到内存中。例如,BIOS可通过执行int 0x19指令来调用中断向量0x19对应的中断服务程序,将启动盘上的0号磁头对应盘面的0磁道1扇区中的引导程序装入内存
  5. 读取并执行第一个开机装置内的MBR的的开机管理程序Boot Loader(grub2、spfdisk等)
  6. 引导程序被读到内存后,开始执行引导程序,以依据Boot Loader的设定加载Kernel,并对GDT、IDT等进行初始化,系统启动后,进入保护模式。一旦进入保护模式,就不再使用BIOS。
  7. Kernel会开始侦测硬件和加载驱动程序。在硬件驱动成功后,Kernel会主动呼叫systemd程序,并以default.target流程开机
        (1)systemd执行sysinit.target初始化系统及basic.target准备操作系统
        (2)systemd启动multi-user.target下的本机与服务器服务
        (3)systemd执行multi-user.target下的/etc/rc.d/rc.local文件
                 新的systemd机制建议把程序指令或者脚本放在/etc/systemd/system下,使用systemctl enable命令执行
                 也可以把它们放入/etc/rc.d/rc.local下,rc-local.service服务会判断其是否有可执行权限
        (4)systemd执行multi-user.target下的getty.target及登入服务
        (5)systemd执行graphical需要的服务
                如果default.target是multi-user.target,这个步骤就不会执行。
                如果default.target是graphical.target,那么systemd就会开始加载用户管理服务与图像界面管理员等,启动图形界面来让用户登入系统。
                实际让用户可以登入的服务是gdm.service,最重要的执行档是/usr/sbin/gdm
 
      BIOS(Basic Input Output System),是基本输入/输出系统的简称,是针对具体主板设计的,与安装的操作系统无关。它是一组固化到计算机内主板上一个ROM芯片上的程序,包含各种基本设备驱动程序,通过执行BIOS程序,基本设备驱动程序以中断服务程序的形式被加载到内存,以提供基本I/O系统调用。它保存着计算机最重要的基本输入输出的程序、开机后的自检程序和系统自启动程序,它可从CMOS中读取系统设置的具体信息(如CPU与接口设备的沟通频率、系统时间、各接口设备I/O地址等)。读取这些信息后,BIOS会进行开机自我测试,然后执行硬件侦测的初始化,并设定PnP装置。然后再定义可开机的装置顺序并对装置进行数据读取。
        BIOS会指定开机装置好让我们读取磁盘中的操作系统核心档案(/boot/vmlinux)。需要一个开机管理程序(Boot Loader)处理核心档案加载的问题。Boot Loader在开机装置第一个扇区(MBR分区)内,由BIOS通过硬件的INT中断功能读取,其主要功能是认识操作系统的文件格式并据以加载核心到主存储器中执行。目前linux主流的boot loader为grub2。
        每个操作系统都有自己的boot loader。 Linux的boot loader可以提供选单,由用户选择不同的开机项目。可以选择不同的核心开机,也可以加载其它boot sector(每一个文件系统都会保留一块启动扇区boot sector提供操作系统安装boot loader)内的boot loader(如windows的loader或者linux在boot sector内的另一个开机管理程序),将开机管理功能转交给其他Loader负责。
       核心解压缩到主存储器之后,会以自己的功能重新侦测一次硬件而不一定使用BIOS侦测到的硬件信息,动态加载核心模块(一些非必要且可以编译成为模块的核心功能,在/lib/modules/下,例如USB等磁盘接口的驱动程序)。
       因此,如果根目录在特殊的磁盘接口(SATA、USB、SCSI)或者文件系统(LVM、RAID)较为特殊,则开机时无法挂载根目录,需要使用虚拟文件系统(Initial RAM Disk),如果根目录在IDE接口的磁盘上,且文件系统为默认的ext2/ext3则不需要initramfs也能直接开机。虚拟文件系统一般使用的档名为/boot/initramfs,能够透过boot loader加载到内存中,会被解压缩并被仿真为根目录。且此仿真在内存中的文件系统能够提供一只可执行程序,透过该程序来加载开机过程中最需要的核心模块(磁盘接口的驱动程序等)。载入完成后,会帮助核心重新呼叫systemd来开始后续正常开机操作。
        核心呼叫第一只程序systemd(PID=1),准备软件执行的环境,包括系统的主机名、网络设定、语系处理、文件系统格式、其它服务的启动。所有的动作都会透过systemd的默认启动服务集合,即/etc/systemd/system/default.target来规划,inittab不再起作用。
[root@VM_6_187_centos ~]# cat /etc/systemd/system/default.target
# This file is part of systemd.
#
# systemd is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version. [Unit]
Description=Multi-User System
Documentation=man:systemd.special()
Requires=basic.target
Conflicts=rescue.service rescue.target
After=basic.target rescue.service rescue.target
AllowIsolate=yes
启动级别(runlevel)是一个旧的概念。现在,systemd 引入了一个和启动级别功能相似又不同的概念——目标(target)。不像数字表示的启动级别,每个目标都有名字和独特的功能,并且能同时启用多个。一些目标继承其他目标的服务,并启动新服务。systemd 提供了一些模仿 sysvinit 启动级别的目标,仍可以使用旧的 telinit 启动级别命令切换。
如,旧命令init 5相当于systemctl isolate graphical.target
    旧命令init [234]相当于systemctl isolate multi-user .target
sysvinit 运行级别和 systemd 目标的对应表如图所示:
systemd的处理流程
取得了/etc/systemd/system/default.target这个预设操作界面的设定之后,接下来会链接进到/usr/lib/systemd/system/目录下取得multi-user.target或者graphical.target
假设使用的是graphical.target,接下来systemd会找设定graphical.target.wants
 /etc/systemd/system/c.wants是使用者设定加载的unit
/usr/lib/system/graphical.target.wants是使用者设定加载的unit
[root@bssaifcs11 ~]# cat /usr/lib/systemd/system/graphical.target
# This file is part of systemd.
#
# systemd is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version. [Unit]
Description=Graphical Interface
Documentation=man:systemd.special()
Requires=multi-user.target
Wants=display-manager.service
Conflicts=rescue.service rescue.target
After=multi-user.target rescue.service rescue.target display-manager.service
AllowIsolate=yes
Requires意思是graphical.target必须要完成multi-user.target 才能够进行
Wants意思是进行完graphical.target之后必须要启动display-manager.service
同理,multi-user.target需要在basic.target运行完毕后才能载入许多unit,然后去basic.target里头找数据
通过systemctl list-dependencies graphical.target命令,查询相依属性服务

IA-32/centos7开机流程的更多相关文章

  1. 20190411RAID磁盘阵列及CentOS7系统启动流程

    RAID磁盘阵列及CentOS7系统启动流程(week2_day3)   RAID概念 磁盘阵列(Redundant Arrays of Independent Disks,RAID),有“独立磁盘构 ...

  2. Linux操作系统-CentOS7启动流程和服务管理

    Linux操作系统-CentOS7启动流程和服务管理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.systemd POST --> Boot Sequence --&g ...

  3. Centos7启动流程及systemd中Nginx启动配置

    Centos7启动流程: 1.post(Power-On-Self-Test) 加电自检 主要实现的功能是检测各个外围硬件设备是否存在而且能够正常运行起来,实现这一自检功能的是固化在主板上的ROM(主 ...

  4. Linux之RHEL6的开机流程分析

    开机——很多人觉得很简单的事情,只要按下电源开关,然后系统就会自然启动,没有什么需要学习的.其实不然,如果系统没有什么问题,可以正常登陆的时候,当然开机很简单.但更多的时候,我们需要知道当机子不能正常 ...

  5. liunx 开机流程与模块管理

    系统开机的经过可以汇整成底下的流程的: 加载 BIOS 的硬件信息与进行自我测试,并依据设定取得第一个可开机的装置: 读取并执行第一个开机装置内 MBR 的 boot Loader (亦即是 grub ...

  6. Tomcat Can't load AMD 64-bit .dll on a IA 32

    Java.lang.UnsatisfiedLinkError: C:\apache\apache-tomcat-7.0.14\bin\tcnative-1.dll: Can't load AMD 64 ...

  7. 开机流程与主引导分区(MBR)——鸟哥私房菜

    在前篇随笔中,已经谈到了CMOS与BIOS,CMOS是记录各项硬件参数(包括系统时间.设备的I/O地址.CPU的电压和频率等)且嵌入到主板上面的存储器,BIOS是一个写入到主板上的韧体(韧体是写入到硬 ...

  8. Android的开机流程

    Android的开机流程 1. 系统引导bootloader 1) 源码:bootable/bootloader/* 2) 说明:加电后,CPU将先执行bootloader程序,此处有三种选择 a) ...

  9. linux学习笔记-开机流程与主引导分区(MBR)

    我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! 读鸟哥的linux私房菜-基础学习篇(第三版)3.2.4章节作此笔记 一.术语介绍: Bios:写入到主板上的一个程序,计算机开 ...

随机推荐

  1. 两种 HTTP 方法:GET 和 POST

    区别 GET POST 可见性 数据在 URL 中对所有人都是可见的. post 方式通过body体进行传输,数据不会显示在 URL 中. 安全性 与 POST 相比,GET 的安全性较差,因为所发送 ...

  2. Arduino+温度、湿度传感器

    Arduino语言注解Arduino语言是建立在C/C++基础上的,其实也就是基础的C语言,Arduino语言只不过把AVR单片机(微控制器)相关的一些参数设置都函数化,不用我们去了解他的底层,让我们 ...

  3. PHP 函数实例讲解

    PHP 函数 PHP 的真正威力源自于它的函数. 在 PHP 中,提供了超过 1000 个内建的函数. PHP 内建函数 如需查看所有数组函数的完整参考手册和实例,请访问我们的 PHP 参考手册. P ...

  4. JWT到底是个什么鬼?

    前面一篇我们了解了微服务安全认证架构是如何演进而来的,但是发现v2.5架构仍然较重,有没有轻量级一点的方法呢?其实业界早已有了实践,它就是基于JWT的安全认证架构.JWT到底是个什么鬼呢?本篇为你解答 ...

  5. 实践录丨如何在鲲鹏服务器OpenEuler操作系统中快速部署OpenGauss数据库

    本文适合需要快速了解OpenGauss基本使用和操作的单机用户,可以短时间内完成安装体验.对于企业级生产使用或者需要部署多台服务器的,不适合本文. 因为业务需要,要在鲲鹏架构里安装单机版的OpenGa ...

  6. Xcode11更改启动页设置方法

    新开了个项目,发现之前的启动页怎么也调不好,后来发现配置里边少了一行,所以整理一下,我使用的xcode版本是11. 以前的时候是在这2个中间,还有一行,通过下边2项来配置,现在更改了,附上新的教程.如 ...

  7. 调用thrift出现No handlers could be found for logger "thrift.transport.TSocket"

    1.问题 使用thrift版本为0.10,在0.8没有这个问题 其中ncTAgent是代码中封装的thrift接口的结构,在thrift服务端没有启动的时候,应该拋错为连接不到.但是拋错的堆栈输出之前 ...

  8. Git本地仓库基本操作

    目录 设置姓名和邮箱 创建仓库 提交本地代码 .gitignore git add git commit git status git diff 查看提交记录 撤销未提交的修改 版本回退 设置姓名和邮 ...

  9. 《笨办法学Python 3》python入门书籍推荐|附下载方式

    <笨办法学Python 3>python入门书籍免费下载 内容简介 本书是一本Python入门书,适合对计算机了解不多,没有学过编程,但对编程感兴趣的读者学习使用.这本书以习题的方式引导读 ...

  10. LinuX操作系统基础------> 用户管理,grep搜索

    用户管理 用户组管理 字符管理和grep搜索 1.用户管理: LinuX是一个多用户,多任务的操作系统,可以让多个用户使用,这个账号可以帮助对用户进行追踪,必须在初始化的时候设置好自己的密码 1-1配 ...