计算机是如何启动的?

转载

http://www.ruanyifeng.com/blog/2013/02/booting.html

作者: 阮一峰

从打开电源到开始操作,计算机的启动是一个非常复杂的过程。

我一直搞不清楚,这个过程到底是怎么回事,只看见屏幕快速滚动各种提示...... 这几天,我查了一些资料,试图搞懂它。下面就是我整理的笔记。

零、boot的含义

先问一个问题,"启动"用英语怎么说?

回答是boot。可是,boot原来的意思是靴子,"启动"与靴子有什么关系呢? 原来,这里的boot是bootstrap(鞋带)的缩写,它来自一句谚语:

  "pull oneself up by one's bootstraps"

字面意思是"拽着鞋带把自己拉起来",这当然是不可能的事情。最早的时候,工程师们用它来比喻,计算机启动是一个很矛盾的过程:必须先运行程序,然后计算机才能启动,但是计算机不启动就无法运行程序!

早期真的是这样,必须想尽各种办法,把一小段程序装进内存,然后计算机才能正常运行。所以,工程师们把这个过程叫做"拉鞋带",久而久之就简称为boot了。

计算机的整个启动过程分成四个阶段。

一、第一阶段:BIOS

上个世纪70年代初,"只读内存"(read-only memory,缩写为ROM)发明,开机程序被刷入ROM芯片,计算机通电后,第一件事就是读取它。

这块芯片里的程序叫做"基本輸出輸入系統"(Basic Input/Output System),简称为BIOS

1.1 硬件自检

BIOS程序首先检查,计算机硬件能否满足运行的基本条件,这叫做"硬件自检"(Power-On Self-Test),缩写为POST

如果硬件出现问题,主板会发出不同含义的蜂鸣,启动中止。如果没有问题,屏幕就会显示出CPU、内存、硬盘等信息。

1.2 启动顺序

硬件自检完成后,BIOS把控制权转交给下一阶段的启动程序。

这时,BIOS需要知道,"下一阶段的启动程序"具体存放在哪一个设备。也就是说,BIOS需要有一个外部储存设备的排序,排在前面的设备就是优先转交控制权的设备。这种排序叫做"启动顺序"(Boot Sequence)。

打开BIOS的操作界面,里面有一项就是"设定启动顺序"。

二、第二阶段:主引导记录

BIOS按照"启动顺序",把控制权转交给排在第一位的储存设备。

这时,计算机读取该设备的第一个扇区,也就是读取最前面的512个字节。如果这512个字节的最后两个字节是0x55和0xAA,表明这个设备可以用于启动;如果不是,表明设备不能用于启动,控制权于是被转交给"启动顺序"中的下一个设备。

这最前面的512个字节,就叫做"主引导记录"(Master boot record,缩写为MBR)。

2.1 主引导记录的结构

"主引导记录"只有512个字节,放不了太多东西。它的主要作用是,告诉计算机到硬盘的哪一个位置去找操作系统。

主引导记录由三个部分组成:

  (1) 第1-446字节:调用操作系统的机器码。

  (2) 第447-510字节:分区表(Partition table)。

  (3) 第511-512字节:主引导记录签名(0x55和0xAA)。

其中,第二部分"分区表"的作用,是将硬盘分成若干个区。

2.2 分区表

硬盘分区有很多好处。考虑到每个区可以安装不同的操作系统,"主引导记录"因此必须知道将控制权转交给哪个区。

分区表的长度只有64个字节,里面又分成四项,每项16个字节。所以,一个硬盘最多只能分四个一级分区,又叫做"主分区"。

每个主分区的16个字节,由6个部分组成:

  (1) 第1个字节:如果为0x80,就表示该主分区是激活分区,控制权要转交给这个分区。四个主分区里面只能有一个是激活的。

  (2) 第2-4个字节:主分区第一个扇区的物理位置(柱面、磁头、扇区号等等)。

  (3) 第5个字节:主分区类型

  (4) 第6-8个字节:主分区最后一个扇区的物理位置。

  (5) 第9-12字节:该主分区第一个扇区的逻辑地址。

  (6) 第13-16字节:主分区的扇区总数。

最后的四个字节("主分区的扇区总数"),决定了这个主分区的长度。也就是说,一个主分区的扇区总数最多不超过2的32次方。

如果每个扇区为512个字节,就意味着单个分区最大不超过2TB。再考虑到扇区的逻辑地址也是32位,所以单个硬盘可利用的空间最大也不超过2TB。如果想使用更大的硬盘,只有2个方法:一是提高每个扇区的字节数,二是增加扇区总数

