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. ES数据库重建索引——Reindex(数据迁移)

    应用背景: 1.当你的数据量过大,而你的索引最初创建的分片数量不足,导致数据入库较慢的情况,此时需要扩大分片的数量,此时可以尝试使用Reindex. 2.当数据的mapping需要修改,但是大量的数据 ...

  2. PHP usort() 函数

    ------------恢复内容开始------------ 实例 使用用户自定义的比较函数对数组 $a 中的元素进行排序:Sort the elements of the $a array usin ...

  3. PHP fclose() 函数

    定义和用法 fclose() 函数关闭打开的文件. 该函数如果成功则返回 TRUE,如果失败则返回 FALSE. 语法 fclose(file) 参数 描述 file 必需.规定要关闭的文件. 实例 ...

  4. 原生JS 实现点击按钮创建元素

    要求: 点击按钮,随机生成一个20px-100px宽度正方形,随机颜色,随机位置,不能出可视区域外 思路:(1)创建按钮,为按钮添加事件侦听 (2)触发事件,创建一个元素 (3)设置元素样式,包括大小 ...

  5. 5.15 牛客挑战赛40 C 小V和字符串 数位dp 计数问题

    LINK:小V和字符串 容易想到只有1个数相同的 才能有贡献. 知道两个01串 那么容易得到最小步数 大体上就是 第一个串的最前的1和第二个串最前的1进行匹配. 容易想到设f[i][j]表示 前i位1 ...

  6. MB2-718 Certification: (Microsoft Dynamics 365 Customer Service) – Field Service, Customer Assets

    Come from : https://neilparkhurst.com/2018/02/25/mb2-718-certification-microsoft-dynamics-365-custom ...

  7. JS解密入门——有道翻译

    JS解密入门——有道翻译 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做案例的人,却不知道如何去学习更加高深的知识.那么针对这 ...

  8. Windows10 无法完全关闭Hyper-V导致VirtualBox 虚拟机无法启动

    win10本来已经安装使用了VirtualBox. 突然心血来潮决定试试系统自带的虚拟机Hyper-V.发现并没有想象中的好用.随后在启用或关闭 Windows功能中关闭了Hyper-V. 这时我发现 ...

  9. fetch封装

    import {fetch as fetchPro} from "whatwg-fetch" import qs from "qs" const get=(ur ...

  10. Nginx安装与运行配置总结

    Nginx安装与运行配置总结 1. 去官网下载对应的nginx包,推荐使用稳定版本 2. 上传nginx到linux系统 3. 安装依赖环境 (1)安装gcc环境 yun install gcc-c+ ...