对称多处理(Symmetric multiprocessing,SMP)
在多核系统中分配资源是很困难的,特别是在多个软件之间不知道对方正占用哪些资源的情况下。SMP通过以下方法来解决这一问题:让所有内核都运行同一个操作系统的拷贝。由于操作系统每时每刻都监控着系统的运行状态,因此可以在多核之间分配资源,而无需应用开发人员的干预。另外,操作系统可以提供内嵌的标准化原语(primitives),如pthread_mutex_lock、pthread_mutex_unlock、pthread_spin_lock和pthread_spin_unlock,从而让多个应用可以安全和容易地共享这些资源。
由于仅仅是运行操作系统的一个拷贝,SMP可以动态地向指定应用分配资源,从而提高硬件资源的利用率。另外也可以让系统跟踪工具完整地收集各种有价值的信息,如操作统计、多核芯片上的应用交互等,以帮助开发人员对应用进行优化和调试。比如,QNX Momentics开发套件中的system profiler可以实时跟踪线程在内核与内核之间的迁移,跟踪操作系统原语使用、计划任务、应用间通信以及其他事件。由于开发人员使用标准的操作系统原语,而不是复杂的IPC机制,这也使得应用同步变得更加容易。
SMP上的操作系统提供上述功能而无须开发人员使用特别的API或编程语言。实际上,在高端SMP环境中,开发人员已经多年成功地使用了POSIX标准(特别是pthreads API),可以写出能同时运行在单核CPU和多核CPU上的POSIX代码。一些操作系统也允许在这两类CPU上运行相同的二进制代码。
两个核心共享内存中的单一操作系统映像。在极少数情况下,两个内核在试图访问操作系统资源时,会使用处理机间中断(interprocessor interrupt)和自旋锁(spinlock)来预防冲突。为最大程度地减少延迟,微内核(microkernel )操作系统架构是最好的选择,这种架构在kernel上实际花费的时间很少。
一个设计良好的SMP 操作系统允许多个应用线程协同地运行在任何一个内核上。这种协同性使得应用程序任何时候都可以利用芯片的整体计算能力。如果操作系统能提供适当的优先权和线程优先排序能力,就能帮助应用开发人员确保CPU为最需要的应用服务。
![]() |
图5 基于SMP模式的控制面板
在图5所示的控制面板中,SMP允许各种程序中的所有线程运行在任何一个内核上。比如,在CLI(命令行界面,command-line interface)进程运行的同时,路由应用程序也正在进行密集计算。
