layout: port
title: 计算机硬件结构概述
date: 2022-03-29 22:17:24
tags:
categories: 计算机系统
description: 计算机硬件结构概述
一、概述
作为计算机专业的学生,必须知道一个程序在计算机上发生了什么。而想知道发生了什么,就必须了解计算机的硬件组成,知道计算机是由哪些部件组成。就好比警察追踪犯人,如果不知道城市的建筑构造,又怎么能发现犯人的踪迹呢?下图是一个典型系统的硬件组成。但鉴于大家相比于硬件更熟悉软件,我们从观察一个程序生命周期开始,了解计算机硬件结构。
当我们编写了一个 hello.c 文件后,使用该命令将它转换成可执行文件 hello:
linux> gcc -o hello hello.c
生成的 hello 文件会被存储在磁盘中,磁盘属于存储器层次的一类。
当我们要执行这个程序时,在键盘上输入:
linux> ./hello
shell 程序(linux> 是一个正在运行的 shell 程序)接收到 ./hello 字符后,并将这些字符读入在 CPU 中的寄存器里,然后把 hello 字符(./ 只是表示当前目录,因为 hello 文件存放在当前目录)存放到内存中。
当我们在键盘敲下 enter 键时,shell 程序就知道结束命令的输入,就会将加载 hello 文件,也就是把 hello 文件中的代码(指令)和数据(比如需要输出到屏幕上的"hello World!\n"字符串)复制到内存。内存是也是存储层次中的一类,专门存放程序和程序处理的数据。下图显示的是利用**直接存储器存取(DMA)**方式不经过处理器将数据直接从磁盘负责制到内存。
当 hello 代码和数据被加载到内存,处理器就会立刻执行 hello 程序的机器语言指令。PC 会首先指向第一条指令,然后通过总线将指令复制到处理器中,经过一系列步骤后执行,PC指向下一条指令的位置。hello 程序中的指令会将“hello Word!\n”字符串的字节从内存中复制到寄存器文件,再从寄存器文件中复制到显示设备,最后显示显示屏上。
好!我们从 hello 程序运行周期出发,大致地看到了计算机的硬件结构,下面总结一些计算机硬件到底有哪些东西:
-
CPU
中央处理单元(CPU),简称处理器,是执行存储在主存中指令的引擎。处理器主要由 PC 寄存器、寄存器文件、ALU 组成(寄存器是一个字的存储设备)。PC 寄存器是其核心。在任何时刻,PC 都指向主存中的某条机器语言指令(即该寄存器存有该条指令的地址)。系统从通电开始,处理器一直在不断地执行程序计数器指向的指令,再更新程序计数器,使其指向下一条指令。
-
存储器:寄存器、内存、磁盘
主存是一个临时存储设备,在处理器执行程序时,用来存放程序和程序相关的数据。从物理上来说,主存是由一组动态随机存取存储器(DRAM)芯片组成的。从逻辑上来说,存储器是一个线性的字节数组,每个字节都有其唯一的地址(数组索引),这些地址是从零开始。
-
输入设备:鼠标、键盘
-
输出设备:显示屏
I/O(输入/输出)设备是系统与外部世界的联系通道。每个 I/O 设备都通过一个控制器或适配器与 I/O 总线相连。控制器和适配器之间的区别主要在于它们的封装方式。控制器是 I/O 设备本身或者系统的主印制电路板(通常称作主板)上的芯片组。而适配器则是一块插在主板插槽上的卡。无论如何,它们的功能都是在 I/O 总线和 I/O 设备之间传递信息。
这不就是我们之前提过的冯·诺依曼结构吗?下面我们来介绍以下冯·诺依曼结构和同样比较重要的哈弗结构。
二、冯·诺依曼结构
现代计算机基本都采用冯·诺依曼结构,这是世界上第一个完整的计算机体系结构。
冯·诺依曼结构的主要特点是:
- 计算机由存储器、运算器、控制器、输入设备和输出设备五部分组成,其中运算器和控制器合称为中央处理器(CPU)。
- 指令和数据混合存储在同一个存储器中。
- 以运算器为中心,输入输出设备与存储器之间的数据传送都经过运算器。
随着技术的进步,冯·诺依曼结构得到了持续的改进,主要包括以下几个方面:
- 从以运算器为中心变为以存储器为中心。
- 从适应串行到适应并行。出现了流水线处理器、超标量处理器、向量处理器、多核处理器。
- 出现为适应特殊需要的专用计算机,如图形处理器(GPU)。
2.1 哈佛结构
哈佛结构和冯·诺依曼结构最主要的区别是程序和数据分别存储。控制器使用两条独立的总线读取程序和访问数据,程序空间和数据空间完成分开。
三、处理器
处理器是计算机系统中的重中之重。在计算机组成和计算机体系结构课程中,处理器都是重点之一。在此之前,我们可以看看这个高端芯片完整的制造工艺视频,了解一下芯片的制作过程。
中央处理单元(CPU),简称处理器,是解释(或执行)存储在主存中指令的引擎。处理器的核心是一个大小为一个字的存储设备(或寄存器),称为程序计数器(PC)。在任何时刻,PC 都指向主存中的某条机器语言指令(即含有该条指令的地址)。
在上图模型机的 CPU 中,主要由以下部件:
- 自动取出指令并进行译码的控制部件
- 存储下一条指令地址的程序计数器(Program Counter,PC)
- 进行算数逻辑运算的算术逻辑部件(Arithmetic Logic Unit,ALU)
- 临时存放从主存取来的数据或运算结果的通用寄存器组(GPRs)
- 存储标志的标志寄存器。这些标志是指 ALU 计算产生的标志信息,如结果是否为 0(零标志 ZF)、是否为负数(符号标志 SF)等。标志寄存器在有些 RISC 架构中是没有的,如 RISC-V。
从系统通电开始,直到系统断电,处理器一直在不断地执行程序计数器指向的指令,再更新程序计数器,使其指向下一条指令。详细地来说,一条指令会经历以下五个步骤:
-
取指令(fetch)
根据 PC 寄存器内的值,将一条指令从主存中取到指令寄存器的过程。
-
译码(decode)
指令译码器按照上一节讲过的指令格式,对取回的指令进行拆分和解释,识别区分出不同的指令类别(指令码)以及各种获取操作数的方法(寻址方式)。
-
执行(execute)
对指令进行真正运算的过程。此阶段的任务是完成指令所规定的各种操作,具体实现指令的功能。如加法操作、乘法操作等。
-
访存(memory access)
根据指令需要,有可能要访问主存。或将数据从存储器中读出,或者写入存储器。
-
写回(write back)
指将指令执行的结果写回通用寄存器组的过程。如果是普通运算指令,该结果值来自于“执行”阶段计算的结果:如果是存储器读指令,该结果来自于“访存”阶段从存储器中读取出来的数据。
下一节我们会更深入地学习处理器相关知识。
四、存储器
在之前我们提到过,存储器在计算机占有非常重要的地位。甚至可以说,处理器和存储器是计算机的最主要的部件。上图几乎包含了我们之前提到过的几种存储部件,如寄存器、主存、磁盘。
由于技术的限制,处理器处理速度非常快,而内存处理速度非常慢,这样会导致存储访问延迟。于是科学家们设计出来一种方案,在处理器和主存间插入一个更小更快的存储设备(Cache)。这样我可以预先将主存中的一些数据提前放入 Cache 中,处理器可以直接从 Cache 中取得数据,这样起到减少延迟的效果。
基于这种思想,每个计算机系统中的存储设备都被组织成了一个存储器层次结构。
由于考虑到技术和成本问题,越往上的层级,速度越快,但成本越高,容量越小;越往下的层级,速度越慢,但成本越低,容量越大。
存储器层次结构的思想简单来说,就是上一层的存储器作为下一层存储器的高速缓存。因此,寄存器文件是 L1 Cache 的缓存,L1 是 L2 的缓存,依次类推。这种思想叫作局部性原理,它在计算机各个领域都发挥着巨大的作用。
4.1 局部性原理
局部性原理
局部性原理分为空间局部性和时间局部性
-
时间局部性:某个数据项在被访问之后可能很快被再次访问
比如你在写论文,你参考一篇论文,之后你可能还需要参考这篇论文。所以你不如把这篇论文放在身边,防止以后还要用。
-
空间局部性:某个数据项在被访问之后,与其地址相近的数据项可能很快被访问。
比如你在写论文,你参考了一位教授的一篇论文,你之后可能还会参考他的其他论文,所以不如把这个教授所以论文都放在身边。
利用局部性原理可以将计算机存储器组织为存储器层次结构。
4.2 存储器的四种技术
构建存储层次结构主要由 4 种技术:
- SRAM(静态随机访问存储器)
- DRAM(动态随机访问存储器)
- 闪存
- 磁盘
由于存储器技术设计大量电子相关的知识,在这里我不会展开叙述,只是总结性地提炼出关键点。
4.2.1 SRAM
- 每一位存储在双稳态存储单元中,每个存储单元由 6 个晶体管电路实现。
- 由于双稳态,只要有电,信息就可长时间保持。
- 存取速度快、集成度低、价格高。
- 常用于高速缓冲存储器 Cache。
4.2.2 DRAM
- 使用电容保存电荷,以此表示比特。
- 由于电容保存数据,不能长时间保持数据,所以被称为动态。
- 存取速度慢、集成度高、价格低。
- 用用作主存(内存条)
4.2.3 闪存
闪存是基于 EEPROM 的一种存储技术。和 EEPROM 一样,写操作会使存储位损耗,为了应对该限制,闪存使用了损耗均衡的技术。
损耗均衡:将写操作从已经写入很多次的块中,映射到写入次数少的块中,从而使写操作尽量分散。
4.2.4 磁盘
硬盘主要由盘体、控制电路板和接口部件等组成。盘体是一个密封的腔体,硬盘的内部结构通常是指盘体的内部结构;控制电路板上主要有硬盘 BIOS、硬盘缓存(即 CACHE)和主控制芯片等单元;硬盘接口包括电源插座、数据接口和主、从跳线。
硬盘首先在逻辑上被划分为磁道、柱面以及扇区。磁盘在格式化时被划分成许多同心圆,这些同心圆轨迹叫做磁道(Track),磁道从外向内从0开始顺序编号;所有盘面上的同一磁道构成一个圆柱,通常称做柱面(Cylinder),每个圆柱上的磁头由上而下从“0”开始编号;每个磁道会被分成许多段圆弧,每段圆弧叫做一个扇区,扇区从“1”开始编号,每个扇区中的数据作为一个单元同时读出或写入,操作系统以扇区(Sector)形式将信息存储在硬盘上,每个扇区包括512个字节的数据和一些其他信息;
参考资料
- 深入理解计算机系统
- 袁春风、余子濠《计算机系统基础》
- 胡伟武、汪文祥等《计算机体系结构基础》