三、第三阶段:硬盘启动

这时,计算机的控制权就要转交给硬盘的某个分区了,这里又分成三种情况。

3.1 情况A:卷引导记录

上一节提到,四个主分区里面,只有一个是激活的。计算机会读取激活分区的第一个扇区,叫做"卷引导记录"(Volume boot record,缩写为VBR)。

"卷引导记录"的主要作用是,告诉计算机,操作系统在这个分区里的位置。然后,计算机就会加载操作系统了。

3.2 情况B:扩展分区和逻辑分区

随着硬盘越来越大,四个主分区已经不够了,需要更多的分区。但是,分区表只有四项,因此规定有且仅有一个区可以被定义成"扩展分区"(Extended partition)。

所谓"扩展分区",就是指这个区里面又分成多个区。这种分区里面的分区,就叫做"逻辑分区"(logical partition)。

计算机先读取扩展分区的第一个扇区,叫做"扩展引导记录"(Extended boot record,缩写为EBR)。它里面也包含一张64字节的分区表,但是最多只有两项(也就是两个逻辑分区)。

计算机接着读取第二个逻辑分区的第一个扇区,再从里面的分区表中找到第三个逻辑分区的位置,以此类推,直到某个逻辑分区的分区表只包含它自身为止(即只有一个分区项)。因此,扩展分区可以包含无数个逻辑分区。

但是,似乎很少通过这种方式启动操作系统。如果操作系统确实安装在扩展分区,一般采用下一种方式启动。

3.3 情况C:启动管理器

在这种情况下,计算机读取"主引导记录"前面446字节的机器码之后,不再把控制权转交给某一个分区,而是运行事先安装的"启动管理器"(boot loader),由用户选择启动哪一个操作系统。

Linux环境中,目前最流行的启动管理器是Grub

四、第四阶段:操作系统

控制权转交给操作系统后,操作系统的内核首先被载入内存。

以Linux系统为例,先载入/boot目录下面的kernel。内核加载成功后,第一个运行的程序是/sbin/init。它根据配置文件 (Debian系统是/etc/initab)产生init进程。这是Linux启动后的第一个进程,pid进程编号为1,其他进程都是它的后代。

然后,init线程加载系统的各个模块,比如窗口程序和网络程序,直至执行/bin/login程序,跳出登录界面,等待用户输入用户名和密码。

至此,全部启动过程完成。

(完)

文档信息

相关文章

  • 所有应用软件之中,数据库可能是最复杂的。

  • 学习编程的时候,经常会看到stack这个词,它的中文名字叫做"栈"。

  • 计算机的存储层次(memory hierarchy)之中,寄存器(register)最快,内存其次,最慢的是硬盘。

  • 半年前,我写了《计算机是如何启动的?》,探讨BIOS和主引导记录的作用。

广告(购买广告位)

留言(65条)

海纳百川 说:

沙发,学习了。虽是计算机专业,但对底层的东西了解的不深,往往又拿透明的来搪塞自己。

2013年2月16日 14:21 | 档案 | 引用

lvzongting 说:

bios不一定存在,bios只是提供了一个固定的方式,去访问其他输入输出设备,存在的目的是可以将硬件的变化简化,这 样内核就可以通过和固定的bios通信来获取基本的硬件地址信息,然后再获得更充分的硬件地址信息。没有bios的计算机,就没有这么一个固定的方式,随 着硬件的改变,就要静态的改变内核内部设备的入口地址,然后重新编译。可以这么说bios是使得现在操作系统变得通用的一个利器。比如现在不同的arm手 机的内核不能随便换着用,而有bios的计算机内核即使硬件不那么一样,却可以用同样的内核。还比如现在很多时候都会将硬件地址的map独立于内核写到一 个单独的文件中,内核载入的时候会从这些文件中读取硬件的入口地址。
从上电开始,处理器的指令计数器会被初始化成一个值(这个值不一定是0x0000H,因为一般还会在前面放中断向量表),然后从这个地址开始执行程序。这 些程序有可能放到片内的flash,有可能放到片外的flash,或是RAM里面。由于RAM是掉电易失的,所以可能需要先从其他存储设备中载入内存然后 再从内存中调入片内进行运算。

2013年2月16日 14:40 | 档案 | 引用

snowqiang 说:

这样来看, boot翻译成'自举'还是挺形象的。

2013年2月16日 15:53 | 档案 | 引用

