200803本篇是郑纬民《计算机系统结构》的读书笔记,欢迎各位路过指正!今天把九章全部更新完毕啦。

0. 分章节目录

  • 【计算机组成原理】计算机系统结构笔记(1):基本概念
  • 【计算机组成原理】计算机系统结构笔记(2):指令系统
  • 【计算机组成原理】计算机系统结构笔记(3):存储系统
  • 【计算机组成原理】计算机系统结构笔记(4):输入输出系统
  • 【计算机组成原理】计算机系统结构笔记(5):标量处理机
  • 【计算机组成原理】计算机系统结构笔记(6):向量处理机
  • 【计算机组成原理】计算机系统结构笔记(7):互连网络
  • 【计算机组成原理】计算机系统结构笔记(8):并行处理机
  • 【计算机组成原理】计算机系统结构笔记(9):多处理机

文章目录

  • 0. 分章节目录
  • 1. 基本概念
    • 1.1 计算机系统的评价标准
    • 1.2 计算机存储系统
    • 1.3 计算机性能改进
    • 1.4 计算机系统的发展
    • 1.5 处理机性能分类
  • 2. 指令系统
    • 2.1 数据表示
    • 2.2 寻址技术
    • 2.3 指令格式优化
    • 2.4 VLIW指令系统
  • 3. 存储系统
    • 3.1 存储系统原理
    • 3.2 虚拟存储器
    • 3.3 高速缓冲存储器
  • 4. 输入输出系统
    • 4.1 输入输出原理
    • 4.2 中断系统
    • 4.3 通道处理机
    • 4.4 输入输出处理机
  • 5. 标量处理机
    • 5.1 先行控制技术
    • 5.2 流水线技术
    • 5.3 相关性分析技术
    • 5.4 动态调度技术
    • 5.5 超标量处理机
    • 5.6 超流水线处理机
    • 5.7 超标量超流水线处理机
  • 6. 向量处理机
    • 6.1 向量数据表示方式
    • 6.2 向量处理机的结构
    • 6.3 向量处理方式
    • 6.4 向量处理机的关键技术
    • 6.5 向量处理机的性能评价
  • 7. 互连网络
    • 7.1 互连网络的基本概念
    • 7.2 互连网络的种类
    • 7.3 消息传递机制
  • 8. 并行处理机
    • 8.1 并行处理机模型
    • 8.2 并行处理机结构
  • 9. 多处理机
    • 9.1 多处理机结构
    • 9.2 多处理机性能模型
    • 9.3 多处理机的Cache一致性
    • 9.4 大规模并行处理机
    • 9.5 对称多处理机
    • 9.6 机群系统

1. 基本概念

  • **虚拟计算机:从不同角度所看到的计算机系统的属性是不同的。**计算机系统可分为7个层次。第3级至第6级由软件实现,称为虚拟机。 第0级和第1级属于计算机组成原理,第2级属于计算机系统结构,第3至第5级属于系统软件,第6级属于应用软件。
层次 内容
第6级 应用程序
第5级 高级语言
第4级 汇编语言
第3级 操作系统
第2级 机器语言
第1级 微程序
第0级 硬联逻辑
  • 透明性:本来存在的事物或属性,从某种角度看似乎不存在。
  • 系列计算机:相同系统结构,不同组成和实现的一系列计算机系统。
  • 计算机系统结构(Amdahl,1964):程序员所看到的计算机系统的属性, 即概念性结构和功能特性。
  • 功能特性:数据表示、寻址技术、寄存器组织、指令系统、中断系统、存储系统、处理机工作状态、输入输出系统、信息保护。

1.1 计算机系统的评价标准

  • 计算机系统的评价标准时钟频率( 只表示CPU的指令处理能力)。
  • 指令执行速度:MIPS = IPC · Fz。提高IPC:依靠先进系统结构。提高Fz:缩短门电路延迟,依靠技术进步。
  • 等效指令速度:加减法50%,乘法15%,除法5%,程序控制15%,其他15%。静态指令使用频度:在程序中直接统计。动态指令使用频度:在程序执行过程中统计。
  • 核心程序法:把应用程序中使用最频繁的那部分程序作为评价计算机性能的标准程序称为基准测试程序。整数测试程序:Dhrystone。1VAX MIPS=1757 Dhrystones/Second。浮点测试程序:Linpack。用 MFLOPS表示。通常使用SPEC基准程序
  • 峰值速度:峰值指令速度:MIPS、GIPS、TIPS,浮点峰值速度:MFLOPS、GFLOPS、TFLOPS。

1.2 计算机存储系统

层次 内容
第1级 Register Files(寄存器堆)
第2级 Lookahead(先行缓冲站)
第3级 Cache(高速缓冲存储器)
第4级 Main Memory(主存储器)
第5级 Online Storage(联机存储器)
第6级 Off-line Storage(脱机存储器)
  • 第1~3层在CPU芯片内部,第4层在主板上,第5层在机箱内(硬盘),第6层依靠手工加载。
  • 寻址空间:程序员可以使用的存储器容量。Pentium处理机的寻址空间为4GB,与实际配置的存储器容量无关。
  • 存储容量:实际物理存储器的大小,通常用KB、MB、GB等表示。
  • 主存储器的种类:SDRAM、RDRAM、DDR。
  • 价格标准:摩尔定理:速度每10年左右提高100倍,但价格基本维持不变。硬件在整个计算机系统价格中所占的比例在下降,软件所占的比例在上升。
  • 软硬件的关系:硬件实现:速度快、成本高;灵活性差、占用内存少;软件实现:速度低、复制费用低;灵活性好、占用内存多。

1.3 计算机性能改进

  • 改进性能考虑的软硬件取舍。基本方法:加快经常性事件的执行速度
  • Amdahl定律:系统中某一部件由于采用更快的执行方式后,整个系统性能的提高与这种执行方式的使用频率或占总执行时间的比例有关。 FeF_eFe​表示可改进部分所占的百分比。SeS_eSe​表示改进后,可改进部分的加速比
    Sn=T0Tn=1(1−Fe)+FeSeS_n = \frac{T_0}{T_n} = \frac{1}{(1-F_e)+\frac{F_e}{S_e}} Sn​=Tn​T0​​=(1−Fe​)+Se​Fe​​1​
  • 改进性能的主要途径:面向目标代码改进(用一条指令代替一串指令),面向高级语言和编译程序改进(增强对高级语言和编译程序支持的指令功能),面向操作系统改进
  • 软件兼容性设计方法:兼容种类:向后兼容,向前兼容,向上兼容,向下兼容。 向后兼容必须做到,向上兼容尽量做到。向前兼容和向下兼容,可以不考虑。
  • 系列机方法:限制了计算机系统结构的发展。
  • 模拟与仿真:在一台现有的计算机上实现另一台计算机的指令系统。(全部用软件实现的叫模拟,用软件、硬件、固件混合实现的叫仿真)。
  • 统一高级语言:采用同一种不依赖于任何具体机器的高级语言编写系统软件和应用软件。
  • 目标代码的并行编译技术:一种机器的目标代码重新编译到另一种机器的并行目标代码(动态代码转换、静态重编译)。

1.4 计算机系统的发展

  • 冯·诺依曼结构(Van Nenmann,1946):

  • 特点: 存储程序、运算器为中心、集中控制。现代处理机对冯·诺依曼结构的改进:存储器为中心,总线结构,分散控制

  • 三总线结构:

  • 非冯计算机的发展:非指令驱动。

  • 器件发展的特点:集成度迅速提高、提高速度空间不大、价格直线下降、可靠性越来越高。

  • 器件种类:通用片(逻辑关系确定)、 现场片:可以一次或多次改写逻辑关系、用户片:各种专用芯片、半用户片:门阵列片等。在多个层次上,算法影响着系统结构。

1.5 处理机性能分类

  • 按处理机个数和种类划分:单处理机、并行处理机、多处理机、分布处理机、关联处理机。

  • 按所使用的器件划分:目前的绝大部分计算机系统是VLSI计算机。

  • 佛林分类法(Flynn,1966):按照指令流和数据流的多倍性特征进行分类:单指令流单数据流 SISD,单指令流多数据流 SIMD(多个PU按一定方式互连,在同一个CU控制下,对各自的数据完成同一条指令规定的操作),多指令流单数据流 MISD,多指令流多数据流 MIMS

  • 库克分类法(Kuck,1978):按控制流和执行流分类。单指令流单执行流SISE,单指令流多执行流SIME,多指令流单执行流MISE,多指令流多执行流MIME。

  • 冯泽云分类法(冯泽云,1972):用最大并行度对计算机系统进行分类。同时处理的字宽为n,位宽为m。表示方法:处理机名(m,n) 。字串位串WSBS,字并位串WPBS,字串位并WSBP,字并位并WPBP。

  • 汉德勒分类法(Handler,1977),也就是ESC分类法。根据并行度和流水线分类。程序级k:程序控制部件(PCU)的个数。操作级d:算术逻辑部件(ALU)或处理部件(PU)的个数。逻辑级w:每个算术逻辑部件包含的逻辑线(ELC)的套数。表示方法:t(系统型号)=(k,d,w)。 为了表示流水线,采用:t(系统型号)=(k×k’,d×d’,w×w’)

2. 指令系统

2.1 数据表示

  • 如果有向量数据表示,只需要一条指令。用软件和硬件结合的方法实现新的数据表示。
  • 运算器中的累加器需要另外增加的长度称为警戒位。不设置警戒位,可能出现很大的误差用途:用于左规格化时移入尾数有效字长内、用于舍入。乘法运算只需要设置一个警戒位。除法运算不必设置警戒位。
  • 一般处理机中的数据表示方法:带标志符的数据表示法、数据描述符表示法。

