• 内存安全程序设计

    Temporal Memory Problems Use After Free Double Free Memory Leak Dangling Pointer RAII Resource Acquisition Is Initialisation Constructor Acquires, Destructor Release 资源获取放在构造函数中,资源删除放在析构函数中 lo...
  • 8.3多周期CPU设计

    1.多周期数据通路的设计 分阶段 取指令阶段 执行一次存储器读操作 读出的内容保存到寄存器IR(指令寄存器)中 IR的内容不是每个始终都更新,所以IR必须加一个“写使能”控制 在取指令阶段结束时,ALU输出为PC+4,并送到PC的输入端,但不能在每个时钟到来时就更新PC,所以PC也要有“写使能”控制 译码/读寄存器堆阶段 经过控制逻辑延迟后,控制信号更新为新值 执行一次寄存器读...
  • 8.2单周期CPU设计

    设计处理器步骤ISA确定后,进行处理器设计的大致步骤 分析每条指令的功能,并用RTL(Register Transfer Language)来表示 根据指令的功能给出所需元件,并考虑如何将他们互连 确定每个与元件所需控制信号的取值 汇总所有指令所涉及到的控制信号,生成一张反映指令与控制信号之间关系的表 根据表得到每个控制信号的逻辑表达式,据此设计控制器电路 1.指令功能的描述 数据指定 ...
  • 8.1CPU概述

    1.CPU的基本功能2.CPU的基本组成 数据通路—指令的执行部件 操作元件(ALU) 存储元件—寄存器 控制器—指令的控制部件 译码部件 控制信号生成部件 存储元件—寄存器 数据通路 两类元件组成 组合逻辑元件 时序逻辑元件 元件间的连接方式 总线连接方式 分散连接方式 具体工作 进行数据存储、处理、传送 操作元件:组合逻辑电路 加法器 多路选择器 算逻部件(ALU...
  • 7.3指令系统实例:RISC-V架构

    1.RISC-V指令系统概述 核心:RV32I 扩展标准集:RV32M、RV32F、RV32D、RV32A 32位架构RV32G = RV32IMAFD 压缩指令集RV32C(指令长度16位) 32位架构RV64G = RV64MAFD 压缩指令集RV64C(指令长度16位) 2.RISC-V指令参考卡 R-型为寄存器操作数指令 I-型为短立即数或装入(Loa...
  • 并行程序设计

    #include <thread> thread为一个类 join:主线程会阻塞住,直到该子线程退出为止 detach:主线程丧失对子线程的控制权 主线程结束之后,子线程可能仍在运行 主线程结束伴随着资源销毁,需要保证子线程没有引用这些资源 yield:让出处理器,重新调度各执行线程 get_id:返回当前线程的id,可以以此来标识不同的线程 sleep_for:让...
  • 7.2指令系统设计

    1.操作数和寻址方式数据类型 地址(指针):无符号整数,寄存器编号 数值数据 定点数:一般二进制补码 浮点数:IEEE754标准 十进制数:NBCD码 位、位串、字符、字符串用来表示文本、声音、图像 逻辑(布尔)数据 操作数存放在寄存器或内存单元中,也可以立即数的方式直接出现在指令中 寻址方式 寻址方式:指令或操作数地址的指定方式 地址码编码由操作数的寻址方式决定 指令的寻址——简...
  • 7.1指令系统概述

    一条指令包含: 操作码:指定操作类型(对何种类型数据做何种操作)(操作码长度:固定/可变) 源操作数参照:一个或多个源操作数存在的地址(操作数来源:主(虚)存 / 寄存器 / I/O端口 / 指令本身) 结果值参照:产生的结果存放何处(目的操作数)(结果地址:主(虚)存 / 寄存器 / I/O端口) 下一条指令...
  • 6.2定点数运算

    定点数加减运算1.补码加减运算[x+y]补=2n+x+y=2n+x+2n+y=[x]补+[y]补  (mod2n) [x+y]_补 = 2^n + x+y = 2^n +x+2^n+y = [x]_补+[y]_补\ \ (mod 2^n) [x+y]补​=2n+x+y=2n+x+2n+y=[x]补​+[y]补​  (mod2n) [x−y]补=2n+x−y=2n+x+2n−y=[x]补+[...
  • 泛型程序设计

    类属函数 采用通用指针类型的参数 函数模板 通用指针参数实现1234567891011121314151617typedef unsigned char byte;void sort(void *base, //需排序的数据(数组)内存首地址 unsigned int num, //数据元素的个数 unsigned int element_size, //一个数据元素所占内...
12346