多处理器系统与软件管理技术详解
1. 早期SMP技术及其局限性
早期有一种名为Giant的系统,在该系统下,内核能确保数据不会在其运行过程中发生改变。本质上,Giant保证了内核仅在一个CPU上运行,就像以往一样。
这种策略在双CPU系统中能有一定的效果。例如,在双CPU机器上同时运行一个中级数据库和一个Web服务器时,你可以确信CPU不会成为瓶颈。若一个CPU忙于处理网页请求,另一个则可自由响应数据库查询。然而,当使用八CPU机器时,问题就出现了,系统会花费大量时间等待Giant可用。
这种简单的对称多处理(SMP)技术既不高效也缺乏可扩展性。标准的SMP教科书很少提及这种方法,因为它太过笨拙。还有一些其他的SMP处理方法更糟糕,比如早期微软服务器操作系统的某些版本,将一个处理器专门用于用户界面,另一个用于其他所有任务。这种方法虽然能让鼠标响应更灵敏,但也很少在教科书中出现。
2. 现代SMP技术
如今,当你对内核加锁后,可以对锁进行细分。FreeBSD将Giant锁拆分成了许多更小的锁,现在内核的每个部分都使用尽可能小的锁来执行任务。最初,这些锁应用于核心内核基础设施,如调度器(内核中决定哪些任务可以使用哪些时间片的部分)、网络栈、磁盘I/O栈等。这样做立即提升了性能,因为当一个CPU在调度任务时,另一个可以处理网络流量。随后,锁进一步深入到各个内核组件中。网络栈的每个部分、I/O子系统的每个部分都有了自己的锁,这使得内核能够利用多个处理器同时执行多项任务。这些独立的内核子进程被称为线程。
不同类型的锁有不同的要求,常见的锁包括互斥锁(mutexes)、sx锁、读写锁(rw locks)、自旋互斥锁(spin m
超级会员免费看
订阅专栏 解锁全文
957

被折叠的 条评论
为什么被折叠?