2.2 寻址技术

  • 并行存储器的编址技术:

    • 高位交叉编址:主要用来扩大存储器容量。
    • 低位交叉编址:主要是提高存储器速度。
  • 输入输出设备的编址:

    • 一台设备一个地址:通过指令来区分地址,地址内部区分地址。
    • 一台设备两个地址:数据寄存器、状态或控制寄存器。多个编址寄存器共用同一个地址的方法:依靠地址内部来区分,适用于被编址的寄存器的长度比较短,“下跟法”隐含编址方式,必须按顺序读写。
    • 一台设备多个地址:增加编程的困难

2.3 指令格式优化

  • 操作码的三种编码方法:固定长度、Huffman编码、扩展编码,节省存储空间。

    • 固定长操作码:定长定域,但是浪费信息量。
    • Huffman编码法:固定长编码相对于Huffman编码的信息冗余量:

R=1−−∑i=1npi⋅log⁡2pi∣log⁡2n⌉R=1-\frac{-\sum_{i=1}^{n} p_{i} \cdot \log _{2} p i}{\left.\mid \log _{2} n\right\rceil} R=1−∣log2​n⌉−∑i=1n​pi​⋅log2​pi​

  • 扩展编码法:由固定长操作码与Huffman编码法相结合形成。

  • 地址码的优化表示:一般机器采用多寄存器结构的二地址指令是最理想的。

    • 如果强调硬件结构简单,并且以连续运算为主,宜采用一地址结构。
    • 对于以向量、矩阵运算为主的处理机,最好采用三地址结构。部分RISC处理机也采用三地址指令。
    • 对于解决递归问题为主的处理机,宜采用零地址结构。编程容易、节省程序存储量。
    • 缩短地址码长度的方法:用一个短地址码表示一个大地址空间,用间址寻址方式缩短地址码长度,用变址寻址方式缩短地址码长度,用寄存器间接寻址方式缩短地址码长度。
  • 指令系统的功能设计:通用计算机必须有5类基本指令:数据传送类指令运算类指令、程序控制指令、输入输出指令、处理机控制和调试指令、数据传送类指令。

    • 运算类指令 : 考虑四个因素的组合:操作数灯,数据表示,数据长度,数据存储设备。一般机器中要设置10条移位指令。
    • 程序控制指令:转移条件:零(Z)、正负(N)、进位©、溢出(V)及其组合。由条件转移指令之前的指令产生条件码由条件转移指令本身产生转移条件。
    • 复合条件转移指令:代替2条指令,首先进行运算,并根据运算的结果决定是否转移不需要条件码,与高级语言一致。
    • 循环控制指令:用1条指令完成循环的控制
    • 隐含转移指令应用场合:用于特殊的IF…THEN…结构中,THEN部分只有一条指令实现方法:把IF条件取反,如果取反后的条件成立则取消下条指令,否则执行下条指令。程序执行效率高。
    • 程序调用和返回指令: 本身可以不带条件,也可以带有条件
    • 中断控制指令:开中断关中断、改变屏蔽、中断返回、自陷等。
    • 输入输出指令:启动、停止、测试设备,数据输入、输出等。采用单一的直接寻址方式。在多用户或多任务环境下,输入输出指令属于特权指令。
    • 处理机控制和调试指令:硬件调试指令(开关状态读取等)、软件调试指令(断点设置、跟踪,自陷指令等)
    • 指令系统的性能:完整性、规整性、对称性、均匀性、高效率、兼容性。
  • 指令系统的优化设计:CISC(1960-1970),RISC(1970-),VLIW(1980-)

    • 超长指令字(VVLIW):一种显式指令级并行指令系统二维程序结构,指令级并行度高。
    • RISC的关键技术:延时转移技术、指令取消技术、重叠寄存器窗口技术、指令流调整技术,以硬件为主固件为辅。
    • 采用延迟转移技术的两个限制条件:被移动指令在移动过程中与所经过的指令之间没有数据相关。被移动指令不破坏条件码,至少不影响后面的指令使用条件码。

2.4 VLIW指令系统

  • 一条指令中包含有多个能够同时执行的操作(Fisher,1981)。在一条VLIW指令中包含有多个相同或不同的操作字段,每个操作字段能够分别独立控制各自的功能部件同时工作。

  • 超标量处理机:依靠设置多条指令流水线,并通过同时发射多条指令来提高处理机的运算速度。

  • 超流水线处理机:通过分时使用同一条指令流水线的不同部分来提高处理机的运算速度。

  • 采用显式并行指令计算方式:每一行上的所有操作组成一条超长指令,之间没有数据相关、控制相关和功能部件冲突,这些指令可以在VLIW处理机上同时执行。特点:指令级并行度高、硬件结构规整简单度窗口及多发射机制等。

  • VLIW处理机:安腾处理机、DAISY处理机、 Crusoe处理机。

  • 目标代码兼容问题:动态代码转换技术:IBM公司开放源代码DAISY,Transmeta公司推出了“代码映射软件”。

  • 可执行代码的并行编译技术:

    • 动态重编译:DAISY和Code Morphing。
    • 静态重编译:串行目标代码——中间表示形式——数据相关性分析——并行调度——并行目标代码。

3. 存储系统

3.1 存储系统原理

  • 存储器的主要性能:速度、容量、价格。
  • 在一般计算机系统中有两种存储系统:
  • Cache存储系统:由Cache和主存储器构成,对应用程序员透明, 主要目的:加快存储速度。
  • 虚拟存储系统:由主存储器和硬盘构成,对系统程序员以上均透明,主要目的:扩大存储器容量
  • 存储系统的速度:存储系统的访问效率:

e=T1T=T1H⋅T1+(1−H)⋅T2=1H+(1−H)⋅T2T1=f(H,T2T1)e=\frac{T 1}{T}=\frac{T_{1}}{H \cdot T_{1}+(1-H) \cdot T_{2}}=\frac{1}{H+(1-H) \cdot \frac{T_{2}}{T_{1}}}=f\left(H, \frac{T_{2}}{T_{1}}\right) e=TT1​=H⋅T1​+(1−H)⋅T2​T1​​=H+(1−H)⋅T1​T2​​1​=f(H,T1​T2​​)
访问效率主要与命中率和两级存储器的速度之比有关。

  • 提高存储系统速度的两条途径:提高命中率H、存储器的速度不要相差太大
  • 采用预取技术提高命中率:不命中时,把M2存储器中相邻多个单元组成的一个数据块取出来送入M1存储器中。

H′=H+n−1nH^{\prime}=\frac{H+n-1}{n} H′=nH+n−1​
其中:H′H^\primeH′是采用预取技术之后的命中率,HHH是原来的命中率,nnn为数据块大小与数据重复使用次数的乘积

  • 并行访问存储器:把m字w位的存储器改变成为m/n字n×w位的存储器。逻辑实现:把地址码分成两个部分,一部分作为存储器的地址,另一部分负责选择数据。
  • 交叉访问存储器
  • 高位交叉访问存储器:用地址码的高位部分区分存储体号。存储器的地址:A=m×k+jA=m×k+jA=m×k+j。
  • 低位交叉访问存储器:提高存储器访问速度,用地址码的低位部分区分存储体号。存储器地址A的计算公式为:A=n×j+kA=n×j+kA=n×j+k。
  • 并行存储器的加速比:

N=∑k=1nk⋅p(k)N=\sum_{k=1}^{n} k \cdot p(k) N=k=1∑n​k⋅p(k)
NNN是每个存储周期能够访问到的平均有效字的个数。定义转移概率为ggg,即读出的是转移指令,且转
移成功的概率。于是有
N=1−(1−g)ngN=\frac{1-(1-g)^{n}}{g} N=g1−(1−g)n​

  • 无冲突访问存储器
  • 一维数组的无冲突访问存储器: 按连续地址访问,没有冲突。实现方法: 存储体的个数取质数,且n大于等于向量长度。
  • 二维数组的无冲突访问存储器:一个n×n的二维数组,按行、列、对角线和反对角线访问,并且在不同的变址位移量情况下,都能实现无冲突访问。体号地A=(2Pi+j+k)modmA = (2^P i+j+k) \:\: mod\:\:mA=(2Pi+j+k)modm。列元素顺序存储,行元素按地址取模顺序存储
  • 二维数组的无冲突访问存储器之二:对于任意一个n×n的数组,如果能够找到满足n=22Pn=2^{2P}n=22P关系的任意自然数p,则这个二维数组就能够使用n个并行存储体实现按行、列、对角线和反对角线的无冲突访问。体号地址A=2(iL⊕jH)+(iH⊕iL⊕jL)A = 2(i_L \oplus j_H)+(i_H\oplus i_L\oplus j_L)A=2(iL​⊕jH​)+(iH​⊕iL​⊕jL​)。在执行并行读和写操作时需要借助比较复杂的对准网络。

3.2 虚拟存储器

  • Kilbrn等人于1961年提出。
  • 造成虚拟存储器速度降低的主要原因:(1) 要访问主存储器必须先查段表或页表;(2) 可能需要多级页表。页表级数:

g=⌈log⁡2Nv−log⁡2Nplog⁡2Np−log⁡2Nd⌉g=\lceil\frac{\log 2 N v-\log 2 N p}{\log _{2} N p-\log _{2} N d}\rceil g=⌈log2​Np−log2​Ndlog2Nv−log2Np​⌉

