计算机硬件概要

几十年来,计算机的基本结构没有改变,改变的是各个部分的规模,工艺改进。所以学习计算机的基本架构是很有必要的。

冯诺依曼结构

冯诺依曼结构

  • 存储型计算机,即通用计算机(专用计算机还是有实际用途的,比如军事。延伸到设计层面,应该如何选择。追求专用性还是通用性)
  • 缺点:数据传输效率远低于 CPU 运算效率
  • 改进:增加 CPU 缓存

总线结构(bus)

总线结构

  • CPU 以总线连接外部设备。
  • 总线是组件之间规范化的数据交换方式。不仅仅是电路线,还规定了数据传输的方法。包括地址、数据、控制总线等。
  • 北桥为高速芯片,连接内存、显卡等。
  • 南桥连接硬盘、网卡等低速设备。
  • 高低速分离会使得计算机效率更高
  • 现在流行方式是将南北桥整合到 CPU 内。

中央处理器

总线结构

  • 任务:解释指令,处理数据。
    • 冯·诺伊曼 CPU 运作原理可分为四个阶段:提取、解码、执行和写回
  • 主频:运算、处理速度。即中央处理器内部的工作速度
  • 外频:主板速度,超频。即与其他设备共同工作的速度
  • 编程实质上是对 CPU 而言的
  • 分复杂指令集 CISC 和精简指令集 RISC
    • CISC:x86,指令字长不等,按顺序串行执行。指令丰富,利用率不高,执行速度慢。Intel/AMD等
    • RISC:指令和寻址方式少,格式统一,并行速度快,主要用于大型机和中高档服务器。PowerPC/Alpha等
  • 指令集 ISA:包含基本数据类型,指令,寄存器,寻址模式,存储体系,中断和异常处理等。
  • 小端模式 :强制转换数据不需要调整字节内容,1、2、4字节的存储方式一样。
  • 大端模式 :符号位的判定固定为第一个字节,容易判断正负。

CPU存储等级

存储等级

寄存器

  • CPU 中暂存指令、地址、数据,速度最快的存储单元。
  • 寄存器分通用、指令、标志、段等。
  • 快:距离近;硬件设计;工作方式简单。

缓存

缓存1

缓存2

  • 缓存的主要目的:速度越来越快的 CPU 被多年没长进的内存拖累。容量虽小,但速度接近 CPU 处理频率。
  • 总是先检查缓存。如果没有命中,则先缓存,然后再返回给处理器。
  • 基于时间和空间局部性,有较高的命中率。
  • 一级缓存分指令和数据两部分。
  • 缓存由多个块(cache line)构成。每个块存储连续地址的数据单元。
  • 通过标志可检查缓存是否更新,以决定是否需要置换回内存。缓存减少更新次数。
  • 多级缓存:追求速度必然要减少容积,反之就要牺牲访问速度。L1 靠近 CPU,L2 靠近内存。每级缓存数据都是下一级的一部分。
  • 技术和成本考虑。缓存使用 SRAM 存储器,不用像主存 DRAM 那样频繁刷新电路。
  • 时间局部性:正在被访问的数据可能近期被再次访
  • 空间局部性:临近地址数据可能即将被访问;顺序局部性:大部分指令是顺序执行。
  • 为了避免缓存失效,可采取行填充的技术
  • 之前在另一篇博客也讨论过缓存相关

多核

  • 概念:在一个处理器内集成多个独立实体物理内核。
  • 解决问题:主频提升的麻烦,散热等等问题。
  • 优点
    • 多核更好支持并行任务。
    • 可通过共享 cache 进行通信。

两种模式

  • SMP:对称多处理。

    SMP

    每个处理器地位平等,对资源使用权相同。连接到共享的主存,由软硬件锁机制解决资源竞争问题。随处理器数量增加,导致访问冲突增加。核的数量为2到4的时候效率比较高,这也是为什么PC一般核的数量都是2到4.

  • NUMA:非统一内存访问。

    NUMA

    将内存分散给多个处理器,避免存储器对处理器访问的限制(多任务资源分片)。处理器可以访问全部内存,但访问本地内存更快。扩展性更好,适用于服务器。

超线程

ht
ht

  • 通过增加保存状态的寄存器的数量,在单个物理核内虚拟多个逻辑处理器。
  • 将指令等待时间做别的任务,充分利用相关资源,减少闲置时间。除自有状态外,共享其他单元。
  • 和软线程类似,多数时候可提升执行效率。
  • 但如果资源冲突,依然需要等待,类似同步锁。
  • 某些时候可能导致性能下降。
  • 单位时间内,只有一个线程能运行。

内存

内存是与CPU沟通的桥梁。

主要功能包括:可直接寻址的存储空间,暂存数据。

  • DRAM:主存,动态随机访问。结构简单,空间小,需要刷新。
  • SRAM:缓存,静态随机存储。结构复杂,成本高,速度快。

硬盘

硬盘是计算机的主要持久化存储媒介。

两种工作方式:

  • PIO:通过 CPU 执行 IO 指令读写数据。早期模式,速率低下,CPU 占用率高。
  • DMA:直接内存访问。CPU只需开始和结束时参与,其他由DMA控制器完成,让外部设备和内存之间直接读写数据。
    • DMA 通过中断通知 CPU 传输结束。

IO(外设访问)

  • PMIO:独立地址空间,以专用指令读写。
  • MMIO:和物理内存共享地址空间,相同常规读写指令。需要为设备保留地址范围。
  • 如果外部设备比较慢,PMIO 不会拖累地址总线,影响内存访问。但是 MMIO 让 CPU 逻辑更少,且读写更方便。
  • 可以通过 DMA 将数据传送到 I/O 设备。

操作系统

  • 管理计算机硬件和软件资源,是内核和基石。
  • 分配内存,调度进程,控制输入输出设备,操作文件和网络系统等等。
  • 微内核仅提供核心功能,将服务和基本操作区分开来,模块化设计。Linux用单内核,因多数服务都在内核态运行,效率较好。