前言:操作系统是最杂的,每本书讲的都不太一样,例如单纯 CPU 调度算法这块,唯一完全符合 408 考纲的是《操作系统概念》这本书,其他书或多或少概念分类有所出入;又例如硬连接和软连接,《现代操作系统》和汤小丹《计算机操作系统》都将软连接称为符号链接;再例如多处理器按操作系统分类这部分内容,各书都有主从式和独立性的分类,汤小丹《计算机操作系统》将浮动型多处理机操作系统放入该分类,但《现代操作系统》将对称多处理机放入该分类中,而严格来讲这种分类应该是硬件分类。看了其他人对考纲的总结,最后选择以汤小丹《计算机操作系统》为主
以下为个人 408 总结
多处理机分类
这部分内容主要参考了汤书和现代操作系统,内容可能会有所出入,《现代操作系统》将对称多处理机放入按操作系统分类中,但严格来讲这种分类应该是硬件分类,所以没放入

进程分配方式

概念: 亲和性
CPU 亲和性是指进程在尽可能长的时间内运行在指定的 CPU 上,以减少进程迁移的频率和相关的开销。
- 软 CPU 亲和性:由操作系统实现,这意味着进程通常不会在处理器之间频繁迁移,而是尽量保持在同一个 CPU 上运行。Linux 内核进程调度器天生具有软 CPU 亲和性的特性,虽然 Linux 允许用户强制指定进程在指定的处理器上运行,但默认情况下,它会通过软亲和性来优化进程调度。
- 硬 CPU 亲和性:用户可以通过调用系统 API 实现自定义进程运行在哪个 CPU 上。这种分配方式在需要保持高 CPU 缓存命中率或测试复杂应用程序时非常有用。硬亲和性通常通过编程接口(如 Linux 中的 sched_setaffinity 和 sched_getaffinity 系统调用)来实现
进程(或线程)调度方式
这块内容主要以汤书为主,现代这块内容和汤书内容差异有点大,重点看下前两个方式
- 自调度 (Self-Scheduling) 方式
自调度方式是最简单的一种调度方式。在系统中设置有一个公共的进程或线程就绪队列,所有的处理器在空闲时,都可自己到该队列中取得一进程 (或线程) 来运行。在自调度方式中,可采用在单处理机环境下所用的调度算法,如先来先服务 (FCFS) 调度算法、最高优先权优先 (FPF) 调度算法和抢占式最高优先权优先调度算法等。- 优点:
- (1)系统中的公共就绪队列可按照单处理机系统中所采用的各种方式加以组织,其调度算法也可沿用单处理机系统所用的算法。
- (2)只要公共就绪队列不空,就不会出现处理机空闲的情况,也不会发生处理机忙闲不均的现象(忙闲不均是静态分配方式的缺点,见上面的思维导图),因而有利于提高处理机的利用率。
- 缺点:
- (1) 瓶颈问题:在整个系统中只设置一个就绪队列,供多个处理器共享,这些处理器必须互斥地访问该队列,这很容易形成系统瓶颈。这在系统中处理器数目不多时,问题并不严重,但若系统中处理器数目在数十个乃至数百个时,如果仍用单就绪队列,就会产生严重的瓶颈问题。
- (2) 低效性:当线程阻塞后再重新就绪时,它将只能进入这唯一的就绪队列,但却很少可能仍在阻塞前的处理器上运行。如果在每台处理器上都配有高速缓存 (Cache),则这时在其中保留的该线程的数据已经失效,而在该线程新获得的处理器上,又须重新建立这些数据的拷贝。由于一个线程在其整个生命期中可能要多次更换处理器,因而使高速缓存的使用效率很低。
- (3) 线程切换频繁:通常,一个应用中的多个线程都属于相互合作型的,但在采用自调度方式时,这些线程很难同时获得处理器而同时运行,这将会使某些线程因其合作线程未获得处理器运行而阻塞,进而被切换下来。
- 优点:
- 成组调度方式
为了解决在自调度方式中线程被频繁切换的问题,产生了成组调度方式。该方式将一个进程中的一组线程分配到一组处理器上去执行在成组调度时,如何为应用程序分配处理器时间,可考虑采用以下两种方式- (1)面向所有应用程序平均分配处理器时间:
- 假定系统中有 N 个处理机和 M 个应用程序,每个应用程序中至多含有个线程,则每个应用程序至多可有 1/M 的时间去占有 N 个处理机。
- 例如,有 4 台处理器及两个应用程序,其中,应用程序 A 中有 4 个线程,应用程序 B 中有一个线程。这样,每个应用程序可占用 4 台处理机一半 (1/2) 的时间。图 10-7(a)示出了此时处理器的分配情况。由图可看出,使用这种分配方式,在应用程序 A 运行时,4 台处理器都在忙碌; 而应用程序 B 运行时,则只有 1 台处理器忙碌, 其它 3 台空闲。因此, 将有 3/8 的处理器时间 (即 37.5%) 被浪费了。

