(2)打造简单OS-开机BIOS初始化与MBR操作系统引导详解
================大概了解即可===============
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操作系统引导详解的更多相关文章
- linux系统开机自动挂载光驱 和 fstab文件详解
Linux 通过 UUID 在 fstab 中自动挂载分区 summerm6关注 2019.10.17 16:29:00字数 1,542阅读 607 https://xiexianbin.cn/lin ...
- Vue实例初始化的选项配置对象详解
Vue实例初始化的选项配置对象详解 1. Vue实例的的data对象 介绍 Vue的实例的数据对象data 我们已经用了很多了,数据绑定离不开data里面的数据.也是Vue的核心属性. 它是Vue绑定 ...
- BIOS+MBR操作系统引导方式
1. 主引导记录(Master Boot Record,缩写:MBR) 主引导记录又叫做主引导扇区,是计算机开机后启动操作系统时所必须要读取的硬盘首个扇区,它在硬盘上的三维地址为(柱面,磁头,扇区)= ...
- [转载] CentOS系统开机自动挂载光驱 和 fstab文件详解
参考 http://blog.itpub.net/12272958/viewspace-676977/ 一.开机自动挂载光驱 1.按习惯,root用户,在/media目录下建立目录cdrom——mkd ...
- Java的初始化块及执行过程详解
问题:Java对象初始化方式主要有哪几种?分别是什么?针对上面的问题,想必大家脑海中首先浮现出的答案是构造器,没错,构造器是Java中常用的对象初始化方式. 还有一种与构造器作用非常相似的是初始化块, ...
- 打造简单OS-总目录
1-汇编写入引导区,虚拟机启动步骤 (了解即可) 2-开机BIOS初始化与MBR操作系统引导详解 (了解即可) 3-MBR引导区转移加载简单程序(突破512限制)(了解即可) 4-loader硬盘加载 ...
- (4.1)打造简单OS-小实验[图形显示]
主要是实现<简单打造OS>第四小节说到的一个图形界面的实验项目 1.mbr boot.inc ;------------- loader和kernel ---------- LOADER_ ...
- 使用Vs2005打造简单分页浏览器(1)原创
原文:使用Vs2005打造简单分页浏览器(1)原创 使用Vs2005打造简单分页浏览器(1)原创1引言2功能3实现过程以及关键点4总结5不足之处6其他7 代码下载 1 引言很早就有搞一个浏览器的 ...
- 纯手工打造简单分布式爬虫(Python)
前言 这次分享的文章是我<Python爬虫开发与项目实战>基础篇 第七章的内容,关于如何手工打造简单分布式爬虫 (如果大家对这本书感兴趣的话,可以看一下 试读样章),下面是文章的具体内容. ...
随机推荐
- centos yum安装与配置vsFTPd FTP服务器(转)
vsftpd作为FTP服务器,在Linux系统中是非常常用的.下面我们介绍如何在centos系统上安装vsftp. 什么是vsftpd vsftpd是一款在Linux发行版中最受推崇的FTP服务器程序 ...
- hdu 3265 第一类斯特林数
先和第二类做一个对比 第一类Stirling数是有正负的,其绝对值是包含n个元素的集合分作k个环排列的方法数目.递推公式为, S(n,0) = 0, S(1,1) = 1. S(n+1,k) = S( ...
- css 设置overflow:scroll 滚动条的样式
/* 定义滚动条样式 */ ::-webkit-scrollbar { width: 6px; height: 6px; background-color: rgba(240, 240, 240, 1 ...
- csv注入复现代码
以下代码生成的csv文件,使用Microsoft Execl能成功弹出计算器,虽然打开时有安全提示,但是大多数src还是会接收该类漏洞 -------------------------------- ...
- linux安装zookeeper,安装zkui,zookeeper可视化
系统要求 支持的平台 ZooKeeper由多个组件组成.某些组件得到广泛支持,其他组件仅在较小的平台上受支持. 客户端是Java客户端库,应用程序使用它连接到ZooKeeper集合. Server是在 ...
- Python基础——细琐知识点
注释 Python注释有两种方式 使用# 类似于Shell脚本的注释方式,单行注释 使用'''或者""" 使用成对的'''或者""".这种注 ...
- Python_if语句
1.if语句: color='红色' if color=='蓝色': print('我是蓝色') elif color=='红色': print('我是红色') else : print('未知') ...
- CentOS7下编译安装Python3.7.x【亲测有效】
所有操作都在root用户下操作 下载安装包 编译安装 建立软链接 验证 安装: 更新yum: yum update 安装Python依赖: yum install openssl-devel bzip ...
- PAT基础级-钻石段位样卷2-7-4 6翻了 (15 分)
“666”是一种网络用语,大概是表示某人很厉害.我们很佩服的意思.最近又衍生出另一个数字“9”,意思是“6翻了”,实在太厉害的意思.如果你以为这就是厉害的最高境界,那就错啦 —— 目前的最高境界是数字 ...
- 剑指Offer(三十一):整数中1出现的次数(从1到n整数中1出现的次数)
剑指Offer(三十一):整数中1出现的次数(从1到n整数中1出现的次数) 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https:// ...