Wht'for 说:

>>>计算机通电后,第一件事就是读取它。
我更好奇,是*什么*又是*怎么*读取的。

2013年2月16日 17:28 | 档案 | 引用

张刚 说:

MBR是个很重要的概念,在经历N次启动硬盘找不到OS的情况才能深刻了解。VBR(卷引导记录)应该是硬盘在逻辑卷(LVM)管理方式的情况,不过LVM可以是管理多个硬盘,或者是单个硬盘的某个分区。

2013年2月16日 18:40 | 档案 | 引用

Mike 说:

For UEFI, it is a different story.

2013年2月16日 18:41 | 档案 | 引用

Canson 说:

引用Mike的发言:

For UEFI, it is a different story.

的确,或者说即使不是UEFI,Legacy的Bios的故事也有别的变种。BIOS 工程师路过

2013年2月16日 19:06 | 档案 | 引用

OJ77 说:

很不错,解决了很多疑惑!

2013年2月16日 20:42 | 档案 | 引用

大磊童鞋 说:

我曾经也写过一个类似的启动过程,更加注重的是linux/unix系统,如果从加电到grub1/2的执行,分别考虑到了EFI和BIOS的过程,地址是:http://www.dalei.org/linux-unix-boot-process

2013年2月16日 20:46 | 档案 | 引用

iyue 说:

boot这个说明写的真好

2013年2月16日 21:44 | 档案 | 引用

cumirror 说:

谢谢阮兄的好文。

下面这篇文章中有关于硬盘分区的详细介绍:
http://wenku.baidu.com/view/4ec485d4b9f3f90f76c61bc0.html

2013年2月16日 22:44 | 档案 | 引用

goddyang 说:

我印象中MBR和partition table不是包含关系,MBR只包含最前面的446个字节的内容

2013年2月17日 00:15 | 档案 | 引用

stone 说:

引用goddyang的发言:

我印象中MBR和partition table不是包含关系,MBR只包含最前面的446个字节的内容

有几次安装系统,分区表正常,但是不能引导,重写MBR后可以引导了,所以我也有这种感觉。

2013年2月17日 10:01 | 档案 | 引用

夜弓 说:

Gpt分区的还是和以上过程有些差别

2013年2月17日 10:37 | 档案 | 引用

姐姐 说:

Master boot record是Master boot record,Partition table是Partition table,两者没有包含关系吧……

2013年2月17日 11:37 | 档案 | 引用

skywalker1114 说:

