================大概了解即可===============

1、BIOS的工作:

我们的计算机在开机之前,它是一个纯硬件的机器,但是从按下开机按钮的那一刻起,ROM上的固化程序就开始为操作系统这个重要的软件进行初始化工作,初始化工作完成以后,将操作系统内核加载到内存中,操作系统就会帮助我们管理各种硬件资源,带给了用户良好的体验。我们普通用户通常都不关心,在电脑启动时具体都做了什么,但是作为一个IT行业的从业人员或者即将作为一名IT行业的从业人员,尤其是作为一个搞技术开发的从业人员,对于计算机是如何启动的有必要了解一二。

(1)、纯硬件检测与BIOS初始化阶段:

首先,在我们按下开机按钮的时候,供电系统向计算机主板和其他硬件设备供电。刚开机时电压不太稳定(但是会快速稳定下来),所以计算机主控芯片组会向CPU发出并保持一个RESET重置信号,让CPU自动恢复到初始状态,当主控芯片组检测到稳定供电后,便撤去RESET信号,此时程序计数器初始化置为FFFF:0H(硬件芯片初始化地址,和软件没关系),CPU开始从FFFF:0H处执行指令,这个地址只有一条指令jmp START,FFFF:0H是BIOS(Basic Input Output System) ROM的起始地址,但不是有效指令开始地址,jmp指令跳转的START是真正进行BIOS程序起始地址(如图)。

(2)BIOS进行显卡、CPU检测并设置BIOS: 

           系统BIOS启动后,进行一系列硬件检测与程序初始化:先检测关键设备电路,如果设备异常则发出警报并死机。然后进行显卡检测,调用显卡BIOS的代码(C000:0H处),初始化显卡,如果显卡不正常则黑屏(不正常不能显示,所以黑屏),正常则屏幕显示显卡信息,并返回系统BIOS接着进行检测其它设备是否正常。其它设备不正常则等待处理,正常则屏幕显示系统BIOS信息。接着检测CPU,如果出错则蓝屏死机,正常则进行BIOS设置检测,如果需要设置BIOS则先进行BIOS设置,然后退出BIOS设置界面进行标准硬件设备检测,如果不需要设置BIOS则直接进行标准硬件设备检测(如图)。

(3)其它设备检测更新与CPU控制权限转交: 

           在完成BIOS设置之后,需要进行两步操作,①检测是否存在即插即用设备,如果存在则为即插即用设备分配资源,不存在则直接进行系统BIOS清屏;②检测是否存在硬件设备的更新,如果存在硬件更新,存放于CMOS之中的系统硬件信息就需要进行修改,进行ESCD(Extended System Configuration Data)更新(ESCD是系统BIOS与操作系统进行硬件配置信息交换的一种手段),更新完毕先要把BIOS提供的中断例程的入口地址登记在中断向量表中,然后进入指定启动项(BIOS设置中设置的优先启动顺序:软盘、硬盘、U盘或光盘)。

假设是硬盘启动,系统BIOS读取硬盘0盘面0磁道1扇区的MBR(主引导记录)到内存中指定区域(具体是BIOS提供的int 19中断例程加载MBR到RAM的0X00007C00H开始处),设置程序计数器到指定区域(EIP=0X00007C00),然后CPU开始执行MBR的指令(即CPU使用权交由MBR来掌控)。

(4)MBR的工作: 

         MBR会先检查硬盘分区表,然后根据硬盘分区表找到硬盘上的引导分区,将引导分区的首扇区(boot loader)内容调入内存,boot loader中的ntdlr(Windows引导程序)启动mini-file system divers以便能识别NEFS和FAT32的文件系统的硬盘分区。或者grub(Linux引导程序)启动vmlinuz-version和initrd-version.img(eg:Centos5.5中的/boot/vmlinuz-2.6.18-194.el5和/boot/initrd-2.6.18-194.el5.img)。便完成MBR的引导过程。

注:/boot/vmlinuz-2.6.18-194.el5 和/boot/initrd-2.6.18-194.el5.img分别是Linux内核文件与initrd文件(boot loader initialized RAM disk),具体介绍可参考:Linux2.6 内核的 Initrd 机制解析

2、MBR与boot sector的关系:

在最开始接触MBR和boot sector、boot loader、grub、ntdlr这些概念的时候,脑子是一片混乱,直到我做了一个实验(即后面要提到的的三系统引导实验)之后才彻底搞清楚:

在安装系统的一个磁盘上有多个分区,第一个分区是主分区(从1柱面开始),主分区之前有一个柱面,其第一个扇区是MBR(0面0道1扇区),之后便是各个分区,每个分区的第一个扇区都是一个boot sector(存放引导加载程序“boot loader”)。而MBR是0面0道1扇区即首个boot sector中存放的boot loader,只不过广义的MBR中不仅仅有引导记录。在安装Linux时如果需要为/boot分区分配一些空间,/boot是用来存放操作系统内核的启动文件与配置文件,而grub是Linux系统的引导程序,在/boot/grub/grub.conf中记录着grub的基本配置信息。ntldr是windows上的boot loader。

总的来说: 

①广义MBR(512Byte)和boot sector都是一个扇区,boot sector是每个分区的第一个扇区,而MBR是磁盘的第一个扇区。 

②boot loader和狭义MBR(446Byte)是引导加载程序,负责加载系统内核、提供引导选项或转交引导权限给其它boot loader(关于这三种功能我们稍后一一会遇到)。Linux的grub和Windows的ntldr都是boot loader的具体程序。

关系如下所示(这是先装了一个Windows7再装了一个Redhat后的MBR与boot loader情况,Linux的grub改写了原本直接引导Windwos的MBR,将Linux的grub写到了MBR里,所以MBR可以直接引导Linux,当然也有可以间接通过/dev/sda3中的grub来引导):

