程序员的网络日志 程序员的网络日志
首页
  • 计算机科学导论
  • 数字电路
  • 计算机组成原理
  • C语言
  • 数据结构
  • 汇编语言
  • 操作系统
  • Linux
  • 编译原理
  • 计算机网络
  • 数据库
  • Java基础
  • JavaWeb
  • 笔记软件
  • Quicker
  • Qttabar
  • Wgesture
  • 浏览器与插件
  • 视频播放器
  • 待办清单
  • 终端软件
  • uTools
  • 番茄盒子
  • 网站日记
  • 赞赏支持
  • 关于本站
  • 如何搭建一个博客
  • 如何搭建一个邮箱
GitHub (opens new window)
首页
  • 计算机科学导论
  • 数字电路
  • 计算机组成原理
  • C语言
  • 数据结构
  • 汇编语言
  • 操作系统
  • Linux
  • 编译原理
  • 计算机网络
  • 数据库
  • Java基础
  • JavaWeb
  • 笔记软件
  • Quicker
  • Qttabar
  • Wgesture
  • 浏览器与插件
  • 视频播放器
  • 待办清单
  • 终端软件
  • uTools
  • 番茄盒子
  • 网站日记
  • 赞赏支持
  • 关于本站
  • 如何搭建一个博客
  • 如何搭建一个邮箱
GitHub (opens new window)
  • 计算机科学导论

  • 数字电路

  • 计算机组成原理

  • 数据结构

  • 操作系统

    • 操作系统
    • 操作系统概述
    • 什么是操作系统
    • 进程
    • 存储
    • 文件
    • IO
    • 死锁
    • 多媒体操作系统
    • 多处理机系统
      • 8.1 多处理机
    • 安全
    • 实例研究1:Linux
  • Linux

  • 编译原理

  • 计算机网络

  • 数据库

  • 计算机科学导论
  • 计算机基础
  • 操作系统
程序狗
2022-07-25
目录

多处理机系统

# 第8章 多处理机系统

===================

从计算机诞生之日起,人们对更强计算能力的无休止的追求就一直驱使着计算机工业的发展。ENIAC可以完成每秒300次的运算,它一下子就比以往任何计算器都快1000多倍,但是人们并不满足。我们现在有了比ENIAC快数百万倍的机器,但是还有对更强大机器的需求。天文学家们正在了解宇宙,生物学家正在试图理解人类基因的含义,航空工程师们致力于建造更安全和速度更快的飞机,而所有这一切都需要更多的CPU周期。然而,即使有更多运算能力,仍然不能满足需求。

过去的解决方案是使时钟走得更快。但是,现在开始遇到对时钟速度的限制了。按照爱因斯坦的相对论,电子信号的速度不可能超过光速,这个速度在真空中大约是30cm/ns,而在铜线或光纤中约是20cm/ns。这在计算机中意味着10GHz的时钟,信号的传送距离总共不会超过2cm。对于100GHz的计算机,整个传送路径长度最多为2mm。而在一台1THz(1000GHz)的计算机中,传送距离就不足100µm了,这在一个时钟周期内正好让信号从一端到另一端并返回。

让计算机变得如此之小是可能的,但是这会遇到另一个基本问题:散热。计算机运行得越快,产生的热量就越多,而计算机越小就越难散热。在高端Pentium系统中,CPU的散热器已经比CPU自身还要大了。总而言之,从1MHz到1GHz需要的是更好的芯片制造工艺,而从1GHz到1THz则需要完全不同的方法。

获得更高速度的一种处理方式是大规模使用并行计算机。这些机器有许多CPU,每一个都以"通常"的速度(在一个给定年份中的速度)运行,但是总体上会有比单个CPU强大得多的计算能力。具有1000个CPU的系统已经商业化了。在未来十年中,可能会建造出具有100万个CPU的系统。当然为了获得更高的速度,还有其他潜在的处理方式,如生物计算机,但在本章中,我们将专注于有多个普通CPU的系统。

在高强度的数据处理中经常采用高度并行计算机。如天气预测、围绕机翼的气流建模、世界经济模拟或理解大脑中药物-受体的相互作用等问题都是计算密集型的。解决这些问题需要多个CPU同时长时间运行。在本章中讨论的多处理机系统被广泛地用于解决这些问题以及在其他科学、工程领域中的类似问题。

