前言

在学习计算机的这几年,一直有些很基础的问题困扰着我,C++、Java照写,但总感觉没有底气。本科学过操作系统、数据结构、微机原理、数字电路,(不知是不是因为我给忘干净了还是咋的,)平时遇到学术道友聊自己做risc的,做高速总线的,做高性能计算的,做fpga加速的,又感觉自己啥也不知道了。在经历了痛定思痛的2020上半年后,我决心了解它、学好它了。(这段“讨厌计算机——我还挺爱,继续战斗!”的内心经历有人感兴趣的话后面也可以总结放上来),总之Hello CSDN,大家一起冲鸭!

• 计算机系统结构的关键词是“系统”而非“结构”。对计算机系统是否有全面深入的了解是区分计算机专业人才和非专业人才的重要标志。
• iPhone的CPU性能不如Intel的X86 CPU,但用户体验明显好于桌面计算机,这就是系统优化的结果。(不能单以主频论性能)

• 一、引言(体系结构研究内容、主要性能指标、发展趋势、设计原则)

• 1.计算机系统结构划分

• (层1)应用程序
• (中间)API:application programming interface,它是IT产业建生态的起点,是应用程序的高级语言编程接口,(Java、C等都是API),所有应用程序都是API编出来的。
• (层2)操作系统
• (中间)ISA:指令系统,是实现目标码兼容的关键,即应用软件兼容的关键,是生态建设的终点。指令系统就是从应用程序算法中抽取出来的算子。只有对应用程序有深入了解,才能决定哪些事情通过ISA由硬件直接实现、哪些事情通过指令组合由软件实现。
• (层3)硬件系统(要针对应用程序的行为进行优化:1.预读取提高流媒体处理性能;2.由应用程序访存的局部性设计高速缓存;3.应用程序转移行为的重复性和相关性实现CPU的转移猜测算法)
• (中间)工艺模型:芯片生产厂家提供给芯片设计者的洁面,提供实现PCIE接口的物理层、提供各种IP
• (层4)晶体管

• 2.冯诺依曼结构

• 最核心思想:将数据和程序分别存在存储器中,CPU从内存中取指令和数据进行运算,再将计算结果存入内存。即:存储程序和指令驱动执行。
• 解决了自动化问题:将人为下达的执行指令,设计成计算机可读的指令存起来。而非像人脑一样“内存中”只存数据。
• 局限:什么都保存在内存中使得访存成为性能瓶颈。

• 3.性能指标

• 完成一个任务的指令数首先取决于算法。比如不同的排序算法,由于时间复杂度不同,执行的指令数可以差100倍。
• 价格:对同一款产品,成本曲线是不断降低的。产量的提高可以加速学习过程,提高成品率,降低一次性成本。
• 功耗:芯片是功耗的主要组成部分。

• 4.发展

• 指令系统之前严格划分着pc的软硬件系统,但随着虚拟机和二进制翻译系统的出现,软硬件界面模糊了
• 2010年之后,随着计算机软硬件基础的不断成熟,IT产业的主要创新从工艺转向应用。
• COMS的方法逼近物理极限,面临着原子和量子机制的边界
• 近年:体系结构主要研究都是在解决处理器和内存速度的差距问题——高速缓存
• 访存带宽不够——总线。摩尔定律第一个杀手 功耗;第二个杀手 带宽问题。
• 晶体管工艺中:设计和验证能力的提高赶不上晶体管增加的速度,形成剪刀差。
• 性能功耗比:成为这个阶段计算机体系结构设计的首要目标。追求高性能—变为—高吞吐率
• 发展趋势:网络服务和移动计算;可以处理流式数据,支持数据级和线程级并行

• 5.设计原则
• 平衡性

• CPU计算性能和访存带宽平衡的经验原则:峰值浮点运算速度和峰值访存带宽1:1左右
• 主要因素和次要因素的统筹兼顾——优化到不能再优化的时候,次要因素往往会成为瓶颈

• 局部性

• 事件局部性
——RISC(精简指令集计算机)指令系统的提出就是利用“指令的事件局部性”对频繁发生的事件进行重点优化的例子
• 访存局部性
• 时间局部性:高速缓存
• 空间局部性:TLB、预取

• 并行性
• 指令级并行

• 时间并行:指令流水线
• 空间并行:多发射、超标量,即乱序执行、允许超车

• 数据级并行

• 主要指单指令流多数据流(SIMD)的向量结构。作为指令级并行的有效补充,在流媒体领域发挥重要的作用,尤其在专用处理器中应用很多。

• 任务级并行

• 大量存在于Internet应用中
• 代表是多核处理器、多线程处理器
• 并行粒度大

• 虚拟化

• 虚拟存储技术:程序员编程时不需要直接和物理内外存打交道
• 多线程(SMT)和虚拟机技术,虚拟了CPU
• 虚拟机技术:通过微结构的硬件增强,如设立多组控制寄存器和系统状态等,实现多个操作系统的快速切换,达到在同一台PC上“同时”运行多个操作系统的目的
• catch技术:可以使程序员看到一个“像catch那么快,像内存那么大”的存储空间