上面已经提到了boot loader的三种情况:①直接引导kernel、②转交其它boot loader来引导,③提供菜单选项(选择1还是2,即选择双系统的Windows7还是Redhat)。

原文地址:

https://blog.csdn.net/Apollon_krj/article/details/77869770

(2)打造简单OS-开机BIOS初始化与MBR操作系统引导详解的更多相关文章

  1. linux系统开机自动挂载光驱 和 fstab文件详解

    Linux 通过 UUID 在 fstab 中自动挂载分区 summerm6关注 2019.10.17 16:29:00字数 1,542阅读 607 https://xiexianbin.cn/lin ...

  2. Vue实例初始化的选项配置对象详解

    Vue实例初始化的选项配置对象详解 1. Vue实例的的data对象 介绍 Vue的实例的数据对象data 我们已经用了很多了,数据绑定离不开data里面的数据.也是Vue的核心属性. 它是Vue绑定 ...

  3. BIOS+MBR操作系统引导方式

    1. 主引导记录(Master Boot Record,缩写:MBR) 主引导记录又叫做主引导扇区,是计算机开机后启动操作系统时所必须要读取的硬盘首个扇区,它在硬盘上的三维地址为(柱面,磁头,扇区)= ...

  4. [转载] CentOS系统开机自动挂载光驱 和 fstab文件详解

    参考 http://blog.itpub.net/12272958/viewspace-676977/ 一.开机自动挂载光驱 1.按习惯,root用户,在/media目录下建立目录cdrom——mkd ...

  5. Java的初始化块及执行过程详解

    问题:Java对象初始化方式主要有哪几种?分别是什么?针对上面的问题,想必大家脑海中首先浮现出的答案是构造器,没错,构造器是Java中常用的对象初始化方式. 还有一种与构造器作用非常相似的是初始化块, ...

  6. 打造简单OS-总目录

    1-汇编写入引导区,虚拟机启动步骤 (了解即可) 2-开机BIOS初始化与MBR操作系统引导详解 (了解即可) 3-MBR引导区转移加载简单程序(突破512限制)(了解即可) 4-loader硬盘加载 ...

  7. (4.1)打造简单OS-小实验[图形显示]

    主要是实现<简单打造OS>第四小节说到的一个图形界面的实验项目 1.mbr boot.inc ;------------- loader和kernel ---------- LOADER_ ...

  8. 使用Vs2005打造简单分页浏览器(1)原创

    原文:使用Vs2005打造简单分页浏览器(1)原创 使用Vs2005打造简单分页浏览器(1)原创1引言2功能3实现过程以及关键点4总结5不足之处6其他7 代码下载 1    引言很早就有搞一个浏览器的 ...

  9. 纯手工打造简单分布式爬虫(Python)

    前言 这次分享的文章是我<Python爬虫开发与项目实战>基础篇 第七章的内容,关于如何手工打造简单分布式爬虫 (如果大家对这本书感兴趣的话,可以看一下 试读样章),下面是文章的具体内容. ...

随机推荐

  1. [Luogu5280][ZJOI2019]线段树(线段树+DP)

    https://www.luogu.org/blog/Sooke/solution-p5280 首先想到对线段树上每个点分别维护有多少棵线段树在它上有标记(f[]),然后想到对于每个操作,根据转移的不 ...

  2. VMWare linux虚拟机(centos没有GUI)联网(NAT模式)

    使用yum list命令查看是否能连上网. 不能联网,需要对centos进行网络配置.但在此之前,需要: 1. 虚拟机网络连接方式设置成NAT. 2. window系统下的两个服务VMwareDHCP ...

  3. Tomcat HTTP connector和AJP connector

    Tomcat服务器通过Connector连接器组件与客户程序建立连接,“连接器”表示接收请求并返回响应的端点.即Connector组件负责接收客户的请求,以及把Tomcat服务器的响应结果发送给客户. ...

  4. 起始路由改成分区(Areas)的RouteConfig.cs配置方法

    public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/ ...

  5. 【转】Java最常见的200+面试题

    今天看到一份面试题总结,感觉很到位,主要包括以下模块:Java基础.容器.多线程.反射.对象拷贝.Java Web模块,异常.网络.设计模式.Spring/Spring MVC .Spring Boo ...

  6. iOS NSNotification传递带参数的通知

    普通的通知使用 注册观察者 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(getNotificat ...

  7. FreeRTOS 移植

    添加FreeRTOS源码到工程中 在工程源码中创建FreeRTOS目录存放拷贝的文件 拷贝FreeRTOS->Source中的文件 可将其他不需要的文件夹全部删掉,只留3个 拷贝Demo中Fre ...

  8. C++——流类库和输入/输出

    前言 数据是怎么写道磁盘的? 代码里面我们一个读写调用似乎就能将数据从磁盘读写.仿佛代码是直接和磁盘打交道.以我们最常见的笔记本.或台式机的磁盘SATA盘为例,其受南桥上ATA控制器支配,这里面传输的 ...

  9. java后端处理高并发

    一个登陆页面可能会被很多账户同时登陆或者注册,那么我们就好处理这些并发,否则降低程序的使用率,甚至程序奔溃,下面一段代码处理程序的高并发效果不错. /** *@author xiaoxie *@dat ...

  10. Linux系统用终端打开图片

    一.现在开发多数使用的系统都是linux系统,但有的时候会遇到一些比较麻烦的小问题,比如:在某个文件夹中存入大量的图片时,想要查看某张图片的时候,当你使用图形化显示的时候,就会很卡,所以在这里我针对于 ...