阮兄:Bootstrap不是鞋带的意思,应该是"鞋子背带"的意思(http://en.wiktionary.org/wiki/bootstrap)
在这里隐喻表示一种不需要外部帮助自己能够处理事情的情形。
"pull oneself up by one's bootstraps"最初来自于《The Surprising Adventures of Baron Munchausen》这本书里的一个故事:主人公Baron Munchausen不小心掉进了一片沼泽,他通过自己的bootstraps将自己拉了出来(当然有童话神奇的色彩)。事实上在19世纪初美国就 有"pull oneself over a fence by one's bootstraps"的语言,意思是"做荒谬不可能完成的事情"。
参考:http://en.wikipedia.org/wiki/Bootstrapping

2013年2月17日 15:14 | 档案 | 引用

endle 说:

引用夜弓的发言:

Gpt分区的还是和以上过程有些差别

请问您能讲一下区别吗?我记得GPT是可以支持大于2T的硬盘空间的吧

2013年2月17日 18:09 | 档案 | 引用

bj0629 说:

从逻辑和原理上来分析,BIOS是为了适应不同的操作系统。如论是DOS,Windows还是UNIX都可以通过读取 BIOS 中硬盘、软盘、键盘、显示器、日期等实现外部I/O调用,以用于实现某种计算机平台的应用。如果只是为了专用的操作系统,没BIOS也照样可以工作。就是 通过 reset vector 复位矢量,一个绝对跳转去执行相应的程序。

2013年2月17日 18:57 | 档案 | 引用

dakwing 说:

bios提供类似API的东西(系统中断),如果没有bios,想操作输入输出设备那只能用out和in了,哪怕只是向屏幕输出一个字符或发出beep声

2013年2月17日 20:25 | 档案 | 引用

mk 说:

讲得很深入,

2013年2月18日 10:39 | 档案 | 引用

noodles 说:

单个硬盘最大只能利用2T的空间

这个不是很明白

2013年2月18日 10:42 | 档案 | 引用

GN_ghost 说:

我不知道这个署名转载时应该怎样保持署名。。。

2013年2月18日 10:52 | 档案 | 引用

Terry Zheng 说:

引用Canson的发言:

的确,或者说即使不是UEFI,Legacy的Bios的故事也有别的变种。BIOS 工程师路过

能介绍一下BIOS 的工作过程么, 从上电~POST 完成之间都做了什么, 还有BIOS程序是怎么启动的?

2013年2月18日 16:34 | 档案 | 引用

骑驴的桑乔 说:

引用Wht'for的发言:

>>>计算机通电后,第一件事就是读取它。
我更好奇,是*什么*又是*怎么*读取的。

好奇。硬件通电之后就自动去读取ROM里的BIOS程序?如何做到的?

2013年2月18日 17:07 | 档案 | 引用

yuchen 说:

看完,明白了自检和硬盘引导的道理。
谢谢阮兄~

2013年2月18日 21:50 | 档案 | 引用

fromoon 说:

一般cpu是有固化的自检的,然后北桥,没问题之后才读入bios。

2013年2月19日 13:20 | 档案 | 引用

落蓝轩主 说:

引用noodles的发言:

单个硬盘最大只能利用2T的空间

这个不是很明白

2的32次方*512Byte得出有多少Byte,然后再转化成TB。但是我不明白分区表最后四个字节为什么能够表示最多有2的32次方个扇区。

2013年2月19日 23:17 | 档案 | 引用

Jak Wings 说:

《计算机奥秘》第六版,对此也有不错的简介。

2013年2月20日 08:33 | 档案 | 引用

Jak Wings 说:

引用Jak Wings的发言:

《计算机奥秘》第六版,对此也有不错的简介。

呃,我记错了,也只是简单的说了个过程而已……不过那本书全都是彩页,页页配图,介绍了不少计算机相关的东西。

2013年2月20日 08:42 | 档案 | 引用

马小超 说:

对于第三段的第3小节,MBR 的446字节机器码就是 boot loader吧?

2013年2月20日 14:03 | 档案 | 引用

成仔不说话 说:

对于这个话题很感兴趣,根据自己了解的补充几点内存地址的东西:
1.计算机开机时,CPU默认执行0ffffh:0000h处的指令(8086是这样,386应该类似),而此内存地址应该存放的就是bios rom
2.bios执行玩post等后,将引导设备的mbr复制到内存地址07c00h处,跳转执行此处指令,这个地址应该是规定的
3.现在一般引导设备中的mbr是grub或lilo这样的引导程序,这样的程序首先将自己复制到06c00h处执行,在主分区表中搜索活动分区,将用户选择的活动分区的第一个扇区读入到07c00h处,调转到07c00h处执行
注:以上均在实模式中执行,还未进入保护模式
4.为加载内核做准备,并将控制权交给kernel,系统启动成功
注:这一步进入保护模式
当然这是现在一般的启动流程,当然如果自己写os,可以直接在引导设备的mbr中写直接加载内核的代码,将编译的代码dd入引导设备的mbr中即可。

2013年2月20日 14:57 | 档案 | 引用

熊猫家族 说:

平时都没怎么注意这么细节 在这里学习啦

2013年2月21日 10:05 | 档案 | 引用

狐说 说:

每种CPU固定的从一个地址开始运行,用于自举的程序必须固定装载在这个地方。形态可以是多种多样的

2013年2月22日 13:37 | 档案 | 引用

guisheng 说:

bootstrap不是鞋带的意思,应是靴子后面方便把靴子穿上的那个拉环

2013年2月24日 16:55 | 档案 | 引用

Javin 说:

"拽着鞋带把自己拉起来" 这个很形象。对于计算机有多了一些了解,感谢。

2013年2月25日 11:19 | 档案 | 引用

冰上游鱼 说:

从开始学计算机到现在一直想弄明白从按下计算机的启动按钮之后,每一个部件做了什么。本文讲的是大概的过程,细节恐怕很复杂,很难一一弄明白。

2013年3月 5日 01:29 | 档案 | 引用

Amy 说:

不是很详细。希望楼主继续补充。

2013年3月 6日 14:02 | 档案 | 引用

Nanthon 说:

原来Boot还有这个典故,有意思~

2013年3月11日 00:14 | 档案 | 引用

kiral 说:

赞,这种学习的态度值得学习。

2013年3月11日 01:58 | 档案 | 引用

Yong 说:

终于明白计算机的启动过程了,之前装Ubuntu、Win7双系统时对启动很迷茫...

2013年3月15日 14:02 | 档案 | 引用

如墨 说:

bootstrap:a loop at the back of a boot, used to pull it on.
这不就是鞋后跟上的"鞋拔子"吗?还是应该怎么叫?

补:查了一下叫"拔靴带"

2013年3月16日 04:56 | 档案 | 引用

赵胖子 说:

学习,往往这些事情都不明白,自己还不去研究,博主有心了

2013年3月17日 11:53 | 档案 | 引用

工士 说:

建议将Power-On Self-Test 翻译为 加电自检 或 开机自检


加电自检又称为开机自我检测(英文Power-on self-test,常用简称POST)

http://zh.wikipedia.org/wiki/%E5%8A%A0%E7%94%B5%E8%87%AA%E6%A3%80

2013年3月22日 13:29 | 档案 | 引用

Francise 说:

引用落蓝轩主的发言:

2的32次方*512Byte得出有多少Byte,然后再转化成TB。但是我不明白分区表最后四个字节为什么能够表示最多有2的32次方个扇区。


4个字节,每个字节8位二进制字符(0,1),所以总共32位,于是2的32次方

2013年4月 6日 19:20 | 档案 | 引用

Hunthon 说:

- 计算机入门选手路过,希望看到越来越多的精彩博文!

2013年5月 1日 09:21 | 档案 | 引用

说:

嗯 挺深奥的。
要是更清楚知道电脑的运行原理就更好;只知道它是以电为载体,就只知道0和1的信息,到底电脑是怎样识别这些数字逻辑信息的呢?如何变电流信息为电脑识别的信息。
没电脑前就只能写信 文字信息到有了电脑后的邮箱信息。
不可思议的创造,一个新鲜的东西在几十年前就出现了,而我活了二十年了还不知道那是怎么创造出来的。
求大神能解小弟疑惑啊。
万分感谢

2013年5月 5日 22:59 | 档案 | 引用

jeacon 说:

引用林的发言:

嗯 挺深奥的。
要是更清楚知道电脑的运行原理就更好;只知道它是以电为载体,就只知道0和1的信息,到底电脑是怎样识别这些数字逻辑信息的呢?如何变电流信息为电脑识别的信息。
没电脑前就只能写信 文字信息到有了电脑后的邮箱信息。
不可思议的创造,一个新鲜的东西在几十年前就出现了,而我活了二十年了还不知道那是怎么创造出来的。
求大神能解小弟疑惑啊。
万分感谢

对于通过计算机系统的运行情况大致如下
首先源代码经过编译器变成可执行程序,可执行程序经过加载器加载到操作系统中,作为操作系统的一个进程运行,可执行程序可以理解为一条条可以被计算机 CPU识别的机器码,然后CPU运行,至于CPU为什么可以运行,就需要知道数字电路中的知识,诸如加法电路,译码电路等逻辑电路知识,关于内存和CPU 中的内部寄存器就需要了解数字电路中的时序电路,时序电路具备加电记忆的特点,用来实现寄存器。
数字电路研究的是0101这种高低电平之间转换和输入输出的规律。
至于数字电路的基础就要是模拟电路了,二极管三极管等等。大量的三极管构成了一个基本的数字电路单元,例如能够存储一位二进制数的寄存器。
而模拟电路研究的是大量电子在加压后的宏观运动规律,这种宏观体现到数字电路上就是01的高低电平。
那么单个电子的运动规律是如何的呢?这就需要电子量子学的知识作为支撑了,但是现在科技能够研究到的最深的领域,也就是量子了(电子也属于量子),至于我 们以前所学习过的单个量子的运行规律不见得是对的,但是这并不影响到我们研究大量量子的运行规律,单个量子不好研究,但是大量量子就会呈现出来一定的规律 性。

当你研究到量子,你也就研究到了当今科学最前沿的东西了,也就没有办法更深了。。。

不知我说的是否容易理解。

2013年5月 8日 13:53 | 档案 | 引用

techon 说:

这是计算机的常规过程,关于启动这块现在正处于老式和BIOS-MBR和UEFI-GPT的过度阶段

wiki上 UEFI的介绍:
https://zh.wikipedia.org/wiki/UEFI

前一阵看到的一篇文章:新一代UEFI BIOS科普和探索系列
http://sphrbeu2012.blog.163.com/blog/static/209228074201331472248600/

2013年5月12日 01:12 | 档案 | 引用

冰与火 说:

从您这儿了解到,为什么只能有4个主分区了。我之前想对硬盘分更多分区的时候(Windows 7),找到的解决办法是change the basic disk to dynamic disk on Disk 0.
当时成功的实现了扩展分区,很高兴。但并没有深究这个convertion对电脑又什么影响。
我觉得应该像您学习,追根溯源。
但是,我从网上也只是了解到Basic和Dynamic之间定义的区别,并没看到转换之间的区别。Windows社区里倒是有老外问起这个问题,似乎也得 到了非常满意的答案,只是我没读懂那段英文的意思。http://social.technet.microsoft.com/Forums/en-US /winservergen/thread/cc90e135-4aa3-4ba0-8b22-057566dba5ec
有对此清楚的朋友,还望赐教!

2013年6月 9日 10:37 | 档案 | 引用

niurg 说:

写的非常好,可惜没有从头至尾学过,很多环节都很模糊。

2013年6月17日 13:46 | 档案 | 引用

张启杰 说:

有一个文档"From Power UP to Bash Prompt"很好地描述了计算机启动的过程,可以到网上搜来看看。

2013年7月 4日 16:00 | 档案 | 引用

shincepu 说:

高质量博文 + 高质量回复。谢谢各位了

2013年8月17日 23:36 | 档案 | 引用

peng 说:

引用马小超的发言:

对于第三段的第3小节,MBR 的446字节机器码就是 boot loader吧?

我记得也是这样 ,boot loader可以执行标准的动作来启动 ,但也可以干些其他事用其他方式启动, 就像grub那样,grub就是bootloader。

2013年9月23日 20:23 | 档案 | 引用

李健 说:

老师:可以把你写这些文章的时候顺便把你的那些参考资料也记载一下吧。这样在看你的文章的时候也可以多学点,真心觉得写得不错。。

2013年9月30日 00:45 | 档案 | 引用

篱下殇 说:

"所以单个硬盘可利用的空间最大也不超过2TB"这个没理解,应该是硬盘分区最大为2T吧

2013年10月 6日 18:26 | 档案 | 引用

Melo 说:

本篇博文主要还是讲述的是intel的x86架构的启动原理,实际上arm启动原理与上述过程并不相同。

2013年10月19日 12:09 | 档案 | 引用

Melo 说:

x86为了兼容以前的8086CPU,所以开机时进入实模式,实模式下是16位寻址方式,此时0ffffh:0000h的 物理地址指向了32位寻址范围的4G内存的最后64K的16字节处,正是BIOS的ROM代码,BIOS的存在意义主要是建立一个中断向量表,然后用这些 中断去检测和读取其他的设备,比如内存,硬盘等,最后会被操作系统的代码重新覆盖这些向量。

2013年10月19日 12:17 | 档案 | 引用

孟帅 说:

这是Linux启动后的第一个进程,pid进程编号为1,其他进程都是它的后代。
对于这句话 我不太理解 怎么叫"其他进程都是它的后代"?是不是说,电脑开着的时候,这个进程一直在运行,一直占用着内存?后代用来比喻什么?进程之间的关系哪有后代之说?那不就是线程吗?

2013年11月30日 20:08 | 档案 | 引用

dliyc 说:

@jeacon:

解释到数字电路就可以了,诸如触发器,加法器之类的。量子嘛,就扯的有点远了。

2013年12月22日 21:28 | 档案 | 引用

鬼鬼 说:

扩展分区可以包含无数个逻辑分区 这个有限制的吧,不是无限的

2014年1月 6日 15:38 | 档案 | 引用

Song 说:

博主的文章 + "成仔不说话"的回复,对我的帮助最大。
博主让我知道了boot的真正含义,以前确实困惑过加载时"蛋和鸡"的问题。
接着对于ROM,BIOS,MBR512,4硬盘,2TB,都能理解。
就是困惑谁执行拷贝,搬运操作系统到内存,怎么交接控制权有点模糊。
"成仔不说话"的补充回答了我这个疑惑,包括:
"CPU默认执行0ffffh:0000h处的指令,rom-bios"
"将引导设备的mbr复制到内存地址07c00h处,跳转执行此处指令"
"grub或lilo这样的引导程序,先将自己复制到06c00h处执行,搜索活动分区读入到07c00h处,调转到07c00h处执行,控制权交给kernel"
kernel开始启动自己第一个进程init...
总结:
1)拷贝都是由前一个运行的程序执行。
2)控制权的交接是拷贝后执行跳转(应该是通过CPU的PC)。

原文地址:https://www.cnblogs.com/davytitan/p/3967923.html