OS专题-引言
OS专题-引言
为什么要学习操作系统?我也不知道为什么。就是突然想了解下操作系统这个东西是怎么做出来的。电脑中的这些硬件板板是怎么运作的,为什么就能运行这些软件呢?我TM想不通……所以我开始入坑了!
计算机的启动过程大概是这样的:
- 开机给电,启动烧录在ROM中的BIOS系统完成硬件自检
- BIOS扫描所有存储设备,寻找并运行可用的MBR
- MBR加载并启动硬盘中的操作系统
还有一种UEFI引导,是通过
.efi
文件进行引导,这个我们后面再讨论。
BIOS
BIOS 基本输入输出系统,BIOS 代码所做的工作是一成不变的,所以他是被固化到ROM中的一块只读区域中,在开机时此ROM会被映射到低端1MB
内存的顶部,原因是系统在开启时默认是实地址模式(该模式最大寻址范围0-fffff
),所以其寻址范围也就被限制在了0xF0000-x0xFFFFF
区域中,这64KB
的内存就是BIOS的执行代码.
在开机的一瞬间,CPU的CS:IP寄存器会被强制初始化为0xF000:0xFFF0
,在实地址模式下该地址需要乘以16也就是左移四位加上偏移地址得到,于是0xF000:0xFFF0
就等效于0xFFFF0
此处的地址距离0xFFFFF
只有16个字节的空间,里面存放着一条jmp far f000:e05b = fe05b
的汇编指令,该指令将跳转到真正的BIOS开始的位置.
接着BIOS将会通过自身的代码对硬件进行自检测,在初始化硬件后,则开始向内存0x000-0x3ff
中初始化数据结构以及拷贝中断向量表,紧接着BIOS将会通过调用int 19h
中断,此中断用以检测计算机中的硬盘,如果检测到0盘0道1扇区末尾的两个字节是0x55,0xaa
则认为此扇区确实存在,于是就会将此区域中的内容,加载到内存0x7c00
的位置,并通过一条jmp far 0:0x7c00h
的指令跳转到该位置执行,这样BIOS就将CPU控制权交给了MBR了,而BIOS将会再次睡去.
MBR
MBR的意思是”主引导记录”,是IBM公司早年间提出的。它是存在于磁盘驱动器开始部分的一个特殊的启动扇区。这个扇区包含了已安装的操作系统系统信息,并用一小段代码来启动系统。如果你安装了Windows,其启动信息就放在这一段代码中——如果MBR的信息损坏或误删就不能正常启动Windows,这时候你就需要找一个引导修复软件工具来修复它就可以了。Linux系统中MBR通常会是GRUB加载器。
GPT
GPT的意思是GUID Partition Table
,即”全局唯一标识磁盘分区表”。他是另外一种更加先进新颖的磁盘组织方式,一种使用UEFI启动的磁盘组织方式。最开始是为了更好的兼容性,后来因为其更大的支持内存(MBR分区最多支持2T
的磁盘),更多的兼容而被广泛使用,特别是苹果的MAC系统全部使用GPT分区。GPT不在有分区的概念,所有C D E F
盘都在一段信息中存储。可以简单的理解为更先进但是使用不够广泛的技术。
MBR VS GPT
因为兼容问题,GPT其实在引导的最开始部分也有一段MBR引导,也叫做”保护引导”,这是为了防止设备不支持UEFI 。它们有如下区别:
- 内存支持:MBR最多支持
2T
,而GPT理论上是无限制的。 - 分区:MBR最多支持四个主分区,GPT没有限制。
- 系统:Win7只能用MBR分区(也可以但是很麻烦,不建议),从Win8开始微软建议你使用GPT。
- 其它:GPT是由UEFI启动的,而UEFI是后来才提出的概念,兼容性和稳定性不如BIOS+MBR。