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

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

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

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

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


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

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

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


- 通过增加保存状态的寄存器的数量,在单个物理核内虚拟多个逻辑处理器。
- 将指令等待时间做别的任务,充分利用相关资源,减少闲置时间。除自有状态外,共享其他单元。
- 和软线程类似,多数时候可提升执行效率。
- 但如果资源冲突,依然需要等待,类似同步锁。
- 某些时候可能导致性能下降。
- 单位时间内,只有一个线程能运行。
内存
内存是与CPU沟通的桥梁。
主要功能包括:可直接寻址的存储空间,暂存数据。
- DRAM:主存,动态随机访问。结构简单,空间小,需要刷新。
- SRAM:缓存,静态随机存储。结构复杂,成本高,速度快。
硬盘
硬盘是计算机的主要持久化存储媒介。
两种工作方式:
- PIO:通过 CPU 执行 IO 指令读写数据。早期模式,速率低下,CPU 占用率高。
- DMA:直接内存访问。CPU只需开始和结束时参与,其他由DMA控制器完成,让外部设备和内存之间直接读写数据。
- DMA 通过中断通知 CPU 传输结束。
IO(外设访问)
- PMIO:独立地址空间,以专用指令读写。
- MMIO:和物理内存共享地址空间,相同常规读写指令。需要为设备保留地址范围。
- 如果外部设备比较慢,PMIO 不会拖累地址总线,影响内存访问。但是 MMIO 让 CPU 逻辑更少,且读写更方便。
- 可以通过 DMA 将数据传送到 I/O 设备。
操作系统
- 管理计算机硬件和软件资源,是内核和基石。
- 分配内存,调度进程,控制输入输出设备,操作文件和网络系统等等。
- 微内核仅提供核心功能,将服务和基本操作区分开来,模块化设计。Linux用单内核,因多数服务都在内核态运行,效率较好。