【1】计算机专业必备基础知识《计算机体系结构基础》(胡伟武)速读笔记(上篇)“这位同窗,请描述一下PPT完成翻页时电脑软硬件是如何协做的?”

前言

在学习计算机的这几年,一直有些很基础的问题困扰着我,C++、Java照写,但总感受没有底气。本科学过操做系统、数据结构、微机原理、数字电路,(不知是否是由于我给忘干净了仍是咋的,)平时遇到学术道友聊本身作risc的,作高速总线的,作高性能计算的,作fpga加速的,又感受本身啥也不知道了。归根结底仍是计算机知识基础薄弱,儿时没有受到该有的熏陶,上大学又不感兴趣没好好看书。
今年我研二,在经历了痛定思痛的2020上半年后,想明白了不少,我决心(发自心里的)想了解它、学好它了。(这段“讨厌计算机——我还挺爱,继续战斗!”的心里经历有人感兴趣的话后面也能够总结放上来),总之Hello CSDN,你们一块儿冲鸭!程序员

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

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

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

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

• 2.冯诺依曼结构

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

• 3.性能指标

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

• 4.发展

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

• 5.设计原则

• 平衡性

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

• 局部性

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

• 并行性
• 指令级并行

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

• 数据级并行

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

• 任务级并行

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

• 虚拟化

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

• 2、以指令结构为核心的软硬件界面(指令系统结构 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经过访问显存空间刷新屏幕。

• 系统调用

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

• 同步与通讯

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

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

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

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

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