1、多核计算机已成主流一、多核结构由于人类的贪婪本性,我们对计算机芯片的速度总是感到不满意。英特尔公司一直在努力提升 CPU 的时钟频率,其最新最快的奔腾芯片时钟频率已经达到了令人咂舌的 3.8GHZ。但这时芯片的散热成为了一个不可逾越的障碍,因此英特尔公司只得宣布停止 4GHZ 新产品的计划。质量上不行,数量上补。在今天,芯片厂商已经将将来压宝在多处理器和多核上面。多处理器指的是在一个体系结构上放置多个 CPU,而多核则是指在同一块芯片(CPU)上放置多个核(core),即执行单元。为简单起见,人们现在将多处理器和多核结构统称为多核结构。多核和多 CPU 的区别是多核结构更加紧凑,成本在同等执行
2、单元数量的情况下更便宜、功耗更低。随着 AMD 和 Intel 在多核技术上的大力研究和推进,多核技术已经从双核推进到 4 核、8 核甚至更高。多核计算机的出现,打破了单核环境下的许多操作系统设计的正确性或可靠性。为了适应多核环境所提出的新要求,也为了更好地利用多核技术提供的新方便,操作系统需要作出相应调整。要讨论多核环境下操作系统所做的调整,首先需要了解单核环境和多核环境的不同之处。在 X86 体系结构下,多处理功能芯片经过了以下四个演变阶段:(1) 多处理器结构即一条总线上挂载多个处理器。在多个 CPU 的情况下,以 CPU 之间的关系不同可以分为对称多处理器结构(SMP 结构,较普遍)和
3、非对称多处理器结构(AMP结构) 。(2) 超线程结构在一台电脑里安装多个 CPU 虽然提升了计算机的性能,但是付出的代价是高昂的成本和巨大的功耗。而在实际中,基于很多原因,CPU 的执行单元并没有被充分利用。因此 Intel 提出了超线程技术来让一个 CPU 同时执行多重线程,从而提高 CPU 效率和用户满意度。超线程技术是在一个 CPU 上同时执行的多个程序共同分享该 CPU 内的资源,理论上像两个 CPU 在同一时间执行两个线程。超线程技术可在同一时间里,让应用程序使用芯片的不同部分。为了实现这种技术,需要在处理器上多加入一个逻辑处理单元指针。需用注意的是,含有超线程技术的 CPU 需要
4、芯片组和软件支持,才能比较理想地发挥该项技术的优势。操作系统如 Windows XP、Windows 2003、Linus2.4.x以后的版本均支持超线程技术。虽然采用超线程技术能同时执行两个线程,但它并不像两个真正的 CPU 那样,每个 CPU 都有具有独立的资源。当两个线程都需要某一个资源时,其中一个要暂时停止,并让出资源,直到这此资源闲置后才能继续。因此超线程的性能并不等同于两个 CPU 的性能。(3)多核结构有什么办法能同时克服多 CPU 和超线程的缺点呢?就是多核结构。多核结构就是在一个 CPU 里面布置两个执行核,即两套执行单元,如 ALU、FPU 和 L2 缓存等。而其他部分则两
5、个核共享。这样由于使用的是一个 CPU,其功耗和单 CPU 一样。由于布置了多个核,其指令级并行将是真正的并行,而不是超线程的半并行。(4)多核超线程结构而在多核情况下,我们也可以使用超线程技术,从而形成多核超线程技术。即每个物理执行核里面又分解为两个或多个逻辑执行单元。二、多核环境下操作系统的修正多核的出现对软件的设计产生了巨大的影响。例如,由于多 CPU 或者多个执行核的存在,我们在单核环境下的原语操作将不能适应,而需要修正。除此之外,进程的调度也是一个大大需要修改的地方,因为现在进程不只有一个执行核可以选择了。内存管理的变化是多核环境带来的另外一个重要变故。此外,能耗优化也是多核环境下必
6、须考虑的问题:如果一个核上没有执行程序,是否需要让这个核停止工作?1 多核环境下的进程同步在单核环境下,一个时候只可有一个程序在执行。而在多核环境下,由于多个执行核或 CPU 的存在,多个程序可以真正的同时执行。因此,多核环境下的进程同步与单核环境下将有着很大不同。为了保证程序执行的正确性,我们需要采取措施保证一段程序的执行是原子操作。不过这里的原子操作与我们单核环境下的原子操作有所不同:它必须保证跨越 CPU 的原子性。即一个 CPU 执行某段程序时,得让另一个 CPU 不执行该程序。这种保证的实现,需要硬件的支持。2多核环境下的进程调度对于进程和线程来说,多核环境与单核环境的最大不同是可以
7、有多个线程或进程真正地同时执行,而在单核情景下,这个同时不是真正的物理同时,而是虚拟的逻辑同时。就是这个从逻辑同时到物理同时的变化,使得多核环境下的调度与单核环境下的调度有所不同。在多核环境下,操作系统的任务分配和调度是目前研究的一个研究热点。在这个新环境中,操作系统需要考虑:(1) 新的任务给谁(2) 每个核如何调度它上面的任务(3) 是否采用一致的调度算法(4) 一个进程是否始终在一个核上运行(5) 如何调度实时任务和普通任务(6) 如何保证负载均衡,即如何保证每个核的工作量比较均衡(7) 负载不均衡是否迁移任务(8) 采用单独还是共同的就绪队列三、多核系统的性能多核真的能提高计算机的性能
8、吗?答案是不一定。对于多核来说,每个核可以独立的执行任务。而这些核之间是否可以协调和在何种程度上进行协调就决定了多核系统的性能提升到底有多少。事实上,多核真的不一定能提升你的软件执行效率。多核技术到底是否带来益处完全取决于客户的应用是什么。如果说是解微分方程,请使用多核计算机,如果是进行海量信息筛选和数据挖掘,则最好不要使用多核计算机。即使是可以利用多核技术的应用,其利用程度也有赖于程序的编写方式。只有在程序编写时就充分考虑到多核的结构特点的软件才能最大限度地从多核技术获得益处。而充分利用多核结构编写并发度高的程序却不是很多人能够胜任的一个任务。当然了,即使我们写不出并发程序,也并不意味着多核
9、技术就没有好处。至少,我们可以在不同的核上面跑不同的应用。当然,这些不同应用之间的联系最好别太多。造成多核技术这个问题的核心是所谓的内存墙。虽然 CPU 的速度不断提升,但其访问数据的速度却没有同步提升。虽然核数不断增加,但从这些核到计算机其余部件的链接并没有同步增加,这样,保持所有 CPU 获得充足的数据就是一个大问题。四、关于多核操作系统WindowsNT 和 Linus2.0 之后的 Windows 系列、Linus 操作系统都可以支持多核,但目前还没有专门针对 CMP(单芯片多处理器)体系结构的多核操作系统,缺乏成熟的 CMP 调度算法。虽然 Windows 和 Linus 可作为 CMP 多核体系结构的操作系统,但它们的多核支持不是对 CMP 的支持,而是对 SMP(对称多处理器)的支持。五、操作系统的研究热点和发展趋势1嵌入式操作系统(掌上电脑、电视机顶盒、智能家电)2强实时操作系统3并行(集群)操作系统(共享主存的多处理机、上千个微处理器)4网络分布式操作系统