diff --git a/计算机组成原理/img/数据的表示和运算/循环移位.jpg b/计算机组成原理/img/数据的表示和运算/循环移位.jpg new file mode 100644 index 0000000..9007641 Binary files /dev/null and b/计算机组成原理/img/数据的表示和运算/循环移位.jpg differ diff --git a/计算机组成原理/img/数据的表示和运算/特殊浮点数.jpg b/计算机组成原理/img/数据的表示和运算/特殊浮点数.jpg new file mode 100644 index 0000000..5686300 Binary files /dev/null and b/计算机组成原理/img/数据的表示和运算/特殊浮点数.jpg differ diff --git a/计算机组成原理/存储器层次结构.md b/计算机组成原理/存储器层次结构.md new file mode 100644 index 0000000..6968d8d --- /dev/null +++ b/计算机组成原理/存储器层次结构.md @@ -0,0 +1,487 @@ +# 存储器的组成结构 + +## 存储系统的组成 + +* 主存储器 +* 高速缓冲存储器(Cache) +* 辅助存储器 + +## 存储器的分类 + +### 按存储介质分类 + +* 半导体存储器 + * 随机存储器 + * 只读存储器 +* 磁表面存储器 + * 磁盘 + * 磁带 +* 磁心存储器:由各种磁心制成,现已被半导体存储器取代 +* 光盘存储器(光存储器) + * 光盘 + +### 按存取方式分类 + +* 随机存取存储器(RAM) + * 优点 + * 读写方便 + * 使用灵活 + * 存取时间和存储位置无关 + * 缺点 + * 断电信息丢失 + * 分类 + * 静态RAM(SRAM):用于制作Cache + * 动态RAM(DRAM):用于制作主存 +* 只读存储器 + * 特点 + * 也是随机存取 + * 断电可保留 + * 只能读入不能写入 + * 分类 + * 掩膜型ROM(MROM) + * 可编程ROM(PROM) + * 可擦除可编程ROM(EPROM) + * 电可擦除可编程ROM(EEPROM) + * 快擦除读写存储器/闪存(Flash Memory) + * 缩写中有E的ROM是可擦除的 + * 一般用于存放不变的程序 + * ROM+RAM=主存 +* 串行访问存储器 + * 特点 + * 读写操作时需要按照物理位置的先后顺序访问 + * 分类 + * 顺序存取存储器 + * 磁带 + * 直接存取存储器 + * 磁盘:半串行,寻道随机访问,之后串行访问 + +### 按在计算机的作用分类 + +* 主存 +* 辅存 +* 缓冲存储器(Cache) + +### 按信息的可保存性分类 + +* 易失存储器 + * RAM +* 非易失存储器 + * ROM + * 磁表面存储器 + * 光存储器 + +## 存储器性能指标 + +* 存储容量 +* 单位成本 +* 存储速度 + * 存取时间:启动一次存储器到完成该操作所需的时间 + * 存取周期:连续两次独立访问存储器所需的时间间隔,通常大于存取时间 + * 主存带宽 + +## 存储器层次化结构 + +1. 寄存器(CPU,主机) +2. 缓冲(CPU,主机) +3. 主存(主机) +4. 磁盘(辅存) +5. 光盘(辅存) +6. 磁带(辅存) + +## 半导体随机存储器 + +### 基本结构 + +#### 组成 + +* 存储矩阵 +* 译码驱动电路 +* 读/写电路 +* 数据线(双向) +* 控制线(单向) + * 读/写控制线 + * 片选线:选择存储芯片 + +#### 译码方式 + +##### 片选法 + +* 使用地址线选取矩阵的某一行 +* 每一根地址线代表一个二进制位 +* n根地址线可表示0~2^n^-1行 + +##### 重合法(双译码) + +* 在片选法的基础上,以同样的方式选取行上的某一列 + +### SRAM + +* 使用双稳态触发器(六晶体管MOS) + +* 不需要再生(非破坏性读出) +* 优点 + * 存取速度快 +* 缺点 + * 集成度低 + * 功耗大 + +### DRAM + +* 存储电路分类 + * 多管型 + * 单管型 +* 工作原理:使用电容存储电荷 +* 采用地址复用技术,地址线是原有的1/2,地址信号分行、列两次传送 +* 优点 + * 易集成 + * 位价低 + * 容量大 + * 功耗低 +* 易失性存储器,电荷只能维持1~2ms,需要定期刷新,两次刷新间隔称为**刷新周期** +* 刷新一行默认需要一个存取周期 +* 刷新方式 + * 集中刷新:一个刷新周期内,使用固定一段时间进行逐行刷新,该段时间称为**死时间** + * 存取速度高 + * 集中刷新期间无法访问存储器 + * 分散刷新:将系统工作周期分为两部分,前一部分正常读写,后一部分进行刷新某一行 + * 增加了存取周期,降低系统速度 + * 没有死时间 + * 异步刷新:刷新周期/行数,得到时间t,每隔时间t刷新一次 + * 避免CPU等待过长 + * 减少刷新次数 + * 提高工作效率 + +### 读写周期与读写时间 + +* 读写周期为芯片连续两次操作的最小时间间隔 +* 读写时间为芯片进行一次操作的时间 +* 读写周期大于读写时间 + +## 只读存储器 + +* 掩膜型ROM(MROM) + * 制造时写入内容,只能读不能写 + * 通过元件的有无表示01 +* 可编程ROM(PROM) + * 使用熔丝存储数据 + * 用户可以自行填入编程 + * 但只可填入一次 +* 可擦除可编程ROM(EPROM) + * 使用悬浮栅存储数据 + * 使用高压写入数据 + * 能使用紫外线擦除全部内容(不能部分擦除) +* 电可擦除可编程ROM(EEPROM) + * 使用悬浮栅存储数据 + * 使用高压写入数据 + * 使用高压擦除数据(可全部擦除,也可部分擦除) +* 快擦除读写存储器/闪存(Flash Memory) + * 按块存取数据 + * 非易失性 + * 结合了ROM和RAM的优点 +* 固体硬盘(SSD) + * 组成:控制单元+Flash芯片 + * 保留了闪存的腾讯 + * 读写速度快,功耗低 + * 造价高 + +## 主存储器与CPU连接 + +### 存储芯片信号 + +* CS:片选信号,低电平有效,用于选择芯片 +* WE:读/写信号 + +### 容量格式 + +* a*b: + * a为地址,连接地址线 + * b为数据位数,连接数据线 + +### 容量扩充 + +#### 位扩充 + +* 扩充数据线 +* 通过增加数据线 + +#### 字扩充 + +* 扩充地址线 +* 使用片选信号选择存储芯片 + +#### 字位扩充 + +* 结合上述二者方式 + +## 双端口RAM + +* 拥有左右两个独立端口,使用两组独立的地址线、数据线、读写控制线 +* 提高并行性 +* 冲突(读写冲突,写冲突)解决:使用一个BUSY信号,当会发生冲突时,暂时关闭一个端口 + +## 多模块存储器 + +### 单体并行存储器 + +* 每个存储单元存储m个字,数据字宽也为m +* 一次可并行读出m个字 +* 优点 + * 提高存储器带宽 + * 增加存储器工作效率 +* 缺点 + * 对于不连续的指令和数据,效果不明显 + +### 多体并行存储器 + +* 使用多个存储模块构成 + +#### 高位交叉编址 + +* 高地址部分代表存储器编号 +* 模块内地址连续,仍为顺序存储器 +* 缺点 + * 访问连续内存块时,总时只访问一个层次模块,不能提高吞吐率 + +#### 低位交叉编址 + +* 低地址部分代表存储器编号 + +* 数据连续存放在相邻模块,为交叉存储器 + +* 采用流水线方式存取 + +* 存取时间计算 + $$ + 设一个模块内一个字存取周期为T,总线传送周期为r\\ + 存储器模块数应大于等于\frac Tr,从而保证流水线读取完所有模块后能直接进行下一轮读取\\ + 这样连续存取m个字所需的时间t=T+(m-1)r + $$ + +## 高速缓冲存储器(Cache) + +### 局部性原理 + +* 时间局部性:某个数据或指令可能在短时间内多次使用 +* 空间局部性:某个数据或指令使用后,附近的数据或指令可能在短时间内也被使用 + +### 组成 + +* 地址映射变换机构:将主存地址转换为Cache地址 +* 替换机构:实现Cache块替换 + +### 工作原理 + +* 将Cache和主存划分成相等的块 + +* Cache块又称**Cache行** + +* 块的长度称为块长(Cache行长) + +* 工作流程 + + 1. CPU发出访问请求 + 2. 若Cache命中,直接访问Cache + 3. 若Cache不命中,若Cache已满,选择替换的Cache块,反之选择一个空闲块 + 4. 访问主存找到相应的块,同时装入Cache和传送给CPU + +* 部分计算机在访问Cache的同时也会访问主存,当Cache命中时终止主存访问 + +* Cache与CPU数据交换单位为**字** + +* Cache与主存数据交换单位为**块** + +* $$ + Cache命中率H=\frac{Cache总命中次数}{Cache总命中次数+访问主存的总次数} + $$ + + + +* $$ + 设Cache命中率为H,访问Cache时间为T_c,访问主存时间为T_m\\ + 平均访问时间T_a=H*T_c+(1-H)*T_m + $$ + +### Cache映射方式 + +#### 直接映射 + +* 每个主存块对应一个Cache块 + +* 映射关系: + $$ + 设j为Cache块号,i为主存块号,Cache总块数为m\\ + j = i\ mod\ m + $$ + +* 地址结构:标记+Cache块号+块内地址 + +* 使用**有效位**标识Cache是否有效 + +* 不需要替换算法 + +#### 全相联映射 + +* 每个主存块可对应任意Cache块 +* 优点 + * 冲突概率低 + * 空间利用率高 + * 命中率高 +* 缺点 + * 标记字段比较速度慢 + * 成本高 + * 通常使用昂贵的内容寻找方式(相联存储器) +* 地址结构:标记+块内地址 + +#### 组相联映射 + +* 将Cache分成若干大小相同的组 + +* 数据块可装入所属组内任意位置 + +* 映射关系 + $$ + 设j为Cache块号,i为主存块号,Cache组数为Q\\ + j = i\ mod\ Q + $$ + +* 地址结构:标记+块号+块内地址 + +### 替换算法 + +* 随机算法: + * 随机替换 + * 命中率较低 +* 先进先出算法(FIFO): + * 选择最早调入的块替换 + * 容易实现 + * 命中率较低 +* 近期最少使用算法(LRU): + * 选择近期内最久未被访问过的Cache替换 + * 平均命中率高于FIFO + * 堆栈类算法 +* 最不经常使用算法 + * 选择近期访问次数最少的行替换 + +### 写策略 + +#### 写命中 + +* 全写法 + * CPU写入Cache时,同时把数据写入主存 + * 替换块时直接覆盖即可 + * 优点 + * 实现简单 + * 随时保持贮存数据正确 + * 缺点 + * 增加缓冲次数 + * 写缓冲 + * 增加一个FIFO队列缓冲,缓和写速度不匹配问题 +* 写回法 + * Cache被换出时写回内存 + * 使用**标记位(脏位)**判断是否被修改 +* 写一次法 + * 第一次写入时写回内存 + * 其余处理方式与写回法一致 + +#### 写不命中 + +* 写分配法 + * 加载主存块至Cache中,并修改Cache块 + * 缺点:每次写不命中都要调取一块 + * 一般与写回法合用 +* 非写分配法 + * 直接写入内存,不进行掉块 + * 一般与全写法合用 + +## 虚拟存储器 + +* 页式虚拟存储器 +* 段式虚拟存储器 +* 段页式虚拟存储器 +* 快表(TLB) +* 详细见**操作系统** + +## 外存储器 + +### 硬盘存储器 + +#### 数据存储方式 + +* 归零制(RZ) + * 记录1时,通**正向电流** + * 记录0时,通**反向电流** + * 0,1之间电流归零 +* 不归零制(NRZ) + * 记录1时,通**正向电流** + * 记录0时,通**反向电流** + * 电流不归0 +* 见1就翻的不归零制(NRZI) + * 记录1时,电流方向与上一周期相反 + * 记录0时,电流方向不变 + * 电流不归零 + +#### 性能指标 + +* 记录密度 + * 延半径长度单位长度的磁道数(即单位长度有多少个同心圆) + * 相邻磁道之间距离称为**道距** +* 位密度 + * 单位长度磁道记录的二进制信息位数 +* 默认条件下,一个磁道存放的信息量相等,即越靠近圆心的磁道位密度越大 +* 题目中给出的位密度默认为最内圈磁道位密度 + +#### 存储容量 + +* $$ + 设C为总存储容量,n为盘面数,k为每个盘面的磁道数,s为每条磁道能记录的二进制代码数\\ + C=nks + $$ + +#### 平均寻址时间 + +* 平均寻址时间=平均寻道时间+平均等待时间 + +#### 组成 + +* 磁记录介质 +* 磁盘控制器 +* 磁盘驱动器 + +#### 分类 + +* 磁盘是否可换 + * 可换盘磁盘存储器 + * 固定磁盘存储器 +* 磁头工作方式 + * 固定磁头磁盘存储器(每个磁道上有一个磁头,成本高) + * 移动磁头磁盘存储器 + +#### 磁盘地址 + +* 磁盘地址=台号(磁盘组编号,使用多磁盘组成存储器)+磁道号+盘面号+扇区号 + +### 磁盘阵列 + +#### RAID 0 + +* 直接由多块磁盘组成 + +#### RAID 1 + +* 镜像备份 + +### 光盘存储器 + +* 使用激光存储(光存储技术) + +#### 分类1 + +* 第一代光存储技术(不支持可擦除重写) +* 第二代光存储技术(支持可擦除重写) + +#### 分类2 + +* 只读型光盘(由厂家写入一次) + * 被称为CD-ROM,但不属于ROM +* 只写一次型光盘(可由用户写入一次) +* 可擦写光盘 \ No newline at end of file diff --git a/计算机组成原理/数据的表示与运算.md b/计算机组成原理/数据的表示与运算.md new file mode 100644 index 0000000..18ef0d2 --- /dev/null +++ b/计算机组成原理/数据的表示与运算.md @@ -0,0 +1,520 @@ +# 数据的表示与运算 + +## 进制转换 + +### 前提 + +* 待转换数为10进制 +* 转换的数为k进制 + +### 整数部分 + +* 对整数部分除以k并进行取余,之后将余数逆序输出 +* 例:$19_{(10)}转为二进制$ + * 19/2=9······1 + * 9/2=4········1 + * 4/2=2········0 + * 2/2=1········0 + * 1/2=0········1 + * 故结果为10011 + +### 小数部分 + +* 乘以k后,取整数部分,并正序输出 +* 例$0.6875_{(10)}转2进制$ + * 0.6875*2=1.375······取1 + * 0.375*2=0.75··········取0 + * 0.75*2=1.5··············取1 + * 0.5*2=1···················取1 + * 故结果为0.1011 + +## 编码 + +### 真值和机器数 + +* 真值:机器数代表的实际值 +* 机器数:在计算机中用于表示真值的编码数 + +### BCD码 + +* 使用4位二进制数表示0-9十个数字 +* 存在6钟冗余状态 +* 常见BCD码 + * 8421码(最常见) + * 有权码 + * 设数字为$a_3a_2a_1a_0$ + * 则表示十进制数$D=8*a_3+4*a_2+2*a_1+a_0$ + * 相加时若结果大于10,需要加6并进位进行修正结果 + * 余三码 + * 8421码的基础上加上$(0011)_{(2)}$得到 + * 例:8的余三码为1011,0的余三码为0011 + * 2421码 + * 有权码 + * 大于等于5的数首位为1 + * 小于5的数首位为0 + * 例:5的2421码为1011 + +### ASCII码 + +### 汉字编码 + +* 组成 + * 输入编码 + * 区位码:两个字节表示一个汉字,每个字节使用7位二进制编码,构成一个94*94的二维代码表 + * 国标码=$(区位码)_{(16)}+2020H$ + * 汉字内码=$(国标码)_{(16)}+8080H$ + * 汉字字形码 + +### 校验码 + +#### 奇偶校验码 + +* 检错编码 + +* 奇校验:添加校验位后1的个数为奇数 +* 偶校验:添加校验位后1的个数为偶数 + +#### CRC(循环冗余校验码) + +* 默认只有检错功能 +* 又称(N,K)码,N为编码长度,K为校验位长度 +* 具有r检测位的多项式可以检测出所有长度小于等于r的突发错误 +* 长度大于r的突发错误逃逸概率为$\frac1{2^r}$ +* 构造过程(例) + * 设生成多项式G(x)=x^3^+x+1 + * 设数据多项式M(x)=x^3^+1 + * 即G(x)代表1011 + * M(x)代表1001 + * 将待发送数据左移G(x)的最高位次,得到1001 000 + * 使用1001000对1011进行模2除法,得到余数110 + * 故CRC码为1001 110 + +#### 海明码 + +* 纠错编码 +* 设数据位数为k,校验码位数r满足 $2^r-1>=k+r$ +* 海明码生成步骤,步骤中海明码,数据,校验码的位号皆从1开始 + + 1. $ + 将校验码P_i放置在海明码的第2^i位 + $ + + 2. $ + 将数据位P_i依次放入海明码剩余位处 + $ + + 3. $ + 将海明码各各个位号分为r组,使第i组各位号j满足\ j\&i!=0 + $ + + 4. $ + 对每一组采用偶校验的方式得到每一组中校验码P_i的值 + $ + +* 海明码校验步骤 + + 1. $ + 将第i组内所有数据进行异或操作,得到S_i + $ + + 2. $ + 将S_i依次拼接在一起,得到二进制数码S,若S==0,则海明码无措,反之,则第S位出错 + $ + +* 海明码若要检测出d位错误,则海明距需要d+1位,即当d>1时,通过上述公式得到校验码后,还需要令r+=d-1 + +* 海明码若要纠正d位错误,则海明距需要为2d+1 + +## 定点数的表示与运算 + +### 定点数的表示 + +* 无符号数 +* 有符号数 + +### 机器数的定点表示 + +* 定点小数 +* 定点整数 + +### 数码表示 + +* 原码 +* 补码 +* 反码 +* 移码 + * 0的表示唯一 + * 对于偏移值为2^n^(n为机器字长-1)的移码,补码与移码仅相差个符号位 + * 移码保持了数据原有的大小 + +### 定点数的运算 + +#### 移位运算 + +##### 算数移位运算 + +* 原码 + * 左移右移都补0 +* 反码 + * 正数:左移右移都补0 + * 负数:左移右移都补1 +* 补码 + * 左移时都补0 + * 右移时保持符号位不变 + +##### 逻辑移位运算 + +* 所有码制下左移右移皆补0 + +##### 循环移位运算 + +![img](img/数据的表示和运算/循环移位.jpg) + +#### 原码定点数的加减法 + +##### 加法 + +1. 先判断符号位,若相同,绝对值相加,若不同,则绝对值相减(大减小) +2. 最终符号与绝对值大的数相同 + +##### 减法 + +1. 减数取反在进行加法操作 + +#### 补码定点数的加减法 + +##### 加法 + +* 直接相加,舍去进位 + +##### 减法 + +* 减数取反在进行加法操作 + +#### 溢出判定 + +* 一位符号位 + + * 操作数符号相同时,结果与操作数符号不同时,则溢出 + +* 双符号位 + + | 符号位$S_1S_2$ | 结果 | + | -------------- | ---------------- | + | 00 | 结果为正,无溢出 | + | 01 | 结果为正溢出 | + | 10 | 结果为负溢出 | + | 11 | 结果为负,无溢出 | + +* 一位符号位加数据位进位 + + * 若进位$C_s=最高数位C_1$,则没有溢出,反之,溢出 + +#### 定点数的乘法 + +##### 原码一位乘 + +* 采用双符号位 +* 符号位单独求 +* 使用右移操作模拟竖式计算的进位 +* 结果使用乘数所在寄存器存放低位结果,新寄存器存放高位结果 +* **详细见参考书** + +##### 原码二位乘 + +* 使用乘数的两位来计算部分积 + +* 即 + + | $y_n$(高位) | $y_{n+1}$(低位) | 操作 | + | ------------- | ----------------- | ---------------------------- | + | 0 | 0 | 部分积右移两位 | + | 0 | 1 | 部分积加上被乘数后右移两位 | + | 1 | 0 | 部分积加上被乘数*2后右移两位 | + | 1 | 1 | 部分积加上被乘数*3后右移两位 | + + + +##### 补码一位乘 + +###### 校正法 + +* 符号位不参与计算 +* 为避免溢出,采用双符号位 + +* 当乘数为负数时,计算结果应加上$[-X]_补$,进行校正,其中X为被乘数 + +###### 比较法(booth算法) + +* 在乘数末位增补一位附加位$y_{n+1}$,令初值为0 + +* 移位按补码右移规则进行 + +* 根据$y_ny_{n+1}$的值执行相应操作 + 其中X为被乘数 + + | $y_n$(高位) | $y_{n+1}$(低位) | 操作 | + | ------------- | ----------------- | --------------------------- | + | 0 | 0 | 部分积右移一位 | + | 0 | 1 | 部分积加$[X]_补$,右移一位 | + | 1 | 0 | 部分积加$[-X]_补$,右移一位 | + | 1 | 1 | 部分积右移一位 | + +* **详细见参考书** + +##### 补码二位乘 + +* 部分积和被乘数采用3符号位,乘数使用双符号位 + +#### 定点数的除法 + +* 讨论前提:绝对值<1的定点小数 + +##### 原码恢复余数法 + +* 符号位单独处理 + +* 步骤 + + ```c++ + if(abs(被除数)-abs(除数)>=0){ + throw exception(溢出); + }else{ + 商=0; + 被除数=abs(被除数); + 除数=abs(除数); + 负除数=-除数; //使用补码 + n=位数长度; + // 循环执行n+1次 + while(n--){ + 被除数+=负除数; //计算机只有加法器 + if(被除数<0){ + 被除数+=除数; + }else{ + 商++; + } + if(n!=0){ + 被除数<<=1; + 商<<=1; + } + } + + 余数=被除数; + 为商和余数附上符号位 + } + ``` + +##### 原码的不恢复余数法(加减交替法) + +* 符号位单独处理 + +* 步骤 + + ```c++ + if(abs(被除数)-abs(除数)>=0){ + throw exception(溢出); + }else{ + 商=0; + 被除数=abs(被除数); + 除数=abs(除数); + 负除数=-除数; //使用补码 + n=位数长度; + + 被除数+=负除数; + // 循环执行n+1次 + while(n--){ + if(被除数<0){ + if(n!=0){ + 被除数<<=1; + 商<<=1; + } + 被除数+=除数; + + }else{ + 商+=1; + if(n!=0){ + 被除数<<=1; + 商<<=1; + 被除数+=负除数; + } + + } + + } + + 余数=被除数; + 为商和余数附上符号位 + } + ``` + +##### 补码的不恢复余数法(交替加减法) + +* 步骤 + + ```c++ + if(abs(被除数)-abs(除数)>=0){ + throw exception(溢出); + }else{ + 商=0; + 负除数=-除数; //使用补码 + n=位数长度; + // 循环执行n次 + while(--n){ + if(被除数与除数异号){ + 被除数<<=1; + 被除数+=除数; + }else{ + 商+=1; + 被除数<<=1; + 被除数+=负除数; + } + 商<<=1; + } + 商+=1; + 余数=被除数; + 为商和余数附上符号位 + } + ``` + + + +## 浮点数的表示与运算 + +### 浮点数的一般形式 + +* 阶符+阶码数值部分+数符+尾数的数值部分 + +### 规格化浮点数 + +* 使尾数M满足关系$\frac1r<=|M|<=1$,其中r位尾数进制 +* 原码规格化(二进制下) + * 正数:0.1xxxxx的形式 + * 最大正数为0.11...1 + * 最小正数为0.10...0 + * 取值$\frac12<=M<=1-2^{-r}$ + * 负数:1.1xxxxx的形式 + * 最大负数为1.10...0 + * 最小负数为1.11...1 + * 取值$-(1-2^{-r})<=M<=-(\frac12)$ +* 补码规格化(二进制下) + * 正数:0.1xxxxx的形式 + * 最大正数为0.11...1 + * 最小正数为0.10...0 + * 取值$\frac12<=M<=1-2^{-r}$ + * 负数:1.0xxxxx的形式 + * 最大负数为1.01...1 + * 最小正数为1.00...0 + * 取值$-1<=M<=-(\frac12+2^{-r})$ + +### IEEE 754标准 + +#### 格式 + +* 数符+阶码(使用移码表示,可代表正负)+尾数数值位(使用规格化原码表示) + +* **被忽略的首位1代表整数1** + + | 类型 | 数符 | 阶码(移码2^k^-1) | 尾数数值 | 总位数 | 偏移值 | + | ----------------------------- | ---- | ---------------- | -------- | ------ | ------ | + | 短浮点数(尾数首位1忽略) | 1 | 8 | 23 | 32 | 0x7F | + | 长浮点数(尾数首位不忽略) | 1 | 11 | 52 | 64 | 0x3FF | + | 临时浮点数(尾数首位1不忽略) | 1 | 15 | 64 | 80 | 0x3FFF | + +#### 表示范围 + +| 格式 | 最小值 | 最大值 | +| ------ | ------------------------------ | ------------------------------------------- | +| 单精度 | 1*2^-126^(阶码为1,尾数为0) | 2^127^*(2-2^-23^)(阶码为254,尾数为全1) | +| 双精度 | 1*2^-1022^(阶码为1,尾数为0) | 2^1023^*(2-2^-52^)(阶码为2046,尾数为全1) | + +#### 特殊数值 + +* IEEE 标准指定了以下特殊值:±0、反向规格化的数、±∞ 和 NaN(如下表所示)。这些特殊值都是使用 e~max+1~ 或 e~min-1~ 的指数进行编码的。 + ![img](img/数据的表示和运算/特殊浮点数.jpg) + +#### 浮点数的加减 + +1. 对阶,阶数小的向阶数大的靠齐(即阶码小的进行右移操作) +2. 尾数求和 +3. 规格化 + * 左归:尾数左移 + * 右归:尾数右移 +4. 舍入 + * 0舍1进法:右归时,若尾数为1,则尾数末位加1,若为0则舍入 + * 恒置1法:尾数最后一位始终置1 +5. 溢出判断:根据阶码判断是否溢出 + +## 算数逻辑单元 + +### 全加器 + +#### 输入 + +* C~i-1~:低位传来的进位 +* A~i~:加数A +* B~i~:加数B + +#### 输出 + +* X~i~:该位结果,$X_i=A_i\bigoplus B_i \bigoplus C_{i-1}$ +* C~i~:该位进位,$C_i=A_iB_i+(A_i \bigoplus B_i)C_{i-1}$ + +### 半加器 + +* 没有低位进位的加法器 +* 两个半加器可组成全加器 + +### 串行加法器 + +* 只设置一个全加器的加法器,每一次计算产生一位和 +* 操作数长k位,则一次计算要进行k次串行操作,效率差 + +### 并行加法器 + +#### 串行进位链 + +* 每完成一次计算,将进位作为下一个全加器的输入 +* 虽然解决了部分延迟问题,但仍难以提高运算速度 + +#### 并行进位链 + +* 主要思路:将n位全加器分为若干组,组内并行计算,组间串行计算 +* 并行计算实现: + * 根据公式得$C_i=G_i+P_i\bigoplus C_{i-1} \\其中G_i=A_iB_i,P_i=A_i \bigoplus B_i$ + * 将其展开,将$C_i$仅用输入来表示,从而避免需要等待全加器计算出进位​ +* 单重分组跳跃进位链 + * 直接将n位全加器分为若干组 +* 双重分组跳跃进位链 + * 将n位全加器分成若干大组 + * 每个大组又包括多个小组 + * 小组计算出的结果作为大组的输入 + * 大组组间串行,组内并行 + +### 算数逻辑单元的功能和结构 + +* 功能 + * 算术运算 + * 逻辑运算 +* 结构 + * 两个输入变量 + * 一个控制变量 + * 一个输出函数 + +## 数据的存储与排列 + +### 大小端存储 + +#### 大端存储 + +* 高字节位于高地址位 + +#### 小端存储 + +* 高字节位于低地址位 + +### 边界对齐存储 + +* 提高指令和数据的存取速度 +* 浪费内存空间 + +* 一般按最大基本类型的字节数对齐 \ No newline at end of file diff --git a/计算机组成原理/绪论.md b/计算机组成原理/绪论.md new file mode 100644 index 0000000..e658d4e --- /dev/null +++ b/计算机组成原理/绪论.md @@ -0,0 +1,232 @@ +# 绪论 + +## 计算机发展历程 + +### 计算机硬件发展 + +* 前四代计算机都使用冯诺依曼体系结构 + +1. 第一代计算机(1946-1957)——电子管时代 + * 电子管作为开关硬件 + * 使用机器语言 + * 可以存储信息 + * 输入/输出很慢 +2. 第二代计算机(1958-1964)——晶体管时代 + * 晶体管代替电子管 + * 采用磁芯存储器 + * 汇编语言取代机器语言 +3. 第三代计算机(1965-1971)——中小规模集成电路时代 + * 中小规模集成电路取代晶体管 + * 操作系统问世 +4. 第四代计算机(1972-至今)——大规模集成电路时代 + * 采用集成度很高的电路 + * 微处理器问世 +5. 第五代计算机——智能计算机(代表:神经网络计算机) + * 具有人工智能 + * 运算速度极快 + * 软件系统能处理知识信息 +6. 第六代计算机——生物计算机与量子计算机 + * 未来计算机发展的发现和趋势 + +#### 计算机元件的更新换代 + +* 摩尔定律:价格不变的前提,每十八月,集成电路上可容纳晶体管数目将增加一倍,性能也将提升一倍 +* 半导体存储器的发展 +* 微处理器的发展 + +### 计算机软件的发展 + +* 计算机语言的发展 +* 计算机操作系统的发展 + +### 计算机的分类与发展方向 + +* 电子计算机 + * 电子模拟计算机 + * 电子数字计算机 + * 专用计算机 + * 通用计算机 + * 巨型机 + * 大型机 + * 中型机 + * 小型机 + * 微型机 + * 单片机 +* 按指令和数据流划分 + * 单指令流和单数据流(SISD):传统冯诺依曼架构 + * 单指令流和多数据流(SIMD):阵列处理器和向量处理器系统 + * 多指令流和单数据流(MISD):实际上不存在 + * 多指令流和多数据流(MIMD):多处理器和多计算机系统 +* 发展方向 + * 微型计算机 + * 微型化 + * 网络化 + * 高性能 + * 多用途 + * 巨型机 + * 巨型化 + * 超高速 + * 并行处理 + * 智能化 + +## 计算机层次结构 + +### 计算机基本组成 + +* 硬件 + * 处理器 + * 存储器 + * 外设 +* 软件 + * 程序 + * 相应文档 + +**注** + +* 软件和硬件在逻辑上等效 + +### 计算机硬件基本组成 + +* 组成 + * 存储器 + * 运算器 + * 控制器 + * 输入设备 + * 输出设备 +* CPU=运算器+控制器 +* 主机=CPU+主存储器 +* I/O设备又叫外部设备 + +#### 存储器 + +* 分类 + + * 主存储器/主存/内存储器 + * CPU能直接访问 + * 辅助存储器/辅存/外存储器 + * CPU通过主存储器间接访问 +* 概念 +* 存储元:存储一位二进制数据 + * 存储单元:由若干个存储元组成 + * 存储体:由存储单元构成 + * 存储字:存储单元中二进制代码组合 + * 存储字长:存储单元的二进制代码位数 +* 构成 + * 地址寄存器(MAR) + * 数据寄存器(MDR) + * 存储体 + * 时序控制逻辑 +* 运行逻辑 + 1. 将需要访问的内存单元地址存入MAR + 2. 使用地址译码器对MAR的地址进行译码,找到相应内存单元 + 3. 在MDR中暂存要读写的数据 + 4. 通过时序控制逻辑完成整个读写操作 +* MAR和MDR在现代计算机中位于CPU + +#### 运算器 + +* 组成 + * ALU + * 寄存器 +* 核心部件:算术逻辑单元(ALU) +* 功能 + * 算术运算:加减乘除 + * 逻辑运算:与或非,异或,比较,移位 +* 寄存器 + * 累加器(ACC):必需 + * 乘商寄存器(MQ):必需 + * 操作数寄存器(X):必需 + * 变址寄存器(IX) + * 基址寄存器(BR) + * 程序状态寄存器(PSW) + +#### 控制器 + +* 功能:控制计算机各个部件协调工作 +* 流动信息类型 + * 控制信息 + * 数据信息 +* 组成 + * 程序计数器(PC) + * 指令寄存器(IR) + * 控制单元(CU) + +#### 输入设备 + +* 如键盘等 + +#### 输出设备 + +* 如显示器等 + +## 计算机软件分类 + +* 按功能分类 + * 系统软件 + * 操作系统 + * 数据库管理系统(位于操作系统和用户间的数据管理软件) + * 语音处理 + * 分布式软件系统 + * 网络软件系统 + * 标准库程序 + * 服务性程序 + * 应用软件 + * 科学计算程序 + * 工程设计类程序 + * 数据统计和处理程序 +* 三个级别的语言 + * 机器语言 + * 汇编语言 + * 高级语言 + +## 计算机工作流程 + +### 源程序代码到可执行文件 + +1. 预处理 +2. 编译 +3. 汇编 +4. 链接 + +### 指令执行过程 + +* 以取数指令为例(将数从内存中取出放入ACC) + + 1. 取指令:PC->MAR->M->MDR->IR + 2. 分析指令:OP(IR)->CU + 3. 执行指令:Ad(IR)->MAR->M->MDR->ACC + +### 步骤分类 + +1. 将程序和数据装入主存 +2. 将源程序转换为可执行文件 +3. 从可执行文件的首地址开始执行指令 + +## 计算机层级结构 + +1. 微程序机器层:实际存在的硬件层,由机器硬件直接实现 +2. 传统机器语言层:实际的机器层,由微程序解释指令系统 +3. 操作系统层:由操作系统程序实现 +4. 汇编应用层 +5. 高级语言层 +6. 应用层 + +## 计算机性能指标 + +* 机器字长:计算机进行整数运算能处理的最大二进制位数 +* 数据通路带宽:数据总线能一次性并行传输的信息位数 +* 主存储器容量 +* 运算速度 + * 吞吐量:单位时间内处理请求的数量,主要取决于主存的存取周期 + * 响应时间:用户向计算机发送请求后得到相应所需的等待时间 + * CPU时钟周期:频率倒数,CPU中最小的时间单位 + * 主频:内部时钟的频率 + * CPI:执行一条指令需要的时钟周期数 + * CPU执行时间:运行一个程序所需的时间 + * MIPS:每秒可执行百万条指令数 + * FLOPS:每秒执行的浮点运算数 + * MFLOPS:每秒执行的10^6^浮点运算数 + * GFLOPS:每秒执行的10^9^浮点运算数 + * TFLOPS:每秒执行的10^12^浮点运算数 + * PFLOPS:每秒执行的10^15^浮点运算数 + * IPC:每一个时钟周期执行的指令数 \ No newline at end of file diff --git a/计算机网络/数据链路层.md b/计算机网络/数据链路层.md index 6fb1b58..ec09876 100644 --- a/计算机网络/数据链路层.md +++ b/计算机网络/数据链路层.md @@ -75,7 +75,7 @@ * 长度大于r的突发错误逃逸的概率是 $$ - \frac{1}{r^2} + \frac{1}{2^r} $$ #### 纠错编码