logo资料库

INTEL开发手册(中文版).pdf

第1页 / 共182页
第2页 / 共182页
第3页 / 共182页
第4页 / 共182页
第5页 / 共182页
第6页 / 共182页
第7页 / 共182页
第8页 / 共182页
资料共182页,剩余部分请下载后查看
第1章 关于本手册
1.1本手册包括的IA-32处理器种类
1.2 IA-32 intel 架构概况 系统开发员指南,卷3:系统开发指南
1.3 IA-32架构概况 软件开发人员手册,卷1:基础架构
1.4 IA-32架构概况 软件开发人员手册,卷2:指令集参考
1.5.1. 位和字节顺序
1.5.2. 保留位与软件兼容
1.5.3 指令操作数
1.5.4.十六进制和二进制数
1.5.5.分段寻址
1.5.6.异常
1.6. 相关文献
第2章 系统架构概况
2.1.系统级架构概况
2.1.1.全局和局部描述符表
2.1.2. 系统段,段描述符和门
2.1.4中断和异常处理
2.1.5内存管理
2.1.6. 系统寄存器
2.1.7其它系统资源
2.2.运行模式
2.3.EFLAGES寄存器中的系统标志和域
2.4.内存管理寄存器
2.4.1.全局描述符表寄存器(GDTR)
2.4.2局部描述符表寄存器(LDTR)
2.4.3 IDTR中断描述符表寄存器
2.4.4.任务寄存器(TR)
2.5 控制寄存器
2.5.1 CPUID识别控制寄存器标志
2.6.系统指令总汇
2.6.1装载和保存系统寄存器
2.6.2检查访问特权
2.6.3装载和保存调试寄存器
2.6.4使Cache和TLB无效
2.6.5控制处理器
2.6.6读取性能监测和时间戳计数器
2.6.7读写模式相关寄存器
第3章 保护模式下的内存管理
3.1内存管理概述
3.2 段的使用
3.2.1基本平坦 model
3.2.2 受保护的平坦模型
3.2.3多段模型
3.2.4 分页与分段
3.3物理地址空间
3.4 逻辑地址和线性地址
3.4.1 段选择符
3.4.2 段寄存器
3.4.3段描述符
3.4.3.1.代码和数据段类型的描述符
3.5.系统描述符类型
3.5.1段描述符表
3.6分页(虚拟内存)
3.6.1 分页选项
3.6.2 页表和页目录
3.7.使用32位物理寻址的页变换
3.7.1. 线性地址转换(4KB页)
3.7.2.线性地址转换(4MB页)
3.7.3.混合使用4KB和4MB的页
3.7.4.内存别名
3.7.5.页目录基地址
3.7.6.页目录项和页表项
3.7.7. 不在场的页目录和页表项
3.8.使用PAE的分页机制的36位物理寻址
3.8.1.开启PAE时的线性地址变换(4KB页)
3.8.2启用PAE的线性地址变换(2MB 页)
3.8.3使用扩展的页表结构来访问完全扩展的物理地址空间
3.8.4.启用扩展寻址后的页目录项和页表项
3.9.使用PSE36分页机制时的36位物理寻址
3.10.段到页的映射
3.11. TRANSLATION LOOKASIDE BUFFERS (TLBS)
第4章 保护模式
4.1启用/禁用段和页的保护
4.2.用于段级和页级保护的域和标志
4.3.限长检验
4.4类型检验
4.4.1.对空段选择符的检验
4.5特权级
4.6.访问数据段时的特权级检验
4.6.1.访问代码段中的数据
4.7. 装载SS寄存器时进行特权级检验
4.8.进程在代码段之间进行控制转换时的特权级检验
4.8.1.直接调用或者跳转到代码段
4.8.1.1.访问非一致代码段
4.8.1.2.访问一致代码段
4.8.2.门描述符
4.8.3.调用门
4.8.4.通过调用门访问代码段
4.8.5.栈切换
4.8.6.从被调用例程返回
4.8.7.使用SYSENTER和SYSEXIT指令对系统例程进行快速调用
4.9.特权指令
4.10.指针验证
4.10.1.检查访问权限(LAR指令)
4.10.2.检查读写权限(VERR和VERW指令)
4.10.3.检查指针的偏移量是否在段限长内(LSL指令)
4.10.4.检查调用者的访问权限(ARPL指令)
4.10.5.检查对齐
4.11.页层次的保护
4.11.1.页保护标志
4.11.2.限定可寻址范围
4.11.3.页类型
4.11.4.两个层次页表的保护相结合
4.11.5.overrides to页保护
4.12页保护和段保护相结合
第5章 中断和异常处理
5.1.中断和异常概述
5.1.1.中断源
5.1.1.1.外部中断
5.1.1.2.可屏蔽硬件中断
5.1.1.3.由软件产生的中断
5.1.2.异常源
5.1.2.1. 程序错误异常
5.1.2.2. 软件产生的异常
5.1.2.3. 机器检测异常
5.2.异常和中断向量
5.3.异常分类
5.4.程序或任务的继续执行
5.5.不可屏蔽中断(NMI)
5.5.1.处理多个NMI
5.6.打开和关闭中断
5.6.1.屏蔽可屏蔽硬件中断
5.6. 多个异常或中断时的优先关系
5.8.中断描述符表(IDT)
5.9.IDT描述符
5.10.异常和中断处理
5.10.1 异常或中断处理例程
5.10.1.1.异常和中断处理例程的保护
5.10.1.2.异常或中断处理例程对标志位的使用
5.10.2.中断任务
5.11.出错码
5.12.异常和中断参考
第7章 多处理器管理
7.1加锁的原子操作(locked atomic operations)
7.1.1可靠的原子操作
7.1.2总线加锁(Bus Locking)
7.1.2.1自动加锁(Automatic Locking)
7.1.2.2软件控制的总线加锁
7.1.3处理自修改和交叉修改代码(handling self- and cross-modifying code)
7.1.4加锁操作对处理器内部缓存的影响
7.2访存排序(memory ordering)
7.2.1 Pentium和Intel486处理器的访存排序
7.2.2 Pentium 4, Intel Xeon, P6系列处理器的访存排序
7.2.3 Pentium 4, Intel Xeon, P6处理器对于串操作的无次序存储(Out-of-Order S
7.2.4加强和削弱访存排序模型(Strengthening or Weakening the Memory Order
7.3 向多个处理器广播页表和页目录条目的改变
7.4串行化指令(serializing instructions)
7.5多处理器初始化
7.5.1 BSP和AP处理器
7.5.2 MP初始化协议的要求和Intel Xeon处理器的限制
7.5.3 Intel Xeon处理器MP初始化协议算法
7.5.4 MP初始化举例
7.5.4.1典型的BSP初始化顺序
7.5.4.2典型的AP初始化顺序
7.5.5在MP系统中识别处理器
7.6超线程技术
7.6.1 Intel 超线程技术体系结构
7.6.1.1逻辑处理器的状态
7.6.1.2 APIC功能
7.6.1.3 内存类型范围寄存器(MEMORY TYPE RANGE REGISTERS,MTRR)
7.6.1.4页属性表(PAGE ATTRIBUTE TABEL,PAT)
7.6.1.5 机器检查体系(MACHINE CHECK ARCHITECTURE)
7.6.1.6 调试寄存器和扩展
7.6.1.7 性能监测计数器(PERFORMANCE MONITORING COUNTERS)
7.6.1.8 IA32_MISC_ENABLE MSR
7.6.1.9访存排序(MEMORY ORDERING)
7.6.1.10串行化指令
7.6.1.11微码更新资源(MICROCODE UPDATE RESOURCES)
7.6.1.12自修改代码(SELF MODIFYING CODE)
7.6.2依赖实现的HT功能(Implementation-Specific HT Technology Facilit
7.6.2.1处理器高速缓存(PROCESSOR CACHES)
7.6.2.2处理器转换后备缓冲区(Translation lookaside buffer(TLB))
7.6.2.3温度监控
7.6.2.4外部信号协调性(EXTERNAL SIGNAL COMPATIBILITY)
7.6.3检测超线程技术
7.6.3.1检测是否支持MONITOR/MWAIT指令
7.6.4初始化支持超线程技术的IA-32处理器
7.6.5在支持超线程技术的IA-32处理器上执行多个线程
7.6.6在支持超线程技术的IA-32处理器上处理中断
7.7空闲和阻塞情况的管理(MANAGEMENT OF IDLE AND BLOCKED CONDITIONS)
7.7.1 HLT指令
7.7.2 PAUSE指令
7.7.3 MONITOR/MWAIT 指令
7.7.4 Monitor/Mwait 地址范围判定
7.7.5 在MP系统中识别逻辑处理器
7.7.6所需的操作系统支持
7.7.6.1 在spin-wait loop中使用PAUSE指令
7.7.6.2 停止空闲逻辑处理器(HALT IDLE LOGICAL PROCESSORS)
7.7.6.3 在多个逻辑处理器上调度线程的方法(guideline)
7.7.6.4 去掉基于执行的计时循环(EXECUTION-BASED TIMING LOOPS)
7.7.6.5 在对齐的128字节内存块上设置锁或信号量
第11章 Intel® MMXTM技术系统编程
11.1 MMX指令集仿真
11.2 MMX状态与MMX寄存器映射
11.2.1 MMX、x87 FPU、FXSAVE及FXRSTOR指令对x87 FPU标签字的影响
11.3 保存和恢复MMX状态和寄存器
11.4 任务和环境切换时保存MMX状态
11.5 MMX指令执行时可能发生的异常
11.5.1 x87浮点指针异常未决时MMX指令的影响
11.6 调试MMX代码
第12章 关于SSE、SSE2和SSE3方面的系统编程
为操作系统提供SSE/SSE2/SSE3扩展的支持
在操作系统中增加对SSE/SSE2/SSE3扩展的支持
检查处理其是否支持SSE/SSE2/SSE3扩展
检查对FXSAVE、FXRSTOR指令的支持
初始化SSE/SSE2/SSE3扩展
为执行SSE/SSE2/SSE3指令时产生的例外提供处理程序
为SIMD指令提供浮点数例外(#XF)处理程序
数字错误标志和IGNNE#
模拟SSE/SSE2/SSE3
保存和恢复SSE/SSE2/SSE3的状态
在任务或上下文切换时保存SSE/SSE2/SSE3的状态
设计操作系统来自动保存x87、MMX、SSE、SS2和SSE3的状态
使用TS标志来控制保存x87、MMX、SSE、SSE2和SSE3的状态
IA-32 Intel®架构软件开发人员手册 卷 3:系统编程指南 (中文版-部分) - 1 -
IA-32 架构软件开发人员指南 卷 3 系统编程指南 前言 现在开放源代码逐渐成为趋势的环境下,获取高水平的源代码的途径越来越容易,尤 其是涉及操作系统的源代码,受到越来越多的有志于研究底层的开发人员的青睐。然而操 作系统(内核)源代码具有规模大、专业性强、涉及的知识面广的特点,大部分首次接触内 核源代码的人感觉不少部分尤其是与硬件平台相关部分(任务切换、内存管理等方面)难以 理解,而这些难以理解的部分却又往往是操作系统的核心部分。 对于造成操作系统代码难以理解的原因有多个方面,主有对操作系统若干理论、概念 理解不深,这可以通过阅读操作系统相关书籍来弥补。目前比较经典的操作系统书籍有多 种,各有各的特色,有纯理论的,也有理论与实践相结合的。“工欲善其事,必先利其器” 在开始探究操作系统源代码之前,仔细深入的研究这些基本概念、基本理论是十分必要的。 然而这些还是不够的,除了理解操作系统概念理论之外,对于操作系统运行的硬件的了解 也是非常必要的。而目前缺乏x86 平台权威资料,流行的教材都讲的比较基础,而与操作 系统设计与开发方面相关的信息,讲得普遍比较少甚至少有涉及,而intel官方出的三卷手 册就目前来讲是最全面、最权威的x86 平台资料了,由于是官方版本是英文版,所以在很 大程度上限制了它的流行,即使平时查阅相关资料时,也大都只是参考它的部分章节而对 其全貌仍未了解。这三卷各有特色,其中卷 3 主要是指针对与操作系统设计方面并鉴于目 前情况,产生了首先将手册之卷 3 翻译为中文的念头,但是由于它篇幅很大(PDF版本有 780 页之巨)仅个人力量很难完成,所以借助于网络www.oldlinux.org平台,召集大家共同分担 完成,在此也非常感谢赵博士为大家提供了那么好的交流平台。 目前已经分配的翻译任务如下: 第 1 章 关于本手册 第 2 章 系统架构概况 我(lijshu)基本已经译完,就是目前这个文件:-) 第 3 章 保护模式下的内存管理 由 sportsman 负责翻译 第 4 章 保护机制 由 sportsman 负责翻译 第 5 章 中断和异常处理 由 wykr3879 负责翻译 第 6 章 任务管理 由 wykr3879 负责翻译 由 Timeless 负责翻译 第 7 章 多处理器管理 第 8 章 高级可编程中断控制器 由 beyond 负责翻译 由 极速时空 负责翻译 第 9 章 处理器管理与初使化 - 2 -
IA-32 Intel®架构软件开发手册 卷 3:系统编程指南 第 10 章 内存高速缓冲存储器控制 由 engumen 负责翻译 第 11 章 Intel MMX 技术系统编程 由 allen76312 负责翻译 第 12 章 SSE 和 SSE2 系统编程 第 13 章 系统管理 由 victor011 负责翻译 第 18 章 IA32 处理器的兼容性 由 marffin 负责翻译 其余的部分还没有落实,希望有兴趣、有精力的参加进来,让我们共同完成这个项目! 由于翻译是一件非常不容易的工作,尤其是达到“信、达、雅”的地步更就难了,译 稿只能尽最大能力保持准确把握原文的意思,但是由于每个人能力及对原文的理解不同, 因此对于译稿肯定有很多有待商榷的地方,甚至是错误的地方,因此请大家指出来,便于 进一步修改、完善译稿,以供大家飨用。 lijshu E-mail: lijshu@yahoo.com.cn lijshu@hotmail.com 2005-1-13 - 3 -
第 1 章 关于本手册 - 4 -
第 1 章 关于本手册 IA-32 Intel®架构软件开发人员手册 卷3:系统编程指南(订单号245472),它是三卷 中其中的一部分,这三卷描述了IA-32 intel所有处理器的架构与开发环境。其它二卷是 IA-32 Intel®架构软件开发人员手册 卷1:基本架构(订单号245470) IA-32 Intel®架构软件开发人员手册 卷2:指令集参考(订单号245471) 卷1基本架构描述了IA-32的基本架构与开发环境,卷2指令集参考描述了处理器的指令集和 操作码结构。这两卷是针对在操作系统下开发的应用开发人员,卷3系统编程指南描述了 IA-32处理器对操作系统的支持,包括内存管理、保护、任务管理、中断和异常处理和系统 管理模式。它也提供了关于IA-32处理器兼容的资料。这一卷是针对操作系统与BIOS的设计 人员和开发人员的。 1.1 本手册包括的 IA-32 处理器种类 本手册主要适用于大多数最近的 IA-32 处理器,包括 Pentium® 、P6 系列处理器,Pentium4 处理器和 Intel® Xeon™处理器。P6 系列的处理器是指基于 P6 微架构的 IA-32 处理器,包 括 Pentium Pro、Pentium II、和 Pentium III。Pentium 4 和 Intel Xeon 是基于 Intel® NetBurst™微架构的。 1.2 IA-32 intel 架构概况 系统开发员指南,卷 3:系统开发指南 本手册包括以下内容: 第1章-关于本手册 介绍了IA-32 intel架构软件开发人员手册的三卷的内容,也描述了在 这些手册中使用的符号约定以及与intel相关的手册和文档的列表,这些主要是针对于程序 员和硬件设计人员。 第2章-系统架构概况 它描述了IA-32处理器的运行模式和IA-32架构对操作系统的支持, 这些支持包括面向系统的寄存器和数据结构以及面向系统的指令。同时也讲述了从实模式 到保护的切换所必需的步骤。 第3章-保护模式的内存管理 它描述了与分段及分页相关的数据结构、寄存器及指令,介 绍了如何实现“平坦”(未分段)的内存模式或者分段的内存模式。 第4章-保护 它描述了IA-32架构中对分段保护所提供的支持。这一章也涉及了特权规则、 栈切换、指针合法性检查、用户模式及管理模式。 第5章-中断和异常处理 它描述了IA-32架构定义的中断机制,介绍了与中断和异常相关的 - 5 -
IA-32 架构软件开发人员指南 卷 3 系统编程指南 保护以及架构是如何处理每一种异常类型的。在这一章末给出了每一种IA-32异常的相关资 料。 第6章-任务切换 它描述了IA-32架构对多任务和任务间保护的支持。 第7章-多处理器管理 它描述了与多处理器相关的共享内存、内存调整和超线程技术的指 令与标志。 第8章-高级可编程中断控制器(APIC) 它描述了局部APIC的编程接口,给出了局部APIC与 I/O APIC之间的接口。 第9章-处理器管理和初使化 它描述了IA-32处理器在复位(Reset)初使化之后的状态。这 一章也描述了如何进入IA-32处理器的实模式和保护模式,以及如何在这二者之间进行切 换。 第 10 章-内存高速缓存控制 它描述了高速缓存的基本概念和 IA-32 架构支持的高速缓存 机制。这一章也描述了内存类型范围寄存器(MTRRs- memory type range registers),以 及如何利用它们进行映射物理内存的内存类型。对于 Pentium III、Pentium 4、和 Intel Xeon 处理器所引入的新的高速缓存控制和内存流指令这一章也有涉及。 第11章- Intel® MMX™技术系统编程 它描述了在进行与Intel MMX技术相关的系统编程时, 所必须处理和考虑的几个方面,包括任务切换、异常处理和与现存系统环境的兼容等方面。 Intel MMX技术是在IA-32架构中Pentium处理器引入的。 第12章-SSE和SSE2系统编程 它描述了SSE和SSE2扩展部分在进行系统编程时,所必须考虑 的几个方面,包括任务切换、异常处理和与现存系统环境的兼容等。 第13章-系统管理 它描述了IA-32架构的系统管理模式(SMM- system management mode)和热量(thermal)监测方法。 第14章-机器检测(Machine-Check)架构 它描述了机器检查(machine-check)架构 第15章-调试和性能监测 它描述了IA-32架构中的调试寄存器和其它的调试机制。这一章 也描述了时间戳计数器(time-stamp counter)和性能监测计数器 第16章-8080仿真 它描述了IA-32架构的实模式和虚拟8086模式 第17章-16位和32位代码的混合 它描述了如何在同一程序或者任务中混合16位和32位代 码模块。 第18章-IA-32架构的兼容性 它描述了IA-32处理器之间的兼容性,包括intel286、 intel386、intel486、Pentium、P6系列、Pentium 4、和Intel Xeon 处理器。P6系列包括 Pentium Pro、PentiumII、and Pentium III 处理器。32位的IA-32处理器之间的差异,如 - 6 -
第 1 章 关于本手册 架构的一些专有特征,在这三卷中都有论述。这一章提供了与所有IA-32处理器兼容性相关 的资料,描述了和16位IA-32处理器(intel 8086和intel 286处理器)的基本差异。 附录A-性能监测事件 列出了可以用性能监测计数器计数的事件以及用于选择这些事件的 代码。Pentium处理器和P6系列的处理器事件也有描述。 附录B-模式相关寄存器(MSRs- Model Specific Registers) 列出了Pentium、P6系列、 Pentium 4和Intel Xeon处理器中的MSRs,并描述了它们的功能。 附录C-P6系列处理器的MP初使化 给出了在MP系统中如何使用MP协议引导P6系列处理器的 例子。 附录 D-LINT0 和 LINT1 输入编程 给出了如何使用 LINT0 和 LINT1 管脚进行特定的中断向 量编程。 附录E-机器检查错误代码的意义 给出了P6系列处理器的机器检查错误代码的解释。 附录 F-APIC 总线消息格式 它描述了在 P6 和 Pentium 处理器的 APIC 总线上进行消息传递 的消息格式。 1.3 IA-32 架构概况 软件开发人员手册,卷 1:基础架构 IA-32架构软件开发人员手册 卷1 的内容如下: 第1章-关于本手册 介绍了IA-32 intel 架构软件开发人员手册的三卷的内容,也描述了 在这些手册中使用的符号约定与intel相关的手册和文档的列表,这些主要是针对于程序员 和硬件设计人员。 第2章-IA-32 架构概况 本章介绍了IA-32 架构和基于本架构的处理器系列,同时也介绍 了这些处理器一些共有的特征以及IA-32 架构发展的历史。 第3章-基本运行环境 介绍了内存管理的模式和应用程序使用的寄存器集合。 第4章-数据类型 描述了处理器的数据类型和寻址方式,简要介绍了实数和浮点数格式以 及浮点异常。 第5章 指令集总汇 列出了所有IA-32 架构的指令,并根据指令所用的技术进行了分组(通 用、x87FPU、intel MMX技术、SSE、SSE2和系统指令),在这些组内指令按照各组的功能进 行说明。 第6章-过程调用、中断和异常 描述了过程栈以及调用中断和异常服务的机制。 第7章-通用指令编程 描述了基本的装载、保存、程序控制、数学和字符串指令,这些指 - 7 -
IA-32 架构软件开发人员指南 卷 3 系统编程指南 令是基于基本数据类型和通用寄存器和段寄存器,同时也描述了运行在保护模式下的系统 指令。 第8章-x87浮点单元编程 描述了x87浮点单元(FPU),包括浮点寄存器和数据类型,给出了 浮点指令集简要介绍并描述了处理器的浮点异常产生的条件。 第9章-intel MMX技术编程 描述了Intel MMX技术包括MMX寄存器和数据类型,并给出了MMX 指令集的概况。 第10章-SIMD扩展(SSE)编程 描述了SSE扩展,包括XMM寄存器、MXCSR寄存器和对齐(Packed) 的单精度浮点数据类型,给出了SSE指令集的概况和访问SSE扩展的代码的书写方法。 第11章-SIMD扩展2(SSE2)编程 描述了SSE2扩展部分,包括XMM寄存器和对齐(packed)的双 精度浮点数据类型,给出了SSE2指令集的概况和用指令访问SSE2扩展的方法,这一章也描 述了SSE和SSE2指令产生的SIMD浮点异常,同时还给出了SSE和SSE2扩展部分对操作系统和 应用代码的相互协作的方法 第12章-输入/输出 描述了处理器的I/O机制,包括I/O端口地址、I/O指令、I/O保护机制 第13章-处理器识别及其特征识别 描述如何识别CPU类型和和处理器中的特征。 附录A-EFLAGS 交叉引用 总结IA-32指令是如何影响EFLAGS寄存器的 附录B-EFLAGS条件码 总结如何根据条件代码标志中的(OF、CF、ZF、SF、和PF)标志进行 条件跳转、传送和字节设置。 附录C-浮点异常总汇 总结了x87FPU浮点和SSE以及SSE2 SIMD浮点指令产生的异常。 附录D-编写x87FPU异常处理程序指南 描述如何设计和编写与MS-DOS兼容的FPU异常处理 程序的方法,包括软件和硬件的所需条件以及汇编代码例子,这节附录也描述了编写健壮 的FPU异常处理程序的基本技巧。 附录E-编写SIMD浮点异常处理程序指南 介绍由SSE和SSE2 SIMD浮点指令所产生的异常处 理程序的编写方法。 1.4 IA-32 架构概况 软件开发人员手册,卷 2:指令集参考 IA-32架构软件开发人员手册 卷2的内容如下: 第1章-关于本手册 介绍IA-32 intel 架构软件开发人员手册的三卷的内容,也描述了这 些手册中使用的符号约定与intel相关的手册和文档的列表,这些主要是针对于程序员和硬 - 8 -
分享到:
收藏