一 概述
二 类型
三 语句
四 函数
五 数据
六 内存
七 代码
附录
1. 硬件简介
冯·诺依曼结构 将指令也作为数据,与数据合并存储。
缺点是数据传输效率远低于运算效率,通过增加缓存进行改善。
基本组成:
- 控制器(CU):程序流程管理。
- 运算器(ALU):算术和逻辑运算。
- 存储器(memory)
- 输入设备(input)
- 输出设备(output)
总线
总线(BUS)是组件之间规范化数据传输方式,有地址、数据、控制等。
- 数据总线。
- 地址总线。
- 控制总线。
主板上的 系统总线 (内总线)将各设备连接起来,常见标准是 Intel 主导的 PCI/PCIe
标准。
PCI Express 带宽高,能探测硬件变更,支持热插拔。
前端总线 (FSB)负责 CPU 与北桥芯片(north bridge),代表 CPU 与外界的通信速度。
北桥连接内存和显卡等高速设备,南桥连接硬盘、网卡等低速设备。不过现在 Intel、ADM 趋向于用单芯片替代南北桥方案。
处理器
解释指令,处理数据。编程实质上是对 CPU 而言的。
主频 是指 CPU 内核工作频率(clock speed, MHz), 外频 是系统总线的工作频率。
主频表达脉冲信号震荡速度,不代表运算速度。
运算速度要看流水线各方面指标,如指令集、缓存等等。
$ lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian Address sizes: 39 bits physical, 48 bits virtual CPU(s): 2 On-line CPU(s) list: 0,1 Thread(s) per core: 1 Model name: Intel(R) Core(TM) i5-5257U CPU @ 2.70GHz L1d cache: 64 KiB L1i cache: 64 KiB L2 cache: 512 KiB L3 cache: 6 MiB
指令集
包括基本数据类型、指令、寄存器、寻址模式、存储体系、中断和异常处理等。
- CISC:复杂指令集。指令字长不等,顺序串行执行。指令丰富,速度慢。Intel、AMD。
- RISC:精简指令集。指令和寻址方式少,格式统一,并行速度快。ARM、RSIC-V。
Intel IA-64 与 x86 不兼容,以模拟方式运行。AMD 则基于 386/IA-32 扩充,称作 x86-64。可以简单认为 x86-64、x64、AMD64 指相同指令集。Intel 是因厂商介入,才使用 AMD64 指令集,并发展出兼容的 Intel 64。
RISC-V 值得关注: https://cnrv.gitbooks.io/riscv-soc-book/content/
寄存器
CPU 内速度最快的存储单元,暂存指令、地址和数据。
分通用、指令、标志和段寄存器。
- SP/BP/SI/DI 也属于通用寄存器。
- IP 也称 PC,指令寄存器。
- 标志寄存器 FR 反应 CPU 状态和运算结果特征。
- 段寄存器 CS/DS/SS/ES。
- AMD64 增加了 R8 - R15 通用寄存器。
快:距离近,专门硬件设计,工作方式简单。寄存器无须锁住 cache line,无须在不同存储间复制,无须 MMU 翻译地址。
缓存
存储系统的组成部分,存放指令和数据。根本原因是速度越来越快的 CPU 被多年没长进的内存拖累。缓存容量虽小,但速度接近 CPU 处理频率。
每个 core 都有自己专用的 L1 缓存,L3 多个核共享。至于 L2,不同厂商不同系列的产品会有不同,独享或共享。
CPU 总是先检查缓存。如果没有命中,则先填充缓存,然后再返回给处理器。每级缓存数据都是下一级的一部分。
基于时间和空间局部性,有较高的命中率。一级缓存分指令和数据两部分。
时间局部性:正在被访问的数据可能近期被再次访问;空间局部性:临近地址数据可能即将被访问;顺序局部性:大部分指令是顺序执行。
缓存由多个块(cache line)构成,每个块存储连续地址的数据单元。通过标志可检查缓存是否更新,以决定是否需要置换回内存。缓存减少更新次数。
$ cat /sys/devices/system/cpu/cpu0/cache/index0/coherency_line_size 64
多核
在一个处理器内集成多个独立实体物理内核。多核更好支持并行任务,且可通过共享 cache 进行通信。
- SMP:对称多处理。
- NUMA:非统一内存访问。
SMP 里每个处理器地位平等,对资源使用权相同。连接到共享的主存,由软硬件锁机制解决资源竞争问题。缺点是,随处理器数量增加,导致访问冲突增加。NUMA 将内存分散给多个处理器,避免存储器对处理器访问的限制(多任务资源分片)。
处理器可以访问全部内存,但访问本地内存更快。扩展性更好,适用于服务器。
超线程
利用特殊指令,在单个物理核内虚拟多个逻辑处理器。将指令等待时间做别的任务,充分利用相关资源,减少闲置时间。除自有状态外,共享其他单元。和软线程类似,多数时候可提升执行效率。
但如果资源冲突,依然需要等待,类似同步锁。某些时候可能导致性能下降。单位时间内,只有一个线程能运行。
内存
可直接寻址的存储空间,暂存数据。内存主频用来表示速度,所能达到的最高工作频率。
- DRAM:主存,动态随机访问。结构简单,空间小,需要刷新。
- SRAM:缓存,静态随机存储。结构复杂,成本高,速度快。
SDRAM 是 DRAM 的增强版本。DDR 是双倍 SDRAM 的意思,目前主流是 DDR3、DDR4。
双通道 在北桥内使用两个内存控制器,分别控制一个通道,从而增加寻址和存储带宽。主要是解决前端总线(FSB)远高于外频速度,内存通讯成为瓶颈。
UMA
统一内存架构(Unified Memory Architecture),如 Apple M1 芯片。将 CPU、GUP、DRAM、IO 控制器等整合在一块芯片(SoC)内。所有组件共享内存,按需要动态调整。有效减少数据复制,实现更快访问速度。
显卡
转换显示信息,向显示器提供扫描信号。
芯片:
- 2D:处理 3D 时需要 CPU 参与,称作软加速。
- 3D:自己完成,称作硬加速。
目前主要显卡芯片由 NVIDIA 和 AMD-ATI 设计生产。
GPU
不同于 CPU 通用性设计,GPU 专门为了执行复杂数学和几何计算。具备 2D、3D 加速功能,CPU 只需发出绘图指令,具体计算过程由 GPU 完成。GPU 称作众核,数量远超 CPU。
核缓存较小,逻辑单元简单,适合把指令并行分发到众核上。面向数据类型简单的密集计算、海量数据处理、并行。
GPU 擅长浮点运算和并行计算,发展出 OpenCL、CUDA 等面向异构系统并行编程标准。CPU 适合复杂计算和复杂数据依赖。
硬盘
主要持久化存储媒介。
类型:
- HDD:机械硬盘
- SSD:固态硬盘
SSD 使用非易失性内存 NAND Flash 存储数据,无须电力维持。分单层 SLC、双层 MLC、三层 TLC。单层最快,寿命最长,成本也最高。现在多使用 MLC,TLC 常作为 U 盘。
接口
- SATA:使用专用数据排线和电源线连接。
- PCIe: 直接使用主板 PCIe 插槽,由主板供电。
- SCSI:用于小型机高速数据传输。
SATA 和 PCIe 是实际传输通道,分别使用 AHCI 和 NVMe 两种传输协议。AHCI 为机械硬盘设计,不能发挥 SSD 速度优势,NVMe 直接走 PCIe 更快。M.2 指外观尺寸更小的 SSD,有 SATA/ACHI 和 NVMe 两种规格。
工作模式
- PIO:通过 CPU 执行 IO 指令读写数据。早期模式,速率低下,CPU 占用率高。
- DMA:直接内存访问。CPU 只需开始和结束时参与,其他由 DMA 控制器完成。
DMA 让外部设备和内存之间直接读写数据,通过中断通知 CPU 传输结束。
IO 访问
CPU 访问外部设备方式。
- PMIO:独立地址空间,以专用指令读写。
- MMIO:和物理内存共享地址空间,相同常规读写指令。需要为设备保留地址范围。
如果外部设备比较慢,PMIO 不会拖累地址总线,影响内存访问。但是 MMIO 让 CPU 逻辑更少,且读写更方便。可以通过 DMA 将数据传送到 I/O 设备。
BIOS
基本输入输出系统,机器启动后加载的第一程序。检测并初始化硬件设备,隐藏硬件变化,引导操作系统。向操作系统提供系统参数,但现代操作系统可能会忽略 BIOS 抽象层,改为直接控制硬件。
EFI:可扩展固件接口,用以规范 BIOS 开发。Intel 发明。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论