系统启动过程简介
来源:互联网 发布:苹果电脑围棋打谱软件 编辑:程序博客网 时间:2024/05/05 17:41
BIOS:basic inout/output system基本输入输出系统.它是固化在ROM上的一段程序,但电脑电源打开的时候,BIOS是第一个被执行的程序。其他的程序都必须先加载到RAM才能运行。
BIOS能做什么?
POST(Power On Self Test)系统加电自检,内存地址为0fff:0000。
* Setup Menu
可以选择不同设备上引导程序(Boot sector loader)的顺序。
* Boot sector loader
This load the first 512-byte sector from the boot disk into RAM and jumps to it
* The BIOS interrupt
提供一些显示,键盘,磁盘等的基本操作
关于boot sector
* boot sector(引导扇区)的大小为512-byte,而且并不是512-byte都是可以用的,最后的两个字节必须是两个常量,0x55和0xAA,这是为了让BIOS识别这是一个boot sector。
* 引导扇区在每个分区里都存在,我们常说的“主引导扇区”是硬盘的第一物理扇区(物理地址0面0道1扇区)。它是有两个部分组成:主引导记录MBR(Master Boot Record)和硬盘分区表DPT(Disk
个字节(偏移1beh--偏移1fdh),最后两个字节“55,AA”(偏移1feh,1ffh)是分区的结束标志。
MBR
MBR中包含了硬盘的一系列参数和一段引导程序,引导程序主要是用来在系统硬件自检完后引导具有激活标志的分区上的操作系统,它执行到最后的是一条JMP指令跳到操作系统的引导程序中去。
DPT
MBR结束后,往下来是硬盘的分区表,它是由4个16字节的分区信息表组成,每个信息表的结构如下
偏移 长度 表达的意义
0 字节 分区状态: 如0-->非活动分区 80--> 活动分区
1 字节 该分区起始头(HEAD)
2 字 该分区起始扇区和起始柱面
4 字节 该分区类型:如82--> Linux Native分区,83--> Linux Swap 分区
5 字节 该分区终止头(HEAD)
6 字 该分区终止扇区和终止柱面 !
8 双字 该分区起始绝对分区
C 双字 该分区扇区数
接下来就是两个分区表的结束标志0x55,0xAA
Boot Sector 也就是硬盘的第一个扇区(注1:0柱面,0磁道,1扇区) (注2: 1磁道=16扇区,1扇区=512字节), 它由 MBR (Master Boot Record), DPT (Disk Partition Table) 和 Boot Record ID 三部分组成.
MBR 又称作主引导记录占用 Boot Sector 的前 446 个字节 ( 0 to 0x1BD ),
存放系统主引导程序 (它负责检查硬盘分区表、寻找可引导分区并负责将可引导分区的引导扇区(DBR)装入内存).
DPT 即主分区表占用 64 个字节 (0x1BE to 0x1FD), 记录了磁盘的基本分区
信息. 主分区表分为四个分区项, 每项 16 字节, 分别记录了每个主分区的信息
(因此最多可以有四个主分区).
Boot Record ID 即引导区标记占用两个字节 (0x1FE and 0x1FF), 对于合法
引导区, 它等于 0xAA55, 这是判别引导区是否合法的标志.
Boot Sector 的具体结构如下图所示:
0000 |------------------------------------------------|
| |
| |
| Master Boot Record |
| |
| |
| 主引导记录(446字节) |
| |
| |
| |
01BD | |
01BE |------------------------------------------------|
| |
01CD | 分区信息 1(16字节) |
01CE |------------------------------------------------|
| |
01DD | 分区信息 2(16字节) |
01DE |------------------------------------------------|
| |
01ED | 分区信息 3(16字节) |
01EE |------------------------------------------------|
| |
01FD | 分区信息 4(16字节) |
|------------------------------------------------|
| 01FE | 01FF |
| 55 | AA |
|------------------------------------------------|
二. 系统启动过程简介
系统启动过程主要由一下几步组成(以硬盘启动为例):
1. 开机
2. BIOS 加电自检 ( Power On Self Test -- POST )内存地址为 0ffff:0000
3. 将硬盘第一个扇区 (0头0道1扇区, 也就是Boot Sector)读入内存地址 0000:7c00 处.(注3:遇到最后两个字节55 AA读入内存执行)
4. 检查 (WORD) 0000:7dfe(共512B=一个扇区大小) 是否等于 0xaa55, 若不等于
则转去尝试其他启动介质, 如果没有其他启动介质则显示 "No ROM BASIC" 然后死机.
5. 跳转到 0000:7c00 处执行 MBR 中的程序.
6. MBR 首先将自己复制到 0000:0600 处, 然后继续执行.
7. 在主分区表中搜索标志为活动的分区. 如果发现没有活动分区或有不止一个活动分区, 则转停止.
8. 将活动分区的第一个扇区读入内存地址 0000:7c00 处.
(注4:在分区表的四个记录中,一般来说有且只有一个记录的标记是活动的,MBR(主要负责从活动分区中装载并运行系统引导程序)会去找到这个分区记录,根据记录的起始扇区加载该分区的逻辑 0 扇区(起始扇区)的内容到 0x07C0:0000,并且执行 JUMP 0x07C0:0000(按照规范,BOOT RECORD 也应该从 0x07C0:0000 处开始执行,所以 MBR 通常都要先将自己搬移,以腾出位置去加载 BOOT RECORD)。控制权切换到 BOOT RECORD。BOOT RECORD(包括boot loader如grub或lilo 等)以 linux 为例,它会读取 linux 内核镜像到地址 0x9000:0000,然后开始切换到 0x9000:0000 继续运行。 以 MS-DOS 为例,则它会读取文件系统根目录下的 IO.SYS 和 MSDOS.SYS 两个文件然后加载到内存中继续运行。)
9. 检查 (WORD) 0000:7dfe 是否等于 0xaa55, 若不等于则显示 "Missing Operating System" 然后停止, 或尝试软盘启动.
10. 跳转到 0000:7c00 处继续执行特定系统的启动程序.
11. 启动系统 ...
以上步骤中 2,3,4,5 步是由 BIOS 的引导程序完成. 6,7,8,9,10步由MBR中的引导程序完成.
一般多系统引导程序 (如 SmartFDISK, BootStar, PQBoot 等)
都是将标准主引导记录替换成自己的引导程序, 在运行系统启动程序之前让用户选择要启动的分区.
而某些系统自带的多系统引导程序 (如 lilo, NT Loader 等)则可以将自己的引导程序放在系统所处分区的第一个扇区中, 在 Linux中即为 SuperBlock (其实 SuperBlock 是两个扇区).
注: 以上各步骤中使用的是标准 MBR, 其他多系统引导程序的引导过程与此不同.
- 系统启动过程简介
- 系统启动过程简介
- Android系统启动过程简介
- 系统启动过程简介
- 系统启动过程简介
- 【系统启动过程简介】
- Android系统启动过程简介
- 嵌入式Linux系统启动过程简介
- Android系统启动过程简介(上)
- Android系统启动过程简介(下)
- Android系统启动过程简介(上)
- Android系统启动过程简介(下)
- Boot Sector结构、系统启动过程简介
- Boot Sector结构、系统启动过程简介
- 系统启动 过程
- 系统启动过程
- 系统启动过程
- 系统启动过程
- rs 对象的参考资料
- 我说CMMI之七:需求管理过程域
- 如何解决Ubuntu文本的乱码
- 英语常用口语3
- 第二章 缓冲区(4)
- 系统启动过程简介
- Ajax 服务器推送
- 更新一下道路的最新效果,处理了边缘, 加入了Shader光照
- hibernate joined-subclass基础
- Windows网络编程 — UDP完成端口的实现
- 参数传递二维数组名给行指针(或曰数组指针)
- ADROID 2.1 架构解析 9 SD/USBk
- SQL中and与or优先级比较
- C语言main函数参数示例:回显所有命令行参数,包括文件名