另一个相关的进展是因特网不可思议地快速增长。因特网最初被设计为一个军用的容错控制系统的原型,然后在从事学术研究的计算机科学家中流行开来,并且在过去它已经获得了许多新用途。其中一种用途是,把全世界的数千台计算机连接起来,共同处理大型的科学问题。在某种意义上,一个包含有分布在全世界的1000台计算机的系统与在一个房间中有1000台计算机的系统之间没有差别,尽管这两个系统在延时和其他技术特征方面会有所不同。在本章中我们也将讨论这些系统。

假如有足够多的资金和足够大的房间,把一百万台无关的计算机放到一个房间中很容易做到。把一百万台无关的计算机放到全世界就更容易了,因为不存在第二个问题了。当要在一个房间中使这些计算机相互通信,以便共同处理一个问题时,问题就出现了。结果,人们在互连技术方面做了大量工作,而且不同的互连技术已经导致了不同性质的系统以及不同的软件组织。

在电子(或光学)部件之间的所有通信,归根结底是在它们之间发送消息------具有良好定义的位串(bit

string)。其差别在于所涉及的时间范围、距离范围和逻辑组织。一个极端的例子是共享存储器多处理机,系统中有从2个到1000个的CPU通过一个共享存储器通信。在这个模型中,每个CPU可同样访问整个物理存储器,可使用指令LOAD和STORE读写单个的字。访问一个存储器字通常需要2~10ns。尽管这个模型,如图8-1a所示,看来很简单,但是实际上要实现它并不那么简单,而且通常涉及底层大量的消息传递,这一点我们会简要地加以说明。不过,该消息传递对于程序员来说是不可见的。

其次是图8-1b中的系统,许多CPU-存储器通过某种高速互连网络连接在一起。这种系统称为消息传递型多计算机。每个存储器局部对应一个CPU,且只能被该CPU访问。这些CPU通过互连网络发送多字消息通信。存在良好的连接时,一条短消息可在10~50µs之内发出,但是这仍然比图8-1a中系统的存储器访问时间长。在这种设计中没有全局共享的存储器。多计算机(消息传递系统)比(共享存储器)多处理机系统容易构建,但是编程比较困难。可见,每种类型各有其优点。

图 8-1 a)共享存储器多处理机;b)消息传递多计算机;c)广域分布式系统

第三种模型参见图8-1c,所有的计算机系统都通过一个广域网连接起来,如因特网,构成了一个分布式系统(distributed

system)。每台计算机有自己的存储器,当然,通过消息传递进行系统通信。图8-1b和图8-1c之间真正惟一的差别是,后者使用了完整的计算机而且消息传递时间通常需要10~100ms。如此长的延迟造成使用这类松散耦合系统的方式和图8-1b中的紧密耦合系统不同。三种类型的系统在通信延迟上各不相同,分别有三个数量级的差别。类似于一天和三年的差别。

本章有四个主要部分,分别对应于图8-1中的三个模型再加上虚拟化技术(一种通过软件创造出更多虚拟CPU的方法)。在每一部分中,我们先简要地介绍相关的硬件。然后,讨论软件,特别是与这种系统类型有关的操作系统问题。我们会发现,每种情况都面临着不同的问题并且需要不同的解决方法。

# 8.1 多处理机


共享存储器多处理机(或以后简称为多处理机,multiprocessor)是这样一种计算机系统,其两个或更多的CPU全部共享访问一个公用的RAM。运行在任何一个CPU上的程序都看到一个普通(通常是分页)的虚拟地址空间。这个系统惟一特别的性质是,CPU可对存储器字写入某个值,然后读回该字,并得到一个不同的值(因为另一个CPU改写了它)。在进行恰当组织时,这种性质构成了处理器间通信的基础:一个CPU向存储器写入某些数据而另一个读取这些数据。

至于最重要的部分,多处理机操作系统只是通常的操作系统。它们处理系统调用,进行存储器管理,提供文件系统并管理I/O设备。不过,在某些领域里它们还是有一些独特的性质。这包括进程同步、资源管理以及调度。下面首先概要地介绍多处理机的硬件,然后进入有关操作系统的问题。

