概论冯诺依曼结构五大部件 ALU CU 存储器 IO设备计算机的五层次结构 虚拟机器 M4 高级语言机器 用编译程序翻译成汇编语言程序 M3 汇编语言 用汇编程序翻译成机器语言 M2 操作系统 用机器语言解释操作系统 传统机器 M1 传统语言 用微程序解释机器指令 微程序机器 M0 微指令系统 由硬件直接执行微指令性能指标机器字长32 位处理器 → 机器字长一般为 *32 bit概念谁决定的作用点示例机器字长CPU 内部 ALU/寄存器宽度CPU 一次运算能力x86-64 → 64bit指令字长ISA 的格式设计每条指令的长度x86 变长指令、RISC-V 32bit存储字长内存组织数据总线CPU 每次从内存取多少位DDR4 通常 64bit总线总线的分类片内总线通信总线系统总线 ①数据总线用来传输各功能部件之间的数据信息。 ②地址总线用来指出数据总线上的源数据或目的数据在主存单元的地址或I/O设备的地址 ③控制总线用来发出各种控制信号传输线还起到监视各部件状态的作用。总线结构总线成为性能瓶颈多总线结构总线判优控制为解决总线控制权的问题多设备同时竞争使用权集中式仲裁方式 1链式查询、2计数器定时查询、3独立请求(控制逻辑集中在某处实现相对简单)分布式仲裁方式控制逻辑复杂可靠性高。1。链式查询 离总线控制部件最近的设备具有最高的优先级。对电路故障敏感且优先级别低的设备可能很难获得请求 2。计数器定时查询 3。独立请求方式响应快优先次序控制灵活通过程序改变但控制线数量多总线控制更复杂。n个设备需要2n条控制线总线周期完成一次总线操作的时间称为总线周期申请分配阶段 主申请使用权 总线仲裁授权寻址阶段 主模块给地址和命令指定从模块被激活传数阶段 主从之间进行数据的读或写操作撤销阶段 撤销主模块有关信息 让出使用权四种**总线通信控制同步通信和异步通信的主要区别是前者有公共时钟总线上的所有设备按统一的时序统一的传输周期进行信息传输通信双方按约定好的时序联络。 后者没有公共时钟没有固定的传输周期采用应答方式通信具体的联络方式有不互锁、半互锁和全互锁三种。 不互锁方式通信双方没有相互制约关系半互锁方式通信双方有简单的制约关系全互锁方式通信双方有完全的制约关系。其中全互锁通信可靠性最高。1. 同步通信 (Synchronous)核心机制统一时钟。同一时序优点控制简单 模块步调一致缺点缺乏灵活性强制同步。速度取决于最慢的模块木桶效应总线效率受限。适用总线长度短2. 异步通信 (Asynchronous)核心机制无公共时钟采用应答方式握手。主模块发请求 (Request) - 等待 - 从模块发响应 (Acknowledge)。优点极高灵活性允许模块速度不一致。应答方式分类不互锁、半互锁、全互锁。适用各部件速度差异大需并行或串行传送的场合。3. 半同步通信 (Semi-synchronous)核心机制同步时钟 等待信号 (WAIT)。既保留统一时钟又允许通过插入“等待周期”来协调慢速设备。特点比异步简单比同步灵活。控制可靠但时钟频率不能太高。适用系统工作速度不高但设备速度差异较大的简单系统。4. 分离式通信 (Split-transaction)核心机制准备数据不占总线主模块发命令后立即释放总线从模块准备好数据后重新申请总线发送数据。特点只有在传输有效数据/命令时才占用总线不存在空闲等待时间。优势充分挖掘总线潜力实现信息交叉重叠传送效率最高。适用大型计算机系统。存储器缓存-主存 主存-辅存 双层次①目的提高访存速度扩大存储容量。缓存主存层次主要解决 CPU 和主存速度不匹配的间题。主存辅存层次主要解决存储系统的容量问题。 ②设计依据程序访问的局部性原理。CPU 从主存取指令或取数据在一定时间内只是对主存局部地址区域的访问。这是由于指令和数据在主存内都是连续存放的并且有些指令和数据往往会被多次调用如子程序、循环程序和一些常数即指令和数据在主存的地址分布不是随机的而是相对的簇聚使得 CPU 在执行程序时访存具有相对的局部性。现代计算机中对寄存器的定义是指CPU内部的小型、高速存储位置也包括MAR和MDR主存中存储地址分配字节序 问题 既然内存是按“字节”编址的每个地址存8位存储单元是 1 字节但CPU处理的“字”通常是32位或64位多字节那么当我们要把一个多字节的“字”存入内存时这几个字节谁排在前面低地址谁排在后面高地址呢大端模式 (Big-Endian) / 大尾方式规则高位字节存放在低地址起始地址。图片解读字地址为0起始位置。内存里的顺序是12-34-56-78。地址 0 存12高位地址 3 存78低位。特点这最符合人类的阅读习惯从左到右。应用网络传输标准TCP/IP 协议通常采用大端模式。所以大端序也被称为“网络字节序”**。 小端模式 (Little-Endian) / 小尾方式规则低位字节存放在低地址起始地址。图片解读字地址为0起始位置。内存里的顺序是78-56-34-12。地址 0 存78低位地址 3 存12高位。特点看起来是反的但对计算机电路如加法器很友好因为计算通常从低位开始。应用x86 架构的 CPU如 Intel、AMD即我们大部分服务器和电脑通常采用小端模式。所以小端序也被称为**“主机字节序”**。2 10 1024 a p p r o x 1 t e x t K ( K i l o ) 2^{10} 1024 \\approx 1 \\text{ K (Kilo)}2101024approx1textK(Kilo)2 20 1 t e x t K t i m e s 1 t e x t K 1 t e x t M ( M e g a ) 2^{20} 1 \\text{ K} \\times 1 \\text{ K} 1 \\text{ M (Mega)}2201textKtimes1textK1textM(Mega)2 30 1 t e x t G ( G i g a ) 2^{30} 1 \\text{ G (Giga)}2301textG(Giga)按字寻址t e x t 寻址范围 2 t e x t 地址线根数 t i m e s f r a c t e x t 字长位数 8 \\text{寻址范围} 2^{\\text{地址线根数}} \\times \\frac{\\text{字长位数}}{8}text寻址范围2text地址线根数timesfractext字长位数8存储芯片内的地址译码方式线选法地址信号只须经过一个方向的译码就可以选中某一存储单元的所有位。适用于地址线较少的芯片。重合法地址线分成两组分别经行、列两个方向译码只有行、列两个方向均选中的存储元才能进行读写。适用于地址线较多的芯片。DRAM和SRAM核心对比表比较维度记忆核心SRAM (静态随机存储器)DRAM (动态随机存储器)存储原理触发器稳 vs 电容漏双稳态触发器电容存储电荷存储元件SRAM 复杂DRAM 简单晶体管数量多 (通常6个MOS管)简单 (1管1容1MOS 1电容)刷新需求静态 vs 动态不需要(通电即保持)需要(电荷泄露需周期性刷新)集成度DRAM 更“挤”得下低 (元件大占地多)高(元件少占地小)存取速度快 vs 慢极快(非破坏性读出)较慢 (充放电慢且需重写)功耗谁更省电较大 (晶体管持续导通)较小(动态刷新虽耗电但整体更低)成本/价格贵 vs 便宜高低引脚/地址多 vs 少地址线同时送入 (引脚多)地址线复用(分行/列送引脚少)DRAM的刷新动态随机存取存储器利用存储元中的栅极电容存储电荷电容上有电荷表明存放数据1无电荷表明存放数据0。由于存储元电路存在漏电流使栅极电容上的电荷流失因此必须每隔一段时间对存储体中的所有记忆单元的栅极电容补充电荷这个过程称为刷新。刷新的过程实质上是先将原存信息破坏性读出再由刷新放大器形成原信息并重新写入的再生过程刷新方式集中刷新在规定的一个刷新周期内对全部存储单元集中一段时间逐行进行刷新此刻必须停止读/写操作。这段时间称为“死时间”分散刷新对每行存储单元的刷新分散到每个存取周期内完成无死区异步刷新是前两种方式的结合既可缩短“死时间”又充分利用最大刷新间隔RAM存储器和CPU的连接位、字 扩展汉明码新增添的检测位数k应满足2^k ≥ nk1。核心逻辑P _ 1 P\_1P_1(第 1 位)负责二进制下标倒数第 1 位是 1 的位置。P _ 2 P\_2P_2(第 2 位)负责二进制下标倒数第 2 位是 1 的位置。P _ 3 P\_3P_3(第 4 位)负责二进制下标倒数第 3 位是 1 的位置。…以此类推。2. 快速分组口诀Skip 策略这是做手工计算时最不容易出错的方法P _ 1 P\_1P_1组位置 1“拿 1 个跳 1 个”检查位置1, 3, 5, 7, 9, 11…图解[1] _ [3] _ [5] _ [7] ...P _ 2 P\_2P_2组位置 2“拿 2 个跳 2 个”检查位置2, 3, 6, 7, 10, 11…图解_ [2, 3] _ _ [6, 7] _ _ [10, 11] ...P _ 3 P\_3P_3组位置 4“拿 4 个跳 4 个”检查位置4, 5, 6, 7, 12, 13, 14, 15…图解_ _ _ [4, 5, 6, 7] _ _ _ _ [12...]异或就是 一行和答案一起使得1的个数为偶多体并行存储器多体并行系统就是采用多体模块组成的存储器。每个模块有相同的容量和存取速度各模块各自都有独立的地址寄存器MAR、数据寄存器MDR、地址译码、驱动电路和读/写电路他们能并行工作又能交叉工作。 多体并行存储器分为高位交叉编址(顺序编址)和低位交叉编址(交叉方式)两种高位交叉弊端假设程序顺序存储在M0内 可能导致M0很忙 其他存储器很闲低位交叉可以在不改变每个模块存取周期的前提下提高存储器的带宽带宽 bps 计算Cache原理流程先查缓存命中直取未命中整块调入满了就换Cache – 主存的地址映射直接实现简单但主存块只能固定地对应某个缓存块不够灵活命中率低。全相联 灵活命中率也更高缩小了块冲突率。但所需的逻辑电路甚多成本高组相联 它们的折中被广泛应用。缓存一致性问题简单来说当 CPU 修改了 Cache 里的数据时主存内存里的数据还是旧的。这时候Cache 和主存的数据就不一致了。写直达法每次 CPU 修改 Cache 中的数据时立即、同时把这个新数据也写回到主存中。后果时刻保持 Cache 和主存的数据一模一样增加了访存次数。写直达法的”写“操作时间就是访问主存的时间。写回法 (Write-Back)CPU 修改数据时只修改 Cache不修改主存。 只有当这个被修改过的块Block因为空间满了要被替换时才把它一次性写回主存。关键技术 —— 脏位 (Dirty Bit)Cache 给每个块贴了个“便利贴”标记位叫Dirty Bit。如果 CPU 改了数据就把这个位设为1脏了。如果只是读操作这个位保持0干净。替换时如果是“干净”的直接扔掉如果是“脏”的才需要写回主存。Cache 替换算法FIFO LRU 随机IO设备I/O 与主机交换信息四大控制方式**程序查询方式不断查询踏步等待串行最慢程序中断方式并行更好CPU 启动 I/O 后不再查询设备准备好 →发中断请求CPU 暂停当前程序去处理 I/O程序查询方式和程序中断方式都由程序实现外围设备的输入输出它们有何不同1程序查询方式是用户在程序中安排一段输入输出程序它由I/O指令、测试指令和转移指令等组成。CPU一旦启动I/O后就进入这段程序时刻查询I/O准备的情况若未准备就绪就踏步等待若准备就绪就实现传送。在输入输出的全部过程中CPU停止自身的操作。 2程序中断方式虽也要用程序实现外部设备的输入、输出但它只是以中断服务程序的形式插入到用户现行程序中。即CPU启动I/O后继续自身的工作不必查询I/O的状态。而I/O被启动后便进入自身的准备阶段当其准备就绪时向CPU提出中断请求此时若满足条件CPU暂停现行程序转入该设备的中断服务程序在服务程序中实现数据的传送。 从宏观上分析程序中断方式克服了程序查询方式中的 CPU 踏步“现象实现CPU I/0 的并行工作提高了 CPU 的资源利用率。DMA 主机与I/O并行工作**主存与I/O之间有一条直接数据通路**当I/O准备就绪后发出DMA请求此时CPU不直接参与I/O和主存间的信息交换只是把外部总线地址线、数据线和有关的控制线的使用权暂时交赋予DMA仍然可以完成自身内部的操作如加法、移位等故不必中断现行程序只需暂停一个存取周期访存即周期挪用CPU的效率更高。 还是有中断请求虽然不靠中断请求传数据但是需要向CPU结束报告传送结束cpu将中断现行程序去做DMA结束处理工作4. 通道/IO处理机专用处理器最高效。接口 vs 端口I/O接口通常是指主机与I/O设备之间设置的一个硬件电路及其相应的软件控制。接口是连接系统端口指接口电路中的一些寄存器。为何要接口5 理由选设备、做缓冲、转格式、调电平、管状态。接口四类串并、可编/不可编、通用/专用、程序/DMA。DMA选择型DMA接口、链式多路型DMA接口、独立请求多路型DMA接口流程1. 预处理给DMA指明是读还是写主存起始地址→DMA设备地址→DMA传送数据个数→DMA启动设备2. 数据传送继续执行主程序同时完成一批数据的传送3. 后处理中断服务程序CPU做DMA结束处理工作DMA与主存交换数据的三种方式定点数和浮点数 计算真值是我们在日常数学计算中使用的形式。特点带有正或-负符号数字部分通常用二进制表示也可以是十进制。示例 1011 10111011(二进制真值)r i g h t a r r o w \\rightarrowrightarrow等于十进制的 11 1111− 1011 -1011−1011(二进制真值)r i g h t a r r o w \\rightarrowrightarrow等于十进制的− 11 -11−11机器数这是数值在计算机硬件寄存器/内存中的实际存储形式。表示机器数正数情况下三码相同负数情况下反码符号位不变其余位取反补码在反码加1负数求补码的方法 1符号位不变 2数值位取反加一补码求真值技巧移码为了方便比较大小浮点数的阶码。移码和补码只是一个符号位不同定点数和浮点数实际工业应用 IEEE 754为了解决定点数“范围太窄”的问题科学家引入了科学计数法的思想N ( − 1 ) S t i m e s M t i m e s R E N (-1)^S \\times M \\times R^EN(−1)StimesMtimesRES (Sign)符号位0正1负。M (Mantissa)尾数。是一个定点小数决定了数的精度有效数字有多少位。E (Exponent)阶码。是一个定点整数决定了数的范围小数点能移多远。R (Radix)基数通常隐含为 2。定点运算加减法已知KaTeX parse error: Undefined control sequence: \[ at position 1: \̲[̲A\]*{补}求KaTeX parse error: Undefined control sequence: \[ at position 1: \̲[̲-A\]*{补}的方法是**连同符号位按位取反末位加一** 用符号位产生的进位与最高有效位产生的进位异或操作若为1则溢出最高位进位舍去乘除法浮点运算加减运算对阶、尾数求和、规格化、舍入、溢出判断乘除运算阶码运算、尾数运算逻辑右移等于小数点左移指令系统指令 操作码 N个地址码指令字长 存储字长 通常是8bit的整数倍指令中有三种字段 操作码字段、寻址特征字段和地址码字段。 操作码字段指出机器完成某种操作其位数取决于指令系统的操作种类。 寻址特征字段指出该指令以任何方式寻找操作数的有效地址其位数取决于寻址方式的种类。 地址码字段和寻址特征字段共同指出操作数或指令的有效地址其位数与寻址范围有关。字节对齐寻址方式指令寻址数据寻址指令进行中立即寻址 (Immediate): 数据就在指令里。 形式地址A就是操作数例子:int a 10;(10 就在指令里不用去别处找)。直接寻址 (Direct): 指令里写的是内存地址。例子: “去 1001 号房间拿数据”。寄存器寻址 (Register): 数据在 CPU 的寄存器里。例子: “东西在我的口袋寄存器AX里直接拿”。这是最快的。间接寻址 (Indirect): 指令里给的地址里存的还是个地址套娃。例子: “去 1001 号房间桌上有张纸条纸条上写着东西在 2002 号房间”。(类似 C 语言的指针*ptr)。基址/变址寻址: 用基础地址 偏移量。例子: 数组访问arr[i]。数组开头是基址i是偏移量。CPUCPU的主要功能指令控制、操作控制、时间控制、数据加工、处理中断等寄存器存放当前指令的地址存放操作数CU发出各种操作命令序列ALU实现算术逻辑运算中断系统处理异常情况和特殊请求中断系统中断中断是指计算机运行过程中出现某些意外情况需主机干预时机器能自动停止正在运行的程序并转入处理新情况的程序处理完毕后又返回原被暂停的程序继续运行。简单来说就是CPU停下当前的工作任务去处理其他事情处理完后回来继续执行刚才的任务。设计中断系统需解决的问题①各中断源如何向CPU提出中断请求 ②当对个中断源同时提出中断请求时中断系统如何确定优先响应哪个中断源的请求 ③CPU在什么条件、什么时候、以什么方式来响应中断 ④CPU响应中断后如何保护现场 ⑤CPU响应中断后如何停止原程序的执行而转入中断服务程序的入口地址 ⑥中断处理结束后CPU如何恢复现场如何返回到原程序的间断处 ⑦在中断处理过程中又出现了新的中断请求CPU该如何处理一次程序中断大致分为五阶段 中断请求 中断判优 中断响应EINT 为“1” 且该设备未被屏蔽 进入中断响应周期 执行中断隐指令中断服务进入取指周期 按向量地址取出一条无条件转移指令转至对应的中断服务程序开始执行 中断返回中断服务程序的最后一条指令就是中断返回指令即返回到程序断点至此一次程序中断结束中断服务的流程保护现场 中断服务 恢复现场 中断返回*CPU***进入中断周期后完成哪些操作1保存断点保存当前正在执行的程序的地址以便在中断处理完毕后能返回被中断的原程序继续执行。2形成中断服务程序的入口地址确定中断服务程序的入口地址并将其装入程序计数器。硬件向量法/软件查询法3硬件关闭中断在响应中断后CPU会自动关闭外部硬件中断以防止在处理中断的过程中再次被中断。【前三个为中断隐指令CPU自动完成】4保护现场保存当前程序的运行状态包括PC、程序状态字、通用寄存器等的内容以便在中断处理完毕后能恢复到中断前的状态。5中断服务执行中断服务程序处理中断请求。6恢复现场在中断处理完毕后恢复被保存的程序运行状态。7中断返回在中断服务子程序的最后要安排一条中断返回指令执行该指令系统自动将堆栈内保存的程序计数器和程序状态字值弹出从而恢复主程序断点处的地址值使CPU转到被中断的程序中继续执行。优先级和屏蔽字什么是中断屏蔽字它的作用是什么对应一个中断请求触发器就有一个屏蔽触发器将所有屏敝触发器组合在一起便构成一个屏蔽寄存器屏蔽寄存器的内容称为屏蔽字作用控制中断的响应优先级流水线影响流水线性能的因素有哪些分别由什么原因导致的分别采用什么方法解决结构相关重叠指令争用同一功能部件产生资源冲突 解决办法 1 在完成前一条指令对数据的存储器访问时暂停一个时钟周期取后一条指令的操作 2 设置两个独立的存储器分别存放操作数和指令以免取指令和取操作数同时进行时相互冲突。数据相关流水线中的各条指令因重叠操作可能改变对操作数的读写访问顺序从而导致了数据相关冲突 解决办法之一是后推法即遇到数据相关时就停顿后继指令的运行直至前面指令的结果已经生成。 解决办法之二是采用定向技术。直接将执行结果送到其他指令所需要的地方。控制相关转移指令导致的 尽早判别转移是否发生尽早生成转移目标地址加快和提前形成条件码提高转移方向的猜准率多级时序微操作命令的分析取指周期公共取指周期模板必背 无论什么指令前三个节拍取指几乎是一样的。P C t o M A R PC \\to MARPCtoMAR1 t o R , M ( M A R ) t o M D R 1 \\to R, M(MAR) \\to MDR1toR,M(MAR)toMDRM D R t o I R , ( P C ) 1 t o P C MDR \\to IR, (PC)1 \\to PCMDRtoIR,(PC)1toPC(注具体是否1还是4看题目是按字编址还是按字节编址)2间址周期3执行周期访存指令 ADD XLDA XSTA X控制单元 CU微程序要搞懂微程序必须先搞懂这四个概念的层级从大到小机器指令 (Machine Instruction)程序员看到的指令如ADD R1, R2。微程序 (Micro-program)一条机器指令对应一段微程序。微指令 (Micro-instruction)微程序中的一步。通常对应一个时钟周期节拍。微命令 (Micro-command)微指令中的具体信号位。例如PC_outPC输出、ALU_addALU加法。对应关系1条机器指令 1段微程序(由若干条微指令序列组成)。1条微指令 若干个微命令(并行发出的控制信号)。把微程序设计想象成你在写一个“解释器”。输入机器指令字节码。代码库控存CM。执行逻辑每读到一个字节码就跳转到代码库里对应的函数微程序一行行执行代码微指令指挥底层硬件ALU, 寄存器干活。基本工作流程取指令从主存取来机器指令的操作码OP。映射将 OP 映射为控存中的一个地址这是该指令对应微程序的入口地址。读微指令从控存中取出第一条微指令。执行并下址执行这条微指令包含的微命令并计算下一条微指令的地址。下址逻辑微程序怎么知道下一条微指令在哪里这通常包含在微指令的格式中。格式通常是[ 操作控制字段 | 顺序控制字段 ]下址的来源有三种计数器自增类似 PC1直接去下一条m u P C 1 \\mu PC 1muPC1。断定 (Branching)根据状态标志如 ZF, CF跳转。考题写法如果微指令中有测试位比如 “如果是负数则跳到 X”这就是断定。操作码映射 (Mapping)仅用于第一条微指令由机器指令的 OP 码转化而来。除非题目明确要求“采用断定法”或“给出下址形成逻辑”否则在写综合题时默认可以省略那些蓝色的“寻找下一地址”的步骤直接写数据通路的操作。执行阶段微指令·垂直型微指令的结构类似于一般机器指令的结构由微操作码确定微指令的功能。通常一条微指令只能有1~2个微操作命令。因为它要经过译码后控制对象影响每条微指令的执行时间。而且垂直型微指令字长较短实现一条机器指令的微程序要比水平型微指令编写的微程序长得多它是用较长的微程序结构来换取较短的微指令格式·水平型微指令一次能定义并执行多个并行操作其并行操作能力强效率高。而且水平型微指令的大多数微命令一般可直接控制对象故执行每条微指令的时间短。又因水平型微指令字长较长故可用较少的微指令数来实现一条机器指令的功能原文地址计算机组成原理本文持续更新最新内容及相关资料请访问原文。