考虑当一个进程在一个指定的处理器上运行时,缓存中发生了什么。进程最近访问的数据会进入到CPU缓存中,结果是进程所进行的连续的内存访问,通常都会在缓存中得到满足。如果进程被转移到其他处理器上,会发生什么呢?对于第一个处理器,缓存内存的内容必须是无效的,第二个处理器的缓存必须重新填充。由于使缓存无效和重新填充缓存的高成本,大多数SMP系统试图避免将进程从一个处理器迁移到另一个处理器,而是尝试在同一处理器上运行同一个进程。这就是所谓的处理器亲和性——也就是说,进程对当前正在运行的处理器有亲和力。

处理器亲和性有多种形式:

  • 当操作系统有试图使得进程运行在同一处理器上的策略--------但是并不能做任何的保证时,我们称之为软亲和性(softaffinity)。在这里,操作系统将尝试保持一个进程在同一个处理器上运行,但是,在处理器之间迁移进程是可能的。

  • 相反,有些系统提供支持硬亲和性(hard affinity)的系统调用,从而允许进程指定其可能运行的处理器子集。

很多曹祖系统提供了软-硬两者的实现。比如,Linux实现了软亲和性,但是它也提供了sched_setaffinity()系统刁颖,而它支持硬亲和性

系统的主内存架构可以影响处理器的亲和性问题。图6.9展示了一个非均匀内存访问(NUMA)的架构特点,其中CPU能够更快地访问主内存的某些部分。通常,这种情况发生在包含CPU和内存块的系统中。相对于访问其他板上的内存,CPU可以更快的访问与其在同一块板上的内存。如果操作系统的CPU调度器和内存分配算法一起工作,那么一个分配到特定CPU的进程可以在CPU所在的板上分配内存。这个例子还表明,操作系统通常不像操作系统教科书中描述的那样清晰定义和实现。相反,操作系统各部分之间的“实线”通常只是“虚线”,用算法创建连接,以优化性能和可靠性。

图6.9 NUMA和CPU调度。

results matching ""

    No results matching ""