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. SpringBoot之整合Quartz调度框架-基于Spring Boot2.0.2版本

    1.项目基础 项目是基于Spring Boot2.x版本的 2.添加依赖 <!-- quartz依赖 --> <dependency> <groupId>org.s ...

  2. plantuml 基本语法(转摘)

    <div id="topics"> <div class="post"> <h1 class="postTitle&qu ...

  3. FPGA内部IP核DDS

    项目当中需要正弦信号与余弦信号,首先想到了DDS芯片,例如AD9833.AD9834.由于还需要用FPGA   做一些数据处理,后来干脆直接用FPGA 内部的DDSIP核,同时根据IP核内部的相位累加 ...

  4. luogu P4798 [CEOI2015 Day1]卡尔文球锦标赛 dp 数位dp

    LINK:卡尔文球锦标赛 可以先思考一下合法的序列长什么样子. 可以发现后面的选手可以使用前面出现的编号也可以直接自己新建一个队. 其实有在任意时刻i 序列的mex>max.即要其前缀子序列中1 ...

  5. BSOJ 5553 wangyurzee的树 prufer序列 容斥

    BSOJ我也不知道在哪. 容易想到容斥. 考虑不合法的方案 想到强制某个点的度数为限制即可. 这样就变成了了总方案-一个不合法+两个不合法-3个......的模型了. 坑点 当强制两个相同的点时 方案 ...

  6. 怎么下载腾讯课堂M3U8格式的视频

    好好学习,天天向上 本文已收录至我的Github仓库DayDayUP:github.com/RobodLee/DayDayUP,欢迎Star,更多文章请前往:目录导航 前言 用过腾讯课堂的小伙伴们可能 ...

  7. 关于DateTimeOffset的爱恨情仇

    为什么要上DataTimeOffset?因为DateTime无法解决时区问题,经常需要时间戳转换日期,DateTimeOffset就是应运而生,数据格式储存了和UTC的时区差,C#几乎全几乎全版本支持 ...

  8. Jmeter无法监听服务器4444端口

    阿里云服务器开放了4444端口 jmeter还是无法监听: 解决方法: 阿里云安全组添加端口5555 服务器中启动监听插件使用5555端口,使用命令:java -jar ./CMDRunner.jar ...

  9. 家庭记账本APP开发准备(三)

    单选框(RadioButton) 通过设置单选框,可以将非此即彼的问题进行解决,成功学会并应用了手机端单项选择框; 复选框(CheckBox) 学习复选框是为了给使用软件的人更多的选择,在其他选择框后 ...

  10. OO第一单元(前四周)作业总结

    OO第一单元(前四周)作业总结 OO第一单元(前四周)作业总结要求(第四次作业) 0.前言 本次博客针对的是本人学习Java的第一阶段的三次作业的作业总结 第一次作业的内容是:7-1 计算税率 (20 ...