文档章节

探秘操作系统引导过程

l
 linux-tao
发布于 2017/09/09 22:38
字数 1254
阅读 4
收藏 0
点赞 0
评论 0
导读 引导过程指的是从计算机通电那一瞬间到CPU开始执行操作系统代码时的整个过程。在这个非常初期的阶段汇总,CPU执行标准的启动代码。这部分代码需要对硬件设备进行探测,寻找最有可能启动的操作系统并且根据用户定义的参数启动这个操作系统。

传统形式的引导:

大部分PC机仍然使用BIOS引导,默认(通用)的引导加载器(boot loader)。BIOS是一种类型的固件,提供一些简单的菜单项,用户通过这写菜单项可以修改主板参数、引导设备顺序等内容。固件(firmware)可以看做一种软件,这种软件被写入芯片,所以是“固化”的。固件代码本身可以保存在只读存储器(ROM)中。也可保存在可编程只读存储器(PROM)或者电可擦除只读存储器(EEPROM)中,后两种形式更为常见。

  1. 自诊断程序:通过读取CMOS中的硬件配置,并对其自检和初始化
  2. CMOS设置程序:引导过程中,用特殊热键启动,进行设置后,存入CMOS RAM中
  3. 系统自举装载程序(bootstrap):在自检成功后将磁盘相对0道0扇区上的引导程序装入内存运行
  4. 主要I/O设置的驱动程序和中断服务

BIOS和固件的功能是一样的:加载一些基本的自举(bootstrap)代码给CPU执行。自举程序和BIOS或者固件的职责是:初始化硬件、检测硬件、定位这些引导设备、执行引导加载器程序;引导加载器程序的职责是:寻找选择的操作系统、将所有必要的命令行参数传递给操作系统内核。

传统的BIOS引导操作系统(Windows)如下图:

探秘操作系统引导过程探秘操作系统引导过程

计算机开机后,固化在ROM中的BIOS会被加载到内存运行,BIOS自检完毕后就会加载COMS的参数,通过COMS的参数,BIOS加载启动磁盘的MBR到内存运行。通过运行MBR的代码,记录在MBR分区表中,标记为活动分区的磁盘分区PBR(Partition Boot Record)被加载到内存运行,PBR在运行后可加载操作系统加载器(如Windows的bootmgr)的代码到内存运行,操作系统加载器可加载操作系统内核到内存运行,进而完成BIOS的引导流程。

下一代BIOS:EFI

EFI(Extensible Firmware Interface)是一种取代传统BIOS的技术。BIOS是一个固定的程序,而且通常是封闭的。EFI是一个全功能的运行时系统,在引导期间提供了更为强大的接口,甚至在之后的运行时也提供了接口,EFI程序通常是引导加载器。EFI程序实际上是一个二进制程序。

EFI的一般由一下几部分组成:

  1. Pre-EFI初始化模块
  2. EFI驱动执行环境
  3. EFI驱动程序
  4. 兼容性支持模块(CSM)
  5. EFI高层应用
  6. GUID磁盘分区

NVRAM变量

NVRAM是固件接口中一个非常强大的功能,而且这显然是BIOS没有的功能,NARAM变量是在系统范围内存在的,操作系统和固件本身都可以访问。一般来说。NVRAM变量可以分为以下几类:

  • 引导相关的变量:用于指定要引导的内核和根文件系统,还负责向内核传递参数。
  • 固件内部变量:固件使用的变量,一般被操作系统忽略
  • 临时变量:根据需要设置或清空,通常在重新引导的时候不会保留

EFI引导操作系统(Windows)过程如下图:

探秘操作系统引导过程探秘操作系统引导过程

计算机开机后,就会加载固化在只读存储器RAM中的pre-EFI初始化程序,进行主桥及存储器的初始化工作,紧接着载入EFI驱动执行环境(DXE),EFI驱动会被相继加载及初始化,接着加载、启动EFI系统,在EFI系统启动后,GUID分区表就会被识别,之后EFI系统通过加载 NVRAM的参数来决定是否启动BootCamp程序(苹果双重引导的解决方案),不启动BootCamp程序就会启动启动装载程序(Boot Loader)加载操作系统内核,完成EFI的引导流程。

原文来自:http://www.jianshu.com/p/944fc7104a75

本文地址: http://www.linuxprobe.com/system-boot.html

© 著作权归作者所有

共有 人打赏支持
l
粉丝 9
博文 571
码字总数 646066
作品 0
深圳
运维
LINUX的引导过程

LINUX的引导过程 Linux学习教程 兄弟连IT教育 启动Linux系统,通常需要安装LILO (the LInux LOader),LILO不仅可以引导LINUX,也可以引导其他操作系统,包括MS-DOS或WIN 9X以及Windows NT等。...

疯狂的小黑 ⋅ 2016/10/18 ⋅ 0

linux系统管理之单机系统管理 - 引导和关机

一、引导和关机 ==============引导================= 引导:是“启动计算机”的标准术语。 主引导扇区:磁盘0号柱面,0号磁头的一个扇区,大小为512字节。 ...

flash_fish ⋅ 2014/07/24 ⋅ 0

GRUB 2.00 正式发布,多重启动管理器

GRUB是一个多重启动管理器。GRUB是GRand Unified Bootloader的缩写,它可以在多个操作系统共存时选择引导哪个系统。它可以引导几乎所有的Unix,Linux,Windows操作系统。它可以 载入操作系统...

oschina ⋅ 2012/06/28 ⋅ 13

为什么主引导记录的内存地址是0x7C00

