【12】操作系统编写二 の pc启动过程
一、16位内存分配图
- |B8000-BFFFFh| 彩色字符模式视频缓冲区
每个字符在视频缓冲区中占用两个字节 {ASCII值 ,颜色值}
彩色显示卡,一共有16KB的字符缓冲区,字符模式下:25行,每行80个字 25*80*2= 4000B
在视频缓冲区中将没个4096b(4k)称为一个“页”,通常情况下显示第0页的内容
- 在屏幕显示字符的原理:
RGB(RED,GREEN,BLUE)三原色,任意组合就可以产生所以颜色
组合颜色 前景(4bit) + 背景(4bit)
- 彩色文本属性字节
位 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
属性 |
前景闪烁BL(Blink) |
背景R |
背景G |
背景B |
前景亮度 (高亮) |
背景G |
背景R |
背景B |
二、pc启动过程
- CPU加电初始化。多处理器系统,每个CPU都要自身初始化, 一般一个为主CPU,另一个为辅CPU,主CPU执行引导过程的剩余工作,随后内核才会激活辅CPU, CPU首先设置CS:IP=FFFF:0000,指向的是BIOS所在的内存。(设置cs:ip = FFFF:0000 就是重启的过程)
- CPU跳到BIOS指定地址执行BIOS的加电自检POST(Power On Self Test)
- 将MBR(Master Boot Record引导程序)加载到指定内存,加载检查扇区末尾的是否为0xAA55,如果不是则尝试寻找其他引导介质
ps:当CPU Reset后,根据X86架构的特性,(386以后)CPU会从4G地址的最顶端FFFFFFF0处获得第一条指令来执行,而这一地址被定位在BIOS里。由于FFFFFFF0到FFFFFFFF只有短短的16字节,根本不可能放下一段程序,所以这里会放一条跳转(Jump)指令让BIOS跳到更低的地址去执行。
CPU RESET -> BIOS POST(BIOS调用中断程序去加载对应的扇区)-> 加载MBR -> 加载操作系统内核