其中: NvNvNv为虚拟存储空间大小, NpNpNp为页面的大小,NdNdNd为一个页表存储字的大小。

  • 目录表:用一个小容量高速存储器存放页表,但是可扩展性比较差。

  • 快慢表:当快表中查不到时,从主存的慢表中查找;相联访问实现困难,速度低。

  • 散列函数:把相联访问变成按地址访问。散列函数Ah=H(Pv)Ah=H(Pv)Ah=H(Pv),采用散列变换实现快表按地址访问。

    • 避免散列冲突:采用相等比较器;
    • 地址变换:相等比较与访问存储器同时进行。
  • 预取式:在程序重新开始运行之前,把上次停止运行前一段时间内用到的页面先调入到主存储器,然后才开始运行程序。

3.3 高速缓冲存储器

  • 地址映象:把主存中的程序按照某种规则装入到Cache中,并建立主存地址与Cache地址之间的对应关系。

  • 地址变换:当程序已经装入到Cache之后,在程序运行过程中,把主存地址变换成Cache地址。

  • 全相联映象及其变换:主存的任意一块可以映象到Cache中的任意一块。映象关系有Cb×MbC_b \times M_bCb​×Mb​种。用硬件实现非常复杂。

  • 直接映象及其变换:主存储器中一块只能映象到Cache的一个特定的块中。Cache地址b=BmodCbb = B\:\:mod\:\:C_bb=BmodCb​。b为Cache块号,B是主存块号, Cb是Cache块数。Cache地址与主存储器地址的低位部分完全相同。

  • 组相联映象及其变换: 主存和Cache按同样大小划分成块和组。存和Cache的组之间采用直接映象方式。在两个对应的组内部采用全相联映象方式。但是实现难度和造价要比直接映象方式高。

    • 如果有相等的,表示Cache命中;如果全部不相等,表示Cache没有命中。
    • 提高Cache访问速度的一种方法:用多个相等比较器来代替相联访问。
  • 位选择组相联映象及其变换

    • 映象规则:主存和Cache都按同样大小分块,Cache在分块的基础上再分组,主存按照Cache的组容量分区。主存的块与Cache的组之间采用直接映象方式,主存中的块与Cache中组内部的各个块之间采用全相联映象方式。
    • 与组相联映象方式比较:实现起来容易,在块表中存放和参与相联比较的只有区号E
  • 段相联映象及其变换

    • 映象规则:主存和Cache都按同样大小分块和段,段之间采用全相联映象方式。段内部的块之间采用直接映象方式。
    • 把读出的段号s与主存地址的段内块号b及块内地址w拼接起来得到Cache地址,实现较简单。但是当发生段失效时,要把本段内已经建立起来的所有映象关系全部撤消。
  • Cache替换算法:比较对法需要的触发器个数为:

CGb2=Gb⋅(Gb−1)2C_{G_{b}}^{2}=\frac{G_{b} \cdot\left(G_{b}-1\right)}{2} CGb​2​=2Gb​⋅(Gb​−1)​
与门个数为Gb,每个门的输入端个数为Gb-1当每组的块数比较多时, 采用分级办法实现。

  • 堆栈法的管理规则:把本次访问的块号与堆栈中保存的所有块号进行相联比较。速度比较低,因为它需要进行相联比较。需要的触发器个数

Gb⋅log⁡2GbG_{b} \cdot \log _{2} G_{b} Gb​⋅log2​Gb​

  • Cache存储系统的加速比:加速比与命中率的关系。提高加速比的最好途径是提高命中率。
    Cache的命中率随它的容量的增加而提高,关系近似为

H=1−1SH=1-\frac{1}{\sqrt{S}} H=1−S​1​

  • Cache命中率与块大小的关系:在组相联方式中, 块大小对命中率非常敏感,随着块大小增加命中率也增加, 有一个极大值。

  • Cache命中率与组数的关系:在组相联方式中, 组数对命中率的影响很明显。随着组数的增加,Cache的命中率要降低。

  • Cache的更新算法:

    • 写直达法:CPU的数据写入Cache时,同时也写入主存
    • 写回法:CPU的数据只写入Cache,不写入主存,仅当替换时,才把修改过的Cache块写回主存。
    • 可靠性,写直达法优于写回法。与主存的通信量,写回法少于写直达法。控制的复杂性, 写直达法比写回法简单。硬件实现的代价, 写回法要比写直达法好。
  • 写Cache的两种方法

    • 不按写分配法:在写Cache不命中时,只把所要写的字写入主存。
    • 按写分配法:在写Cache不命中时,还把一个块从主存读入Cache。
    • 目前,在写回法中采用按写分配法,在写直达法中采用不按写分配法。
  • 解决Cache与主存不一致的主要方法

    • 共享Cache法:能根本解决Cache不一致,共享Cache可能成为访问的瓶颈,硬件复杂。
    • 作废法:当某一处理机写局部Cache时,同时作废其他处理机的局部Cache。
    • 播写法:把写Cache的内容和地址放到公共总线上,各局部Cache随时监听公共总线
    • 目录表法:在目录表中存放Cache一致性的全部信息。
    • 禁止共享信息放在局部Cache中:Cache对系统程序员不透明。
  • **Cache的预取算法:按需取、恒预取、不命中预取。**主要考虑因素:是否提高命中率和Cache与主存间通信量。

  • 三级存储系统:虚拟存储系统和Cache存储系统可同时存在。

  • 虚拟地址Cache:虚拟存储器采用位选择组相联方式,虚拟存储器中的一页等于主存储器的一个区。

  • 全Cache存储系统:获得一个速度接近Cache,容量等于虚拟地址空间的存储器。用一个速度很高,存储容量很大的存储器来实现。

4. 输入输出系统

4.1 输入输出原理

  • 针对实时性,采用层次结构的方法;针对与设备无关性,采用分类处理的方法;针对异步性,采用自治控制的方法,

  • 输入输出系统的组织方式:自治控制、层次结构、分类组织(面向字符的设备和面向数据块的设备)

  • 三种输入输出方式:

    • 程序控制输入输出方式:分为状态驱动输入输出方式、应答输入输出方式、查询输入输出方式、条件驱动输入输出方式。
    • 中断输入输出方式:CPU暂停执行现行程序,转去处理这些事件,等处理完成后再返回来继续执行原先的程序。
    • 直接存储器访问方式:直接存储器访问方式 ( DMA),主要用来连接高速外围设备。**数据的传送过程不需要CPU的干预。**全部用硬件实现,不需要做保存现场和恢复现场等工作。
  • 目前使用的DMA方式:

    • 周期窃取方式:在每一条指令执行结束时,CPU测试有没有DMA服务申请。
    • 直接存取方式:整个工作流程全部用硬件完成。
    • 数据块传送方式:在设备控制器中设置一个比较大的数据缓冲存储器。采用程序中断方式进行。

4.2 中断系统

  • 引起中断的各种事件称为中断源

  • 中断源的种类:外围设备、处理机、存储器、控制器、总线、实时过程控制、多机理机系统、程序调试断点、硬件故障、电源故障。

  • 中断系统的软硬件分配:考虑中断响应时间和灵活性。必须用硬件实现的有:保存中断点和进入中断服务程序入口。必须用软件实现的有:中断服务和返回到中断点。

  • 中断响应时间影响因素:最长指令执行时间、处理其它更紧急的任务所用时间、从第一次关CPU中断到第一次开CPU中断所经历的时间和通过软件找到中断服务程序入口所用时间。

  • 中断源的识别方法:查询法(所有中断源共用一条中断请求线)、软件排队链法(设置一个中断请求寄存器,每个中断源在其中中占据一位)、硬件排队链法(用硬件排队器和编码器,在所有请求中断服务的中断源中,找出具有最高优先级的中断源)、中断向量法(在主存储器的固定区域中开辟出一个专用的中断向量区)、独立请求法(各个中断源使用自己独立的中断请求线)。

  • 识别中断源的分组独立请求法:把独立请求法与串行排队链法结合起来。组内采用串行排队链法,组间采用独立请求法。

4.3 通道处理机

  • 把外围设备的管理工作从CPU中分离出来。

  • 通道的工作过程:在用户程序中使用访管指令进入管理程序,由CPU通过管理程序组织一个通道程序,并启动通道。通道处理机执行通道程序,完成指定的数据输入输出工作。通道程序结束后再次调用管理程序进行处理。每完成一次输入输出工作,CPU需要两次调用管理程序

  • 通道种类:字节多路通道(为多台低中速的外围设备服务有多个子通道,每个子通道连接一个控制器)、选择通道(为高速外围设备服务只有一个以成组方式工作的子通道)、数组多路通道(每次为一台高速设备传送一个数据块并轮流为多台外围设备服务。)

  • 通道中的数据传送过程:TST_STS​为设备选择时间。TDT_DTD​为传送一个字节的时间。 DijD_{ij}Dij​为第iii台设备的第jjj个数据。

  • 字节多路通道的数据传送过程用时TBYTE=(TS+TD)×P×nT_{BYTE} = (T_S+T_D)\times P\times nTBYTE​=(TS​+TD​)×P×n。选择通道的数据传送过程用时TSELECT=(TS/n+TD)×P×nT_{SELECT}=(T_S/n+T_D)\times P\times nTSELECT​=(TS​/n+TD​)×P×n。数组多路通道的数据传送过程用时TBLOCK=(TS/k+TD)×P×nT_{BLOCK}=(T_S/k+T_D)\times P\times nTBLOCK​=(TS​/k+TD​)×P×n。

  • 增大通道流量的方法:增加通道的最大工作流量、动态改变设备的优先级、增加缓冲存储器。

