408-22新大纲知识点
本文最后更新于:2022年10月10日 晚上
408-22新大纲知识点
1.数据表示和运算
1.1.补码加减运算器、标志位
- 传统补码手算:
- 加法:直接相加,溢出舍弃
- 减法:X-Y,Y连符号位一起全部取反末位+1,减法变加法
- 电路:
- 无符号数也可以使用此电路,但二者判断溢出逻辑不同
- 标志位(都在PSW状态字寄存器中)
OF (Overflow Flag) | 溢出标志 | 溢出时为1否则置0 | 最高位 异或 次高位,只在有符号数运算有意义 |
---|---|---|---|
SF (Sign Flag) | 符号标志 | 结果为负时置1,否则置0 | 取结果最高位,只在有符号数运算有意义 |
ZF (Zero Flag) | 零标志 | 运算结果为0时置1,否则置0 | 运算结果全部位为0 |
CF (Carry Flag) | 进位/借位标志 | 进位/借位时置1否则置0 | 最高位进位 异或 sub值(减法为1),只在无符号数运算有意义 |
1.2.乘法电路
- 电路图:
有符号数 乘法 算法:
辅助位 一开始设为0
- 辅助位 - Y中最低位 = 1时,(P)+[X]补
- 辅助位 - Y中最低位 = 0时,(P)+[X]补
- 辅助位 - Y中最低位 = -1时,(P)+[-X]补
算数右移时,用符号位补空位
- 此处用单符号位运算,n位右移后不用最后再来一次加法
1.3.除法电路
本质上是把n位数扩展为2n位,对n位数做除法得到n位商。定点正小数,低位补0;定点正整数,高位补0
- 电路图:
- 需要的基本结构:
- ALU
- 移位寄存器:乘法右移,除法左移
- 控制逻辑:加减信号(向ALU)、右移/左移信号(向寄存器)、写使能信号(向寄存器)
- 计数器Cn:记录还剩几轮处理
2.固态硬盘
- 基于闪存技术 Flash Memory, 属于电可擦除ROM,即EEPROM
- 组成
- 闪存翻译层 :负责翻译逻辑块号,找到对应页 (Page)
- 存储介质:多个闪存芯片(Flash Chip) ,每个芯片包含多个块(block) ,每个块包含多个页(page)
- 示意图:
- 读写性能特性
- 以页 (page)为单位读/写:相当于磁盘的“扇区”
- 以块 (block)为单位擦除:擦干净的块,其中的每页都可以写一次,读无限次
- 支持随机访问:系统给定一个逻辑地址,闪存翻译层可通过电路迅速定位到对应的物理地址
- 读快、写慢:要写的页如果有数据,则不能写入,需要将块内其他页全部复制到一个新的(擦除过的)块中,再写入新的页
- 与机械硬盘相比
- SSD读写速度快,随机访问性能高,用电路控制访问位置;机械硬盘通过移动磁臂旋转磁盘控制访问位置,有寻道时间和旋转延迟
- SSD安静无噪音、耐摔抗震、能耗低、造价更贵
- SSD的一个“块”被擦除次数过多可能会坏掉, 而机械硬盘的扇区不会因为写的次数太多而坏掉
- 磨损均衡
- 思想:将”擦除平均分布在各个块上,以提升使用寿命
- 动态磨损均衡:写入数据时,优先选择累计擦除次数少的新闪存块
- 静态磨损均衡:SSD监测并自动进行数据分配、迁移, 让老旧的闪存块承担以读 为主的储存任务, 让较新的闪存块承担更多的写任务
3.多处理器
3.1.SISD、 SIMD、MIMD、向量处理器
- SISD(单指令流单数据流)
- 各指令序列只能并发、不能并行,每条指令处理1个数据。不是数据级并行技术
- 一个处理器 + 一个主存储器。若采用指令流水线,需设置多个功能部件,采用多模块交叉存储
- SIMD(单指令流多数据流)
- 各指令序列只能并发、不能并行,但每条指令可同时处理很多具体对象。是数据级并行技术
- 一个指令控制部件(CU) + 多个处理单元/执行单元(如ALU) + 多个局部存储器 + 一个主存储器
- 每个执行单元有各自的寄存器组、局部存储器、地址寄存器。不同执行单元执行同一条指令,处理不同的数据
- MISD:理论存在
- MIMD(多指令流多数据流)
- 各指令序列并行执行, 分别处理多个不同的数据。是一种线程级并行、 甚至是线程级以上并行技术
- 多处理器系统
- 各处理器之间,可以通过LOAD/STORE指令,访问同一个主存储器,可通过主存相互传送数据
- 多个处理器 + 一个主存储器。共享单一的物理地址空间
- 多个处理器共享单一的物理地址空间
- 多计算机系统
- 各计算机之间, 不能通过LOAD/STORE指令直接访问 对方的存储器, 只能通过“消息传递”相互传送数据
- 多个处理器+多个主存储器。物理地址空间相互独立
- 向量处理机
- 条指令的处理对象是“向量”。擅长对向量型数据并行计算、浮点数运算
- 常被用于超级计算机中,处理科学研究中巨大运算量
- 多个处理单元,多组“向量寄存器”
- 主存应采用“多个端口同时读取”的交叉多模块存储器
- 主存大小限定了机器的解题规模,因此要有大容量的、集中式的主存
3.2.硬件多线程
- 细粒度多线程:多个线程轮流交叉执行指令,多线程之间的指令不相关,可以乱序并行执行
- 处理器能在每个时钟周期切换线程
- 粗粒度多线程:仅在一个线程出现了较大开销的阻塞时,才切换线程,如Cache缺失
- 发生流水线阻塞时,必须清除被阻塞的流水线,新线程的指令开始执行前需要重载流水线。线程切换的开销更大
- 同时多线程(SMT)
- 在同一时钟周期中,发射多个不同线程中的多条指令执行
4.汇编
算数逻辑运算
OP, 目的地址, 源地址
加、减、乘、除:OP: add、 sub, mul、 div
左移、右移:shl、 shr
分支结构
- 判断条件(本质是减法):cmp A, B,结果放到PSW中
- 无符号数减法关注CF、ZF(进位、零)
- 有符号数减法关注OF、SF、ZF(溢出、符号、零)
- 跳转指令
- jxxxx(条件跳转)
- jmp(无条件跳转),相当于C语言的goto
- 转移指令,通常采用相对寻址。用补码表示偏移量,补码的值通常意味着要往前/往后跳多少个地址指令
- 判断条件(本质是减法):cmp A, B,结果放到PSW中
- 循环结构
- xxx loop xxxx label:原理同跳转指令
- 条件跳转指令 jxxxx 也可以用于实现循环
- 函数调用
- 调用指令:call label
- 修改PC的值,跳转到label
- call指令会将当前函数的相关信息入栈,这点与直接跳转不同
- 入栈信息:当前PC
- 返回指令:ret
- 当前函数的信息出栈
- 恢复上一层函数的运行现场,包括栈底指针ebp、程序计数器pc等
- 调用指令:call label
本博客所有文章除特别声明外均为原创,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!