纯粹用户级线程策略中,多线程应用程序不能使用多处理技术。内核一次只把一个进程分配给一个处理器,因此同一时间一个进程中只能有一个线程被执行。事实上,在一个进程内,我们相当于实现了应用程序级别的多道程序设计
内核级线程 在一个纯粹的内核级线程程序中,有关线程的管理操作都是由内核完成的。应用程序没有对线程进行管理的代码。只有一个到内核线程设施的应用程序编程接口(API)。
优点 :
内核可以把多个线程同时分配到多个处理器上
如果一个进程中的线程阻塞,可以调用该进程中的另一个线程
内核自身也可以是多线程的
缺点:
跨进程的线程切换需要进行用户态和内核态的转换
经过统计后能发现,进程、用户级线程、内核级线程的性能从高到低可以按照这样的顺序(每级相差大约一个数量级):
用户级线程 > 内核级线程 > 进程
这是大多数情况下的结果,实际情况还是要取决于应用程序的性质。
组合的方法 一种折中的方法是组合用户级线程和内核级线程。在组合的系统中,线程的创建完全在用户空间中进行,线程的调度和同步也是在应用程序中进行。一个应用程序中的多个用户级线程被映射到一些内核级线程上。程序员可以为特定的应用程序和处理器调节内核级线程的数目以达到最佳效果。
在组合方法中,同一个应用程序中的多个线程可以在多个处理器上 并行 的运行。某个线程引起阻塞的系统用不会阻塞整个进程。设计正确的情况下该方法将会结合用户级线程和内核级线程的优点同时减少二者的缺点。
对称多处理 传统上,操作系统被看做是顺序机器,大多数计算机编程语言要求程序员把算法定义成指令序列。处理器通过按顺序逐条的执行机器指令来执行程序。每条指令都是以操作序列(取指令、取操作数、执行操作、储存结果)的方式执行的。
然而,对于计算机的这种看法并不完全是真实的。 在微操作级别,同一时间会有多个控制信号产生;长久以来指令流水线技术至少可以把取操作指令和执行操作重叠起来;这些都是并行的例子。
下面分析两种最主流的通过复制处理器提供并行性的手段:对称多处理和集群(后面讨论)。
对称多处理体系结构并行处理器系统的分类:
单指令单数据流 单处理器执行单个指令流,对保存在单个内存中的数据进行操作
单指令多数据流 一条机器指令控制许多处理器部件步伐一致的同时执行。每个处理部件都有一个相关的数据内存,因此每条指令都由不同的处理器在不同的数据集合上执行
多指令单数据流 一系列数据被传送到一组处理器上,每个处理器执行不同的指令序列。这个结构从未实现过
多指令多数据 一组处理器同时在不同的数据集上执行不同的指令序列
对称多处理系统在提高计算机性能的同时,无疑也引入了其他的问题,例如多个处理器避免同时选择一个线程执行等等。它增加了操作系统设计的复杂度。
多处理器操作系统多处理器操作系统负责管理处理器和其他的计算机资源,使得用户可以把整个系统看做是与多道程序单处理器系统相同的形式。用户可以构造使用多进程或多线程的应用程序,而无需考虑用到一个处理器还是多个处理器。因此,多处理器操作系统必须提供多道程序系统的全部功能,再加上适应多个处理器的附加功能。