4.4 输入输出处理机

  • 能够独立承担输入输出工作的专用处理机。

  • 输入输出处理机的种类:

    • 是否共享主存储器:共享主存储器、不共享主存储器的输入输出处理机。
    • 运算部件和指令控制部件:合用同一个、独立运算部件和指令控制部件

5. 标量处理机

5.1 先行控制技术

  • 指令的重叠执行方式:

    • 顺序执行方式:用时T=∑i=1n(tti+tai+tei)T=\sum_{i=1}^n(t_{ti}+t_{ai}+t_{ei})T=∑i=1n​(tti​+tai​+tei​),其中ttit_{ti}tti​为取指时间,tait_{ai}tai​为分析时间,teit_{ei}tei​为执行时间。
    • 一次重叠执行方式:如果两个过程的时间相等,则执行nnn条指令的时间为:T=(1+2n)tT=(1+2n)tT=(1+2n)t。
    • 二次重叠执行方式:如果三个过程的时间相等,执行nnn条指令的时间为:T=(2+n)tT=(2+n)tT=(2+n)t。需要采用先行控制技术
  • 先行控制方式的原理:解决两个问题:(1).有独立的取指令部件、指令分析部件和指令执行部件,把一个控制器分解为存储控制器、指令控制器、运算控制器;(2).要解决访问主存储器的冲突问题:采用低位交叉存取方式或两个独立的存储器、独立的指令存储器和数据存储器、采用先行控制技术(缓冲技术和预处理技术)

  • 有独立的指令Cache和数据Cache。这种结构被称为哈佛结构

  • 处理机结构:

    • 三个独立的控制器:存储控制器、指令控制器、运算控制器。
    • 四个缓冲栈:先行指令缓冲栈、先行读数缓冲栈、先行操作栈、后行写数栈。
  • 先行指令缓冲栈:处于主存储器与指令分析器之间。平滑主存储器取指令和指令分析器使用指令之间的速度差异。

    • RR型指令:不必处理,直接送先行缓冲栈;
    • RS型指令,主存有效地址送先行读数栈,用该先行读数栈的寄存器编号替换指令中的主存地址码部分,形成RR*指令送先行缓冲栈;
    • RI型指令,指令中的立即数送先行读数栈,用该先行读数栈的寄存器编号替换指令中的立即数部分,形成RR*指令送先行缓冲栈。
    • 转移指令,一般在指令分析器中直接执行。
    • 先行指令缓冲栈的组成:只要指令缓冲栈没有充满,就自动发出取指令的请求。先行程序计数器PC1,用来指示取指令,现行程序计数器PC,记录指令分析器正在分析的指令地址。但是是分析和执行时间相差大,且有数据相关问题。
    • 指令执行时序:设置了指令缓冲栈,取指令的时间就可以忽略不计。
    • 理想情况下,指令执行部件应该一直忙碌。连续执行n条指令的时间为:T先行=∑i=1nteiT_{先行} = \sum_{i=1}^n t_{ei}T先行​=∑i=1n​tei​。
    • 设置先行缓冲栈的目的:使指令分析器和指令执行部件能够独立工作。
  • 先行操作栈:处于指令分析器和运算控制器之间使指令分析器和运算器能够各自独立工作。

  • 先行读数栈:处于主存储器与运算器之间滑运算器与主存储器的工作。由地址寄存器、操作数寄存器、和标志三部分组成。

  • 后行写数栈:由地址寄存器、数据寄存器和标志三部分组成。当运算器执行这条RR*型写数指令时,只要把写到主存的数据送到后行写数栈的数据寄存器中即可。

  • 缓冲深度的设计方法:以静态分析为主,通过模拟来确定缓冲深度。

  • 先行指令缓冲栈的设计

    • 先行指令缓冲栈已经充满:则缓冲深度为DI=⌈L1(t2−t1)t2⌉D_I = \lceil \frac{L_1(t_2-t_1)}{t_2}\rceilDI​=⌈t2​L1​(t2​−t1​)​⌉,其中L1L_1L1​为指令序列最大长度,平均分析时间为t1t_1t1​,平均取一条指令 的时间为t2t_2t2​。如果这种指令流的连续长度超过L1L_1L1​,则先行指令缓冲栈失去作用。
    • 若先行指令缓冲栈原来为空:缓冲深度为:DI=⌈L2⋅(t1′−t2′)t1′⌉D_{I}=\lceil\frac{L_{2} \cdot\left(t_{1}^{\prime}-t_{2}^{\prime}\right)}{t_{1}^{\prime}}\rceilDI​=⌈t1′​L2​⋅(t1′​−t2′​)​⌉指令流的连续长度超过L2,先行指令缓冲栈失去缓冲作用。
    • 在一般处理机中连续执行短指令的概率大。
    • 其余缓冲栈的设计原则:先行指令缓冲栈的缓冲深度>先行操作栈的缓冲深度,>先行读数栈的缓冲深度,>后行写数栈的缓冲深度。

5.2 流水线技术

  • 空间并行性:设置多个独立的操作部件;

  • 时间并行性:分时使用同一个部件的不同部分。

  • 流水线工作原理:在每一个流水段的末尾或开头必须设置一个寄存器,称为流水寄存器。加入流水寄存器,会增加指令的执行时间。

  • 指令流水线一般4至12个流水段,≥8个流水段的称为超流水线处理机

  • 特点:只有连续提供同类任务才能发挥流水线效率、每个流水线段都要设置一个流水寄存器、各流水段的时间应尽量相等、流水线需要有装入时间排空时间

  • 流水线的分类:

    • 流水线的各个流水段之间是否有反馈信号:线性流水线非线性流水线
    • 按照流水线的级别来分:处理机级流水线(指令流水线)、部件级流水线(操作流水线)、 宏流水线(处理机之间的流水线)。
    • 单功能流水线与多功能流水线:单功能流水线(只能完成一种固定功能的流水线)、多功能流水线(流水线的各段通过不同连接实现不同功能)。
    • 静态流水线与动态流水线:静态流水线:同一段时间内,各个功能段只能按照一种方式连接,实现一种固定的功能。动态流水线:在同一段时间内,各段可以按照不同的方式连接,同时执行多种功能。
    • 按照数据表示方式:标量流水线向量流水线
    • 按照控制方式:同步流水线异步流水线
  • 流水线的性能分析:

    • 吞吐率TP=nTkTP=\frac{n}{T_k}TP=Tk​n​。各段时间不等,完成n个连续任务:吞吐率TP=n∑i=1kti+(n−1)max⁡(Δt1,Δt2,...,Δtk)TP=\frac{n}{\sum_{i=1}^kt_i + (n-1)\max (\Delta t_1,\Delta t_2,...,\Delta t_k)}TP=∑i=1k​ti​+(n−1)max(Δt1​,Δt2​,...,Δtk​)n​。最大吞吐率为TP=1max⁡(Δt1,Δt2,...,Δtk)TP=\frac{1}{\max (\Delta t_1,\Delta t_2,...,\Delta t_k)}TP=max(Δt1​,Δt2​,...,Δtk​)1​。
    • 流水线各段执行时间不相等的解决办法:将瓶颈部分再细分、瓶颈流水重复设置:增加分配器和收集器。
    • 加速比S=顺序执行时间T0流水线执行时间Tk=nkn+k−1S= \frac{顺序执行时间T_0}{流水线执行时间T_k}=\frac{nk}{n+k-1}S=流水线执行时间Tk​顺序执行时间T0​​=n+k−1nk​。最大加速比Smax=kS_{max} = kSmax​=k。实际加速比S=n∑i=1kΔti∑i=1kti+(n−1)max⁡(Δt1,Δt2,...,Δtk)S=\frac{n\sum_{i=1}^k\Delta t_i}{\sum_{i=1}^kt_i + (n-1)\max (\Delta t_1,\Delta t_2,...,\Delta t_k)}S=∑i=1k​ti​+(n−1)max(Δt1​,Δt2​,...,Δtk​)n∑i=1k​Δti​​
    • 效率E=n个任务占用的时空区k个流水总的时空区=T0kTkE=\frac{n个任务占用的时空区}{k个流水总的时空区}= \frac{T_0}{kT_k}E=k个流水总的时空区n个任务占用的时空区​=kTk​T0​​。则E=nk+n−1E=\frac{n}{k+n-1}E=k+n−1n​,最高效率为1。实际效率为E=n∑i=1kΔtiK[∑i=1kti+(n−1)max⁡(Δt1,Δt2,...,Δtk)]E=\frac{n\sum_{i=1}^k\Delta t_i}{K[\sum_{i=1}^kt_i + (n-1)\max (\Delta t_1,\Delta t_2,...,\Delta t_k)]}E=K[∑i=1k​ti​+(n−1)max(Δt1​,Δt2​,...,Δtk​)]n∑i=1k​Δti​​。各段设备量或价格不等时,流水线的效率为:E=n∑i=1kaiΔti∑I=1i=kai[∑i=1kaiti+(n−1)max⁡(Δt1,Δt2,...,Δtk)]E=\frac{n\sum_{i=1}^ka_i\Delta t_i}{\sum_{I=1}^{i=k}a_i[\sum_{i=1}^ka_it_i + (n-1)\max (\Delta t_1,\Delta t_2,...,\Delta t_k)]}E=∑I=1i=k​ai​[∑i=1k​ai​ti​+(n−1)max(Δt1​,Δt2​,...,Δtk​)]n∑i=1k​ai​Δti​​。
    • 流水线的吞吐率、加速比与效率的关系:E=TP⋅Δt,S=kEE = TP\cdot \Delta t, S=kEE=TP⋅Δt,S=kE。
    • 流水线最佳段数的选择:性能价格比(PCR)定义为:PCR=PC=1t/k+d1a+bkPCR = \frac{P}{C} = \frac{1}{t/k+d}\frac{1}{a+bk}PCR=CP​=t/k+d1​a+bk1​。求其最大值则k0=tadbk_0 = \sqrt{\frac{ta}{db}}k0​=dbta​​。其中a为功能段身的总价格,b为每个锁存器的价格,d为流水锁存器的延迟时间,k为流水线段数。
  • 非线性流水线的调度:找出一个最小的循环周期,按照这周期向流水线输入新任务,流水线的各
    个功能段都不会发生冲突。

  • 非线性流水线的冲突

    • 启动距离:连续输入两个任务之间的时间间隔。
    • 流水线冲突:几个任务争用同一个流水段。
  • 无冲突调度方法(Davsion,1971)

    • 禁止向量:预约表中每一行任意两个“×”之间距离的集合。
    • 冲突向量:C=(CmCm−1…C2C1)C=(C_mC_{m-1}…C_2C_1)C=(Cm​Cm−1​…C2​C1​)。 其中:m是禁止向量中的最大值。如果i在禁止向量中,则Ci=1C_i=1Ci​=1,否则Ci=0C_i=0Ci​=0。
    • 简单循环:状态图中各种冲突向量只经过一次的启动循环。
  • 优化调度方法(Shar,1972)流水线最小平均启动距离的限制范围:预约表中“×”最多的行一定是瓶颈流水段。实现最优调度的目标是使瓶颈流水段处于忙碌状态,没有空闲周期。