为什么主引导记录的内存地址是0x7C00? 《计算机原理》课本说,启动时,主引导记录会存入内存地址0x7C00。 这个奇怪的地址,是怎么来的,课本就不解释了。我一直有疑问,为什么不存入内存的头...

qq_41786318 ⋅ 04/12 ⋅ 0

给电脑加电之后,电脑都干了些什么?

从打开电源到开始操作,计算机的启动是一个非常复杂的过程。 我一直搞不清楚,这个过程到底是怎么回事,只看见屏幕快速滚动各种提示...... 这几天,我查了一些资料,试图搞懂它。下面就是我整...

webxiaohua ⋅ 2015/04/15 ⋅ 0

计算机是如何启动的?

从打开电源到开始操作,计算机的启动是一个非常复杂的过程。 我一直搞不清楚,这个过程到底是怎么回事,只看见屏幕快速滚动各种提示...... 这几天,我查了一些资料,试图搞懂它。下面就是我整...

oschina ⋅ 2013/02/19 ⋅ 99

计算机是如何启动的?

从打开电源到开始操作,计算机的启动是一个非常复杂的过程。 我一直搞不清楚,这个过程到底是怎么回事,只看见屏幕快速滚动各种提示...... 这几天,我查了一些资料,试图搞懂它。下面就是我整...

阮一峰 ⋅ 2013/02/16 ⋅ 0

为什么主引导记录的内存地址是0x7C00?

《计算机原理》课本说,启动时,主引导记录会存入内存地址0x7C00。 这个奇怪的地址,是怎么来的,课本就不解释了。我一直有疑问,为什么不存入内存的头部、尾部、或者其他位置,而偏偏存入这...

阮一峰 ⋅ 2015/09/28 ⋅ 0

Linux学习笔记(os)

计算机组成: 存储器:内存和外存 (CPU一般会有缓存L1 L2甚至L3,一级缓存几十k到几百k (分数据Cache和指令Cache,与CPU同频),二级缓存几百k到几m(现在一般为CPU内置,与CPU同频,若外置...

赵-猛 ⋅ 2016/01/10 ⋅ 0

Centos7.2 kickstart批量装机

本次试用Centos7.2作为PXE服务端批量安装操作系统。之前尝试过使用centos6.x做为服务端批量安装操作系统。本人表示Centos7.2批量装机“坑”不少最终百度无果无奈去google最终完成此实验。故此...

shy润物无声 ⋅ 2017/06/25 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

个人博客的运营模式能否学习TMALL天猫质量为上?

心情随笔|个人博客的运营模式能否学习TMALL天猫质量为上? 中国的互联网已经发展了很多年了,记得在十年前,个人博客十分流行,大量的人都在写博客,而且质量还不错,很多高质量的文章都是在...

原创小博客 ⋅ 29分钟前 ⋅ 0

JavaScript零基础入门——(十一)JavaScript的DOM操作

JavaScript零基础入门——(十一)JavaScript的DOM操作 大家好,欢迎回到我们的JavaScript零基础入门。最近有些同学问我说,我讲的的比书上的精简不少。其实呢,我主要讲的是我在开发中经常会...

JandenMa ⋅ 今天 ⋅ 0

volatile和synchronized的区别

volatile和synchronized的区别 在讲这个之前需要先了解下JMM(Java memory Model :java内存模型):并发过程中如何处理可见性、原子性、有序性的问题--建立JMM模型 详情请看:https://baike.b...

MarinJ_Shao ⋅ 今天 ⋅ 0

深入分析Kubernetes Critical Pod(一)

Author: xidianwangtao@gmail.com 摘要:大家在部署Kubernetes集群AddOn组件的时候,经常会看到Annotation scheduler.alpha.kubernetes.io/critical-pod"="",以表示这是一个关键服务,那你知...

WaltonWang ⋅ 今天 ⋅ 0

原子性 - synchronized关键词

原子性概念 原子性提供了程序的互斥操作,同一时刻只能有一个线程能对某块代码进行操作。 原子性的实现方式 在jdk中,原子性的实现方式主要分为: synchronized:关键词,它依赖于JVM,保证了同...

dotleo ⋅ 今天 ⋅ 0

【2018.06.22学习笔记】【linux高级知识 14.4-15.3】

14.4 exportfs命令 14.5 NFS客户端问题 15.1 FTP介绍 15.2/15.3 使用vsftpd搭建ftp

lgsxp ⋅ 今天 ⋅ 0

JeeSite 4.0 功能权限管理基础(Shiro)

Shiro是Apache的一个开源框架,是一个权限管理的框架,实现用户认证、用户授权等。 只要有用户参与一般都要有权限管理,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户...

ThinkGem ⋅ 昨天 ⋅ 0

python f-string 字符串格式化

主要内容 从Python 3.6开始,f-string是格式化字符串的一种很好的新方法。与其他格式化方式相比,它们不仅更易读,更简洁,不易出错,而且速度更快! 在本文的最后,您将了解如何以及为什么今...

阿豪boy ⋅ 昨天 ⋅ 0

Python实现自动登录站点

如果我们想要实现自动登录,那么我们就需要能够驱动浏览器(比如谷歌浏览器)来实现操作,ChromeDriver 刚好能够帮助我们这一点(非谷歌浏览器的驱动有所不同)。 一、确认软件版本 首先我们...

blackfoxya ⋅ 昨天 ⋅ 0

线性回归原理和实现基本认识

一:介绍 定义:线性回归在假设特证满足线性关系,根据给定的训练数据训练一个模型,并用此模型进行预测。为了了解这个定义,我们先举个简单的例子;我们假设一个线性方程 Y=2x+1, x变量为商...

wangxuwei ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部