IA-32 架构软件开发人员手册
第 3 卷:系统编程指南
(中文版-部分)
目 录
第 1 章 导 读.............................................................................................................................1
1.1.本手册涵盖的 IA-32 处理器 .............................................................................................1
1.2.《第 3 卷:系统开发指南》简介.....................................................................................1
1.3.《第 1 卷:基础架构》简介.............................................................................................3
1.4.《第 2 卷:指令集参考》简介.........................................................................................5
1.5.符号约定.............................................................................................................................5
1.5.1.位和字节顺序..........................................................................................................6
1.5.2.保留位与软件兼容性..............................................................................................6
1.5.3.指令操作数..............................................................................................................7
1.5.4.十六进制和二进制数..............................................................................................7
1.5.5.分段寻址..................................................................................................................8
1.5.6.异常..........................................................................................................................8
1.6.相关文献.............................................................................................................................8
第 2 章 系统架构概况...................................................................................................................10
2.1.系统级架构概况...............................................................................................................10
2.1.1.全局和局部描述符表............................................................................................11
2.1.2.系统段、段描述符和门........................................................................................12
2.1.3.任务状态段和任务门............................................................................................13
2.1.4.中断和异常处理....................................................................................................13
2.1.5.内存管理................................................................................................................14
2.1.6.系统寄存器............................................................................................................14
2.1.7.其它系统资源........................................................................................................15
2.2.运行模式...........................................................................................................................15
2.3.EFLAGES 寄存器中的系统标志和域 ............................................................................17
2.4.内存管理寄存器...............................................................................................................19
2.4.1.全局描述符表寄存器(GDTR).........................................................................20
2.4.2.局部描述符表寄存器(LDTR) .........................................................................20
2.4.3.中断描述符表寄存器(IDTR)...........................................................................20
2.4.4.任务寄存器(TR)...............................................................................................21
2.5.控制寄存器.......................................................................................................................21
2.5.1.CPUID 识别控制寄存器标志...............................................................................28
2.6.系统指令汇总...................................................................................................................28
2.6.1 装载和保存系统寄存器........................................................................................30
2.6.2.检查访问特权........................................................................................................31
2.6.3.装载和保存调试寄存器........................................................................................31
2.6.4.使高速缓存和转换后备缓冲区(TLB)失效 ....................................................31
2.6.5.控制处理器............................................................................................................32
2.6.6.读取性能监测和时间戳计数器............................................................................33
2.6.7.读写模型相关寄存器............................................................................................33
第 3 章 保护模式内存管理...........................................................................................................34
3.1.内存管理概述...................................................................................................................34
3.2.段的使用...........................................................................................................................36
3.2.1.基本平坦模型........................................................................................................36
3.2.2.保护平坦模型........................................................................................................37
3.2.3.多段模型................................................................................................................37
3.2.4.分页与分段............................................................................................................38
3.3.物理地址空间...................................................................................................................39
3.4.逻辑地址和线性地址.......................................................................................................39
3.4.1.段选择子................................................................................................................40
3.4.2.段寄存器................................................................................................................41
3.4.3.段描述符................................................................................................................42
3.5.系统描述符类型.......................................................................................................47
3.5.1.段描述符表............................................................................................................48
3.6.分页(虚拟内存)概述...................................................................................................50
3.6.1.分页选项................................................................................................................51
3.6.2.页表和页目录表....................................................................................................52
3.7.使用 32 位物理寻址的页变换.........................................................................................53
3.7.1.线性地址转换(4KB 页) ...................................................................................53
3.7.2.线性地址转换(4MB 页)...................................................................................54
3.7.3.混合使用 4KB 和 4MB 页 ....................................................................................55
3.7.4.内存别名................................................................................................................55
3.7.5.页目录表基地址....................................................................................................55
3.7.6.页目录表项和页表项............................................................................................56
3.7.7.不存在的页目录表项和页表项............................................................................60
3.8.使用 PAE 分页机制的 36 位物理寻址............................................................................60
3.8.1.开启 PAE 的线性地址变换(4KB 页) ..............................................................61
3.8.2.开启 PAE 的线性地址变换(2MB 页)..............................................................62
3.8.3.使用扩展页表结构访问全部扩展物理地址空间 ................................................63
3.8.4.启用扩展寻址的页目录表项和页表项................................................................63
3.9.使用 PSE-36 分页机制的 36 位物理寻址.......................................................................66
3.10.段到页的映射.................................................................................................................67
3.11.转换后备缓冲区(TLB) .............................................................................................69
第 4 章 保 护...........................................................................................................................71
4.1.启用/禁用段保护和页保护..............................................................................................71
4.2.用于段级和页级保护的域和标志...................................................................................72
4.3.界限检验...........................................................................................................................74
4.4 类型检验...........................................................................................................................75
4.4.1.空段选择子的检验................................................................................................77
4.5.特权级...............................................................................................................................77
4.6.访问数据段时的特权级检验...........................................................................................79
4.6.1.访问代码段中的数据............................................................................................81
4.7.装载 SS 寄存器时的特权级检验 ....................................................................................81
4.8.在代码段之间进行程序控制转移时的特权级检验.......................................................81
4.8.1.直接调用或者跳转到代码段................................................................................82
4.8.2.门描述符................................................................................................................84
2
4.8.3.调用门....................................................................................................................85
4.8.4.通过调用门访问代码段........................................................................................86
4.8.5.栈切换....................................................................................................................89
4.8.6.从被调例程返回....................................................................................................91
4.8.7.使用 SYSENTER 和 SYSEXIT 指令快速调用系统例程 ...................................93
4.9.特权指令...........................................................................................................................94
4.10.指针验证.........................................................................................................................95
4.10.1.检验访问权限(LAR 指令).............................................................................95
4.10.2.检验读写权限(VERR 和 VERW 指令).........................................................96
4.10.3.检验指针偏移是否在段界限内(LSL 指令)..................................................96
4.10.4.检验调用者的访问权限(ARPL 指令)...........................................................97
4.10.5.对齐检验..............................................................................................................99
4.11.页级保护.........................................................................................................................99
4.11.1.页保护标志..........................................................................................................99
4.11.2.限定可寻址区间................................................................................................100
4.11.3.页类型................................................................................................................100
4.11.4.联合使用两级页表的保护................................................................................101
4.11.5.取代页保护........................................................................................................101
4.12.联合使用页保护和段保护...........................................................................................101
第 5 章 中断和异常处理.............................................................................................................103
5.1.中断和异常概述.............................................................................................................103
5.2.异常和中断向量.............................................................................................................104
5.3.中断源.............................................................................................................................105
5.3.1.外部中断..............................................................................................................105
5.3.2.可屏蔽硬件中断..................................................................................................106
5.3.3.软件产生的中断..................................................................................................106
5.4.异常源.............................................................................................................................107
5.4.1.程序错误异常......................................................................................................107
5.4.2.软件产生的异常..................................................................................................107
5.4.3.机器检测异常......................................................................................................108
5.5.异常分类.........................................................................................................................108
5.6.程序或任务重新开始.....................................................................................................109
5.7.不可屏蔽中断(NMI).................................................................................................110
5.7.1.处理多个 NMI.....................................................................................................110
5.8.打开和关闭中断.............................................................................................................110
5.8.1.屏蔽可屏蔽硬件中断.......................................................................................... 111
5.8.2.屏蔽指令断点......................................................................................................112
5.8.3.栈切换时屏蔽中断和异常..................................................................................112
5.9.并发异常或中断的优先关系.........................................................................................112
5.10.中断描述符表(IDT) ................................................................................................114
5.11.IDT 描述符 ...................................................................................................................115
5.12.异常和中断处理...........................................................................................................115
5.12.1.异常或中断处理例程........................................................................................116
5.12.2.中断任务............................................................................................................119
5.13.错误码...........................................................................................................................121
5.14.异常和中断参考...........................................................................................................122
0 号中断——除法错异常(#DE).............................................................................123
1 号中断——调试异常(#DB) ................................................................................123
2 号中断——NMI 中断...............................................................................................124
3 号中断——断点异常(#BP).................................................................................124
4 号中断——溢出异常(#OF).................................................................................125
5 号中断——BOUND 越界异常(#BR) .................................................................125
6 号中断——非法操作码异常(#UD) ....................................................................126
7 号中断——设备不可用异常(#NM)....................................................................127
8 号中断——双故障异常(#DF).............................................................................128
9 号中断——协处理器段超出....................................................................................130
10 号中断——非法 TSS 异常(#TS) ......................................................................130
11 号中断——段不存在(#NP)...............................................................................132
12 号中断——栈故障异常(#SS) ...........................................................................134
13 号中断——一般保护异常(#GP).......................................................................135
14 号中断——页故障异常(#PF) ...........................................................................137
16 号中断——x87 FPU 浮点错误(#MF)...............................................................140
17 号中断——对齐检验异常(#AC) ......................................................................141
18 号中断——机器检验异常(#MC)......................................................................143
19 号中断——SIMD 符点异常(#XF)....................................................................144
32-255 号中断——未定义中断...................................................................................146
第 6 章 任务管理.........................................................................................................................147
6.1.任务管理概述.................................................................................................................147
6.1.1.任务结构..............................................................................................................147
6.1.2.任务状态..............................................................................................................148
6.1.3.执行任务..............................................................................................................149
6.2.任务管理数据结构.........................................................................................................150
6.2.1.任务状态段(TSS)...........................................................................................150
6.2.2.TSS 描述符..........................................................................................................153
6.2.3.任务寄存器..........................................................................................................154
6.2.4.任务门描述符......................................................................................................155
6.3.任务切换.........................................................................................................................157
6.4.任务链接.........................................................................................................................160
6.4.1.使用忙标志防止递归任务切换..........................................................................162
6.4.2.修改任务链接......................................................................................................162
6.5.任务地址空间.................................................................................................................163
6.5.1.映射任务到线性和物理地址空间......................................................................163
6.5.2.任务逻辑地址空间..............................................................................................164
6.6.16 位任务状态段(TSS).............................................................................................165
第 7 章 多处理器管理.................................................................................................................167
7.1.加锁的原子操作.............................................................................................................168
7.1.1.保证原子操作......................................................................................................169
7.1.2.总线加锁..............................................................................................................169
4
7.1.3.处理自修改和交叉修改代码..............................................................................172
7.1.4.加锁操作对处理器内部高速缓存的影响..........................................................173
7.2.内存排序.........................................................................................................................173
7.2.1.Pentium 和 Intel486 处理器的内存排序 ............................................................174
7.2.2.Pentium 4、Intel Xeon、P6 系列处理器的内存排序........................................174
7.2.3.Pentium 4、Intel Xeon、P6 系列处理器的串操作的无次序存储....................176
7.2.4.强化或弱化内存排序模型..................................................................................177
7.3.向多个处理器传播页表项和页目录表项的修改.........................................................179
7.4.串行化指令.....................................................................................................................179
7.5.多处理器(MP)初始化...............................................................................................181
7.5.1.BSP 和 AP 处理器...............................................................................................182
7.5.2.Intel Xeon 处理器的 MP 初始化协议的需求和限制 ........................................182
7.5.3.Intel Xeon 处理器的 MP 初始化协议算法 ........................................................182
7.5.4.MP 初始化举例...................................................................................................184
7.5.5.在 MP 系统中识别处理器 ..................................................................................188
7.6.超线程技术.....................................................................................................................189
7.6.1.Intel 的超线程技术架构......................................................................................189
7.6.2.实现相关的 HT 技术设施...................................................................................194
7.6.3.探测超线程技术..................................................................................................196
7.6.4.初始化支持超线程技术的 IA-32 处理器 ..........................................................197
7.6.5.在支持超线程技术的 IA-32 处理器上执行多个线程.......................................198
7.6.6.在支持超线程技术的 IA-32 处理器上处理中断...............................................198
7.7.空闲和阻塞情况的管理.................................................................................................199
7.7.1.HLT 指令 .............................................................................................................199
7.7.2.PAUSE 指令 ........................................................................................................200
7.7.3.MONITOR/MWAIT 指令....................................................................................200
7.7.4.Monitor/Mwait 地址范围判定 ............................................................................202
7.7.5.在 MP 系统中识别逻辑处理器 ..........................................................................203
7.7.6.所需的操作系统支持..........................................................................................208
第 8 章 高级可编程中断控制器(APIC)................................................................................215
8.1.本地 APIC 和 I/O APIC 概述 ........................................................................................215
8.2.系统总线与 APIC 总线的对比......................................................................................219
8.3.Intel 82489DX 外部 APIC、APIC 和 xAPIC 之间的关系...........................................219
8.4.本地 APIC.......................................................................................................................219
8.4.1.本地 APIC 块图...................................................................................................219
8.4.2.本地 APIC 的存在...............................................................................................223
8.4.3.开启或关闭本地 APIC........................................................................................223
8.4.4.本地 APIC 状态和位置.......................................................................................224
8.4.5.重新分配本地 APIC 寄存器...............................................................................224
8.4.6.本地 APIC ID ......................................................................................................225
8.4.7.本地 APIC 状态...................................................................................................225
8.4.8.本地 APIC 版本寄存器.......................................................................................227
8.5.处理本地中断.................................................................................................................228
8.5.1.本地向量表..........................................................................................................228
8.5.2.合法中断向量......................................................................................................231
8.5.3.错误处理..............................................................................................................232
8.5.4.APIC 计时器........................................................................................................233
8.5.5.本地中断接受......................................................................................................234
8.6.发出处理器间中断.........................................................................................................234
8.6.1.中断命令寄存器(ICR) ...................................................................................235
8.6.2.确定 IPI 目的.......................................................................................................239
8.6.3.IPI 传送和接受....................................................................................................244
8.7.系统和 APIC 总线仲裁..................................................................................................244
8.8.处理中断.........................................................................................................................245
8.8.1.Pentium 4 和 Intel Xeon 处理器的中断处理......................................................245
8.8.2.P6 系列和 Pentium 处理器的中断处理 .............................................................246
8.8.3.中断、任务和处理器优先级..............................................................................247
8.8.4.固定中断的中断接受..........................................................................................249
8.8.5.发中断服务完成信号..........................................................................................251
8.9.伪中断.............................................................................................................................251
8.10.APIC 总线消息传送机制和协议(仅对 P6 系列和 Pentium 处理器)....................252
8.10.1.总线消息格式....................................................................................................253
8.11.消息引发中断信号.......................................................................................................253
8.11.1.消息地址寄存器格式........................................................................................254
8.11.2.消息数据寄存器格式........................................................................................255
后 记...........................................................................................................................................257
6