- (2)面向所有线程平均分配处理器时间:
- 由于应用程序 A 中有 4 个线程,应用程序 B 中只有 1 个线程,因此,应为应用程序 A 分配 4/5 的时间,只为应用程序 B 分配 1/5 的时间,如图 10-7(b) 所示。此时,将只有 15%(
)的处理机时间被浪费。可见,按线程平均分配处理机时间的方法更有效。 - 优点:
- (1)如果一组相互合作的进程或线程能并行执行,则可有效地减少线 (进) 程阻塞情况的发生,从而可以减少线程的切换,使系统性能得到改善
- (2)因为每次调度都可以解决一组线程的处理机分配问题,因而可以显著地减少调度频率,从而也减少了调度开销
- (3)成组调度的性能优于自调度,目前已获得广泛的认可,并被应用到许多种处理机 OS 中。
- (3) 专用处理机分配,这种方式将属于一个应用程序的一组线程,分配到一组处理机上,在应用程序未结束之前,这些处理机专用于处理这组线程。专用处理机分配可以完全避免进程或线程的切换,从而可大大加速程序的运行。
- (4) 动态调度,该调度方式允许操作系统和应用程序共同进行调度决策。操作系统负责把处理机分配给作业,而每个作业负责将分配到的处理机再分配给自己的某一个线程。动态调度方式优于成组调度和专用处理机调度方式,但其开销较大。
- 由于应用程序 A 中有 4 个线程,应用程序 B 中只有 1 个线程,因此,应为应用程序 A 分配 4/5 的时间,只为应用程序 B 分配 1/5 的时间,如图 10-7(b) 所示。此时,将只有 15%(
- (1)面向所有应用程序平均分配处理器时间:
相关题目
- 与单机操作系统不同,多处理机操作系统具有①、②、③ 和④等新特征。
并行性、分布性、机间的通信和同步性、可重构性 - 在对称多处理机系统中, 静态分配方式是指① , 因此需为 ② 设置一个就绪队列而动态分配方式则可以为③设置一个就绪队列
①将每个进程固定分配到某个处理器上去执行;②每个 CPU;③整个系统 - 选择部分





为什么要为每个CPU配置高速缓冲区?CC-NUMA和NC-NUMA代表什么?
答:在基于总线的SMP结构中,为每个CPU配置高速缓冲区可以大大减少CPU对总线的访问频率,从而有效地减少CPU访问存储器时因为总线忙而造成的等待,使得系统可支持更多的CPU。在NUMA(非一致性存储器访问)多处理机中,为每个CPU配置高速缓冲区还可以大大减少CPU对远程内存的访问,从而有效地提高对存储器访问的平均时间。CC-NUMA是指为每个CPU配置了一致性高速缓存的NUMA多处理机,而NC-NUMA是指无高速缓存的NUMA。
-
共享存储器的多处理机系统属于(A):如果采用总线结构的多处理机系统,为了缓解多个CPU对系统总线的争用,可为每个CPU配置(B)。
A:(1)计算机网络;(2)紧密耦合MPS;(3)松散耦合MPS;(4)分布式系统。
B:(1)高速缓存;(2)私有存储器;(3)更大的共享存储器;(4)高速缓存或私有存储器;(5)旋转锁。 -
NUMA多处理机结构中,所有共享存储器在物理上是(A):一个CPU访问(B)速度最快,访问(C)速度最慢;比起UMA结构,NUMA结构的最明显的优点是(D)。
A:(1)集中的;(2)对称的;(3)分布的;(4)虚拟的。
B, C:(1)本地存储器;(2)公共存储器;(3)其他节点的存储器;(4)群内共享存储器。
D:(1)访问内存更快;(2)管理更简单;(3)扩展能力更强;(4)资源利用率更高。
-
多处理机操作系统主要有三种类型,其中较易实现的是(A),可靠性最高的是(B),自主性较强但较易造成处理机负载不均现象的是(C)。
A, B, C:(1)主从式操作系统;(2)独立监督式操作系统;(3)浮动监督式操作系统。 -
多处理机的调度有多种方式,其中:(A)方式不会发生处理器忙闲不均的现象,因此有较高的处理器利用率;(B)方式可以有效地降低合作线程因相互等待而造成线程切换的频率;(C)方式虽然会严重浪费处理器,但可以大大加速程序的运行;(D)方式则允许操作系统和应用程序共同进行调度决策。
A, B, C, D:(1)动态调度;(2)静态调度;(3)专用处理器分配;(4)成组调度。