天天看点

CPU架构漫谈—诺曼架构与哈佛架构

作者:虎哥数码宅

众所周知,冯·诺依曼架构(von Neumann architecture)和哈佛体系结构(Harvard architecture)是计算机CPU系统的两种基本模型,或者称之为两种体系架构。前者,我们经常简称为“诺曼架构”;后者,我们经常简称为“哈佛架构”。

什么是架构?

架构是一个计算机硬件的基本模型,它决定了计算机系统的运行方式。

计算机架构的三个要素是:

  • 中央处理器CPU
  • 记忆单元(存储器)
  • 输入/输出接口 IO

如是果它们不同,就是架构不同。Intel 和AMD经常变动架构,变来变去,从CPU体系架构上来说,还是那个X86——冯·诺依曼架构,没有本质上的变化。

诺曼架构和哈佛架构之间的显著差异在于 CPU 与内存的存取方式。在这两种架构中,CPU 使用两种不同的方式访问内存,也就是说,它们处理指令和数据的方式是不同的。

诺曼架构

CPU架构漫谈—诺曼架构与哈佛架构

诺曼架构是最常见的计算机体系结构之一,最早由冯·诺依曼于1945年提出。这种架构中,指令和数据存储在同一个存储器中,使用同一条地址总线和数据总线来传输数据和指令。它的主要特点如下:

  • 指令和数据共享同一个存储器。
  • 一个CPU核心同时只能执行一条指令。
  • 存储器是被动的,需要 CPU 主动去读写数据。

我们的电脑用的X86 CPU,都是诺曼架构的。诺曼架构指令与数据共用条存总线,地址空间就在一起。所以,程序是CPU指令的集合,它也要占一定的地址空间。

CPU架构漫谈—诺曼架构与哈佛架构

在x86架构中,保留内存的一部分通常被称为BIOS或UEFI区域。这个区域存储了系统启动时需要的一些信息和代码,例如系统配置、硬件检测程序和引导程序等。

所以,电脑安装的内存条条,并不是都由你的程序支配。除了操作系统占用外,还有一部分是保留区域,是给BIOS或UEFI区域所占用。

上图是windows的任务管理器,每个电脑都会有一定的保留内存区域。这是诺曼架构的特点决定的,并不是某个人的随意行为。

哈佛架构

CPU架构漫谈—诺曼架构与哈佛架构

哈佛架构是一种分离式存储器体系结构,它将指令和数据存储在不同的内存中。CPU 通过不同的总线从指令内存和数据内存中读取指令和数据。这意味着 CPU 可以同时访问指令和数据内存,因此可以同时执行多条指令。它的主要特点如下:

  • 指令和数据存储在不同的内存中。
  • 一个CPU核心可以同时执行多条指令。
  • 存储器是主动的,可以同时向 CPU 提供指令和数据。

哈佛架构多用于一些嵌入式系统或数字信号处理器等领域。我们普通人一般见不到它。

诺曼架构与哈佛架构的区别

我们知道,诺曼架构和哈佛架构的主要区别,在于它们如何处理指令和数据。

在诺曼架构中,指令和数据共享同一个存储器,CPU 只能执行一条指令,因为它需要等待指令和数据都被读取到 CPU 中。而在哈佛架构中,指令和数据存储在不同的内存中,CPU 可以同时访问指令和数据内存,因此可以同时执行多条指令。

所以,可以这样理解,诺曼架构是单车道,而哈佛架构是多车道。

作为单车道的诺曼架构,它的缺点是明显的。

  • 同时传输数据和指令,导致存储器和处理器之间的效率低下。
  • 存储器中的指令和数据被混合存储,指令可以被当作数据进行处理,因此程序可以动态地修改自身代码,容易受到病毒、恶意程序等攻击。
  • 指令和数据必须具有相同的位宽。

不过,诺曼架构也有好处,就是简单、易于实现和设计。

哈佛架构有两个独立的存储器,就像多车道那样,它的优点也很明显。

  • 指令与数据传输同时运行,运行效率高。
  • 存储器中的指令和数据分开存储,因此程序无法直接修改自身代码,这样会更加安全可靠、固若金汤。
  • 指令和数据的位宽可以不同。

但天下没有十全的美事,哈佛架构实现和设计相对复杂的多。

哈佛架构也有一种好处,可以使用不同的技术来优化性能。例如,指令内存可以使用快速但昂贵的 SRAM 存储器,而数据内存可以使用廉价的 DRAM 存储器。这种技术上的优势使得哈佛架构在一些应用中更具优势,例如嵌入式系统和数字信号处理器。

总体而言,冯·诺依曼架构适用于大多数通用计算机,因为它能够灵活地处理各种不同的计算任务,同时还可以使用缓存等技术来优化性能。而哈佛架构则适用于一些特定的应用领域,例如需要高效地处理大量数据的嵌入式系统,或数字信号处理器等领域。

继续阅读