5.3 相关性分析技术

  • 数据相关:在执行本条指令的过程中用到的指令、操作数、变址量等是前面指令的执行结果。

  • 控制相关:由条件分支指令、转子程序指令、中断等引起的相关。

  • 处理方法:推后处理、设置专用路径

  • 指令相关:结果地址(n)=指令地址(n+1)。解决指令相关的根本办法是: 在程序执行过程中不允许修改指令

  • 主存操作数相关:A1(n)= A2(n+1)。解决办法:运算结果写到通用寄存器(写回),而不写到主存(写通)。对于访问主存储器的请求,写结果的优先级高于读操作数。

  • 通用寄存器数据相关

    • 发生R1(n)=R1(n+1)称为R1数据相关。
    • 发生R1(n)=R2(n+1)称为R2数据相关。
    • 方法一:把读操作数、写运算结果与指令执行合在一个节拍。
    • 方法二:建立相关专用通路
  • LOAD相关:R1(n)=R2(n+1),或 R1(n)=R1(n+1),

    • 方法一:由编译器在LOAD之后插入不发生数据相关的指令。
    • 方法二:由硬件自动插入空操作,直到LOAD操作完成。
  • 控制相关:因程序的执行方向可能被改变而引起的相关。处理方法:在先行指令缓冲栈的入口处增设一个专门处理无条件转移指令的指令分析器。

  • 一般条件转移:当条件码是上一条指令产生时,相关最严重。当转移成功时,指令执行过程完全串
    行,而且要作废先行指令缓冲栈中的指令。在采用流水线方式的处理机中,通过软件与硬件的多种手段来近可能地降低转移成功的概率,减少转移成功造成的影响。

  • 复合条件转移:转移成功造成的影响比一般条件转移指令还要大。

  • 条件分支对流水线的影响:(1)延迟转移技术和指令取消技术(单流水线处理机)(2)动态分支预测技术(根据近期转移是否成功的记录来预测下一次转移的方向)、静态分支预测技术(在程序实际执行过程中,转移预测的方向不能改变)。

    • 条件分支在流水线中的执行过程:转移成功,猜测错误,要先作废流水线中已经执行的指令;然后再从分支点开始执行指令。一条k段流水线有k-2个功能段是浪费的。当分支的执行方向猜测错误时,可能造成程序执行结果发生错误。
    • 目前的处理机有两种做法:(1)只进行指令译码和准备好运算所需要的操作数,在转移条件没有形成之前不执行运算;(2)一直执行到运算完成,但不送回运算结果。
    • 条件分支对流水线性能的影响:假设条件转移指令在一般程序中所占的比例为ppp,转移成功的概率为qqq。n条指令的总的执行时间是: TK−IF=(n+k−1)Δt+npq(k−1)ΔtT_{K-IF}=(n+k-1)\Delta t + npq(k-1)\Delta tTK−IF​=(n+k−1)Δt+npq(k−1)Δt。有条件转移影响的流水线最大吞吐率为:TPMAX−IF=1(1+pq(k−1))ΔtTP_{MAX-IF} = \frac{1}{(1+pq(k-1))\Delta t}TPMAX−IF​=(1+pq(k−1))Δt1​。流水线吞吐率下降的百分比为D=pq(k−1)1+pq(k−1)D=\frac{pq(k-1)}{1+pq(k-1)}D=1+pq(k−1)pq(k−1)​。
  • 静态分支预测技术

    • 软件法:通过编译器尽量降低转移成功的概率。
    • 硬件法:通过改变硬件结构来降低转移指令对流水线的影响。
    • 两个先行指令缓冲栈向前条件转移,转移成功与不成功各50%在先行指令缓冲栈中增加一个先行目标缓冲栈。
  • 动态分支预测技术

    • 在指令Cache中记录转移历史信息:加一个字段称为转移历史表
    • 设置转移目标地址缓冲栈:用高速缓冲栈保存最近k条转移指令的转移历史表和转移目标地址。
    • 设置转移目标指令缓冲栈:字段改为存放转移目标地址之后的n条指令。
  • 提前形成条件码:可在运算开始或中间产生条件码。

  • 精确断点与不精确断点:对于输入输出设备的中断服务不需要有精确断点。使用不精确断点则流水线可以不断流。但是程序的调试困难、程序执行的结果可能出错。要设置一定数量的后援寄存器

5.4 动态调度技术

  • 顺序流动:任务按顺序流入流水线,也按顺序流出流水线。

  • 乱序流动:指令流出流水线的顺序与流入流水线的顺序不同。

  • 乱序流动中的数据相关:RAW相关、WAR相关、WAW相关。相关称为冒险竟争等。

  • 数据重定向

    • 写读相关,j与i可以同时执行即专用数据通路;
    • 写写相关,先后顺序无关;
    • 读写相关,先后顺序无关;
    • 后两种情况又称为变量换名技术
  • 变量换名技术:用来自动消除读写数据相关和写写数据相关。规则:一个变量只允许定值一次。

  • 动态调度算法

    • 集中控制:CDC计分牌算法;
      -** 分散控制**:Tomasulo算法, 公共数据总线法,令牌法等。

5.5 超标量处理机

  • 普通标量流水线处理机:一条指令流水线,一个多功能操作部件。

  • 多操作部件标量处理机:一条指令流水线,多个独立的操作部件。

  • 超标量处理机典型结构:多条并行工作的指令流水线,多个独立的操作部件,指令级并行度(ILP)大于1。

  • 单发射处理机:每个周期只取一条指令、只译码一条指令,只执行一条指令,只写回一个运算结果。取指令部件和指令译码部件各设置一套。

  • 多发射处理机:每个周期同时取多条指令、同时译码多条指令,同时执行多条指令,同时写回多个运算结果。多个取指令部件,多个指令译码部件和多个写结果部件。设置多个指令执行部件。

  • 超标量处理机:有两条或两条以上能同时工作的指令流水线

  • 先行指令窗口:能够从指令Cache中预取多条指令,能够对窗口内的指令进行数据相关性分析和功能部件冲突检测。指令并行度1<ILP<m。

  • 多流水线的调度的方法:顺序发射顺序完成、顺序发射乱序完成、乱序发射乱序完成。

  • 顺序发射与乱序发射:指令发射顺序是按照程序中指令排列顺序进行的称为顺序发射。

  • 顺序完成与乱序完成:指令完成顺序是按照程序中指令排列顺序进行的称为顺序完成。

  • 资源冲突:如果不采用流水线结构,发生资源冲突的可能性就比较大。因此,在超标量处理机中,操作部件一般要采用流水线结构。超标量处理机则正好相反,相同操作不要连续出现。

  • 超标量处理机性能:而超标量超流水线处理机的指令级并行度记作(m, n)。在理想情况下,N条指令在单流水线标量处理机上的执行时间为:T(1,1)=(k+N−1)ΔtT(1,1)=(k+N-1)\Delta tT(1,1)=(k+N−1)Δt。在每个周期发射m条指令的超标量处理机上执行的时间为:T(m,1)=(k+N−mm)ΔtT(m,1) = (k+\frac{N-m}{m})\Delta tT(m,1)=(k+mN−m​)Δt。超标量处理机相对于单流水线标量处理机的加速比为:S(m,1)=T(1,1)T(m,1)=m(k+N−1)N+m(k−1)S(m,1) = \frac{T(1,1)}{T(m,1)} = \frac{m(k+N-1)}{N+m(k-1)}S(m,1)=T(m,1)T(1,1)​=N+m(k−1)m(k+N−1)​。超标量处理机的加速比的最大值为:S(m,1)MAX=mS(m,1)_{MAX}=mS(m,1)MAX​=m。

