题目一
在包含多线程的进程中,下列哪些对象可能被线程所共享?
- 寄存器值
- 堆内存
- 全局变量
- 栈内存
- 局部变量
答:
线程是CPU使用的基本单元,由线程ID、程序计数器、寄存器集合和栈组成。它与属于同一进程的其他线程共享代码段、数据段和其他操作系统资源,如打开文件和信号。线程之间可以共享堆内存和全局变量,但每个线程都有属于自己的一组寄存器值、栈内存和局部变量。
题目二
使用多线程解决方案,在多处理器系统中可以比在单处理器系统中获得更好的性能吗? 为什么?
答:
不能,因为一个包括多用户线程的多线程系统无法在多处理器系统上同时使用不同的处理器(用户态线程只能在一个内核线程运行,而内核线程是调度单位,无法把用户态线程分布到其他核心)。操作上系统只能看到单一的进程且不会调度在不同处理器上的不同进程的线程。因此,多处理器系统执行多个用户线程是没有性能优势的。
题目三
考虑在多处理器系统中采用多对多线程模式编写的多线程程序,使程序中用户级线程数比系统中处理器数多。讨论下列情形的性能影响:
- 分配给程序的内核线程数比处理器数少。
- 分配给程序的内核线程数与处理器数相等。
- 分配给程序的内核线程数比处理器数多,但少于用户线程数。
答:
- 当分配给程序的内核线程数比处理器数少时,一些处理器将仍处于空闲状态。因为调度图中只有内核线程的处理器,而不是用户线程的处理器。
- 当分配给程序的内核线程数与处理器数相等时,那么有可能所有处理器将同时使用。然而,当一个内核块内的内核(因页面错误或同时援引系统调用)相应的处理器将闲置。
- 当分配给程序的内核线程数比处理器数多,但少于用户线程数时,封锁一个内核线程并调出,换入另一个准备执行的内核线程。因此,增加多处理器系统的利用率。
题目四
请谈谈你对阿姆达尔定律的理解,并说明如何提高系统的加速比。
答:
Amdahl定律的主要思想是当我们加快系统一个部分的速度时,对系统整体性能的影响依赖于这个部分有多重要和速度提高了多少。假设系统的某个部分需要找个时间的百分比为
α
\alpha
α,而我们将它的性能提高到了
k
k
k倍,所以加速比
S
=
1
(
1
+
α
)
+
α
k
S=\frac{1}{\left(1+\alpha\right)+\frac{\alpha}{k}}
S=(1+α)+kα1