8.1 锁的原子操作

32位IA-32处理器支持在系统内存中的位置锁定原子操作。这些操作通常用于管理两个或多个处理器可能同时尝试修改相同字段或标志的共享数据结构(例如信号量,段描述符,系统段或页表)。

处理器使用三个相互依赖的机制来执行锁定的原子操作:

•保证原子操作 (待确认:应该是单核中处理中,指令禁止中断)

•总线锁定,使用LOCK#信号和LOCK指令前缀8-2 Vol。 3A MULTIPLE-PROCESSOR MANAGEMENT

•缓存一致性协议,确保可以在缓存数据结构(缓存锁定)上执行原子操作;这种机制存在于Pentium 4,Intel Xeon和P6系列处理器中。

 这些机制在以下方面是相互依赖的。总是保证某些基本的内存事务(例如在系统内存中读取或写入一个字节)以原子方式处理。也就是说,一旦启动,处理器保证在另一个处理器或总线代理被允许访问存储器位置之前操作将完成。

处理器还支持总线锁定,用于执行通常需要原子处理的选定内存操作(例如在共享内存区域中的读取 - 修改 - 写入操作),但不会自动以这种方式处理。由于经常使用的内存位置通常缓存在处理器的L1或L2高速缓存中,因此原子操作通常可以在处理器的高速缓存内执行,而不会断言总线锁定。在这里,处理器的缓存一致性协议确保缓存相同内存位置的其他处理器在对缓存内存位置执行原子操作时得到适当管理。

注意

在存在有争议的锁访问的情况下,软件可能需要实现确保公平访问资源的算法,以防止锁死。硬件不提供保证参与代理公平的资源。管理信号灯的公平性和独占锁定功能是软件的责任。

处理锁定原子操作的机制随着IA-32处理器的复杂性而发展。最近的IA-32处理器(如奔腾4,英特尔至强和P6系列处理器)和英特尔64提供了比以前的处理器更精致的锁定机制。这些机制在下面的章节中描述。

猜你喜欢

转载自965942380.iteye.com/blog/2405575
8.1
今日推荐