5.6 超流水线处理机

  • 超流水线处理机的两种定义:在一个周期内分时发射多条指令的处理机或指令流水线的段数大于等于8的流水线处理机。
  • 提高处理机性能的两种方法:增加硬件资源、各部分硬件的重叠工作。
  • 两种不同并行性:超标量处理机采用的是空间并行性;超流水线处理机采用的是时间并行性。
  • 指令执行时序:每隔1/n个时钟周期发射一条指令。
  • 超流水线处理机性能:指令级并行度为(1,n)的超流水线处理机,执行N条指令所的时间为T(1,n)=(k+N−1n)ΔtT(1,n) = (k + \frac{N-1}{n})\Delta tT(1,n)=(k+nN−1​)Δt。超流水线处理机相对于单流水线普通标量处理机的加速比为:S(1,n)=n(k+N−1)nk+N−1S(1,n) = \frac{n(k+N-1)}{nk+N-1}S(1,n)=nk+N−1n(k+N−1)​,最大的加速比为S(1,n)MAX=nS(1,n)_{MAX} = nS(1,n)MAX​=n。

5.7 超标量超流水线处理机

  • 一个时钟周期发射m次,每次发射n条指令。

  • 指令级并行度为(m,n)的超标量超流水线处理机,连续执行N条指令所需要的时间为:T(m,n)=(k+N−mmn)ΔtT(m,n) = (k + \frac{N-m}{mn})\Delta tT(m,n)=(k+mnN−m​)Δt。加速比为S(m,n)=mn(k+N−1)mnk+N−mS(m,n) = \frac{mn(k+N-1)}{mnk+N-m}S(m,n)=mnk+N−mmn(k+N−1)​,最大加速比为S(m,n)MAX=mnS(m,n)_{MAX} = mnS(m,n)MAX​=mn。

  • 三种标量处理机的性能比较

  • 超标量处理机的相对性能最高,其次是超标量超流水线处理机,超流水线处理机的相对性能最低。 原因:超标量处理机功能部件的冲突比超流水线处理机小。条件转移等操作造成的损失,超流水线处理机要比超标量处理机大。超流水线处理机的启动延迟通常要比超标量处理机大。
  • 实际指令级并行度与理论指令级并行度的关系:当理论指令级并行度进一步增加时,处理机实际指令级并行度提高的速度越来越慢。 目前,一般认为,m 和 n 都不要超过 4。
  • 最大指令级并行度:由程序自身的语义决定。

6. 向量处理机

  • 向量处理机:具有向量数据表示和向量指令系统的处理机。 向量处理机一般都采用流水线结构,通常有有多条并行工作的流水线。

  • 向量协处理器:以中小型机或微机作主机,向量处理部件作为外围设备,加速向量的处理速度。

  • 向量计算机系统结构要解决的六个技术问题:处理机带宽、存储器带宽、输入输出带宽、通信带宽、同步带宽、多用途。

6.1 向量数据表示方式

  • 一条向量指令可处理N个或N对操作数。采用多寄存器结构的两地址指令编写程序。 存储器采用字节编址方式,字长为32位。

  • 向量表示法:

    • 等间距向量表示法:向量起始地址A;向量长度L;向量间距f。
    • 带位移量的向量表示法: 向量基地址A;向量长度L;向量位移量:f。则向量有效长度为L−fL-fL−f;向量起始地址:A+fA+fA+f。
    • 稀疏向量表示法:采用压缩方法存储以节省存储空间。

6.2 向量处理机的结构

  • 存储器-存储器结构:多个独立的存储器模块并行工作,对存储系统的访问速度要求很高。有多个高速流水线运算部件,采用多个存储体交叉和并行访问来提高存储器速度。

  • 寄存器-寄存器结构:运算通过向量寄存器进行,对存储系统访问速度的要求降低。把存储器-存储器结构中的缓冲栈改为向量寄存器。

  • 如CRAY-1向量处理机的结构

6.3 向量处理方式

  • 横向处理方式:向量计算是按行的方式从左至右横向地进行。流水线效率低,频繁进行流水线切换。(不适合向量处理机)

  • 纵向处理方式:向量计算是按列的方式自上而下纵向地进行。适用于存储器-存储器结构。

  • 纵横处理方式:横向处理和纵向处理相结合的方式。用于寄存器-寄存器结构的向量处理机中。分组方法:N=K×n+rN=K\times n +rN=K×n+r。 减少访问主存储器的次数。

6.4 向量处理机的关键技术

  • 向量平衡点:为了使向量硬件设备和标量硬件设备的利用率相等,一个程序中向量代码所占的百分比。

  • 向量链接技术:当前一条指令的结果寄存器可以作为后继指令的操作数寄存器时,多条有数据相关的向量指令并行执行。

  • 向量循环开采技术:当向量的长度大于向量寄存器的长度时,把长向量分成长度固定的段,采用循环结构处理这个长向量。当N超过64时,要采用向量循环开采技术。

  • 向量递归技术:向量指令一般为三地址,但递归运算用两地址。

6.5 向量处理机的性能评价

  • 向量指令处理时间:Tvp=TS+Tvf+(n−1)TcT_{vp} = T_S + T_{vf}+(n-1)T_cTvp​=TS​+Tvf​+(n−1)Tc​。其中TsT_sTs​为向量流水线的建立时间。TvfT_{vf}Tvf​为向量流水线的流过时间。TcT_cTc​为流水线“瓶颈”段的执行时间。

    • 通常把几条能在一个时钟周期内同时开始执行的向量指令称为一个编队 。同一个编队中的指令不存在功能部件冲突和数据相关。
    • 采用向量链接技术、分段开采等则向量长度为n的一组向量操作的整个执行时间为:Tn=⌈nMVL⌉×(Tloop+Tstart)+n×TchimeT_{n}=\left\lceil\frac{n}{M V L}\right\rceil \times\left(T_{\text {loop}}+T_{\text {start}}\right)+n \times T_{\text {chime}}Tn​=⌈MVLn​⌉×(Tloop​+Tstart​)+n×Tchime​其中TloopT_{loop}Tloop​为执行标量代码的开销,TstartT_{start}Tstart​为每个编队的向量启动开销,MVLMVLMVL是向量寄存器的长度。
  • 最大性能R∞R_\inftyR∞​:表示当向量长度为无穷大时的向量流水线的最大性能。常在评价峰值性能时使用。

R∞=lim⁡n→∞浮点运算次数义时钟频率 循环所用的时钟周期数=浮点运算次数 ×时钟频率 lim⁡n→∞⌈Tn/n⌉R_\infty=\lim _{n \rightarrow \infty} \frac{\text { 浮点运算次数义时钟频率 }}{\text {循环所用的时钟周期数}}=\frac{\text {浮点运算次数 } \times \text { 时钟频率 }}{\lim _{n \rightarrow \infty}\left\lceil{T_n} / n\right\rceil} R∞​=n→∞lim​循环所用的时钟周期数 浮点运算次数义时钟频率 ​=limn→∞​⌈Tn​/n⌉浮点运算次数 × 时钟频率 ​

其中nnn为向量长度;TnT_nTn​为一组向量操作的整个执行时间。

  • 半性能向量长度n1/2n_{1/2}n1/2​:为达到一半R∞R_\inftyR∞​值所需的向量长度,评价向量流水线的建立时间对性能的影响。

7. 互连网络

7.1 互连网络的基本概念

  • 用来实现计算机系统内部多个处理机或多个功能部件之间的相互连接。

  • 主要特性:网络规模、结点度、距离、直径。

  • 主要性能参数:频带宽度、传输时间、飞行时间、传输时延长、发送时开销、接收方开销。

  • 总时延=发送方开销+飞行时间+ 消息长度/频宽+接收方开销。

  • 表示方法:互连函数表示法、图形表示法、输入输出对应表示法。‘

  • 互连函数

    • 交换函数Ek(xn−1...xk−1xkxk+1...x1x0)=xn−1...xk−1xkˉxk+1...x1x0E_k(x_{n-1}...x_{k-1}x_kx_{k+1}...x_1x_0)=x_{n-1}...x_{k- 1}\bar{x_k}x_{k+1}...x_1x_0Ek​(xn−1​...xk−1​xk​xk+1​...x1​x0​)=xn−1​...xk−1​xk​ˉ​xk+1​...x1​x0​。
    • 全混洗函数:S(xn−1xn−2...x1x0)=xn−2xn−3...x1x0xn−1S(x_{n-1}x_{n-2}...x_1x_0) = x_{n-2}x_{n-3}...x_1x_0x_{n-1}S(xn−1​xn−2​...x1​x0​)=xn−2​xn−3​...x1​x0​xn−1​。把二进制结点号循环左移一位。子混洗S(k)S_{(k)}S(k)​ ,最低kkk位循环左移一位。超混洗S(k)S^{(k)}S(k),最高kkk位循环左移一位。
    • 蝶式函数:将输入端二进制结点号的最高位和最低位互换位置。B(xn−1xn−2...x1x0)=x0xn−2...x1xn−1B(x_{n-1}x_{n-2}...x_1x_0)=x_0x_{n-2}...x_1x_{n-1}B(xn−1​xn−2​...x1​x0​)=x0​xn−2​...x1​xn−1​。
    • 反位序函数:将二进制自变量的位序反过来。R(xn−1xn−2...x1x0)=x0x1...xn−2xn−1R(x_{n-1}x_{n-2}...x_1x_0)=x_0x_1...x_{n-2}x_{n-1}R(xn−1​xn−2​...x1​x0​)=x0​x1​...xn−2​xn−1​。
    • 移数函数:将输入端向量循环移动一定的位置。A(x)=(x+r)mod2nA(x) = (x+r)\:\: mod \:\: 2^nA(x)=(x+r)mod2n。

