开机或重启(CPU执行第一条指令,跳转到FFFF:0000H)
Bochs模拟:
Intel跳转指令:
BIOS加电自检 (Power On Self Test)
BIOS自检完毕后,执行int 19(自举服务),按照CMOS中存储的设备启动顺序,将介质中的MBR扇区载入到0000:7C00处,
检查其哨兵(0000:7DFE字)是否为(0x55AA)
若是,则跳转到MBR载入位置(0000:7C00);
若不是则载入下一个启动介质的MBR,重复操作,
若没有找到合法MBR,则报错
Invalid partition table
、operating system not found
、Missing operating system
等类似错误,停机
MBR首先将自己复制到0000:0600 处,然后继续执行
在主分区表中搜索标志为活动的分区 . 如果发现没有活动分区或有不止一个活动分区 , 则转停止
将活动分区的第一个扇区(叫做分区启动记录,Volume Boot Record, VBR)读入内存地址0000:7C00处
检查(WORD)0000:7DFE是否等于0xAA55, 若不等于则显示
Missing Operating System
,然后停止跳转到0000 :7C00处继续执行bootloader stage 2,加载相应操作系统的启动程序
life's a struggle.
2015-03-20
2015-03-20
MBR是什么
主引导记录(Master Boot Record,缩写:MBR),又叫做主引导扇区,位于硬盘上的三维地址为(柱面,磁头,扇区)=(0,0,1)。
在BIOS完成加电自检后,将该扇区内容加载到内存中执行。
MBR组成
| 开始地址 | 结束地址 | 作用 | 字节数 |
|————+————+————————————+——–|
| 0x000(0) | 0x1bd(445) | MBR,bootloader第一阶段代码 | 446 |
| 0x1be(446) | 0x1fd(509) | DPT,记录磁盘分区信息 | 64 |
| 0x1fe(510) | 0x1ff(511) | MAGIC(0x55,0xAA),分区是否有效标志 | 2 |
DPT成员
用来记录分区相关信息
DPT表项占用16B,所以最多4个成员,意味着最多4个主分区!
Note:
- 分区最小颗粒为1柱面
硬盘分区结构信息:
| 偏移 | 长度(字节) | 意义 |
|——+————+——————————————————————————————————–|
| 00H | 1 | 分区状态:00–>非活动分区;80–> 活动分区,其它数值没有意义 |
| 01H | 1 | 分区起始磁头号(HEAD),用到全部8位 |
| 02H | 2 | 分区起始扇区号(SECTOR),占据02H的位0-5; 该分区的起始磁柱号(CYLINDER),占据 02H的位6-7和03H的全部8位 |
| 04H | 1 | 文件系统标志位 |
| 05H | 1 | 分区结束磁头号(HEAD),用到全部8位 |
| 06H | 2 | 分区结束扇区号(SECTOR),占据06H的位0-5; 该分区的终止磁柱号(CYLINDER),占据 06H的位6-7和07H的全部8位 |
| 08H | 4 | 分区起始逻辑扇区号,低位字节在前(小端模式),如0x41394006,实际为0x06403941 |
| 0CH | 4 | 分区总的扇区数 |
实例分析:
1 | 0000000: eb 63 90 8e d8 8e d0 bc 00 7c 89 e6 06 57 8e c0 |
分区1:
1 | 00 01 |
使用fdisk
查看DPT
1 | fdisk -l |
参考
2015-03-19
2015-03-19
查看分区信息
wmic volume list brief
查看磁盘列表
wmic diskdrive list
2015-03-19
- C语言接口与实现:创建可重用软件的技术
2015-03-18
2015-03-18
Redis设计与实现–黄健宏
2015-03-18
2015-03-17
2015-03-17
windows
版本1
1 | exe '!cmd' |
优点
- 达到初步要求
缺点
vim被阻塞
当文件名包含非ASCII字符,且vim内部编码(utf-8)与shell编码(gbk)不一致时,报错:找不到该文件
不支持参数化,不能方便复用
不支持传入参数
版本2
1 | exe printf('!"%s"', filename) |
优点
- 参数化
版本3
1 | exe iconv(printf('%s "%s" "%s"', |
优点
- 支持中文
版本4
1 | exe '!start cmd' |
优点
- 非阻塞执行
缺点
- 执行控制台一闪而过,无法看见程序输出
版本5
1 | exe iconv(printf('%s "%s" "%s"', |
优点
- 控制台显示
缺点
- 显示了命令字符串
版本6
1 | exe iconv(printf('%s "%s" "%s" %s', |
#说明
前置代码
.vimrc
1 | fun! IsWin() |
ftplugin/python.vim
1 | let b:python_version = '27-32' |