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. Android多线程--AsyncTask

    常见的多线程方法有: 继承Thread类 实现Runnable接口 Handler AsyncTask HandlerThread 1.定义 一个Android已经封装好的轻量级异步类 属于抽象类,即 ...

  2. PHP password_hash() 函数

    password_hash() 函数用于创建密码的散列(hash) PHP 版本要求: PHP 5 >= 5.5.0, PHP 7高佣联盟 www.cgewang.com 语法 string p ...

  3. CentOS中配置NFS

    https://www.cnblogs.com/yeungchie/ NFS是Network File System的缩写,即网络文件系统. 它的主要功能是通过网络(一般是局域网)让不同的主机系统之间 ...

  4. 牛客挑战赛40 VMware和基站 set 二分 启发式合并 区间覆盖

    LINK:VMware和基站 一道 做法并不常见的题目 看起来很难写 其实set维护线段就可以解决了. 容易想到 第二个操作借用启发式合并可以得到一个很不错的复杂度 不过利用线段树维护这个东西 在区间 ...

  5. 好用的连接池-HikariCP

    在Springboot的发展历程中,默认的DataSource也从Springboot1.x的tomcat连接池到Springboot2.x的HikariCP.关于HikariCP的简单使用在配置多数 ...

  6. syslog协议及rsyslog服务全解析

    背景:需求来自于一个客户想将服务器的日志转发到自己的日志服务器上,所以希望我们能提供这个转发的功能,同时还要满足syslog协议. 一.什么是syslog协议 1.介绍(略) 2.syslog标准协议 ...

  7. qt事件过滤器的使用(可以用于控制屏幕背光等)

    在嵌入式qt项目中,有时并不需求屏幕一直亮着,需要一段时间不操作时,将屏幕背光关掉,以达到节能的目的: 在qt项目中,可以通过重写事件过滤器来实现屏幕操作的检测,加上定时器的时间控制,可以实现指定时间 ...

  8. 入门python有什么好的书籍推荐?纯干货推荐,你值得一看 python基础,爬虫,数据分析

    Python入门书籍不用看太多,看一本就够.重要的是你要学习Python的哪个方向,或者说你对什么方向感兴趣,因为Python这门语言的应用领域比较广泛,比如说可以用来做数据分析.机器学习,也可以用来 ...

  9. Hibernate配置文件和映射文件详解

    Hibernate是一个彻底的ORM(Object Relational Mapping,对象关系映射)开源框架. 我们先看一下官方文档所给出的,Hibernate 体系结构的高层视图: 其中PO=P ...

  10. 【译】gRPC-Web for .NET now available

    .NET 的 gRPC-Web 现在正式发布了.我们在一月份发布了实验版,从那时起,我们就根据早期的用户反馈进行着改进. 有了这个版本,gRPC-Web 就变成了 grpc-dotnet 项目的一个完 ...