介绍
本模块的目标是了解学习计算机体系结构的重要性,指出传统冯诺依曼体系结构的基本组成部分和工作原理,讨论当今存在的不同类型的计算机系统,了解程序表现出的不同类型的并行性以及架构如何利用这些不同类型的并行性。
第一个也是最重要的原因是计算机体系结构是一个令人兴奋的主题。你会发现很多关于你使用的机器的有趣事实,你会发现这是一门非常有趣的课程。任何计算机工程师或科学家基本上都应该知道他或她将要使用的机器的基本细节。您可以是应用程序程序员、编译器编写者或任何软件设计师。只有了解底层架构,才能更有效地使用机器,性能也会得到提升。要成为计算机硬件专家,您需要了解计算机体系结构的基本概念。即使您只是想成为一名软件设计师,您也需要了解机器的内部结构以提高代码性能。也为了探索新的机会,您需要了解正在发生的最新技术改进。只有了解最新的技术改进,您才能将这些技术改进应用于您的优势。这门学科对工程和科学的所有领域都有影响,因为计算机无处不在,无论您在哪个工程和科学领域,您都知道计算机的使用非常普遍,并且对计算机体系结构的研究将非常有用,以便使用您的机器更有效。
根据定义,计算机是一种复杂的电子计算器,它接受输入信息,根据存储的指令列表处理信息,最后产生结果输出信息。根据计算机执行的功能,我们可以将数字计算机的组成部分识别为:接收信息的输入单元、处理信息的处理单元、存储信息的存储单元和输出信息的输出单元。数据。数据部分是信息流动的路径,假设您有一个称为 ALU 的算术和逻辑单元,其中包括加法器、减法器、乘法器等功能单元,移位器等,您还有寄存器用作处理器内的存储介质,因为数据必须存储在某处以进行处理。寄存器是处理器内可用的内置存储机制,ALU 用于执行所有算术和逻辑运算。对于控制路径,您需要有一些单元来协调各个单元的活动,您应该知道数据何时从一个点流向另一个点,何时添加 必须进行运算,何时必须进行减法运算,等等。因此,控制路径协调计算机系统各个单元的活动,将数据路径和控制路径放在一起称为中央处理单元或通俗地缩写为 CPU。数据存储器包括存储处理所需的所有信息、数据和程序的存储单元。该程序只不过是一个指令列表。计算机只是按照给出的指令工作的愚蠢机器。如果你指示它添加,它就会添加。最初,程序存储在内存中,您从那里获取指令,执行它们并将结果输出到外部世界,使用显示器或打印机等设备。除了这些经典元素,每台机器通常都有一个用于与其他机器通信的网络组件。我们知道,我们不仅仅将它们作为一台独立的机器运行,我们需要在很短的距离内或在全球范围内从一台机器到另一台机器进行通信。
计算机体系结构由计算机组织和指令集体系结构 ISA 组成。ISA 给出了计算机能够做什么的逻辑视图,当您查看计算机组织时,它基本上讨论了 ISA 是如何实现的。这两者放在一起通常称为计算机体系结构,在本课程中,我们试图涵盖计算机组织部分和 ISA 部分。
为了对什么是指令有一个基本的了解,我们将看一些示例指令。指令基本上指定了处理器的命令,例如将信息从计算机内的一个点传输到另一个点,例如,从一个寄存器到另一个寄存器,从一个内存位置到一个寄存器或输入输出设备。您将获得具体说明,说明将信息从该来源传输到该目的地。所以指令基本上指定了在计算机内将信息从一个点传输到另一个点的命令,指示计算机执行算术和逻辑运算,例如将这两个数字相乘等。您还需要一些指令来控制程序的流程。比如说,我想把两个数字相加,如果结果大于某事,我想采取一个行动方案,如果结果小于某事,我想采取不同的行动方案。这些指令将允许您控制程序的流程。跳转指令会使控制转移到不同的点。你可能有一个子程序调用,一个函数调用。我们在做模块化编程的时候,你在执行一个东西的时候,需要专门去执行一个函数,得到结果,然后继续执行主程序。这些指令是控制流指令的示例。你可能有一个子程序调用,一个函数调用。我们在做模块化编程的时候,你在执行一个东西的时候,需要专门去执行一个函数,得到结果,然后继续执行主程序。这些指令是控制流指令的示例。你可能有一个子程序调用,一个函数调用。我们在做模块化编程的时候,你在执行一个东西的时候,需要专门去执行一个函数,得到结果,然后继续执行主程序。这些指令是控制流指令的示例。
当您有一系列指令来执行特定任务时,它被称为程序,它存储在内存中。举例来说,如果我必须将两个数字相加,并且这些数字存储在内存中。从记忆中,您必须将数字带到加法器单元并添加。因此,我们需要数据传输指令将数据从内存传输到处理器,并需要添加指令进行添加。处理器 从内存中取出构成程序的指令,并完全按照该顺序执行这些指令中所述的操作。假设中间有一条控制流指令,它说不执行下一条指令而是跳转到其他位置并执行该指令,则控制将转移到该点。
一旦我们对这些指令是什么有了一些了解,我们还需要知道这些指令操作的数据是什么。数据可以是十进制数、二进制数或八进制数或编码字符。存储单元以位序列的形式存储指令和数据。一次存储或检索并处理的位组通常称为字。处理器的字长取决于您正在查看的处理器,如果是 8 位处理器,则字长为 8。如果它是 64 位处理器,则您谈论的是 64 字长。
为了读取和写入内存,我们应该知道如何访问内存。内存由许多内存位置组成,例如,如果我查看 1K 内存,我将有 1024 个内存位置。就像我们有唯一的地址来标识我们的房子一样,在这种情况下,每个内存位置都有一个唯一的 10 位地址。为了访问内存位置,我们需要知道内存位置的唯一地址,处理器根据这个内存地址读写内存。随机存取存储器提供固定的存取时间,与字的位置无关。我们将内存访问时间定义为从发起请求到满足请求之间经过的时间。比如说,我已经提出了一个内存读取请求,所以从下单到数据真正到达之间的时间称为内存访问时间。内存访问时间取决于内存单元的速度——慢速内存的访问时间较长,而快内存的访问时间较慢。
当您查看内存时,我们需要内存速度快、足够大以容纳大量数据并且价格合理。现在,这一切并没有走到一起。所以,我们看的不是平面记忆系统,而是分层记忆系统。处理器和存储器必须相互通信才能读取和写入信息。因此,为了应对处理器速度并减少通信时间,少量的 RAM,通常称为缓存,与处理器紧密耦合,现代计算机具有多级缓存。然后,我们有主存储器,然后是辅助存储器。最接近处理器的最快的内存满足速度要求,最远的内存满足容量要求。随着我们远离最内层,成本也会降低。虽然我们现在看到的主存非常高,但主存显然不足以存储您所有的程序和数据,因此您需要查看能够存储大量数据的二级存储。例如磁盘和磁带、光盘、CD 等。对存储在二级存储器中的数据的访问肯定较慢,但您可以利用最常访问的数据放置在更靠近处理器的事实这一事实。
在了解了数字计算机的基本组件之后,我们还应该 有一些方法将这些组件连接在一起并在它们之间进行通信。连接是通过称为总线的电线完成的。总线只不过是电线的互连,能够承载信息位。功能单元通过一组并行线连接,总线中的每条线可以传输一位信息,总线上的并行线数通常等于计算机的字长。当您谈论字长为 64 位的处理器时,这意味着处理器通常处理 64 位数据。因此,我们也有一条可以将 64 位数据从计算机的一个点传输到另一个点的总线是合理的。
您知道计算机处理的信息可以是指令也可以是数据。指令或机器指令是管理计算机内以及计算机与内存和 I/O 设备之间的信息传输的显式命令,并指定要执行的算术和逻辑运算。执行任务的指令列表称为程序。程序通常存储在内存中,处理器一个接一个地获取这些指令并执行它们。最早的计算机有固定的程序。一些非常简单的计算机仍然使用这种设计,无论是为了简单还是出于培训目的。例如,台式计算器是固定程序的计算机。它可以做基本的数学运算,但不能用作文字处理器或运行视频游戏。要更改此类机器的程序,您必须重新布线或重新编程机器。重新编程,如果可能的话,是一个非常手动的过程,从流程图和纸条开始,然后是详细的工程设计,然后是实施物理变化的通常艰巨的过程。
存储程序计算机的想法改变了这一切。通过创建指令集架构并将计算详细描述为一系列指令(程序),机器变得更加灵活。通过以与数据相同的方式处理这些指令,存储程序机器可以轻松地更改程序,并且可以在程序控制下进行。术语“冯诺依曼架构”和“存储程序计算机”通常可以互换使用。指令和数据以零和一的序列存储在内存中,处理器按顺序执行这些指令,程序流由指令类型和其他因素(如中断等)控制或支配。取指和执行循环不断重复,因此从内存中取一条指令并执行,然后继续从内存中取下一条指令。这表示获取执行周期。使用唯一地址从内存中提取指令,解码然后执行。指令毕竟是一串零和一,你需要知道用这些零和一做什么——是要执行加法还是要执行什么操作,操作数在哪里可用以及很快。一旦整个信息可用,获取操作数并继续执行,然后最终存储结果。
正如我们之前指出的,计算机组织是指令集架构的实现。您将必须查看构成您的计算机系统的主要组件的特征、这些计算机系统互连的方式以及信息如何在这些组件之间流动。
从 1951 年开始,发生了很多技术改进——从真空管到晶体管、IC、VLSI、超大规模 IC 等等。我们发现,由于摩尔定律,处理器晶体管数量每年增加约 32% 到 40%。摩尔定律基本上是由英特尔的戈登摩尔在 1965 年提出的,他提出晶体管密度将每 18 到 24 个月翻一番,而且这种情况确实很有效。内存容量也以每年约 60% 的速度增长。所有这些技术进步都为更好的或新的应用提供了空间。应用需求越来越多,处理器越来越好,这是恶性循环。1978-2005年业绩大幅提升。2005年后,
您可以使用不同的类或不同类型的计算机系统。一个是台式机和笔记本电脑,最有竞争力的市场。在这里,我们看看您计划运行大量应用程序的通用应用程序,主要限制是成本性能的权衡。下一类计算机系统是服务器系统,它们需要具有高容量和性能非常重要。对于服务器来说,可靠性和可用性非常重要。对于此类系统,吞吐量需要很高。我们也有嵌入式系统,其中计算机作为更大系统的一部分隐藏起来。例如,当您看手机时,您没有意识到它是一个计算机系统,但您知道手机内部有许多处理器。洗衣机是嵌入式系统的一个简单示例。这些嵌入式计算机具有严格的电源性能要求、严格的成本限制并且专门用于特定应用。它是一种用于执行特定任务的处理器,与桌面处理器不同,您不会运行一系列应用程序。预计在该特定应用程序方面表现良好,这是一类涵盖广泛应用程序的计算机系统。您的需求范围可能从非常小的玩具车应用到非常复杂的诊断系统或监视机制。根据这一点,您的所有要求都将发生变化。最后,您还有当今非常重要的个人移动设备,其中成本很重要,能源很重要,媒体性能变得非常重要。个人手机也必须非常重视响应能力。一旦您向 PMD 提出请求,您希望立即得到答复。因此,当您查看个人移动设备时,响应能力非常重要。当然,如今您还有变得非常流行的集群和仓库级计算机。您将大量计算机放在一起并称为集群。在这里,性价比再次成为 您将大量计算机放在一起并称为集群。在这里,性价比再次成为 您将大量计算机放在一起并称为集群。在这里,性价比再次成为 非常重要,吞吐量很重要。当您查看集群时,单位时间内完成的事务数或已提供服务的 Web 服务数变得非常重要。当您查看此类计算机系统时,它再次与您的服务器相同,能源比例也变得非常重要。
计算机系统的主要驱动力是能源和成本。今天,每个人都在努力设计能够最大限度地减少能源和成本的计算机系统。此外,我们还必须查看您的应用程序表现出的不同类型的并行性,并尝试在我们设计的计算机系统中利用这种并行性。所以这成为计算机系统的主要驱动力。程序可能表现出的不同类型的并行性称为数据级并行性和任务级并行性。您需要设计利用它们的系统。处理器使用不同的技术来利用并行性。即使在顺序执行中,也有不同的技术可用于利用指令级并行性 ILP,即并行执行独立指令。当程序中存在可用的数据级并行性时,矢量处理器和 SIMD 风格的体系结构会尝试利用它们。处理器还考虑拥有多个执行线程。线程级并行在任务级并行方面被更多地利用,当它在更松散耦合的架构中完成时,我们称之为请求级并行。因此,应用程序表现出不同类型的并行性,您正在设计的计算机硬件应该尝试利用这种并行性并尝试提供更好的性能。线程级并行在任务级并行方面被更多地利用,当它在更松散耦合的架构中完成时,我们称之为请求级并行。因此,应用程序表现出不同类型的并行性,您正在设计的计算机硬件应该尝试利用这种并行性并尝试提供更好的性能。线程级并行在任务级并行方面被更多地利用,当它在更松散耦合的架构中完成时,我们称之为请求级并行。因此,应用程序表现出不同类型的并行性,您正在设计的计算机硬件应该尝试利用这种并行性并尝试提供更好的性能。
总结一下,在这个模块中,我们指出了你为什么需要学习计算机体系结构,即课程的动机,你将在这门计算机体系结构课程中学习什么,然后指出功能单元数字计算机以及它们如何互连,传统的冯诺依曼架构意味着什么。最后,我们指出了不同类别的计算机系统以及推动我们提出越来越好的计算机架构的驱动力,以利用各种应用程序之间可用的并行性,并降低能源和成本。