TOC \o 1-3 \h \u HYPERLINK \l _Toc1567 Linux内核设计的艺术 PAGEREF _Toc1567 1
HYPERLINK \l _Toc25707 (0) 硬件设计-加电进入实模式,加电瞬间指向BIOS入口 PAGEREF _Toc25707 1
HYPERLINK \l _Toc11522 基础知识 PAGEREF _Toc11522 1
HYPERLINK \l _Toc21694 (一) 加载BIOS,建立中断向量表和中断服务程序 PAGEREF _Toc21694 2
HYPERLINK \l _Toc5429 1 BIOS启动 PAGEREF _Toc5429 2
HYPERLINK \l _Toc14396 2 建立中断向量表和中断服务程序 PAGEREF _Toc14396 2
HYPERLINK \l _Toc16276 (二)加载bootsect(int19中断,启动加载服务程序) PAGEREF _Toc16276 2
HYPERLINK \l _Toc16180 (三)运行bootsect,加载setup--(int13中断)和系统模块(调用read_it) PAGEREF _Toc16180 2
HYPERLINK \l _Toc2697 1 规划内存 PAGEREF _Toc2697 2
HYPERLINK \l _Toc26715 2 复制bootsect PAGEREF _Toc26715 3
HYPERLINK \l _Toc29728 3 将setup加载到内存 PAGEREF _Toc29728 3
HYPERLINK \l _Toc29454 4 加载系统模块 PAGEREF _Toc29454 3
HYPERLINK \l _Toc6590 (四)执行setup程序 PAGEREF _Toc6590 4
HYPERLINK \l _Toc23730 1提取机器系统数据 PAGEREF _Toc23730 4
HYPERLINK \l _Toc19068 2 开始向32位模式转变(保护模式下) PAGEREF _Toc19068 4
HYPERLINK \l _Toc2586 (2.1)关中断cli,将内核移动到内存地址的起始位置0x00000 PAGEREF _Toc2586 4
HYPERLINK \l _Toc27002 (2.2)设置中断描述符表和全局描述符表 PAGEREF _Toc27002 5
HYPERLINK \l _Toc1308 (2.3)打开A20,实现32位寻址 PAGEREF _Toc1308 5
HYPERLINK \l _Toc1956 (2.4)为在保护模式下执行Head.s做准备 PAGEREF _Toc1956 5
HYPERLINK \l _Toc14259 (五) head.s开始执行 PAGEREF _Toc14259 6
HYPERLINK \l _Toc6333 1 head执行整体策略 PAGEREF _Toc6333 6
HYPERLINK \l _Toc6508 2 建立页目录表 PAGEREF _Toc6508 6
HYPERLINK \l _Toc1455 3 创建分页机制 PAGEREF _Toc1455 7
Linux内核设计的艺术
硬件设计-加电进入实模式,加电瞬间指向BIOS入口
基础知识
1. Intel 80X86系列的CPU可以分别在16位实模式和32位保护模式下运行,但为了兼容,解决最开始的启动问题,Intel将所有 80X86系列的CPU的硬件都设计为加电进入16位实模式状态运行。
2. 还有一个硬件逻辑设计为加电瞬间强行设置CS和IP的值,使得执行BIOS入口0xFFFF0。BIOS固化在计算机主机板上的ROM芯片,只有8KB,所占地址段为0xFE0000xFFFFF。
3. LINUX 0.11 在实模式状态下,寻址的最大范围是2^20=1M(1048576).
4.各个寄存器详解
1
CS
代码段寄存器,指向CPU当前执行代码在内存中的区域
2
IP
指令指针寄存器,记录要执行的指令在代码段内的便宜地址。
3
4
5
6
加载BIOS,建立中断向量表和中断服务程序
1 BIOS启动
BIOS启动,会检测显卡,内存...,有一项工作是 会在内存中建立中断向量表及中断服务程序,对启动boot也就是之后的操作系统至关重要。
2 建立中断向量表和中断服务程序
首先,在内存最开的位置0x00000--0x003FF,1KB(256个中断向量表,每个占4字节),构建中断向量表。
然后,紧挨着
原创力文档

文档评论(0)