# 8.1.1 多处理机硬件

所有的多处理机都具有每个CPU可访问全部存储器的性质,而有些多处理机仍有一些其他的特性,即读出每个存储器字的速度是一样快的。这些机器称为UMA(Uniform

Memory Access,统一存储器访问)多处理机。相反,NUMA(Nonuniform Memory

Access,非一致存储器访问)多处理机就没有这种特性。至于为何有这种差别,稍后会加以说明。我们将首先考察UMA多处理机,然后讨论NUMA多处理机。

1.基于总线的UMA多处理机体系结构

最简单的多处理机是基于单总线的,参见图8-2a。两个或更多的CPU以及一个或多个存储器模块都使用同一个总线进行通信。当一个CPU需要读一个存储器字(memory

word)时,它首先检查总线忙否。如果总线空闲,该CPU把所需字的地址放到总线上,发出若干控制信号,然后等待存储器把所需的字放到总线上。

当某个CPU需要读写存储器时,如果总线忙,CPU只是等待,直到总线空闲。这种设计存在问题。在只有两三个CPU时,对总线的争夺还可以管理;若有32个或64个CPU时,就不可忍受了。这种系统完全受到总线带宽的限制,多数CPU在大部分时间里是空闲的。

这一问题的解决方案是为每个CPU添加一个高速缓存(cache),如图8-2b所示。这个高速缓存可以位于CPU芯片的内部、CPU附近、在处理器板上或所有这三种方式的组合。由于许多读操作可以从本地高速缓存上得到满足,总线流量就大大减少了,这样系统就能够支持更多的CPU。一般而言,高速缓存不以单个字为基础,而是以32字节或64字节块为基础。当引用一个字时,它所在的整个数据块(叫做一个cache行)被取到使用它的CPU的高速缓存当中。

图 8-2 三类基于总线的多处理机:a)没有高速缓存;b)有高速缓存;c)有高速缓存与私有存储器

每一个高速缓存块或者被标记为只读(在这种情况下,它可以同时存在于多个高速缓存中),或者标记为读写(在这种情况下,它不能在其他高速缓存中存在)。如果CPU试图在一个或多个远程高速缓存中写入一个字,总线硬件检测到写,并把一个信号放到总线上通知所有其他的高速缓存。如果其他高速缓存有个"干净"的副本,也就是同存储器内容完全一样的副本,那么它们可以丢弃该副本并让写者在修改之前从存储器取出高速缓存块。如果某些其他高速缓存有"脏"(被修改过)副本,它必须在处理写之前把数据写回存储器或者把它通过总线直接传送到写者上。高速缓存这一套规则被称为高速缓存一致性协议,它是诸多协议之一。

还有另一种可能性就是图8-2c中的设计,在这种设计中每个CPU不止有一个高速缓存,还有一个本地的私有存储器,它通过一条专门的(私有)总线访问。为了优化使用这一配置,编译器应该把所有程序的代码、字符串、常量以及其他只读数据、栈和局部变量放进私有存储器中。而共享存储器只用于可写的共享变量。在多数情况下,这种仔细的放置会极大地减少总线流量,但是这样做需要编译器的积极配合。

2.使用交叉开关的UMA多处理机

即使有最好的高速缓存,单个总线的使用还是把UMA多处理机的数量限制在16至32个CPU。要超过这个数量,需要不同类型的互连网络。连接n个CPU到k个存储器的最简单的电路是交叉开关,参见图8-3。交叉开关在电话交换系统中已经采用了几十年,用于把一组进线以任意方式连接到一组出线上。

图 8-3 a)8×8交叉开关;b)打开的交叉点;c)闭合的交叉点

上次更新: 2022/8/7 09:00:48
多媒体操作系统
安全

← 多媒体操作系统 安全→

最近更新
01
关于我
10-19
02
如何搭建个人邮箱
08-03
03
编译原理概述
07-31
更多文章>
Theme by Vdoing | Copyright © -2022 粤ICP备2022067627号-1 粤公网安备 44011302003646号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式