IB/第 4 组/计算机科学/计算机组织/指令周期层
CPU 是计算机中负责处理和执行应用程序给出的操作和指令的元素。这是通过寄存器、RAM 和 ALU 完成的。CPU 的功能类似于计算机的大脑,存在于每台计算机中。CPU 由大量放置在芯片上的晶体管组成,这些晶体管共同执行操作来处理指令。
CPU 处理信息的速度称为时钟速度,以赫兹为单位。现代 CPU 的运行速度达到数十亿赫兹,这意味着它们每秒可以执行数十亿次操作。
CPU 也可以有多个“核心”,它是 CPU 的主要元素。CPU 的核心数量及其时钟速度决定了其运行速度。CPU 的核心数量范围很广,有些 CPU 只有一个核心,有些 CPU 多达 256 个。
在了解计算机如何执行操作之前,让我们先了解一下它能做什么。计算机的定义概述了它的能力;计算机是一种能够存储、检索和处理数据的电子设备。因此,我们给计算机的所有指令都与存储、检索和处理数据有关。
冯·诺依曼机的基本原理是数据和指令都存储在内存中并以相同的方式处理。这意味着指令和数据都是可寻址的。指令存储在连续的内存位置;要操作的数据一起存储在内存的另一个部分。要启动取指-执行循环,首先,数据由操作系统加载到主内存中,第一条指令的地址被放置到 程序计数器 上。
处理循环包括四个步骤
- 取下一条指令,
- 译码指令
- 如果需要,获取数据,
- 执行指令。
- 存储执行结果并检查下一条指令。
PC 逐个递增以指向要执行的下一条指令,因此控制单元转到内存地址寄存器 (MAR) 中的地址,该寄存器保存 PC 中指定的下一条指令的地址。然后,它通过地址总线将其发送到主内存,并通过数据总线将其返回到内存缓冲寄存器。MBR 是一个双向寄存器,临时保存从内存(高速缓存或 RAM)中取出的数据,复制其内容,并将副本放置在 IR 中。现在,IR 包含要执行的指令。
在进入循环的下一步之前,PC 必须更新以保存要执行的下一条指令的地址,当当前指令完成后。此后,指令寄存器负责由 CU 解决的指令。CU 检查指令的状态,然后允许执行。因为指令在内存中连续存储,所以将当前指令中的字节数添加到 PC 应该将下一条指令的地址放到 PC 中。因此,控制单元递增 PC。(PC 可能会在稍后由正在执行的指令更改)
对于必须从内存中获取附加数据的指令,ALU 将地址发送到内存总线,内存通过返回该位置的值进行响应。在某些计算机中,从内存中检索到的数据可能会立即参与算术或逻辑运算。其他计算机只是将内存返回的数据保存到一个寄存器中,以便由后续指令进行处理。在执行结束时,指令的任何结果都可以保存在寄存器或内存中。
要执行指令寄存器中的指令,控制单元必须确定它是哪条指令。它可能是一条访问输入设备数据的指令、将数据发送到输出设备的指令,或对数据值执行某些操作的指令。在此阶段,指令被译码为控制信号。也就是说,CPU 中电路的逻辑决定要执行的操作。此步骤说明了为什么计算机只能执行以其自己的机器语言表达的指令。指令本身实际上是内置在电路中的。
例如,让我们在下面的表格中以一个 8 位寄存器的虚构 RAM 为例。在 8 位中,前 4 位是我们用来确定指令的位。
对于 1 个地址:01010010
0101 是我们的操作码。在我们的例子中,0101 对应于“加载”,这意味着我们正在将地址 00000010 中的值加载到寄存器中。
示例在“执行指令”中继续。
指令 | 操作码 |
---|---|
加载 | 0101 |
地址 | 数据 |
---|---|
00000001 | 01010010 |
00000010 | 00000001 |
00000011 | 00000000 |
在大多数程序中,要执行的指令可能需要额外的内存访问才能完成其任务。
例如,如果指令说要将内存位置的内容添加到一个寄存器中,控制单元必须获取内存位置的内容。
一旦指令被译码并获取了任何操作数(数据),控制单元就可以准备执行指令。执行涉及向算术/逻辑单元发送信号以执行处理。在将数字添加到寄存器的情况下,操作数被发送到 ALU 并添加到寄存器的内容中。
当执行完成后,循环再次开始。如果最后一条指令是将一个值添加到寄存器的内容,则下一条指令可能是将结果存储到内存中的某个位置。但是,下一条指令可能是一条控制指令——也就是说,一条询问有关最后一条指令结果的问题,并可能更改程序计数器内容的指令。
在过去的半个世纪里,硬件发生了翻天覆地的变化,但冯·诺依曼模型仍然是当今大多数计算机的基础。正如一位著名的计算机科学家艾伦·佩利斯曾经说过:
有时候我认为计算领域唯一的普遍性是取指-执行周期。——艾伦·佩利斯,1981 年。
继续我们上面的例子。我们从指令表中读取 0101 的指令时停止了。
解码后,我们正在执行 CPU。在我们的例子中,我们将地址 00000010(十进制为 2)中的值存储到寄存器中。因此,现在在我们的寄存器中,我们将拥有十进制为 2 的值,供以后的操作使用。
寄存器 |
---|
2 |
当此指令周期结束时,所有电路将关闭,当指令地址寄存器中的值增加 1 时,一个新的指令周期将开始。
什么是控制单元?
[edit | edit source]控制单元是计算机中的组织力量,因为它负责 取指-执行周期。控制单元中有两个特殊的寄存器。指令寄存器 (IR)包含正在执行的指令,而 程序计数器 (PC)包含要执行的下一条指令的地址。由于 算术逻辑单元 (ALU) 和控制单元协同工作,因此它们通常被认为是一个称为 中央处理单元 (CPU) 的单元。
什么是随机存取存储器 (RAM)?
[edit | edit source]随机存取存储器 (RAM) 是一种存储设备,用作存储器,并可以向 CPU 提供指令。RAM 用于 CPU 的临时存储,RAM 中保存的数据仅在需要它的程序运行时或计算机正在运行时存储。这意味着 RAM 是易失性的(如果断电,数据将被擦除)。
RAM 的速度由存储量、时钟速度和延迟决定。时钟速度是指它每秒能处理多少次操作(以赫兹为单位),现代计算机每秒能处理数百万次操作。延迟是指将数据写入 RAM 后到可用之间的时间。存储量是指 RAM 可以容纳多少数据,现代 RAM 条可以容纳千兆字节(十亿字节)的数据。
它还可以进行读写操作。这意味着内存既可以读取,也可以访问。
什么是 CPU 的指令?
[edit | edit source]所有 CPU 都带有一组指令,将许多称为操作码的数字与不同的指令相关联。指令由 CPU 从 RAM 中读取,其中存储着数字,这些数字为操作码保留了一定数量的位,其余的位用于内存位置信息。
取决于 CPU 指令集的扩展程度,指令的范围可以从加法和除法等操作到更复杂的逻辑任务。
例如,8 位指令 00011100,其操作码为 0001,在以下情况下可能意味着将寄存器和内存位置 1100 处的数字相加。然后,数字 00110011(操作码 0011)将结果存储在内存位置 0011 中。
操作码 | 指令 |
---|---|
0000 | 结束 |
0001 | 加 |
0010 | 减 |
0011 | 存储 |
0101 | 加载 |
... | ... |
什么是 MDR?
[edit | edit source]MDR 或内存数据寄存器在 CPU 处理数据时临时存储数据,作为 RAM 和 CPU 之间的中间体。它还临时保存将放置在内存中的数据。
它也可以称为 MBR 或内存缓冲寄存器。
什么是 MAR?
[edit | edit source]首先,MAR 代表内存地址寄存器。它是 CPU 组件的子组件,寄存器包含程序计数器、当前指令寄存器、累加器、内存数据寄存器和内存地址寄存器。
它本质上是一个存储单元,保存需要访问的数据在 CPU 内存中的内存地址。它还保存通过 系统总线(下一章)发送到该地址的数据的内存地址。MAR 与 MDR(内存数据寄存器)协同工作,MDR 保存从 MAR 中获取的内存地址中保存的实际数据。
什么是数据总线和地址总线?
[edit | edit source]在上图中,所有部分都通过称为总线的电线集合连接在一起,数据通过总线在计算机中传输。每条总线都承载三种信息:地址、数据和控制
- 地址用于选择将数据发送到或从中获取数据的内存位置或设备。
- 然后数据通过总线在 CPU、内存和 I/O 设备 之间流动。
- 控制信息用于管理地址和数据的流动。例如,控制信号通常用于确定数据的流动方向,是到 CPU 还是从 CPU 流出。
总线宽度是指它可以同时传输的位数。总线越宽,它可以一次移动的地址或数据位就越多。
数据总线的一个广泛的例子是每天被使用数十亿次的“通用串行总线”,也称为 USB。这种总线用于传输数据、为您的手机充电和为您的电动削笔器供电,自 1996 年以来一直是地球上的标准。
什么是高速缓存?
[edit | edit source]由于内存访问相对于处理器速度而言非常耗时,因此许多架构都提供 高速缓存。高速缓存是一小部分快速访问内存,其中存储了经常使用的数据的副本。在进行主内存访问之前,CPU 会检查数据是否存储在高速缓存中。流水线是另一种用于加速 取指-执行周期 的技术。该技术将指令分成可以重叠的更小的步骤。
高速缓存有三种类型。L1 缓存是最小的,但也是最快的缓存,包括数据和指令。L2 缓存具有更大的内存,但速度较慢,并且仅存储数据。L3 缓存具有最大的内存,但速度最慢,并且仅存储数据。
在个人计算机中,冯·诺依曼机中的组件物理上位于一个称为主板的印刷电路板上。主板还具有连接,用于将其他设备连接到总线,例如鼠标、键盘或附加存储设备。
那么,称一台机器为n位处理器意味着什么呢?变量n通常指的是 CPU 通用寄存器中的位数:两个n位数可以通过单个指令相加。它也可以指总线的宽度,即可寻址内存的大小——但并不总是如此。此外,n 可以指数据总线的宽度——但并不总是如此。
CPU 运行一个将两个数字加在一起的程序的例子是什么?
[edit | edit source]CPU 运行一个获取两个数字整数除法的余数的程序的例子是什么?
[edit | edit source]冯·诺依曼体系结构是什么?
[edit | edit source]计算史上的一个重要里程碑是,在 1944-1945 年人们认识到,用于操作数据的指令和数据在逻辑上是相同的,可以存储在同一个地方。基于这一原理构建的计算机设计被称为冯·诺依曼体系结构,至今仍是现代计算机的基础。尽管该名称是为了纪念约翰·冯·诺依曼——一位参与了原子弹制造的杰出数学家——但这一想法可能起源于 J. 普雷斯珀·埃克特和约翰·莫克利,这两位早期先驱者在同一时期曾在宾夕法尼亚大学的摩尔学院参与了 ENIAC 的工作。
冯·诺依曼体系结构的另一个主要特征是,处理信息的单元与存储信息的单元是分开的。这种特征导致了冯·诺依曼体系结构的以下组件。
- 存储数据和指令的内存单元。
- 能够对数据执行算术和逻辑运算的算术/逻辑门单元。
- 将数据从外部世界移入计算机的输入单元。
- 将结果从计算机内部移到外部世界的输出单元。
- 充当舞台单元,确保所有其他组件协同工作的控制单元。
内存、进程和 CPU 管理
[edit | edit source]回想一下,执行程序驻留在主内存中,其指令在取指-译码-执行循环中逐个处理。多道程序设计是一种同时在主内存中保持多个程序的技术;这些程序竞争访问 CPU 以完成工作。所有现代操作系统在某种程度上都采用多道程序设计。因此,操作系统必须执行内存管理以跟踪哪些程序在内存中以及它们驻留在内存中的位置。
另一个重要的操作系统概念是进程的概念,它可以定义为正在执行的程序。程序是一组静态指令。进程是一个动态实体,它在程序执行时表示该程序。通过多道程序设计,计算机系统可能同时拥有许多活动进程。操作系统必须仔细管理这些进程。在任何时刻,特定指令都可能成为下一个要执行的指令。中间值已经计算出来。进程可能在其执行过程中被中断,因此操作系统执行进程管理以仔细跟踪进程及其所有中间状态的进度。
与内存管理和进程管理概念相关的是对CPU 调度的需求,它决定在任何给定时刻哪个内存中的进程由 CPU 执行。
但是,必须记住,操作系统本身只是一个必须执行的程序。操作系统进程必须与其他系统软件和应用程序一起在主内存中进行管理和维护。操作系统与其他程序在同一个 CPU 上执行,它必须在它们之间轮流执行。
以下部分(单一连续内存管理、分区内存管理、分页内存管理)仅供参考。计算机科学指南在2.1.6中明确指出,“不需要技术细节。例如,应该描述内存管理,但不需要描述如何在多任务环境中处理它。” 因此,这些部分旨在说明内存管理技术,可以总结而不是在考试中使用。
单一连续内存管理
[edit | edit source]一次仅将操作系统和另一个程序置于内存中。这是最基本的内存管理类型。
分区内存管理
[edit | edit source]内存被分成不同的部分。通过这些不同的分区,操作系统和任何数量的程序可以同时运行。分区具有一个基地址寄存器和一个边界寄存器。
基地址寄存器
- 一个寄存器,它保存当前分区(正在运行的分区)的起始地址。
边界寄存器
- 一个寄存器,它保存当前分区的长度。
分区选择 最佳适配
- 将程序分配到第一个足够大以容纳它的分区。
最适配
- 将程序分配到最小的分区,该分区足够大以容纳它。
最差适配
- 将程序分配到最大的分区,该分区足够大以容纳它。
分页内存管理
[edit | edit source]一种将进程划分为固定大小的页面并将其加载到内存帧中的技术。
帧
- 主内存的固定大小部分,用于保存进程页面。
页面
- 进程的固定大小部分,被存储到内存帧中。