线上做笔记的网站,鹤山网站建设易搜互联,软件项目管理案例教程第四版,江苏网站建设多少钱第4章 存储器 笔记PDF版本已上传至Github个人仓库#xff1a;CourseNotes#xff0c;欢迎fork和star#xff0c;拥抱开源#xff0c;一起完善。
该笔记是最初是没打算发网上的#xff0c;所以很多地方都为了自我阅读方便#xff0c;我理解了的地方就少有解释#xff1b… 第4章 存储器 笔记PDF版本已上传至Github个人仓库CourseNotes欢迎fork和star拥抱开源一起完善。
该笔记是最初是没打算发网上的所以很多地方都为了自我阅读方便我理解了的地方就少有解释我不理解的地方理解后加上的解释便很多。
因此若读者在阅读过程中遇到错误或理解问题请评论区留言或者私信我们一起讨论看到会及时回复。
4.1 概述
4.1.1 存储器分类 按存储介质分类 半导体存储器TTL集成度低功耗高速度快MOS反之磁表面存储器磁头、载磁体磁盘磁带磁芯储存器硬磁材料、环状元件光盘存储器激光、磁光材料· 按存取方式分类 随机储存器Random Access Memory,RAM RAM是一种可读/写存储器,其特点①随机存取性②存取时间与存储单元的物理位置无关访问存储器的任一物理单元的时间均相等。③易失性 根据存储信息原理的不同分类RAM又分为静态RAM(以触发器原理寄存信息)和动态RAM(以电容充放电原理寄存信息)。 只读储存器Read Only Memory,ROM 特点①存储内容只能读不能重新写②非易失性 应用存放固定不变的程序、常数和汉字字库,甚至用于操作系统的固化它与随机存储器可共同作为主存的一部分,统一构成主存的地址域。 后来发展的ROM存储器 掩模型只读存储器(MaskedROM,MROM)可编程只读存储器(Programmable ROM,PROM)可擦除可编程只读存储器(Erasable Programmable ROM,EPROM)电擦除可编程只读存储器(Electrically-ErasableProgrammableROM,EEPROM)闪速存储器FlashMemory 串行访问存储器存储时间与物理地址有关 对存储单元进行读/写操作时,需按其物理位置的先后顺序寻找地址,存取时间与物理位置有关则这种存储器称为串行访问存储器。 顺序存取存储器磁带直接半顺序存取存储器磁盘 按在计算机中的作用分类 按在计算机系统中的作用不同,存储器主要分为主存储器、辅助存储器、缓冲存储器。 按照这种方法分类其直观分类可从下图得知 4.1.2 存储器的层次结构
存储器速度、容量和 位价的关系图 缓存主存层次和主存辅存层次图 主存和缓存之间匹配的是速度它们之间的数据调动是由硬件自动完成的主存和辅存之间匹配的是容量它们之间的数据调动是 由硬件和操作系统共同完成的。
4.2 主存储器
4.2.1 概述
现代计算机的主存都由半导体集成电路构成,MAR和MDR制作在CPU芯片内如下图所示。下图中虽然MAR和MDR是在CPU内部但是这并不代表内存的MAR和MDR在CPU中。下图的MDR和MAR为CPU的器件主存有但未画出来。 寻址范围计算 按字节寻址范围计算为【 2 地址线位数 2^\text{地址线位数} 2地址线位数】Byte按字寻址范围计算为【 2 地址线范围 × 8 字长 \frac{2^\text{地址线范围}\times8}{字长} 字长2地址线范围×8】bit 主存的技术指标 存储容量指主存能存放二进制代码的总位数 ①存储容量存储单元个数x存储字长 以位数表示 ②存储容量存储单元个数x存储字长/8 以字节表示 存储速度 存储速度是由存取时间和存取周期来表示 存取时间 存取时间又称为存储器的访问时间(Memory Access Time),是指启动一次存储器操作(读或写)到完成该操作所需的全部时间。 存取时间分读出时间和写人时间两种。读出时间是从存储器接收到有效地址开始,到产生有效输出所需的全部时间。写人时间是从存储器接收到有效地址开始,到数据写人被选中单元为止所需的全部时间。 存取周期 存取周期(Memory Cycle Time)是指存储器进行连续两次独立的存储器操作(如连续两次读操作)所需的最小间隔时间 存储器带宽 表示单位时间内存储器存取的信息量,如下例 存取周期为500ns,每个存取周期可访问16位,则它的带宽为32M位/秒计算如下 32 Mbit/s 16 b i t 500 × 1 0 − 9 s 32\text{Mbit/s}\frac{16bit}{500\times10^{-9}s} 32Mbit/s500×10−9s16bit 为了提高存储器的带宽,可以采用以下措施: ① 缩短存取周期。 ②)增加存储字长,使每个存取周期可读/写更多的二进制位数。 ③增加存储体
4.2.2 半导体存储芯片简介 半导体存储芯片的译码驱动方式有两种:线选法和重合法 控制线 片选线用来选择存储芯片 CS ‾ \overline{\text{CS}} CS片选线低电平有效 CE ‾ \overline{\text{CE}} CE使能线低电平有效 读/写控制线决定芯片进行读/写操作 WE ‾ \overline{\text{WE}} WE低电平写 高电平读
4.2.3 随机存储器 静态 RAM(Static RAM, SRAM) 由千静态 RAM是用触发器工作原理存储信息的因此即使信息读出后它仍保持其原状 态不需要再生。但电源掉电时原存信息丢失故它属易失性半导体存储器。 静态 RAM 基本单元电路 读出时 V C C V_{CC} VCC家电 T 3 T_3 T3和 T 4 T_4 T4开关都闭合电路连通接着A‘和A同时加电 T 1 T_1 T1和 T 2 T_2 T2闭合数据从存储芯片内流向A与A’两侧数据是一致的 T 5 T_5 T5和 T 6 T_6 T6从行地址选择线上获取行地址 T 7 T_7 T7和 T 8 T_8 T8从列地址选择线上获取列地址此时两侧数据流通左侧数据流通至左侧写放大器后反向无法通过右侧数据不经过放大器直接送到 D OUT \text{D}_\text{OUT} DOUT中。 写入时数据经过左侧放大器将取反右侧正常通过我们选择好行地址与列地址打开两侧通路。当数据到达A‘与A的时候有两种情况 ① D IN \text{D}_\text{IN} DIN为1则A’为0A为1此时 T 2 T_2 T2断开 T 1 T_1 T1连接正常写入1② D IN \text{D}_\text{IN} DIN为0则A‘为1A为0此时 T 1 T_1 T1断开 T 2 T_2 T2连接正常写入0. 静态 RMA 芯片举例Intel 2114 当 C S ‾ \overline{\mathrm {CS}} CS 和 W E ‾ \overline{\mathrm {WE}} WE 均为低电平时输入写三 态门打开 I / O 4 ∼ I / O 1 \mathrm{I/O}_{4}\sim\mathrm{I/O}_{1} I/O4∼I/O1上的数据即写入指定地址单元中。当 C S ‾ \overline{\mathrm {CS}} CS为低电平、 W E ‾ \overline{\mathrm {WE}} WE 为高电平时 输出读三态门打开列 I/0 电路的输出经片内总线输出至数据线 I / O 4 ∼ I / O 1 \mathrm{I/O}_{4}\sim\mathrm{I/O}_{1} I/O4∼I/O1 上。 存储矩阵结构 读周期时序 写周期时序 地址有效后先发出写命令开始片选片选完成了后等待上一个读周期的数据滞后完成我们便开始写。由于写始终要知道内存单元的地址所以地址失效一定在 D I N \mathrm {D_{IN}} DIN之后 动态 RAM(Dynamic RAM, DRAM) 常见的动态RAM基本单元电路有三管式和单管式两种它们的共同特点都是靠电容存储 电荷的原理来寄存信息若电容上存有足够多的电荷表示存”1电容上无电荷表示存“0”。 电 容上的电荷一般只能维持 1~ 2 ms因此即使电源不掉电信息也会自动消失为此必须在 2 ms内对其所有存储单元恢复一次原状态这个过程称为再生或刷新。 由千它与静态 RAM 相 比具有集成度更高、功耗更低等特点目前被各类计算机广泛应用。 动态 RAM 的基本单元电路 三管 MOS 动态 RAM 基本单元电路 读操作当读选择线被选中时晶体管T2导通若存储在 C g \text{C}_\text{g} Cg上的电荷足够则T1导通那么T1和T2接地使读数据线降为低电平读出0若 C g \text{C}_\text{g} Cg的电荷不足以导通T1则读数据线保持高电平不变。 因此我可以发现读出的信息与原存入的信息是反相的若要恢复真正的数据需要将读出的数据进行取反。 写操作在写操作期间写选择线被选中晶体管T3导通允许电流通过写数据线流向电容Cg。写入数据是正相的。 三管 MOS 动态 RAM 结构示意图 单管 MOS 动态 RAM 基本单元电路 16 Kx 1 位 4116 动态 RAM 存储矩阵示意图 动态RAM读时序 先用 R A S ‾ \overline{\mathrm{RAS}} RAS将行地址送入行地址缓冲器再由 C A S ‾ \overline{\mathrm{CAS}} CAS送入列地址缓冲器。地址确定才能读因此 D O U T \mathrm{D}_\mathrm{OUT} DOUT有效在行列地址选通之后读信号结束后数据还存在一定时间在线路上的传输因此 D O U T \mathrm{D}_\mathrm{OUT} DOUT必须滞后。 动态RAM写时序 同样的先用 R A S ‾ \overline{\mathrm{RAS}} RAS将行地址送入行地址缓冲器再由 C A S ‾ \overline{\mathrm{CAS}} CAS送入列地址缓冲器。但是在 W E ‾ \overline{\mathrm{WE}} WE低电平写信号生效后就要开始准备数据了因此即使 C A S ‾ \overline{\mathrm{CAS}} CAS还没有有效 D I N \mathrm{D_IN} DIN也得开始了。 等到 C A S ‾ \overline{\mathrm{CAS}} CAS有效了那么 D I N \mathrm{D_IN} DIN也稳定了。 动态 RAM 的刷新 刷新的过程实质上是先将原存信息读出再由刷新放大器形成原信息并重新写入的再生过程。由于存储单元被访问是随机的有可能某些存储单元长期得不到访问不进行存储器的 读写操作其存储单元内的原信息将会慢慢消失。 为此必须采用定时刷新的方法它规定在一 定的时间内对动态 RAM 的全部基本单元电路必作一次刷新一般取2 ms这个时间称为刷新周期又称再生周期。 刷新是一行行进行的必须在刷新周期内由专用的刷新电路来完成对基 本单元电路的逐行刷新才能保证动态 RAM 内的信息不丢失。通常有三种方式刷新集中刷新、分散刷新和异步刷新。 集中刷新集中刷新是在规定的一个刷新周期内对全部存储单元集中一段时间逐行进行刷新此刻必 须停止读写操作。 例如对 128x128 矩阵的存储芯片进行刷新时若存取周期为 0.5 µs刷新周 期为2 ms占 4 000 个存取周期则对 128 行集中刷新共需 64 µs占 128 个存取周期其余的 1 936 µ,s 共 3 872 个存取周期用来读写或维持信息如下图所示。由于在这 64 µs 时间内不能进行读写操作故称为“死时间”又称访存“死区”所占比率为 128/4000x 100% 3.2%, 称为死时间率 刷新一行占一个存储周期 分散刷新分散刷新是指对每行存储单元的刷新分散到每个存取周期内完成。 该模式中所有的行刷新被分配到了各存取周期即完成一次读/写就做一行的刷新存取周期由0.5µs扩充到了1µs这是因为前0.5µs用来进行读/写后0.5µs用来刷新这样做的好处是不存在读写停止读写的死区时间了坏处是存储周期变长了降低系统效率。 异步刷新 结合分散刷新与集中刷新每隔若干秒刷新一行。此般经过一个刷新周期后所有行都得到了刷即克服了集中刷新的长时死区效应又解决了 动态 RAM 和静态 RAM 的比较 4.2.4 只读存储器ROM
半导体ROM基本器件为两种MOS 型和 TTL 型。 掩模 ROM 有耦合元件 MOS 管的节点若导通将使列线输出为低电平列线的输出经过放大器将反相 PROM 熔丝未断和断可区别其所存信息是 1” 或“0” 。已断的熔丝是无 法再恢复的故这种 ROM往往只能实现一次编程不得再修改。 EPROM N 型沟道浮动栅 MOS 电路 在漏端 D 加上正电压会形成一个浮动栅源 S 与漏 D 之间不导通MOS管处于“0”状态。D 端不加正电压则不能形成浮动栅MOS管正常导通呈“1”状态。 用户需重 新改变其状态可用紫外线照射驱散浮动栅 2716 型 EPROM 逻辑图及引脚图 V s s V_{ss} Vss为地, V c c V_{cc} Vcc进而 V p p V_{pp} Vpp为两个电源头 C S ‾ \overline{\mathrm{CS}} CS为片选端读出时为低电平编程写入时为高电平。 P D ‾ / P r o g r \overline{\mathrm{PD}}/\mathrm{Progr} PD/Progr为功率下降编程输入端在读出时为低电平。EPROM 的改写可用两种方法一种用紫外线照射该方法不能对个别单元进行单独擦除或重写另一种方法用电气方法将存储内容擦除再重写。
4.2.5 存储器容量的扩展 位扩展 增加存储单元长度即字长 注意各芯片的数据线连接方式。 字扩展增加存储字的数量用高位地址线充当片选线 对于字扩展片选逻辑是非常重要的。 字、位扩展
4.2.6 存储器与CPU的连接 存储器与 CPU 的连接步骤 (1) 写出对应的二进制地址码 (2) 确定芯片的数量及类型 (3) 分配地址线 (4) 确定片选信号和片选逻辑以及接线 (5) 画图 存储器于CPU连接实例1 问题描述 例 4.1 设 CPU 有 16 根地址线、8 根数据 线并用 M R E Q ‾ \overline{\mathrm{MREQ}} MREQ 作为访存控制信号低电平有 效用 W R ‾ \overline{\mathrm{WR}} WR作为读写控制信号高电平为读低 电平为写。现有下列存储芯片1 Kx4 位 RAM、 4 Kx8 位 RAM、8 Kx8 位 RAM、2 Kx8 位 ROM、 4 Kx8 位 ROM、8 Kx 8 位 ROM 及 74138 译码器 和各种门电路如图 4.36 所示。画出 CPU 与存 储器的连接图要求如下 主存地址空间分配 6000H ~ 67FFH 为系统程序区。6800H ~ 6BFFH 为用户程序区。合理选用上述存储芯片说明各选几片。详细画出存储芯片的片选逻辑图。 问题解答 写出对应的二进制地址码 确定芯片的数量及类型 根据6000H~ 67FFH 为系统程序区的范围应选择 1 片 2 Kx8 位的 ROM 根据6800H~ 6BFFH 为用户程序区的范围选 2 片 1 Kx4 位的 RAM 芯片正好满足 1 Kx8 位 的用户程序区要求。 分配地址线 将 CPU 的低 11 位地址 A 10 ∼ A 0 \mathrm {A_{10}}\sim \mathrm{A_0} A10∼A0。与 2 Kx 8 位的 ROM 地址线相连将 CPU 的低 10 位地址 A 9 ∼ A 0 \mathrm {A_{9}}\sim \mathrm{A_0} A9∼A0。与 2 片 1 Kx4 位的 RAM 地址线相连。 确定片选信号和片选逻辑以及接线 由74138 译码器输入逻辑关系可知必须保证控制端 G 1 \mathrm G_1 G1为高电平 G ‾ 2 A \mathrm{\overline{G}_{2A}} G2A与 G ‾ 2 B \mathrm{\overline{G}_{2B}} G2B为低电平才能使译码器正常工作。 根据第一步写出的存储器地址范围得出 A 15 \mathrm {A_{15}} A15始终为低电平 A 14 \mathrm {A_{14}} A14始终为高电平它们正好可分别与译码器的 G ‾ 2 A \mathrm{\overline{G}_{2A}} G2A低和 G 1 \mathrm G_1 G1高对应。 而访存控制信号 M R E Q ‾ \overline{\mathrm{MREQ}} MREQ 低电平有效又正好可与 G ‾ 2 B \mathrm{\overline{G}_{2B}} G2B低对应。剩下的 A 13 、 A 12 、 A 11 \mathrm{A}_{13}\mathrm{~、A}_{12}\mathrm{~、A}_{11} A13 、A12 、A11可分别接到译码器的 C、B、A 输入 端。 其输出 Y 4 ‾ {\overline{\mathrm{Y_4}}} Y4 有效时选中 1 片 ROM Y 5 ‾ {\overline{\mathrm{Y_5}}} Y5 与 A 10 {\mathrm{A_{10}}} A10 同时有效均为低电平时与门输出选中 2 片 RAM如图 4.37 所示。 图中 ROM 芯片的 P D / P r o g {\mathrm{PD/Prog}} PD/Prog 端接地以确保在读出时低电平有效。RAM 芯片的读写控制端与 CPU 的读写命令端 W R ‾ {\overline{\mathrm{WR}}} WR 相连。 ROM 的 8 根数据线直接与 CPU 的 8 根数据线相连2 片 RAM 的数据线分别与 CPU 数据总线的高 4 位和低 4 位相连。 画图
4.2.7 存储器的校验汉明码 简介
汉明码是由 Richard Hanming 于 1950 年提出的它具有一位纠错能力。
新增的汉明码校验位数应满足如下关系 2 k ⩾ n k 1 2^{k}\geqslant nk1 2k⩾nk1其中k为校验位位数n位数据位数。
同时我要强调的是汉明校验码的生成和校验都都两种原则希望读者要对概念进行清晰地把握不可一知半解 汉明校验 { 按配偶原则的校验 按配奇原则的校验 \text{汉明校验}\begin{cases} \text{按配偶原则的校验}\\ \text{按配奇原则的校验} \end{cases} 汉明校验{按配偶原则的校验按配奇原则的校验 这里直接阐述配偶和配奇的原则会比较抽象我们放到具体的例子中来看会更加易懂。 汉明码生成 确定校验位的个数 使用公式【 2 k ⩾ n k 1 2^{k}\geqslant nk1 2k⩾nk1】计算需要的k其中 k 是检验位的数量n 是数据位的数量 举个逆子原欲发送数据为0101此时我们可得n4则欲使 2 k ≥ 4 k 1 2^k\geq4k1 2k≥4k1k最小为3即校验位个数为3。 安置校验位 我们规定所有的校验位均放置在第 2 n 2^n 2n位也就是第1、2、4、8…位置等都是校验位n从0开始到k-1结束。 上例中k3则校验位的位置为① 2 0 1 2^01 201② 2 1 2 2^12 212③ 2 2 2^2 224即3位校验位放在最后要发送数据的第1第2第4个位置。 填充数据位: 在非校验位的其他位置上填写真正的数据填充后汉明码应如如下形式才对 c 1 c_1 c1 c 2 c_2 c20 c 3 c_3 c3101其中 c 1 c_1 c1 c 2 c_2 c2 c 3 c_3 c3为待确定值的校验位。 画表计算校验位的值 我们的原则是位置代表的二进制写好后每一行值为1的二进制位分为一组然后你会发现每一行校验位的位置是互斥的只有一个校验位值为1。也就是说一个校验位会和若干数值位搭配组成一组。 然后我们可以引出配奇和配偶原则了 配奇原则通过配置校验位 C j C_j Cj使得该组1的个数为奇数个那么该组的各位进行异或操作必为1配奇原则通过配置校验位 C j C_j Cj使得该组1的个数为偶数个那么该组的各位进行异或操作必为0 基于这样的发现我们让同一组各数据位进行异或两个二进制位异或相同结果为0不同为1运算按照配偶原则可得结果如下计算所示 配偶原则 { C 1 ⊕ 0 ⊕ 1 ⊕ 1 ⟹ C 1 0 C 2 ⊕ 0 ⊕ 0 ⊕ 1 ⟹ C 2 1 C 3 ⊕ 1 ⊕ 0 ⊕ 1 ⟹ C 3 0 \text{配偶原则}\begin{cases}C_1\oplus0\oplus1\oplus1\Longrightarrow C_10\\ C_2\oplus0\oplus0\oplus1\Longrightarrow C_21\\ C_3\oplus1\oplus0\oplus1\Longrightarrow C_30 \end{cases} 配偶原则⎩ ⎨ ⎧C1⊕0⊕1⊕1⟹C10C2⊕0⊕0⊕1⟹C21C3⊕1⊕0⊕1⟹C30 我们怎么理解上面的 C 1 C 2 C 3 C_1 C_2C_3 C1C2C3的取值 【 C 1 C_1 C10】是因为和它一组的数据位为011中有偶数个1按照配偶原则已经有偶数个1了那我就不用管了反之看第二组【 C 2 C_2 C21】,这是因为第二组的数据位为001只有奇数个1按照配偶原则 C 2 C_2 C2要置1才能保证第二组的1为偶数个。第三组同理。 刚好在这里把配奇的原则也讲一下上面的 C 1 C 2 C 3 C_1 C_2C_3 C1C2C3如果按照配奇原则会是多少呢如下如果你理解了配偶原则配奇也很简单 配奇原则 { C 1 0 ⊕ 1 ⊕ 1 ‾ ⟹ C 1 1 C 2 0 ⊕ 0 ⊕ 1 ‾ ⟹ C 2 0 C 3 1 ⊕ 0 ⊕ 1 ‾ ⟹ C 3 1 \text{配奇原则}\begin{cases}C_1\overline{0\oplus1\oplus1}\Longrightarrow C_11\\ C_2\overline{0\oplus0\oplus1}\Longrightarrow C_20\\ C_3\overline{1\oplus0\oplus1}\Longrightarrow C_31 \end{cases} 配奇原则⎩ ⎨ ⎧C10⊕1⊕1⟹C11C20⊕0⊕1⟹C20C31⊕0⊕1⟹C31 可见配奇的结果和配偶的结果刚好相反这是因为异或操作的原理使得如果同一组中的数据位有偶数个1那么异或必为0那么取反得校验位为1那么组合起来数据位有偶数个1校验位有1个1相加肯定是奇数咯1的个数就是奇数个咯完成奇配置。 书写完整的汉明码配偶原则 如第四步所计算得到三个校验位的值后将其值填充到校验位所对应的位置将校验位的值填充进行写出完整的汉明码上例的汉明码为 1234567 C 1 C_1 C1 C 2 C_2 C2 P 1 P_1 P1 C 3 C_3 C3 P 2 P_2 P2 P 3 P_3 P3 P 4 P_4 P40100101 书写完整的汉明码配奇原则 1234567 C 1 C_1 C1 C 2 C_2 C2 P 1 P_1 P1 C 3 C_3 C3 P 2 P_2 P2 P 3 P_3 P3 P 4 P_4 P41001101 汉明码校4验 按照配偶原则假设我们收到了0110101已知这是一个传输出错的汉明码 按照配偶原则假设我们收到了1001100已知这是一个传输出错的汉明码 提取小组配偶原则 0110101总位数为7则易推得校验位为3位再根据分组规则我们可得到三组数据如下 组113570111组223671101组345670101 提取小组配奇原则 1001100总位数为7则易推得校验位为3位再根据分组规则我们可得到三组数据如下 组113571010组223670000组345671100 校验配偶原则 我们按照配偶原则将原来的分组的各组各位异或运算若为0则表示该位没出错否则表示出错。 上述汉明码我们进行如下计算 g 1 0 ⊕ 1 ⊕ 1 ⊕ 1 1 g 2 1 ⊕ 1 ⊕ 0 ⊕ 1 1 g 3 0 ⊕ 1 ⊕ 0 ⊕ 1 0 g10\oplus1\oplus1\oplus11\\ g21\oplus1\oplus0\oplus11\\ g30\oplus1\oplus0\oplus10 g10⊕1⊕1⊕11g21⊕1⊕0⊕11g30⊕1⊕0⊕10 欸汉明码只能纠错1位那到底是哪一位出错了呢其实呀这里并不能只管看出来但是汉明码的神奇之处就在于校验后的k位数值的二进制逆序组合转化为十进制表示的数值就是出错的位置。 如上例计算完得到 g 1 g 2 g 3 g_1g_2g_3 g1g2g3110我们逆序得到011其十进制表示3那么就是第三位出错了瞅瞅是不是发的是0100101接收到的是0110101,确实是第3位出错了。 校验配奇原则 我们按照配奇原则将原来的分组的各组各位异或后取反运算若为0则表示该位没出错否则表示出错。 上述汉明码我们进行如下计算 g 1 1 ⊕ 0 ⊕ 1 ⊕ 0 ‾ 1 g 2 0 ⊕ 0 ⊕ 0 ⊕ 0 ‾ 1 g 3 1 ⊕ 1 ⊕ 0 ⊕ 0 ‾ 1 g1\overline{1\oplus0\oplus1\oplus0}1\\ g2\overline{0\oplus0\oplus0\oplus0}1\\ g3\overline{1\oplus1\oplus0\oplus0}1 g11⊕0⊕1⊕01g20⊕0⊕0⊕01g31⊕1⊕0⊕01 此时得到 g 1 g 2 g 3 g_1g_2g_3 g1g2g3111逆序得到111。111十进制表示7那么第七位出错了检查一下呗发的是1001101接收到的是1001100,确实是第7位出错了。 4.2.8 提高访存速度的措施多位交叉 多体并行系统高位交叉可以用于容量的扩展低位交叉可以提高带宽和访问速度 高位交叉顺序编址提升容量 低位交叉各个体轮流编址提升带宽 四体低位交叉存储器存取周期为T总线传输周期地址信号通过总线传输的时延为 τ \tau τ 为实现流水线方式存取应满足 T 4 τ \tau τ 对于低位交叉的存储器连续读取n个字所需的时间 t i t_i ti 为 t 1 T ( n − 1 ) τ t_{1}T(n-1)\tau t1T(n−1)τ 若采用高位交叉编址则连续读取 n个字所需的 时间 t 2 t_2 t2为 t 2 n T t_2nT t2nT
4.3 高速缓冲存储器
4.3.1 概述 程序局部性原理 时间局部性被引用过一次的存储器位置在未来会被多次引用通常在循环中。空间局部性如果一个存储器的位置被引用那么将来他相邻的位置也会被引用。 存储墙 存储器提供数据的速度远远落后处理器处理数据的速度存储器速度成为各类计算体系的最大瓶颈。 Cache——主存的基本结构图 在图中主存与缓存之间块的数量是有着巨大差异的因此必须有一种方案使得缓存的块能对应到主存的块上这种方式是做标记比如上图Cache字块0的标记是0因此字块0存储的信息来自于主存的信号0。 命中与未命中 命中【主存块】 调入 缓存【主存块】与【缓存块】建立 了对应关系未命中主存块 未调入 缓存主存块与缓存块 未建立 对应关系 Cache的命中率、Cache-主存平均访问时间、访问效率 命中率 h N c N c N m h\frac{N_c}{N_cN_m} hNcNmNc 其中 N c N_c Nc 为访问 Cache 的总命中次数 N m N_m Nm为访问主存的总次数 h h h为命中率 Cache-主存平均访问时间 t a h t c ( 1 − h ) t m t_{_a}ht_{_c}\left(\begin{array}{c}1-h\end{array}\right)t_{_m} tahtc(1−h)tm 其中 t c t_{c} tc为命中时的 Cache 访问时间 t m t_{m} tm为未命中时的主存访问时间 1 − h 1-h 1−h 表示未命中率 t a t_{a} ta为Cache-主存平均访问时间 访问效率 e t c t a × 100 % t c h t c ( 1 − h ) t m × 100 % e\frac{t_c}{t_a}\times100\%\frac{t_c}{ht_c(\begin{array}{c}1-h\end{array})t_m}\times100\% etatc×100%htc(1−h)tmtc×100% Cache的基本结构 主存块调入Cache的任务全部由硬件自动完成 Cache的读数操作流程图 Cache的写操作方法 写直达法 写操作时数据既写入 Cache 又写入主存。它能随时保证主存和 Cache 的数据始终一致但增加了访存次数这种方法由于需要和内存进行容量匹配因此数据范围较小。 写回法 写操作时只把数据写入 Cache 而不 写入主存仅当 Cache 数据被替换出去时才写回主存。 统一缓存与分立缓存 统一缓存是指指令和数据都存放在同一缓存内的 Cache分立缓存是指指令和数据分别存 放在两个缓存中一个称为指令 Cache另一个称为数据 Cache如果计算机的主存是统一的指令、数据存储在同一主存内则 相应的 Cache 采用统一缓存如果主存采用指令、数据分开存储的方案则相应的 Cache 采用分 立缓存。当采用超前控制或流水线控制方式时一般都 采用分立缓存。
4.3.2 Cache-主存地址映射 直接映射 全相联映射 优点方式灵活命中率也更高 缩小了块冲突率缺点访问 Cache 时主存字块标记需要和 Cache 的全部“标记”位进行比较才能 判断出所访问主存地址的内容是否已在 Cache 内 组相联映射 当r0时是直接映射当rc时是全相联映射。
4.4 循环冗余校验码 编码步骤 给定【信息码】给定【生成多项式】根据【生成多项式】确定确定校验位的长度【k】以及【模2除的除数】确定被除数【被除数信息码k个0】使用模2除方法确定余数【余数作为校验位】用【校验位】替换刚才添加到信息码后面的0后面组成【CRC】码 举例 已知有效信息为 1100试用生成多项式 G(x) 1011 将其编成 CRC 码。 确定校验位长度k-1以及除数 将生成多项式还原成代数形式为 G ( x ) x 3 x 1 \mathrm{G(x)x^3x1} G(x)x3x1 那么有 k m a x ( i G ( x ) ) 3 \mathrm{kmax(i_{G(x)})}3 kmax(iG(x))3 其含义为【k生成多项式的最高次3】。 且我们有【除数生成多项式的数值形式】所以题目已经给出了除数就是【1011】 确定被除数 有效信息为【1100】【k3】那么【被除数有效信息0*k1100 000】 确定校验位余数 除数商11101011被除数110000010111110101110101011010余数 书写CRC码制 1100 010 校验步骤 校验直接用收到的CRC码模2除我们当初确定的除数如果余数为0则信息未出错否则出错。 假设使用上例生成的CRC码且我们收到的是1100 011除数为1011 则经如下校验发现出错因为余数不为0余1: 除数商11101011被除数1100011101111101011101110110011余数