这个章节选自Intel官方文档,是由本人亲自翻译的。
这里先注明一下,以下所碰到的英文单词Cache,如果C是大写的,即Cache,表示名词——高速缓冲存储器;如果c是小写的,即cache,表示动词——表示将数据快存到某个高速缓冲存储器中
Intel 64以及IA-32架构提供了管理及提升连接到同一系统总线的多个处理器的执行。这些包括:
1、为执行系统存储器上原子操作所需要的锁总线与/或Cache一致性管理
2、串行化指令。这些指令仅应用于奔腾4、Intel致强、P6家族和奔腾处理器
3、一个坐落于处理器芯片上的高级可编程中断控制器(APIC)(见第10章“高级可编程中断控制器(APIC)”)。这个特征由奔腾处理器所引入。
4、一个二级Cache(level 2,L2)。对于奔腾4、Intel至强和P6家族处理器,L2 Cache被包含在处理器包中,并且与处理器紧耦合。对于奔腾和Intel486处理器,提供引脚以支持外部L2 Cache。
5、一个三级Cache(level 3,L3)。对于Intel至强处理器,L3被包含在处理器包中,并且与处理器紧耦合。
6、Intel超线程技术。这个对Intel 64与IA-32架构的扩展允许一单个处理器核心并发执行两个或更多的线程。(见8.5部分,“Intel® Hyper-Threading Technology and Intel® Multi- Core Technology”)。
这些机制尤其在对称多处理器(SMP)系统中特别有用。然后,它们也可以用在一个Intel 64或IA-32处理器与一个特殊目的处理器(诸如,一个通信、图形或视频处理器)共享系统总线的场合。
这些多处理机制具有以下特征:
1、维护系统存储器一致性——当两个或更多处理器试图同时访问系统存储器中的同一个地址时,一些通信机制以及存储器访问协议必须对促进数据一致性可用,并且在某些情况下允许一个处理器临时性地锁一个存储器位置。
2、维护Cache一致性——当一个处理器访问被cache在另一个处理器上的数据时,它必须不能接受到不正确的数据(译者注:也就是说,当一个处理器对一个地址单元进行读操作时,而另一个处理器之前对这个地址单元修改过,但却是写到Cache中的。此时必须要有个机制能确保前一个处理器能读到更新后的数据,而不是“脏”数据。)。如果一个处理器修改了数据,那么访问该数据的所有其它处理器必须能接受到已修改的数据。
3、允许可预测的对存储器写的次序——在某些情况下,存储器写操作以所编程的完全相同的次序对外部观察到(译者注:这个就是要用Memory Fence机制来实现)。
4、在一组处理器之间分发中断处理——当若干个处理器在一个系统中并行运行时,有一个中心化机制来接收中断并把它们分发到可用的处理器进行服务是很有用的。
5、通过开拓同时代的操作系统和应用的多线程和多进程的天性来提升系统性能。
Intel 64和IA-32处理器的Cache机制和Cache一致性在第11章中讨论。APIC架构在第10章中描述。总线和锁存储器、串行化指令、存储器次序和Intel超线程技术在本章的以下部分进行讨论。
8.1 加锁的原子操作
8.2 存储器次序
8.3 串行化指令
8.4 多处理器(MP)初始化
8.6 探测硬件多线程支持和拓扑
8.7 Intel超线程技术架构
8.8 多核架构
8.9 对硬件多线程性能处理器的编程考虑
8.10 空闲和阻塞情况的管理