• 二、以指令结构为核心的软硬件界面(指令系统结构 Instruction Set Architecture(核心思想是:建立高级语言(如C)与指令系统结构的关系)

• 1.指令系统的设计原则、发展历史

• 设计原则:兼容性、通用性、高效性、安全性等、

• 指令集演变:根据指令长度不同,指令集分为三类:

• CISC:complex instruction set computer,复杂指令集。其指令长度可变,CPU在执行过程中将其翻译成一条或多条微代码。(二八定律)在CISC指令集的各种指令中,其使用频率却相差悬殊,大约有20%的指令会被反复使用,占整个程序代码的80%。而余下的80%的指令却不经常使用,在程序设计中只占20%。
• RISC:reduced instruction set computer,精简指令集。指令长度相对固定;
• VLIW:very long instruction word,超长指令字。本质上讲是多条同时执行的指令的组合;

• 三者关系:CISC的典型代表是X86,RISC的典型代表是ARM,两者区别在于指令集zhi复杂度,CISC有很多指令集,一个指令可能是一系列底层硬件操作的打包,而RISC相对指令集简单、直接,但相对操作要更复杂,简单点理解:CISC是硬件版VB,你不需要怎么关注底层实现,RISC是硬件版C,VB下很简单实现的事可能要大费周折才能实现,但你折腾下来你会发现能效比较高。现代的CPU往往采用CISC的外围,内部加入了RISC的特性,如超长指令集CPU就是融合了RISC和CISC的优势,成为未来的CPU发展方向之一

• 存储管理演变:连续实地址——段式——页式虚拟存储等阶段
• 运行级别演变:无管理——增加保护模式——增加调试模式——增加虚拟化支持

• 现代操作系统含保护模式,将程序分为两个权限等级:用户态、和心态。
• 虚拟化服务在服务器领域特别有用,它不绑定任何底层硬件,可当作软件进程。虚拟机中同样支持不同的运行级别。为提高效率,硬件辅助虚拟化已经为虚拟化发展的必然趋势。(如VT、SVM)

• 2.软硬件之间的关键界面——指令集

• 指令=操作码+操作数

• 指令分类:

• 运算指令
• 访存指令
• 转移指令
• 过程调用
• 过程返回
• 特殊指令

• 3.C语言和指令之间的对应关系

• P43,列举了过程(函数)调用、流程控制语句等的高级语言与汇编码对应。

• 4.两个重要机制:异常处理、存储管理
• 异常处理:

• 异常的概念:计算机按照软件执行流进行顺序执行和跳转,有时会需要中断正常的执行流程去处理其他任务,触发这一过程的事件统称为异常。

• 异常的分类:

• 外部事件(中断):例如操作系统中IO的处理。在嵌入式系统中,CPU的主要作用之一就是处理外设相关事务,因此中断发生的数量很多,也非常重要。
• 指令执行中的错误
• 数据完整性问题
• 地址转换异常(常见)
• 系统调用和陷入
• 需要软件修正的运算

• 存储管理:

• 处理器中有存储管理部件,即MMU(memory management unit),负责构建虚拟的内存地址,将虚拟地址转换至物理地址、多进程空间管理管理等工作。
• 具体体现之一是TLB的结构和使用,这部分也属于操作系统的重点内容,笔者已经掌握,不再赘述。

• 5.软硬件协同工作
• 函数调用规范ABI

• 关键:API——ABI——ISA,三层实现结构。
• 在API和ISA之间有一层应用程序二进制接口,即ABI(application binary interface),它是应用程序访问计算机硬件及操作系统服务的接口,由计算机的用户态指令和操作系统的系统调用组成;它是程序在某个指令系统上执行时,必须遵循的一些特定的规定;它包括寄存器使用、函数调用、数据表示格式等约定。

• 中断:举例描述“按一下键盘,PPT就可以翻一页”这个过程。(应用程序、操作系统、硬件系统、CPU、晶体管是怎么协同工作的?)

• 1.键盘产生一个信号送到南桥芯片,南桥芯片将键盘编码保存在一个寄存器中,并向处理器发出一个外部中断信号。
• 2.中断信号传到CPU内部,把其中一个称为cause的控制寄存器的某一位置为“1”,表示收到了外部中断。
• 3.CPU中另外一个控制寄存器status中的“屏蔽位”确定是否处理这个中断信号
• 4.屏蔽处理后的中断信号附在一条译码后的指令上送到重排序缓冲ROB中,等待CPU处理(exception不会被功能部件执行)
• 5.系统态设为核心态,保存exception原因、设置操作系统处理exception的计数器入口。
• 6.操作系统保存现场,向CPU的控制寄存器读取exception原因,发现是有人敲了空格键。
• 7.操作系统查找空格键是谁给的:有没有进程处在阻塞状态等键盘输入——发现是powerpoint
• 8.进程响应空格,把powerpoint唤醒,运行状态下ppt发现操作系统传来的数据是键盘输入空格,表示翻页
• 9.ppt把下一页内容准备好,调用操作系统中的显示驱动程序,把要显示的内容送到显存,由图形处理器GPU通过访问显存空间刷新屏幕。

• 系统调用

• 系统调用运行在核心态,是操作系统内核为用户态程序实现的子程序

• 同步与通信

• 基于互斥的同步机制、锁机制、阻塞机制等的使用,帮助软硬件协同工作。

• 三、计算机硬件结构(cpu、gpu、内存、IO之间如何协同完成软件规定的各种操作的)

• 疑问:既然fpga不适合实现复杂算法,那我们计算机软件写的那么复杂的算法cpu又是怎么拆解完成实现的?
• 这里面有很有意思的南北桥介绍,GPU、CPU之间的通信介绍,计算机总线接口技术(片上总线、单向总线、串行总线等),计算机启动过程各部分初始化细节等知识。(下篇)会更新这部分。

• 四、微结构(建立指令系统和晶体管之间的桥梁——硕士:先行进位加法器、五级静态流水线、简单猜测转移、高速缓存原理)
• 五、并行处理结构(并行处理编程模型:消息传递模型MPI、共享存储模型OpenMP)
• 六、计算机的性能分析方法(理论建模、模拟器性能模拟、对实际系统进行性能评测)

我的专业方向是软件,四五六部分的内容打算略看,需要时再来查阅即可。

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