7.2 互连网络的种类

  • 静态互连网络:连接通路是固定的,一般不能实现任意结点到结点之间的互连。一般静态互连网络不能实现任意结点到结点之间的互连。

  • 循环互连网络:通过多次重复使用同一个单级互连网络以实现任意结点到结点之间的互连 。

  • 多级互连网络:将多套相同的单级互连网络连接起来,实现任意结点到结点之间的互连。

  • 全排列互连网络:能够同时实现任意结点到结点之间的互连。N个结点的全排列需要有N!

  • 全交叉开关网络:能够同时实现任意结点到结点之间的互连,还能够实现广播和多播。

  • 拓扑结构:前一级交换开关的输出端与后一级交换开关的输入端之间的连接模式。

    • 超立方体网:nnn维立方体由2n2^n2n个结点组成。
    • 环形网:单向环行网右环网采用PM2+0函数,左环网采用PM2-0函数。
    • 双向环行网:采用{PM2+0,PM2-0}函数。
    • 循环移数网络:将每个结点与其距离为2的整数幂的结点连接构成。
    • 星形网:一种特殊的2层树,结点度很高,为d=N-1,直径是2。
    • 二叉胖树:缓解了根结点通信速度高的矛盾
  • 交换开关:一个a×b交换开关有a个输入和b个输出。具有直通和交换两种功能的开关称为二功能开关,或交换开关。用一位控制信号控制。具有所有4种功能的交换开关称为四功能开关,用两位控制信号控制

  • 控制方式有多级交换开关,每一级又有多个交换开关。

    • 级控制:同一级交换开关使用同一个控制信号控制。
    • 单元级控制:每个交换开关分别控制。
    • 部分级控制:第i级使用i+1个控制信号控制。
  • 多级立方体网:采用二功能开关、采用交换函数、采用不同的控制方式。

7.3 消息传递机制

  • 消息寻径方式

    • 线路交换:先建立一条从源结点到目的结点的物理通路,然后传递消息。
    • 存储转发:每个结点有一个包缓冲区,包从源结点经过中间结点到达目的结点。
    • 虚拟直通:当接收到用作寻径的消息头部时,即开始路由选择。通信时延T=(Lh/B)×D+L/BT=(L_h/B)\times D + L/BT=(Lh​/B)×D+L/B。
    • 虫蚀寻径:把包分成更小的片。每个结点的寻径器中设置有片缓冲区。用头片直接开辟一条从输入结点到输出结点的路径。通信时延T=(Lf/B)×D+L/BT=(L_f/B)\times D + L/BT=(Lf​/B)×D+L/B。其中LfL_fLf​是片的长度。
  • 虚拟通道:虚拟通道是两个结点间的逻辑链路,由源结点的片缓冲区、结点间的物理通道及接收结点的片缓冲区组成。利用虚拟通道可以减少死锁。

  • 维序寻径算法:按照特定顺序选择后继通道。在二维网格网络中称为X-Y寻径, 在超立方体中称为E立方体寻径。

8. 并行处理机

8.1 并行处理机模型

  • 三条技术途径:资源重复、时间重叠、资源共享。

  • 并行处理机:多个处理部件PU按照一定方式互连,在同一个控制部件CU控制下,对各自的数据完成同一条指令规定的操作。从CU看,指令是串行执行的,从PU看,数据是并行处理的。

  • 并行处理机的操作模型可用五元组M=(N,C,I,M,R)表示。N为PE个数。C为控制部件CU执行的指令集,包括标量指令和程序控制指令。I为所有PE并行执行的指令集。M为屏蔽操作集,将PE划分为允许操作和禁止操作两个子集。R是数据寻径集,互连网络中PE间通信所需要的各种模式。

8.2 并行处理机结构

  • 一台并行处理机由五个部分组成:多个处理单元PE,多个存储器模块M,一个控制器CU,一个互连网络ICN,一台输入输出处理机IOP。
  • 并行处理机有两种典型结构:分布存储器并行处理机,共享存储器并行处理机。
    • 分布存储器并行处理机:CU是控制部件。对于标量指令,在CU中直接执行;对于向量指令,CU把它广播到各个PE中去执行。IOP是输入输出处理机,或称为主机。分布式存储器并行处理机必须依靠并行算法来提高PE的利用率。

    • 共享存储器并行处理机:共享多体并行存储器SM通过互连网络与各处理单元PE相连。存储模块的数目等于或略大于处理单元的数目。

  • 并行处理机的特点:速度快、模块性好、可靠性高、效率低。

  • 并行处理机的两个发展方向:保留阵列结构,但每个处理单元的规模减小;去掉阵列结构和分布存储器。

  • 并行处理机特别依赖于并行算法。并行算法的一个关键是提高向量化的程度。 充分利用互连网络的结构。

9. 多处理机

  • 多处理机:两个或两个以上处理机通过高速互连网络连接起来,在统一的操作系统管理下,实现指令以上级(任务级、作业级)并行。

9.1 多处理机结构

  • 分类:

    • 按照处理机之间的连接程度:紧密偶合和松散偶合多处理机;
    • 按照是否共享主存储器:共享存储器和分布存储器多处理机;
    • 按照处理机类型:同构型和异构型多处理机;
    • 按照处理机的个数:大规模并行处理机MPP和对称多处理机SMP。
    • 按照PE与IOP之间互连方式:对称型(每个IOP能够连接到所有PE上)、非对称型(每个IOP只与一个PE连接)、冗余对称型(一个PE与多个IOP连接)
    • 按照存储器的访问方式:均均存储器,UMA模型;非均均存储器,NUMA模型;只有Cache,COMA模型。
  • 松散耦合多处理机:处理机之间的连接频带比较低,通过并行口或串行口把多台计算机连接起来。通过Ethernet网络接口连接多台计算机。

  • 紧密耦合多处理机:处理机之间共享主存储器,通过高速总线或高速开关连接。处理机个数不能太多,一般几个到几十个。要求有很高通信频带

  • 多处理机系统的特点:结构灵活、程序并行性、并行任务派生、进程同步。

9.2 多处理机性能模型

  • 引起峰值性能下降的原因:通信延迟、同步开销、空闲状态、无用工作、系统调度。

  • 并行性在很大程度上依赖于R/C比值,其中R为程序执行时间,C为通信开销。R/C是衡量任务粒度的尺度。粗粒度并行:R/C大,通信开销小;细粒度并行:R/C小,通信开销大

  • 2台处理机总处理时间T=Rmax⁡{M−K,K}+C(M−K)KT=R\max \{M-K,K\}+C(M-K)KT=Rmax{M−K,K}+C(M−K)K。K为任务分配参数。当通信时间很小时,把M个任务平均分给两台处理机当通信时间很大时,把M个任务分配给一台处理机。

  • N台处理机:M个任务,N台处理机。当R/C>M/2时采用平均分配方法,当R/C<M/2时采用集中分配方法。

    • 通信开销为线性函数的模型。总处理时间T=RMN+CNT=R\frac{M}{N}+CNT=RNM​+CN,极小值N=RMCCN = \frac{\sqrt{RMC}}{C}N=CRMC​​。最大加速比S=RMC2CS=\frac{\sqrt{RMC}}{2C}S=2CRMC​​。
    • 通信与计算完全重叠的模型:能够采用重叠或流水线方式并行进行。总处理时间T=max⁡{R⌈MN⌉,C2(M2−∑i=1Nki2)}T=\max \{R\lceil\frac{M}{N}\rceil,\frac{C}{2}(M^2-\sum_{i=1}^Nk_i^2)\}T=max{R⌈NM​⌉,2C​(M2−∑i=1N​ki2​)}。当R/C=M/2,即把任务平均分配给两台处理机时,加速比最大。
    • 具有多条通信链的模型,总处理时间T=RMN+CM22N(1−1N)T=\frac{RM}{N}+\frac{CM^2}{2N}(1-\frac{1}{N})T=NRM​+2NCM2​(1−N1​)。当N≥2时,随着处理机台N增加,总处理时间肯定减小。
  • 结论:多处理机系统结构需要额外开销;当处理机台数增加时,额外开销时间也增加;R/C比值越大,越有利于计算过程;为了使价格和性能都比较合理,处理机数目存在一个极大值。

9.3 多处理机的Cache一致性

  • 在并行处理机和多处理机系统中,采用局部Cache会引起Cache与共享存储器之间的Cache一致性问题

  • 原因:共享可写的数据、进程迁移、I/O传输

  • 有两类解决Cache不一致性问题的协议:在总线互连的多处理机系统中,通常采用监听协议
    在其他多处理机系统中,通常采用基于目录协议

  • 监听协议:

    • 写无效:在本地Cache的数据块修改时使远程数据块都无效。

    • 写更新:在本地Cache数据块修改时通过总线把新的数据块广播给含该块的所有其他Cache。

    • 采用写通过方式的Cache:数据块有两种状态,有效和无效。

    • 采用写回方式的Cache:只读状态表示整个系统中有多个数据块拷贝是正确的,读写状态表示数据块至少被修改过一次,存储器中相应数据块还没有修改,在整个系统中只有一个数据块拷贝是正确的。

    • 写一次协议:第一次写Cache采用写通过方式,以后采用写回方式。

  • 目录协议:Cache目录结构。全映射目录:存放全局存储器每个块的有关数据。有限目录:每个目录项的指针数固定。链式目录:把目录分布到所有Cache中。 当一个CPU对Cache进行写操作时,要根据Cache目录中的内容将所有其他存有相同内容的所有Cache拷贝无效,并置重写位。

    • 全映射目录:目录项中有N个处理机位和一个重写位。每个数据块有两个状态位。一位表示数据块是否有效,另一位表示有效块是否允许写。
    • 有限目录:当处理机数目为N时,限制目录大小为O(Nlog⁡N)\mathcal{O}(N \log N)O(NlogN)。当Cache1和Cache2中都有X的拷贝时,若P3请求访问X,则必须在在Cache1和Cache2中选择一个使之无效,这种替换过程称为驱逐
    • 链式目录:通过维护一个目录指针链来跟踪共享数据拷贝。在收到所有处理机的回答信号之后,存储器才给该处理机写允许权。

