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. Linux图形界面与命令行界面以及用户之间的转换

    刚刚不小心进入了命令行界面,,,,,, ALT SHIFE F5 咋回去的呢 sudo startx 但是回去以后默认是root ,,,,,, 所以切换用户 su username//用户名 就可以切 ...

  2. PHP zip_entry_filesize() 函数

    定义和用法 The zip_entry_filesize() 函数返回 zip 档案项目的原始文件尺寸(在压缩之前).高佣联盟 www.cgewang.com 语法 zip_entry_filesiz ...

  3. C/C++编程笔记:C语言NULL值和数字 0 值区别及NULL详解

    在学习C语言的时候,我们常常会碰到C语言NULL值和数字 0 ,很多小伙伴搞不清楚他们之间的一个区别,今天我们就了解一下他们之间的区别,一起来看看吧! 先看下面一段代码输出什么: 输出<null ...

  4. 海华大赛第一名团队聊比赛经验和心得:AI在垃圾分类中的应用

    摘要:为了探究垃圾的智能分类等问题,由中关村海华信息研究院.清华大学交叉信息研究院以及Biendata举办的2020海华AI垃圾分类大赛吸引了大量工程师以及高校学生的参与 01赛题介绍 随着我国经济的 ...

  5. 中国剩余定理(CRT)及其扩展(EXCRT)详解

    问题背景   孙子定理是中国古代求解一次同余式方程组的方法.是数论中一个重要定理.又称中国余数定理.一元线性同余方程组问题最早可见于中国南北朝时期(公元5世纪)的数学著作<孙子算经>卷下第 ...

  6. requests入门实践02_下载斗图拉最新表情包

    新版本移步:https://www.cnblogs.com/zy7y/p/13376228.html 下载斗图拉最新表情包 要爬取的目标所在网址:http://www.doutula.com/phot ...

  7. Ubuntu16.04忘记用户登录密码以及管理员密码,重置密码的解决方案

    1. 问题现象: 密码遗忘 2. 问题原因 问题原因,搞不懂,只是修改了/etc/shadow和/etc/sudoers这俩文件 3. 解决方案 在系统开机前常按shift键进入grub界面,如下: ...

  8. CI4框架应用四 - 第一个页面

    我们来看一下CI4框架的默认页面是如何实现的. 我们先来认识一下路由文件(app\Config\Routes.php),这个文件非常重要,且功能强大,它定义了URL模式及响应处理方法,我们先看一下这个 ...

  9. SpringCloud系列之服务容错保护Netflix Hystrix

    1. 什么是雪崩效应? 微服务环境,各服务之间是经常相互依赖的,如果某个不可用,很容易引起连锁效应,造成整个系统的不可用,这种现象称为服务雪崩效应. 如图,引用国外网站的图例:https://www. ...

  10. PR基础

    Windows->Workspace->Reset to saved layout 恢复工作区 Edit->Perferences->Auto Save 设置自动保存时间 资源 ...