两种模式:
大端(存储)模式:是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中小端(存储)模式:是指数据的低位保存在内存的低地址中,而数据的高位,保存在内存的高地址中这边建议利用C措辞进行理解;环境为:VS2019
扩展:

两种方法判断机器存储是大端还是小端
/ 返回1为小端/int check_up(){int i = 1;//0x00000001 内存中表示地址为:0x01000000char p = (char)&i; //01return p;}int main(){int ret = check_up();if (ret == 1){printf("小端");}else{printf("大端");} return 0;}
int check_up(){ union un{char c;int i;}u;u.i = 1;return u.c;}int main(){int ret = check_sys();if (ret == 1){printf("小端");}else{printf("大端");}return 0;}
一样平常x86架构的打算机采取小端办法
假设一台机器地址线为24根
寻址办法
寻址范围
按字节寻址
224=16MB
若字长为16
按字寻址
8MW
若字长为32
按字寻址
4MW
按字节寻址,默认一个字为8bit(即字长为8),以是范围为:224=16MB(兆字节)
按字寻址,我个人理解:把按字转换为按字节;由于字长为16,以是-为2个Byte,以是寻址范围为:8MW(兆字 Word),也可以写成:16MB,不过在这里 1W=2Byte;依此类推
4. 主存的技能指标存储容量 主存 存放二进制代码的总位数存储速率存取韶光访问韶光读出韶光写入韶光存取周期 // 连续两次独立的存储器操作(读或写)所需的最小间隔韶光读周期写周期存储器的带宽4.2.2 半导体存储芯片简介1. 基本构造读写掌握线:将CPU的掌握旗子暗记传给读写电路地址线:将CPU须要的地址传输到译码驱动中,然后由译码驱动进行翻译,然后进行寻址,是单向的地址线的数量决定了存储单元的数量,假如有8根地址线:0000 0000 统共有几种排列组合,即2的8次方。每一种组合都对应一个存储单元。数据线:将存储体中的数据读出,放入CPU;将CPU打算完毕的数据存入存储体。是双向的。数据线的数量决定了存储单元的大小,即一个存储单元能够存多少数据。比如八根数据线0000 0000, 进行一次读取的办法。片选线:一个半导体存储器是有多个芯片构成的,以是在调用一个存储器中的详细的存储单元时,确定是哪一个芯片2. 打算芯片的容量芯片容量 = 地址线的寻址能力 数据线的数量 = 存储单元的数量 每一个存储单元的容量
如下所示,根据地址线和数据线打算芯片的容量:2^104=1K4...
3. 片选线的浸染让某一个芯片或者某些芯片同时进行事情
扩充存储单元容量:如图,16K x 1位的芯片,统共有16K个存储单元,每一个存储单元有1位。若要存储八位数据,将八个存储单元进行并联,每一个存储芯片存储八位数据中的一位。每一次读取数据都同时读取八位芯片地一位,统一输出便是八位。4. 译码驱动办法线选法重合法4.2.3 随机存取存储器(RAM)1. 静态RAM(SRAM)基本单元电路的构成存储0和1旗子暗记的办法:静态RAM保存的0和1的事理便是利用触发器。T1~T4为4根管子构成的双稳态触发器,不易丢失或者是损耗,它在两端存储信息,左端保持输入旗子暗记的非,右端保存原输入旗子暗记。
移码驱动办法:重合法——分别通过行地址和列地址的联合选中才能输出,每一份存储单元都对应一个行列地址坐标(行地址X,列地址Y)。
T5和T6是行地址选择开关:当接通的时候,对应的旗子暗记可以通过两端分别经由行选择开关输出到列选择开关终止。
T7和T8是列地址选择开关:当开关接通时,许可数据从双稳态触发器两端输出,经由行地址选择器,再通过列地址选择器,实现终极的输出。只有行、列当选中的某个单元存储电路,在其行列通门同时被打开时,才能进行读出信息和写入信息的操作。
读写开关,通过输入对应的读写掌握旗子暗记选择是否打开,通过数据。
总结:一个SRAM的基本单元须要由8个电路基本元件构成
静态RAM的基本读操作
静态RAM的基本写操作静态RAM举例——Intel 2114Intel 2114 外特性在Intel 2114芯片中,WE为读写掌握旗子暗记,个中低电平为写,高电平为读。CS为片选旗子暗记,只有CS旗子暗记是低电平的时候Intel 2114芯片才会选中,芯片左侧A0-A9是10条地址线,可以看出芯片是1K的存储,右侧是4根数据线,可以读出和写入4位旗子暗记,因此可以看出,芯片的存储容量为1K X 4位 。
Intel 2114 RAM 矩阵 (64 × 64) 读
以 Intel 2114芯片 组成的 RAM 矩阵 (64 × 64) ,行地址有64个,列地址一共分为4组,每一组一共有16列。如下图,当行地址线为000...0(64个)时,芯片的第一行被全部选中
当列地址线为000...0(16个)时,每组中的第一列全部当选中,即0,16,32,48当选中
当 WE为读旗子暗记(高电平),读电路有效, CS片选旗子暗记为低电平时,芯片当选中,行列交叉点地址的旗子暗记便通过电路通路被读出来
Intel 2114 RAM 矩阵 (64 × 64) 写
Intel 2114 RAM 矩阵的写跟读基本上是同等的,只是WE被换成了写旗子暗记(低电平),从I/O数据线写入数据
2. 动态RAM(DRAM)
动态RAM保存0和1的方法是电容,当电容保存电荷时为1,不保存电荷(没充电)时为0;
常见的动态RAM基本单元电路有三管式和单管式两种,他们共同的特点是靠电容存储电荷的事理来寄存信息。
三管式动态RAM电源电路信息读出如果预充电旗子暗记有效,T4开关打开,V(DD)进行充电,会对读数据线进行充电,读数据线有效(变成高电平,表示为1),如果进行读出,读选择线有效,T2开关被打开。
如果C(g)当中没有保存有电容(存储0),那么T1开关为低电平(表示为0),T1开关不会被打通,读数据线仍旧保持高电平,读出的数据为1;如果C(g)电容当中保存有电荷(存储为1),那么T1开关为高电平(表示为1),此时T1和T2开关同时放电,使得读数据线由高电平变成了低电平(表示为0),由这个过程,我们可以看出读出的信息和原存的信息是相反的。(跟读放大器有关)
信息写入
如果进行写入,写选择线有效,T3开关被打开,写数据线会通过T3开关向C(g)进行充电或者放电。如果写选择线是高电平,那么写入的旗子暗记便是高电平,同样,如果写选择线是低电平,写入的便是低电平。因此写入与输入信息相同。
三管DRAM实例——Intel 1103 读
三管动态 RAM 芯片 (Intel 1103) 一共有A0~A9 10个 地址线,因此芯片的存储容量为1K; 每次读出和写入都为一位旗子暗记,因此是1K x 1位容量的芯片。行地址经由译码后,每一行都对应了两个掌握旗子暗记,一个是读选择旗子暗记和一个是写选择旗子暗记,读和写分别利用不同的旗子暗记进行掌握。如图,是对第0行第0列的地址进行读数据的电路图,第0行第0列的数据经由读掌握线进入到读写掌握电路进行输出。
刷新放大器:利用电容存储电荷的事理表示0和1时,电容会泄电,一段韶光后,电容里边的旗子暗记会消逝,因此须要定期利用刷新放大器对电容旗子暗记进行重写。
三管DRAM实例——Intel 1103 写
写入旗子暗记,如果行地址为11111,即行地址为31,那么第31行全部当选中,所有的写选择线有效,给出列地址为00001,那么第31行的第一列的原件为我们须要写入数据的操作原元件。数据通过D端进行输入,经由读写掌握电路,通过写数据线被写入到指定原件的位置。
单管DRAM电源电路
读出:C(s)当中如果保存了电荷(表示1),那么数据线读出便是高电平。
写入:单管动态RAM中字线是掌握线,如果字线充电,T开关被打开,C(s)可以进行充电或者放电。
单管DRAM 4116 (16K × 1位)外特性
单管动态 RAM 4116 (16K × 1位)的7位行地址和列地址分两次传送,第一次传送7位行地址,保存在行地址缓存器当中,第二次传送列地址,保存在列地址缓存器当中;行地址和列地址分别经由行译码和列译码往后,选中给定的存储单元进行输入和输出。
I/O缓存器,缓存了输入和输出数据,连接I/O缓存器两端的数据输入和输出寄存器可以掌握数据的输入和输出。时序与掌握:由行选中旗子暗记RAS、列选中旗子暗记CAS和读写旗子暗记WE组成,分别天生了行时钟、列时钟和写时钟,掌握了芯片内部的读和写操作。单管DRAM实例——Intel 4116(16K x 1位)读
下图是单管动态 RAM 4116 (16K × 1位) 芯片读图示,把稳:个中横线电路为列选择旗子暗记,竖线电路为行选择旗子暗记。
RAM 4116芯片中的读放大器的事情事理为跷跷板电路,其旁边两侧电平相反。
如果行地址给出的是0111111(一个0,6个1),那么第63行当选中;然后给出列地址为7个0,那么第0列将当选中,第0列的列选旗子暗记有效,对应开关被打开。数据就会经由读放大器的右侧(0变成1),经由列选开关,送入到读/写线上,然后经由I/O缓冲,通过输出驱动送出来。
单管DRAM实例——Intel 4116(16K x 1位)写
下图是单管动态 RAM 4116 (16K × 1位) 芯片写图示,跟读数据的逻辑基本同等,数据经由读放大器时(1变成0),读出时(0变成1),经由两次反向,使得读写数据保持精确。
总结:如果你想往DRAM中写入1,其实在DRAM中存的是0
读出时,你读到的是1,其实在DRAM中存的是0
动态RAM的刷新
为什么要刷新?
电容存储电荷的事理表示0和1时,电容会泄电,一段韶光后,电容里边的旗子暗记会消逝,因此须要定期进行动态RAM刷新完成对电容旗子暗记的重写。
动态RAM刷新只跟行地址有关,跟列地址无关。每次刷新的都是一行的数据,而不是某一个存储单元的数据。
集中刷新
所谓集中是刷新便是把刷新韶光集中在一起进行操作,如图,动态RAM在2ms内对128行进行集中式刷新,2ms内一共是4000个存储周期(1个存取周期为0.5微秒),前3872个周期可以供CPU或者I/O进行读写操作,后128个周期专用于进行集中式刷新,这段韶光内CPU或者I/O都不可以与动态RAM进行数据信息交流,因此这段韶光也被称为去世区。以下便是去世区比重的打算结果
分散刷新
分散式刷新便是把刷新韶光分散放在一个读写周期内,如图,T(c)为一个读写周期,t(M)为数据的读写操作,t(R)为刷新操作。分散刷新实际上把原来的读写周期韶光进行了延长,使得芯片的刷新频率上升,芯片性能低落。唯一的优点是,分散刷新没有去世区。
异步刷新(分散刷新与集中刷新相结合)
在2ms的周期内,芯片的总刷新行数为128行,因此,我们把这个韶光分成128份,芯片每隔15.6us(微秒)就须要刷新一行。在15.6us韶光内,刷新韶光可以放在任何一个周期上,因此相称于一个集中式刷新的办法,而相对付全体韶光周期2ms来说,这种办法又是一种分散式刷新。
3. 动态RAM和静态RAM的比较
动态RAM的单元电路由一个晶体管和一个电容构成,总体比较大略;静态RAM比较繁芜,每一个单元单路包含6个晶体管,以是集成度比较低。从芯片引脚上来说,动态RAM行地址和列地址可以分别进行传送,节约了引脚数量,减少了封装体积。但是,动态RAM行地址和列地址分别进行传送时,花费了实行韶光。动态RAM只是对电容进行充电、放电和刷新,因此功耗比较低,而静态RAM须要由6条晶体管协同事情,晶体管进行事情时须要保持通电,因此所需功耗比较大。动态RAM对电容进行充电须要花费韶光且行列地址须要传送两次,比静态RAM利用触发器的事情事理速率要慢。因此,根据动态RAM和静态RAM的特点,我们一样平常选择动态RAM作为主存,静态RAM作为缓存Cache(加快速率)。
4.2.4 只读存储器(ROM)1. 概述
只读存储器(Read-Only Memory,ROM)以非毁坏性读出办法事情,只能读出无法写入信息。信息一旦写入后就固定下来,纵然割断电源,信息也不会丢失,以是又称为固定存储器。
ROM所存数据常日是装入整机前写入的,整机事情过程中只能读出,不像随机存储器能快速方便地改写存储内容。ROM所存数据稳定 ,断电后所存数据也不会改变,并且构造较大略,利用方便,因而常用于存储各种固定程序和数据。
只读存储器的发展进程
2. 只读存器的类型掩模ROM(MROM)——只可读
这种ROM是由制造厂家利用一种掩膜技能写入程序的,掩膜ROM制成后,用户不能修正,根据制造工艺可以将它们分为MOS型和双极型两种。MOS型ROM功耗小、速率慢,适用于一样平常微机系统;而双极型则速率快、功耗大,适用于速率较高的打算机系统。
上图是掩膜型ROM构成的事理图,图中是个大略的4x4位MOS(或双极型)管ROM,采取单译码构造,A0、A1译码后可译出四种状态,输出4条选择线,可分别选中4个单元,每个单元有4位输出。图中所示的矩阵中,在行和列的交点,有的连有MOS管,有的没有,这是工厂根据用户供应的数据对芯片图形(掩膜)进行二次光刻所决定的,以是称为掩膜ROM。
MOS型ROM, 行列选择线交叉处有 MOS 管为“ 1 ” ,行列选择线交叉处无 MOS 管为“ 0 ”
PROM(一次性编程)
可编程只读存储器 (英语:Programmable read-only memory),缩写为 PROM 或 FPROM,是一种电脑存储影象晶片,它许可利用称为PROM编程器的硬件将数据写入设备中。在PROM被编程后,它就只能专用那些数据,并且不能被再编程,这种影象体用作永久存放程式之用。常日会用于电子游戏机、或电子词典这类可翻译措辞的产品之上。
采取毁坏性编程,且只能编程一次,如果编程有缺点,只能重新购买芯片。
EPROM(多次行编程)
EPROM采取N型沟道浮动栅MOS电路,须要保存0,D端加正电压,形成浮动栅,须要保存1,D端不加正电压,不形成浮动栅。
编程完成后,EPROM只能用强紫外线照射来擦除。通过封装顶部能瞥见硅片的透明窗口,很随意马虎识别EPROM,这个窗口同时用来进行紫外线擦除。可以将EPROM的玻璃窗对准阳光直射一段韶光就可以擦除。
EEPROM(多次性编程)
EEPROM (Electrically Erasable Programmable read only memory)是指带电可擦可编程只读存储器。是一种掉电后数据不丢失的存储芯片。 EEPROM 可以在电脑上或专用设备上擦除已有信息,重新编程。一样平常用在即插即用。
常用在接口卡中,用来存放硬件设置数据。
也常用在防止软件造孽拷贝的"硬件锁"上面。
EEPROM的特点
电可擦写局部擦写全部擦写Flash Memory(闪速型存储器)快闪存储器(英语:flash memory),是一种电子式可打消程序化只读存储器的形式,许可在操作中被多次擦或写的存储器。这种科技紧张用于一样平常性数据存储,以及在打算机与其他数字产品间交传播输数据,如储存卡与U盘。
闪存是一种非易失落性存储器,即断电数据也不会丢失。由于闪存不像RAM(随机存取存储器)一样以字节为单位改写数据,因此不能取代RAM。
闪存卡(Flash Card)是利用闪存(Flash Memory)技能达到存储电子信息的存储器,一样平常运用在数码相机,掌上电脑,MP3等小型数码产品中作为存储介质,以是样子小巧,有如一张卡片,以是称之为闪存卡。
3. 几种只读存储器大略比拟EPROM 价格便宜 集成度高——多次编程,紫外线擦除EEPROM 电可擦洗重写——局部擦除和全部擦除Flash Memory 比 EEPROM快 具备 RAM 功能4.2.5 存储器与CPU的连接1. 存储器容量的扩展位扩展——增加存储字长
位扩展的目的是为了增加存储字的字长。
假设现在有1K(1024个)4位的存储芯片(容量为4096bit)多少,要想构成一个1K8位的存储器,我们可以利用两片1K4位的存储芯片来构成,如下图
我们通过片选旗子暗记CS同时选中两片存储芯片,同时进行8位数据的读出和写入,例如,每片芯片有10跟地址线,4跟数据线,它们的连接办法如下:
对付如上例子,位扩展的关键便是将两个存储芯片当成一个存储芯片来用,让两个存储芯片同时事情,同时当选中,同时做读操作,同时做写操作,要想担保同时,便是把两个芯片的片选CS,用相同的旗子暗记进行连接。
字扩展——增加存储字的数量
假设现在有1K8位的存储芯片多少,要想构成一个2K8位的存储器,我们可以利用两片1K8位的存储芯片来构成,如下图
每一个存储芯片的容量是1K8位,我们要构成一个2K(11位2进制位)8的存储器,而存储芯片的每一片的容量是1K(10位二进制位),因此我们须要利用两片1K8位的存储芯片来构成,如图:
统共有11条地址线,对付A10,我们将它当成片选旗子暗记线,当A10=0时,片选选中左边的存储芯片事情,右边不事情,当A10=1时,通过一个取反,片选选择右边的芯片事情,这从外部看来便是从 0 0000000000 ~ 1 1111111111 刚好是从0~2047共2K个存储单元,每一个存储单元存放8位的二进制代码。
字、位扩展
假设现在有1K4位的存储芯片多少,要组成4K8位的存储器,我们可以利用8片1K4位的存储芯片来构成。首先拿两片,来构成1K8位这样一组芯片,接着,我们须要4组来构成4K8位的存储器。
那么如何进行连接呢?
实在便是将上述两种方法进行综合,4K8的存储器,4K(即12根地址线),8bit,便是8根数据线,1K4bit的芯片有须要10根地址线,也便是说系统给出的从A0-A11 12根地址线,个中的10根A0-A9是直接送到芯片当中构成1K8的一个小的存储器,剩余的2根地址线(4个地址)A11-A10,我们用来做片选旗子暗记,如下图
4K的空间我们分配到了4个存储器当中,每个存储器包含了两片1K4bit的存储芯片,
第一个存储器的范围为 00 0...0(10个0)~00 1...1(10个1)第二个存储器的范围为 01 0...0(10个0)~01 1...1(10个1)第三个存储器的范围为 10 0...0(10个0)~10 1...1(10个1)第四个存储器的范围为 11 0...0(10个0)~11 1...1(10个1)由A11和A10来判断要访问的地址在哪一个存储器当中,我们采取译码器进行译码,当
A11 =0 A10=0 选择第一个存储器A11 =0 A10=1 选择第二个存储器A11 =1 A10=0 选择第三个存储器A11 =1 A10=1 选择第四个存储器2. 和CPU连接地址线的连接:由于CPU地址线一样平常多于存储芯片地址线,因此一样平常CPU低位地址线与存储芯片相连,高位地址线用作掌握旗子暗记。数据线的连接读/写命令线的连接:CPU读/写命令线一样平常可直接与存储芯片的读/写掌握审察连,常日高电平为读,低电平为写。片选线的连接:由于存储器是由许多存储芯片组成的,存储芯片的片选掌握线和CPU的高位地址有关,CPU的高位地址线经由译码器译码,和访存掌握旗子暗记共同浸染,产生存储芯片的片选旗子暗记。访存掌握旗子暗记,例如,低电平有效时,访问存储器;高电平有效时,访问I/O。合理选择存储芯片:系统程序区该当选择ROM ,用户程序区选择RAM。其他,比如时序、负载等3. 例题解题步骤:
① 写出对应的二进制地址码CPU有16根地址线,解释芯片的寻址范围是16 x 16 = 64 K;MREO作为访存掌握旗子暗记,低电平时访问存储器(顶方的横线表示),高电平时访问I/O;
系统缓存区:6000H~67FFH换算成地址范围 ——> 67FFH - 6000H= (67FFH+1-6000H) = 800H = 8 x 16 x 16 = 2 x 2^10 = 2K;
用户缓存区:6800H~6BFFH换算成地址范围 ——> 6BFFH - 6800H= (6BFFH+1-6800H) = 400H = 4 x 16 x 16 = 1 x 2^10 = 1K;
以上为10进制的换算,我们换成对应的二进制表示为:
② 确定芯片的数量及类型
根据地址范围的容量以及该范围在打算机中的浸染,选择存储芯片。
根据6000H~67FFH为系统程序区的范围,应选择1片2K x 8 位的ROM,若选择其他的ROM,都超出了2K x 8 位的系统程序区范围。
根据6800H~6BFFH为用户程序区的范围,选2片 1K x 4位的RAM芯片恰好知足1K x 8位的用户程序区哀求
③ 分配地址线
将CPU的低11位地址A10~A0与2K x 8 位的ROM地址线相连;将CPU的低10位地址A9~A0与2片 1K x 4位的RAM地址线相连。剩下的高位地址与访存掌握旗子暗记MREQ共同产生存储芯片的片选旗子暗记。
④ 确定片选旗子暗记
4.2.6 存储器的校验1. 为什么要进行校验?
以内存为例,内存是电子设备,信息保存在电容当中,若采取静态RAM,则是保存在四管的触发器当中。若内存所处的电磁环境比较繁芜,或在空间环境下受到带电粒子的打击,可能造成电容的充放电或触发器的翻转,存在在存储器的信息可能会出错。
2. 编码的最小间隔
编码的检测能力和纠错能力与任意两组合法代码之间二进制位的最少差异数有关。
先阐明什么是差异数:
假设有2个二进制数:0011、0101;
我想把0011改成0101,我只要把0011中的第2位和第3位改成 1 和 0 就行
以是这两个数之间的差异数为 2
阐明:
合法凑集 {000 , 001 , 010 , 011 , 100 , 101 , 110 , 111} ,在此凑集中,改变任意一个代码,比如改为001,001在合法凑集中,以是不论改哪一个代码,总能在凑集中找到对应的合法代码,因此这组合法代码,最少差异数为1,不能检测出错误,即 检0位错,纠0位错。
合法凑集 {000 , 011 , 101 ,110},在此凑集中,改变任意一个代码,比如改为001,001不在合法凑集中,那么可以检测出错误,但是不能确定是凑集中哪一个代码发生了缺点,由于所有的合法代码改变一位后,都可以变成001,所有两组合法代码之间二进制位的最少差异数为2时, 检1位错,纠0位错。
合法凑集 {000 , 111} ,在合法凑集中,改变任意一个代码,比如改为001,001不在合法凑集中,那么可以检测出错误,而且根据缺点率错一位的机率为90%的统计,我们认为是代码000缺点了一位,因此,两组合法代码之间二进制位的最少差异数为3时, 检1位错,纠1位错 。
检错纠错位数和码距之间的关系
L - 1 = D + C (D>=C,检测缺点的位数总是大于即是纠正缺点的位数)
L ——> 编码的最小间隔D ——> 检测缺点的位数C ——> 纠正缺点的位数因此,我们可以知道,如果想要检1位错,纠1位错,编码的最小间隔为3。
3. 汉明码校验奇偶校验
所谓的奇偶校验,便是在原校验数据上添加一位1或者0,使数据中的1的个数为奇数个或者偶数个。为奇数个为奇校验,为偶数为偶校验。
以偶校验为例,上图,添加一位1后,使校验数据中的1的个数为偶数个,如果吸收的结果1的位数不为偶数,那么可以考验出原数据涌现了缺点。
其余,为了更进一步细分缺点校验,我们可以把原校验数据进行分组,如上,我们把校验数据划分为2组,分别添加校验位。
汉明码打算
汉明码校验是一种非划分办法(组与组之间是有重叠的)
汉明码的目的是能够纠正一位误码( 汉明码默认一串数据只错一位)。假设信息码共有 n 位,汉明码共有 r 位,那么统共的码长为 n + r 位。为能检测出 n + r 位编码中个中一位的缺点,汉明码必须能够表示至少 n + r + 1 种状态,个中 n + r 种表示 n + r 位编码中有一位缺点,其余还须要一种来表示全体编码精确无误。则汉明码的长度须要知足下列关系:
2^r >= n + r + 1
信息码 n 位,汉明码 r 位,统共码长 n + r 位
汉明码位置
汉明码的校验码的位置必须是在2^n位置(n从0开始,分别代表从右边数起的第1,2,4,8,16...),信息码也便是在非2^n位置。
例如:对1,2,3,4,5,6,7进行汉明码校验,按照二进制编码,如果二进制码的第一位为1,分为第一组,二进制编码的第二位为1,分为第二组,以此类推...
分完组后,校验码的位置必须是在 2^n的位置,我们知道最大数7的二进制码为111,因此,根据汉明码长度须要知足的关系式:2^r >= 3 + r + 1;可以求得校验码的最小长度为3位;
例:
求 0101 按 “偶校验” 配置的汉明码
∵ n = 4
根据 2^r ≥ n + r + 1
得 r = 3;即校验码有3位
汉明码排序如下:
我们知道,校验码有3位,先在1,2,4位霸占校验码的3个位置,空余的位置把须要校验的二进制码依次添补上去。先看第一个校验码,第一组校验1,3,5,7位,排序中,3,5,7的位置为011,根据偶校验原则,我们只需在前边补0就可以,那么0便是第一个校验码。根据此方法,可以得出后两个校验码为10;
因此,可以求得0101 的汉明码为 01 0 0 101
汉明码纠错
已知吸收到的汉明码为 0100111 , (按配偶原则配置)试问哀求传送的信息是什么 ?
纠错过程如下:
7位汉明码,数据码占4个,以是校验码的个数为3,一组一个校验码,即分组为3;
根据偶校验的原则,我们分别对每一位的信息进行异或运算:
这边就有一个问题:为什么这边算出来来的校验码是011,但是如果直接看汉明码的第0、1、4位为:010?
阐明:
校验位也可能出错,如果传送的信息便是错的,那么校验位也会出错;
P1:0、0、1、1 符合偶校验 = 0
P2:1、0、1、1 不符合偶校验 = 1
P3:0、1、1、1 不符合偶校验 = 1
(或者将4个数字进行异或一样的效果)
校验码是011,也便是说,第二组和第三组存在缺点,第二组和第三组共有的数据是第6位的数据, 可纠正为 01001 0 1;也可以将3位校验码排列成:110,转换为十进制为6,所以是第6位出错
故要传送的信息为 01 0 0 101 ;去除校验位,即为0101
准确来说该当是 01 0 1 101;校验位可不纠错
4.2.7 提高访存速率的方法1. 单字体系统原假设存储字长即是机器字长,也便是说CPU一次从存储器当中只能取出一条指令(与机器字长相等的数据)
单体多字系统:把存储器的存储字长加长(增加存储器的带宽),比如,CPU为16位,存储字长我们可以设计成64位,CPU每一次访问存储器,都可以访问出4个机器字(4条指令),下一次再取指令时,就可以从数据寄存器当中读取指令。
单体多字系统的毛病:
CPU如果须要存储16位数据,须要先把数据放在单字长寄存器中,再放入数据寄存器中,然后再存储到存储体中,如果想要避免无关的48位数据被修正,还要设计更繁芜的硬件逻辑。如果CPU读取的指令不是连续的存储的指令,那么取出的多余指令便是用不到的指令。2. 单体改进->多体并行系统高位交叉——用于存储容量拓展顺序对存储体进行编码(编完第一个存储体,再编第二个存储体),前两位00为存储体的编号,后四位为存储体中的地址的编号,每一个存储体都有单独的数据寄存器和地址寄存器,能独立处理读写旗子暗记,从而达到4个存储体并行事情的效果。
不敷:如果按序存储温柔次读取,那么4个存储体中,可能存在有一个存储体非常繁忙,而其他几个存储体非常空闲的情形。
高位交叉的事理便是上文中提到的:存储器容量扩展中字、位扩展
低位交叉——用于带宽访问速率提高
对高位交叉进行改进,横向对存储体进行编码(第一个存储体和第二个存储体轮流进行编码),前四位为存储体中的地址的编号,后两位为存储体的地址。
低位交叉的特点: 在不改变存取周期的条件下,增加存储器的带宽
上图显示了,在一个访存周期内,可分为4个小访存韶光,每个小的访存韶光可以分别掌握一个存储体进行读写。
设四体低位交叉存储器,存取周期为 T,总线传输周期为 τ ,为实现流水线办法存取,应知足 T = 4 τ 。
连续读取 4 个字所需的韶光为 T + (4 - 1) τ
总结:采取单体多字系统提高访存速率办法的条件是, 指令和数据在主存内必须是连续存放的,一旦碰着转移指令、或者操作数据不能连续存放,这种方法的效果就不明显。
3. 高性能存储芯片SDRAM(同步DRAM)在系统时钟的掌握下进行读出和写入—— CPU 无须等待
RDRAM
由 Rambus 开拓,紧张办理 存储器带宽 问题
带 Cache 的 DRAM
在 DRAM 的芯片内 集成 了一个由 SRAM 组成的 Cache ,有利于 猝发式读取 (连续的存储单元进行读取)
4.3 高速缓冲存储器4.3.1 概述
为什么要利用高速缓冲存储器?
利用高速缓冲存储器,须要遵照程序访问的局部性事理,即哀求CPU利用的指令,大部分都能够在缓存中找到。
三种不同类型的局部性:
韶光局部性(Temporal Locality):如果一个信息项正在被访问,那么在近期它很可能还会被再次访问。 程序循环、堆栈等是产生韶光局部性的缘故原由。空间局部性(Spatial Locality):在最近的将来将用到的信息很可能与现在正在利用的信息在空间地址上是附近的。顺序局部性(Order Locality):在范例程序中,除转移类指令外,大部分指令是顺序进行的。顺序实行和非顺序实行的比例大致是5:1。此外,对大型数组访问也是顺序的。 指令的顺序实行、数组的连续存放等是产生顺序局部性的缘故原由。4.3.2 Cache的事情事理主存与缓存按块存储,块的大小相同,块内地址相同。
cache的构造实在和内存的构造类似,也包含地址和内容,只是cache的内容除了存的数据(data)之外,还包含存的数据的物理内存的地址信息(tag),由于CPU发出的寻址信息都是针对物理内存发出的,以是cache中除了要保存数据信息之外,还要保存数据对应的地址,这样才能在cache中根据物理内存的地址信息查找物理内存中对应的数据。(当然为了加快探求速率,cache中一样平常还包含一个有效位(valid),用来标记这个cache line是否保存着有效的数据)。一个tag和它对应的数据组成的一行称为一个cache line。如下图所示,下表中的一行便是一个cache line。
知道了cache的构造之后,如何在cache中去探求对应的数据呢?大略起见,我们先选择直接映射的cache组成办法(拜会下文)进行下文的剖析。
首先对付一段物理内存(block),该物理内存上的每个字节的地址划分为以下几段:
这样的话物理内存中的数据到cache的映射关系如下图所示:
上图四的映射原则便是:根据物理地址的中间三位(index字段)来定位当前数据该当在cache的哪一行,把物理地址的tag字段和该地址对应的内容放入对应的cache line的tag字段和data字段,并把相应的valid位置置为1。那么在之后进行cache探求的时候就可以根据cache line的tag字段来辨认当前line中的数据是数据哪个block的。
上图四中的地址00 000 00~11 111 11按照图三的原则进行地址划分:地址的最高两位为Tag字段;中间三位为index字段;最低两位为Block Offset 字段。
由于Block Offset是两位,也便是一个block的大小是2²=4个字节的数据,也便是一个cache line的data字段包含4个字节的数据;index为3位,解释cache共包含2³=8个组(对付直接映射的cache,也称为8个行);很明显,cache的一个行中只能存储1 块(Block )=4字节的数据,但是按照图四的映射办法,会有2^(tag位数) = 2^2 = 4块的数映射到同一个行,此时通过Tag字段的比较来辨别是不是我们要取数据的地址,如果不是的话,也便是发生了cache的缺失落。
如图四的Block 0和Block 1的index字段都是000,按照上面的理论它们都该当映射到第 000=0行(这儿的行也便是组,由于图四是直接映射的cache),但是现在第0行的内容是K、L、M、N,也便是Block 1的内容,为什么呢?仔细看该cache line的tag=01,映射到第0行的块只有Block 1的tag字段=01,以是可以得知此时该cache line中存储的数据是Block 1的数据,此时如果CPU发出的访存要求是访问Block 0 的话,也便是发生了缺失落。此时进一步定量剖析的话,共有4个数据块竞争利用cache 第0行的位置,也便是说cache的命中率为25%。
上面的过程总结起来便是:
物理内存的索引字段(Index)选择cache 的行,通过比拟物理内存和cache line的Tag来判断是否命中。块偏移字段(Block Offset)可以从cache line的数据块中选择期望数据。把稳在这个过程中cache的index是不占空间的,它就类似于物理内存的地址,对付物理内存来说是通过地址去探求数据,对付cache来说,是通过index来找到对应的cache line,或者更普通的讲便是:cache line的地址对应的便是物理内存的index字段。
此时该cache的容量打算如下:每一个cache line的数据字段占4个字节,共2³=8行,以是数据霸占4×8=32个字节,一个cache line中tag字段和valid位占2+1=3bit,全体cache的tag+valid=3bit×8行=24bit=3Byte,常日情形下我们都因此cache中数据部分占的空间表示cache的容量,也便是32字节,但是实际上,它还额外多占用了3字节的存储空间。
上面一大段废话说的就几下几点:
tag:决定块(block)的个数index:决定存在Cache哪一行(Cache line)offset:决定Cache中data的大小(字节为单位)index+offset:决定每个块有多少个数据1. Cache的命中率主存和缓存 按块存储, 块的大小相同;缓存共有 C 块,主存共有 M 块 ,主存 M 块的数量>>(远远大于) 缓存 C块的数量
命中: 主存块 调入 缓存,主存块与缓存块 建立 了对应关系,用 标记记录 与某缓存块建立了对应关系的 主存块号
未命中: 主存块与缓存块 未建立 对应关系,主存块 未调入 缓存
Cache 的命中率 :CPU 欲访问的信息在 Cache 中的 比率 ,命中率 与 Cache 的 容量 与 块长 有关 ,一样平常每块可取 4 ~ 8 个字 , 块长取一个存取周期内从主存调出的信息长度
2. Cache –主存系统的效率
效率 e 与 命中率 有关
设 Cache 命中率 为 h , 访问 Cache 的韶光为 t c , 访问 主存 的韶光为 t m
4.3.3 Cache的基本构造
将主存地址映射到缓存中称为地址映射,将主存地址变换成缓存地址称为地址变换,当新的主存块须要调入缓存中,而它的可用位置又被占用时,需根据更换算法办理调入问题。
4.3.4 Cache的读写操作读操作
如果命中缓存,直接从缓存中获取信息,如果没命中,从主存中查找信息。如果缓存Cache满,根据更换算法,把从主存中读取的信息放入缓存。
Cache的读操作流程图
写操作
写直达法(Write – through)
写操作时数据既写入 Cache又写入主存, 写操作韶光便是访问主存的韶光 , Cache块退出时,不须要对主存实行写操作,更新策略比较随意马虎实现。
优点:主存和缓存数据始终保持同等缺陷:同一韶光内可能对同一主存进行反复的写写回法(Write – back)
写操作时只把数据写入 Cache 而不写入主存,当 Cache 数据被更换出去时才写回主存, 写操作韶光便是访问 Cache 的韶光, Cache块退出时,被更换的块需写回主存,增加了Cache 的繁芜性。
优点:写操作韶光便是访问 Cache 的韶光缺陷:主存和缓存数据不一致,多系统情形下会涌现数据同等性问题Cache的改进对Cache进行分级,增加Cache的级数分立缓存,把指令 Cache和数据 Cache分开,避免在流水的过程中造成资源冲突。4.3.5 Cache-主存的地址映射直接映射主存中的任意块映射到缓存中的唯一块,每个主存块只与一个缓存块相对应,但是实现大略。
特点:不灵巧,每个主存块只能与固定对应某个缓存块,纵然还空着许多位置也不能利用。这使得直接映射的块冲突概率最高,空间利用率最低。
全相联映射
直接映射的另一个极度,可以把主存数据块装入 Cache 中的任何位置。
全相联映射办法的优点是比较灵巧,Cache 块的冲突概率低,空间利用率高,命中率也高,缺陷是地址变换速率慢,实现本钱高。
组相联映射
组相联映射是直接映射和全相联映射相结合的办法,将主存和cache都分成多少段,并且使他们每组所包含的块数都相等,组之间采取全相联映射,组内块之间采取直接映射。
直接映射和全相连映射的折中。
4.3.6 更换算法FIFO(First In First Out):遵照先入先出原则,若当前Cache被填满,则更换最早进入Cache的那个。LRU(Least Recently Used):最近最少被利用的被更换,也便是更换末了一次访问韶光最久远的那个。LFU(Least Frequently Used):最不常利用的被更换,也便是过去某个韶光窗口里引用次数最少的那个。4.4 赞助存储器4.4.1 概述
例如:磁盘、光盘、硬盘
特点:不直接和CPU交流信息;断电后能保存信息
4.4.2 硬磁盘存储器1.硬磁盘存储器的类型固定磁头和移动磁头可换盘和固定盘2. 硬磁盘存储器构造磁盘掌握器
吸收主机发来的命令,转换成磁盘驱动器的掌握命令实现主机和驱动器之间的数据格式转换掌握磁盘驱动器读写磁盘掌握器是主机与磁盘驱动器之间的接口:对主机(通过总线)
对驱动器(设备接口)
4.4.3 光盘存储器1. 概述采取光存储技能;利用激光写入和读出
第一代光存储技能 采取非磁性介质 不可擦写第二代光存储技能 采取磁性介质 可擦写2. 光盘存储事理只读型和只写一次型 热浸染 (物理和化学)可擦写光盘 热磁效应4.5 补充简述用户找一个数据,打算机内部实行过程:
CPU寄存器 -> Cache -> RAM的MDR -> RAM -> 辅存
本章完
敬爱与来日诰日