9.4 大规模并行处理机

  • 四类多处理机系统:多向量处理机系统、SMP对称多处理机、MPP大规模并行处理机、Cluster 机群系统。

  • 采用的关键技术:VLSI可扩展技术、共享虚拟存储技术、虚拟共享存储器。

  • 虚拟共享存储器的优点:编程容易、系统结构灵活、可扩充性好, 有较好的软件移植性。

  • 虚拟共享存储器实现途径:硬件实现、操作系统和库实现、编译实现。

  • 同步MIMD机器: 数据并行可以采用SIMD、多SIMD或同步MIMD模式。

  • 三个网络:数据网络提供点对点通信。控制网络提供广播、同步、扫描和系统管理功
    能。诊断网络从后台访问所有系统硬件,测试系统完整性,检测和隔离错误。

  • 控制处理机:由CPU、存储器、本地磁盘、网络接口、以太网组成。相当于一台标准工作站。

  • 处理结点:通过控制网络和数据网络将结点与系统的其它部分相连。

9.5 对称多处理机

  • UMA多处理机:均匀存储器存取模型 ,存储器被所有处理机均匀共享。所有处理机对所有存储单元具有相同的存取时间,每台处理机有局部Cache,外围设备可以共享。

  • NUMA多处理机:非均匀存储器存取,存储器访问时间随存储单元的位置不同而变化。共享存储器在物理上是分布在所有处理机中的本地存储器。处理机访问本地存储器比较快,访问属于另一台处理机的远程存储器则比较慢。

  • COMA多处理机:只有Cache的存储器结构;COMA是一种只用Cache的多处理机系统。远程Cache访问通过分布Cache目录进行共享存储系统拥有统一的寻址空间,程序员不必参与数据分配和传输。

  • S2MP结构:实际上是NUMA多处理机系统,采用分布存储器,并通过cache对系统的共享和局部数据都进行缓存。特点:编程容易、可扩展、通信开销小。关键技术:高速无阻塞互连网络、分布式存储器、引入Cache、存储器统一编址、每个处理器结点上有一个目录存储器。

9.6 机群系统

  • 机群系统:利用高速网络将一组高性能工作站或高档PC机连接起来,在并行程序设计以及可视化人机交互集成开发环境支持下,统一调度,协调处理,实现高效并行处理的计算机系统。属于分布存储系统。

  • 特点:系统开发周期短、用户投资风险小、系统价格低、节约系统资源、扩展性好、编程方便。

  • 机群系统的关键技术:高效通信系统、并行程序设计环境、并行程序设计语言、负载平衡技术、并行程序调试技术、可靠性技术。

  • 并行编译:把传统串行语言程序转换成并行语言程序的过程。

    • 全自动并行编译是方向,但实现起来很困难。
    • 半自动并行编译,程序员通过多次与机器对话,找到串行程序中可以并行执行的部分。
  • 负载均衡技术

    • 静态方法是在编译时针对用户程序的各种信息及并行系统本身的状况对用户程序中的并行任务作出静态分配决策。
    • 动态方法是在程序运行过程中实现负载平衡的。分析并行系统的实时负载信息,动态地将任务在各处理机之间进行分配和调整。

【计算机组成原理】计算机系统结构笔记:合集相关推荐

  1. 计算机组成原理与系统结构习题集

    计算机组成原理与系统结构 一.选择题: 冯·诺依曼机工作的基本方式的特点是( B ). A.多指令流单数据流 B.按地址访问并顺序执行指令 C.堆栈操作 D.存贮器按内容选择地址 完整的计算机应包括( ...

  2. 王道计算机组成原理:完整笔记

    王道计算机组成原理:完整笔记 第一章 计算机系统概述 [复习提示] 本章是组成原理的概述,考查时易针对有关概念或性能指标出选择题,也可能综合后续章节的内容出有关性能分析的综合题.掌握本章的基本概念,是 ...

  3. 计算机系统结构组成原理图,计算机组成原理 与系统结构.ppt

    <计算机组成原理 与系统结构.ppt>由会员分享,可在线阅读,更多相关<计算机组成原理 与系统结构.ppt(32页珍藏版)>请在人人文库网上搜索. 1.主讲:,数字逻辑与计算机 ...

  4. 计算机组成原理基于mips结构pdf,计算机组成原理_L12-MIPS系统结构-V1.pdf

    计算机组成原理_L12-MIPS系统结构-V1.pdf (8页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 14.90 积分 1计算机组成MIPS体系结构 ...

  5. 计算机原理考研题库,2022考研853计算机专业基础综合《计算机组成原理》复习笔记及考研真题题库.pdf...

    2022考研 853计算机专业基础综合 <计算机组成原理>复习笔记及考 研真题题库 计算机系统概论 一.计算机的分类 1电子模拟计算机 模拟计算机的特点是数值由连续量来表示,运算过程也是连 ...

  6. 计算机组成原理实验箱D7,计算机组成原理与系统结构实验仪教学设备,上海求育...

    原标题:计算机组成原理与系统结构实验仪教学设备,上海求育 上海求育QY-JXSY30计算机组成原理与系统结构实验箱 上海求育QY-JXSY30计算机组成原理与系统结构实验箱是一款八位,十六位兼容设计的 ...

  7. 计算机组成原理与系统结构 出版社,计算机组成原理与系统结构

    本书主要提供 计算机组成和体系结构 课程的教学内容,包括计算机组成的原理知识,计算机硬件的设计技术,以及简单的实例计算机系统的工程实现,重点强调计算机硬件系统的组成原理.设计技术.工程实现三个方面的内 ...

  8. 《王道计算机组成原理》学习笔记和总目录导航

    <王道计算机组成原理>学习笔记和总目录导读 本篇文章是阅读和学习<王道计算机组成原理>后总结的理论知识笔记导航,专门用于遗忘后复习 下面的文章是我在学习了<王道计算机组成 ...

  9. 【考研计算机组成原理】课堂笔记目录汇总——知识点清晰

    文章目录: 一:基础笔记 二:强化笔记 三:冲刺笔记 一:基础笔记 [考研计算机组成原理]课堂笔记1 第一章 计算机系统概论Introduction to computer systems [考研计算 ...

  10. 计算机组成原理诺,计算机组成原理与系统结构 第8章 计算机系统结构.ppt

    文档介绍: 第八章计算机系统结构8.1超标量处理机和超流水线处理机8.2向量处理机8.3并行处理机8.4多处理机8.5互连网络8.6计算机系统结构新发展炸捐硼娩腔氓馒受赂胞支缨秆泼殃涌旦闷涤嘎哎辫贮专 ...

最新文章

  1. 谷歌新研究对神经网络数据并行性提出质疑
  2. 多进程的一些注意事项
  3. 一个基于JRTPLIB的轻量级RTSP客户端(myRTSPClient)——实现篇:(八)RTP音视频传输解析层之MPA传输格式...
  4. 014_Vue过滤器
  5. Django默认用户认证系统和用户模型类
  6. VTK:可视化算法之CarotidFlow
  7. SAP odata模型缓存校验机制
  8. java中报错convension_LambdaConversionException与泛型:JVM错误?
  9. 现实地形导入UE4全流程
  10. redis入门——Spring整合篇
  11. 【Vue】路由Router传参的两种方式(详解)
  12. vscode保存react时标签出现空格自动换行报错
  13. [expimp]exp导出笔记
  14. M1芯片电脑出现重装系统Bug,教你如何「正确」重装macOS
  15. 计算机除氧化的方法,内存条氧化了的解决方法
  16. AFD-0654: AFD is not supported on Exadata systems CRS-10001: Errors xxx.ko was not found
  17. 多媒体音箱选购指南--理论篇
  18. 计网-网络号、子网号、主机号以及子网网络地址,子网广播地址的算法
  19. hive 转拼音udf_自定义UDF函数:将汉字转换成拼音
  20. 前端将List列表转化为树型结构(reduce函数)

热门文章

  1. 解决电脑关机后会自动重启?
  2. 蓝牙追踪_如何使用蓝牙追踪器跟踪您的东西
  3. 最新CCF会议|2022-2023顶会会议时间+投稿时间+官网链接(视觉+多媒体+数据挖掘+数据库+通用人工智能)
  4. 使用ubuntu遇到的问题-An error occurred,please run Package Manager...
  5. css情景动画,CSS3 白天/黑夜场景轮回动画
  6. SpringBoot 2-连接数据库、配置logback打印sql日志等
  7. android11obb,exagear安卓11数据包obb合集版
  8. 《用户至上:用户研究方法与实践(原书第2版)》一2.3 理解产品
  9. python 喜马拉雅_Python爬虫:喜马拉雅FM
  10. Maven清除lastUpdated文件