halo~我是bay_Tong桐小白
本文内容是桐小白个人对所学知识进行的总结和分享,知识点会不定期进行编辑更新和完善,了解最近更新内容可参看更新日志,欢迎各位大神留言、指点
最近更新:
2021计算机统考408考纲计算机组成原理学科考察目标
2021计算机统考408计算机组成原理考纲变动情况
2021计算机统考408考纲对存储器层次结构部分考察要求
传统计算机:以运算器为核心的冯诺依曼体系
改进计算机:以存储器为核心的冯诺依曼体系
基本分类:
按照在计算机中作用的不同
(主存储器简称主存,用于存储程序和数据,CPU可直接随机地进行读写访问。主存一般由半导体MOS存储器组成)
(主存的特点:容量小、速度快、成本高)
按照存储信息的材料或介质:磁表面存储器、磁芯存储器、半导体存储器(目前广泛采用)、光盘存储器
按照信息保存的时间分类:易失性存储器、非易失性存储器
按照制造工艺的不同又可分为:
1)双极性存储器:速度快、功耗大、价格贵、适用于高速缓存等
2)MOS存储器:速度慢,但集成度高、功耗小、价格低、适用于大容量主存
存储器三个主要特性的关系
存储器的缓存——主存层次和主存——辅存层次
主存的作用:存放指令和数据,并能由CPU直接进行随机存取。主存储器也称内存储器和内存
相关基本概念:
【MAR与MDR是主存和CPU之间的接口,从功能看属于主存,但通常放在CPU内】
【内容回顾:计算机中的位、字节、字、字长的关系】
各部件信息交换主要依靠系统总线进行完成,系统总线分为地址总线(AB)、数据总线(DB)、控制总线(CB)【系统总线详细内容见后续文章】
存储速度:
存储器的带宽:单位时间内存储器所能传输的信息量,常用单位:位/秒、字节/秒。与存取时间的长短、一次传输的数据位的多少等因素有关。一般而言,存取时间短、数据位数多的主存对应的存储器带宽高
存储器的可靠性:用平均故障间隔时间MTBF来衡量。MTBF,即两次故障之间的平均时间间隔。MTBF越长,表示可靠性越高,即保持正确工作的能力越强
计算机中的位、字节、字、字长的关系内容回顾见上文主存储器概述部分
静态随机存取存储器(Static Random-Access Memory,SRAM)是随机存取存储器的一种。所谓“静态”指这种存储器只要保持通电,里面储存的数据就可以恒常保持,不需要周期性充电更新
工作原理: 利用双稳态触发器,存储元是用双稳态触发器(六管 MOS)来记忆信息的,即使信息被读出,它仍保持其原状态而不需要再生(非破坏性读出);只要电源被切断, 原来的保存信息便会丢失,它是易失性半导体存储器。
一般用来组成高速缓冲存储器Cache。
优点: 不需要刷新电路只要保持通电即能保存它内部存储的数据,因此具有较高的性能
局限性: 集成度较低,功耗比DRAM大,相同容量的DRAM可以设计为较小的体积,而SRAM却需要很大的体积。同样面积的硅片可以做出更大容量的DRAM,因此SRAM显得更贵
动态随机存取存储器(Dynamic Random Access Memory,DRAM)是一种半导体存储器,主要是利用电容内存储电荷的多少来代表一个二进制比特是1还是0。由于在现实中晶体管会有漏电电流的现象,导致数据毁损,因此DRAM需要周期性地进行充电刷新
工作原理: 利用电容。电容中有电荷则存储的内容为1,没有电荷则表示内容为0,是利用存储元电路中栅极电容 上的电荷来存储信息的。【采用地址复用技术,地址线是原来的1/2,且地址信号分行、列两次传送】
一般用来组成大容量主存系统,DRAM采用地址复用技术,地址线减半
刷新放大器:由于电容电荷容易流失,刷新放大器用来对电容的存储进行再生和更新。刷新与行地址有关,每一次刷新是刷新一整行的内容
动态RAM刷新的方式:
假设存取周期为0.5us,刷新周期为2ms,以128*128矩阵为例
分散刷新
存取周期扩大为为1us
每一个微秒分为两部分,一部分用于对动态RAM的读写,一部分用于某一行的刷新,如此动态RAM刷新128行只需要128us,2ms内平均每一行被刷新15.6次
无“死区”,是一种过度刷新,实际上动态RAM不需要这么频繁刷新,并且此方法存取周期扩大为原先两倍,CPU读写性能下降
集中刷新
即2ms内对所有行都进行刷新
对2ms这个时间段进行划分,可分为4000个存取周期
前3872个周期允许CPU或I/O对动态RAM读出或者写入
后128个周期专用于芯片的刷新操作
也即这128个周期内无法对动态RAM进行读写操作,被称为死区
死区为0.5us * 128 = 64us
死时间率为128/4000 * 100% = 3.2%
异步刷新(分散刷新与集中刷新相结合)
将2ms分为128份,每份为15.6us
每隔15.6us刷新一行
每行每隔2ms刷新一次,死区为0.5us
若将刷新安排在指令译码阶段,则不会出现死区
透明刷新方式
由于译码期间不访问存储器,可利用这段时间对动态存储器进行刷新,而不占用CPU时间。由于这种刷新方式对CPU透明,所以称为透明刷新方式
动态RAM和静态RAM的比较
工作特点:非易失性存储器,工作时需要电源,当电源消失,存储的信息不会丢失
发展历程:
常见ROM列举:
FlashMemory:闪速型存储器,有些设备可用它直接作硬盘,或者将它作为内存和硬盘间的缓冲
现今闪存技术主要两大类:
不同ROM的特性比较:
半导体存储器结构
位扩展:用多个存储器件对字长进行扩充,增加存储字长,使其数据位数与 CPU 的数据线数相等。
连接方式:将多个存储芯片的地址端、片选端和读写控制端相应并联,数据端分别引出。
字扩展:增加存储器中字的数量,而位数不变。
连接方式:将芯片的地址线、数据线、读写控制线相应并联,而由片选信号来区分各芯片的地址范围。
字、位同时扩展
例题: 一个存储器系统包括4KB ROM和4KBRAM,分别用2K×8的2716芯片和2K×8的6116芯片组成,要求ROM的地址从4000H开始,RAM的地址从6000H开始。已知CPU选用8086,系统地址总线为A15~A0,数据总线为D7~D0。
1、画出存储器与CPU的连接图;
2、确定每个存储器芯片的地址范围。
1)写出对应的二进制地址码
2)确定芯片的数量及类型,由题意可知
需要2716芯片4KB / 2KB = 2片,需要6116芯片4KB / 2KB = 2片,则有
3)分配地址线与数据线
由以上条件可知:
需要2716芯片4KB / 2KB = 2片,需要6116芯片4KB / 2KB = 2片
ROM:2716芯片,容量大小2K(即2^11) X 8 = 2KB
RAM:6116芯片,容量大小2K(即2^11) x 8 = 2KB
4)确定片选信号
观察之前进行好的地址划分,可以发现高5位中,A15与A14、A12的信号是确认不变的
因此可将A15、A14与访存信号位作为译码器的使能端,A13、A12、A11用做地址片选
5)确定片选逻辑
由上分析可知,本题为8086CPU,访存控制信号为高电平1时CPU和存储器进行数据交流
又由地址分析得知信号位A15恒为0,低电平;信号位A14恒为1,高电平
为了让使能端信号组合为100使译码器正常工作,因此需要给A14接一个非门电路
由于信号A12恒为0,因此A13A12A11的组合共有4种,即000 001 100 101,对应译码结果分别为Y0(0000)、Y1(0001)、Y4(0100)、Y5(0101),译码器输出连到ROM与RAM的选通端CS非
完善线路,ROM有一个读控制端OE非,RAM有一个读控制端OE非,一个写控制端WE非,分别与对应信号线相连
步骤总结:
由于CPU和主存储器在速度上不匹配,而且在一个CPU周期中可能需要用几个存储器字,这便限制了告诉计算。为了使CPU不至因为等待存储器读写操作的完成而无事可做,可采取加速CPU和存储器间有效传输的特殊措施:
每个模块都有相同的容量和存取速度,各模块都有独立的读写控制电路、地址寄存器和数据寄存器,既能并行工作也能交叉工作
存储器只有一个存储体,每个存储单元存m个字,总线宽度也为m个字,一次并行读出m个字,地址必须顺序排列并处于同一存储单元
低位交叉编址
低位地址为体号,高位地址为体内地址。程序连续存放在相邻体中
低位交叉编址流水线存储方式示意图
设模块字长等于数据总线宽度,模块存取一个字的存取周期为 T,总线传送周期为 r,m称为交叉存取度。
为实现流水线方式存取,存储器交叉模块数应大于等于:m=T/r
每经 r 时间延迟后启动下一个模块,交叉存储器要求其模块数必须大于或等于m
以保证启动某模块后经过 m×r 的时间后再次启动该模块时,其上次存取操作已经完成(即流水线不间断)
这样连续存取 m 个字所需的时间为 t1=T+(m-1)*r
顺序方式连续读取 m 个字所需时间为 t2=mT
Cache存储器,电脑中为高速缓冲存储器,是位于CPU和主存储器DRAM(Dynamic Random Access Memory)之间,规模较小,但速度很高的存储器,通常由SRAM(Static Random Access Memory 静态存储器)组成。它是位于CPU与内存间的一种容量较小但速度很高的存储器。CPU的速度远高于内存,当CPU直接从内存中存取数据时要等待一定时间周期,而Cache则可以保存CPU刚用过或循环使用的一部分数据,如果CPU需要再次使用该部分数据时可从Cache中直接调用,这样就避免了重复存取数据,减少了CPU的等待时间,因而提高了系统的效率(引用自百度百科)
问题的提出: CPU与主存之间的速度存在差异,为避免CPU“空等”现象,解决CPU和主存(通常为DRAM)的速度匹配问题
原理依据: 程序访问的局部性原理
工作过程
当CPU要读取主存中的一个字时,发出此字的内存地址到Cache和主存,此时,Cache控制逻辑(CAM,相联存储器,用于进行逻辑比较的存储器,通常按内容进行寻址)根据地址来判断这个字当前是否在Cache中
Cache命中与未命中:
Cache命中率:即CPU欲访问的信息在Cache中的比率。Cache命中率与Cache的容量、块长有关。设Nc为Cache完成存取的总次数,Nm为主存完成存取的总次数,则Cache命中率 h = Nc / (Nc + Nm)
Cache-主存系统的效率:效率e与命中率有关。e =(访问cache的时间 / 平均访问时间)* 100%
因此e的取值范围在tc/tm到1之间【PS:此公式为访问Cache与访问主存并行执行,实际工作中CPU对Cache与主存的访问也是并行进行的,并非先访问Cache不命中再访问主存】
将主存地址映射到缓存中定位称为地址映射;
将贮存地址变换成缓存地址称为地址变换;
当新的主存块需要调入缓存中,而它的可用位置又被占用时,需根据替换算法解决调入问题
Cache的写操作:主要有写直达法、写一次法、写回法等(详细见下文Cache写策略)
Cache的改进:
1)增加Cache级数(即多个Cache进行工作)
2)统一缓存与分立缓存(分立缓存即分立为指令Cache和数据Cache)
(详细见下文多级Cache存储结构)
概念: 相联存储器是一种按内容访问的存储器。可以实现逻辑比较以完成快速查找。它既可以按照地址寻址也可以按照内容寻址(通常时按照内容的某些字段),为了与传统寄存器做区别,称为按内容寻址的存储器,也称关联存储器
原理: 写入信息是按顺序写入,不需要地址;读出时要求中央处理单元给出一个关键字,用它和存储器中所有单元中的一部分信息进行比较。若它们相等,则将此单元中余下的信息读出。这是实现存储器并行操作的一种有效途径,特别适合于信息的检索和更新。即相联存储器的基本原理是把存储单元所存内容的某一部分作为检索项(即关键字项),去检索该存储器,并将存储器中与该检索项符合的存储单元内容进行读出或写入
作用: 主要用于cache中的读写查找,也用于虚拟存储器、快表、页表等的查找替换
Cache容量很小,它保存的内容只是主存内容的一个子集。Cache与主存的数据交换以块为单位。地址映射即是应用某种方法把主存地址定位到Cache中。地址映射方式有直接映射、全相联映射、组相联映射
以一个例子来理解直接相联映射的工作过程,假设CPU传来要访问的字地址为0000101,具体如下图所示
通过这个例子可以体会到直接相联映射的一个优点:访问速度快,即每一主存数据块只能装入 Cache 中的对应位置。若这个位置已有内容,则产生块冲突,原来的块将无条件地被替换出去(无需使用替换算法)(即Cache对主存的块地址关系为一对多)
举另一个例子,这个例子为产生块冲突,且Cache仍有空余空间未利用的情况,具体如下图所示
此例可以体会到直接相联映射的局限性:虽然对Cache更新不需要使用替换算法,但空间利用率不高
即归纳为,直接相联映射:“对号入座”
全相联映射解决了直接相联映射的空间利用率不高的局限性,以一个例子进行说明,如下图所示
主存中任意位置块可以被对应至Cache任意位置块中(即Cache对主存的块地址关系为多对多)
由于每一次都要进行按内容寻址,因此全相联映射拥有访问速度慢的局限性
即归纳为,全相联映射:“随便坐”
组相联映射结合了直接相联映射与全相联映射的优点,并尽可能地减少了两者的局限性,具体如下图
组相联映射将 Cache 空间分成大小相同的组,主存的一个数据块可以装入到一组内的任何一个位置,即组间采取直接映射,而组内采取全相联映射
归纳为,组相联映射:“按号分组,组内随便坐”
计算地址总位数
以一题目为例,计算地址的总位数
三种映射方式比较
如果组相联中,把cache只分为一组,则组相联就变成了全相联
如果组相联中,把cache每一组只分一块,则组相联就变成了直接相联
在多层次的cache结构当中,三种映射方式的用途不同
Cache工作原理要求它尽量保存最新数据,当新的主存块需要拷贝至Cache而此块已被占用产生冲突时则要产生替换
替换问题与采用的地址映射方式有关:
常用的替换策略:随即替换算法、先进先出算法、最不经常使用(LFU)算法、最近最少使用(LRU)算法
随机替换算法
从特定的行位置中随机地选取一行换出。在硬件上容易实现,且速度快
缺点:很可能刚换出的行马上又要使用,降低了命中率和Cache的工作效率
先进先出(FIFO)算法
常见于内存与辅存间的替换算法,每次有新的分页(分页是磁盘和内存间传输数据块的最小单位)需要调入时,会选择调入内存时间最久的分页换出,容易实现
缺点:这种绝对的公平方式容易导致效率的降低
【内存与辅存间的工作详细后续更新……】
最不经常使用(LFU)算法
LFU算法每行设置一个计数器,从0开始计数,每访问一次,被访行的计数器增1,当需要替换时将计数值最小的行换出,同时将这些行的计数器清零。LFU算法将一段时间内被访问次数最少的那行数据换出,不能严格反映近期访问情况
最近最少使用(LRU)算法
LRU算法每行设置一个计数器,Cache每命中一次,名中行计数器清零,其它各行计数器增1,当需要替换时,将计数值最大的行换出,即将近期内长久未被访问过的行换出。这种算法保护了刚拷贝到Cache中的新数据行,有较高的命中率。
当CPU读取内存某个字时,如果该字在Cache中,则直接从Cache中读取,称之为读命中
当CPU写内存某个字时,如果该字在Cache中,称之为写命中;CPU是仅仅改写Cache的内容还是Cache和内存的内容同时修改,不同的写方法我们称为写操作策略
全写法(写直通法)
写操作时数据既写入Cache又写入主存。即
写回法
允许一段时间内Cache的内容与主存的内容不一致,即写操作时只把数据写入Cache而不写入主存,当Cache数据被替换出去时才写回主存
每个Cache行必须设置一个标志位,以反映此块是否被CPU修改过
这种方法减少了访问主存的次数,但无法保证Cache与主存内容的实时一致。当多个处理器时,每一个处理器有一个各自的Cache,容易出现不同的Cache中副本不一致的问题
写一次法
只在第一次写命中时要同时写入主存,便于维护系统全部Cache的一致性(奔腾CPU采用了写一次法)
近年来多Cache在计算机系统中已普遍采用。多Cache结构分两种,一种为多级Cache,即CPU和片外均设立Cache;另一种是指令和数据统一与独立分开的Cache
片内和片外两级Cache
统一和独立Cache
问题提出: 电脑中所运行的程序均需经由主存执行,计算机主存容量有限,若执行的程序占用内存很大或很多则会导致内存消耗殆尽,而外存可以看作是无穷大,虚拟存储器的出现即为了将内存与外存结合起来,以缓解内存的紧张
定义: 虚拟存储器不是任何实际的物理存储器,通常为计算机硬盘上匀出一部分硬盘空间来充当内存使用,即借助于磁盘等辅助存储器来扩大主存容量,以透明的方式给用户提供了一个比实际主存空间大得多的程序地址空间,使之为更大或更多的程序所使用
原理依据: 程序的局部性原理,即当程序要求运行时,不是将它全部装入内存,而是将其一部分需要执行的程序装入内存,另一部分暂时不装入内存,驻留于外存。这样在实际内存没有变化的情况下,会有更多的或更大的程序存入其中,使用者认为内存的总量为物理内存加用于驻留程序的外存
实质:用外存模拟内存
虚拟存储器中的3种地址空间:
其它重要概念:
虚拟存储器依赖于程序的部分装入,程序的部分装入又依赖于对程序的分隔。根据对程序的分隔方式的不同,虚拟存储器可以分为:页式虚拟存储器、段式虚拟存储器、段页式虚拟存储器
在页式虚拟存储系统中,虚拟空间被分成大小相等的页,称为逻辑页或虚页。主存空间也被分成同样大小的页,称为物理页或实页或物理块或块【PS:这里的页/块与上文主存与cache进行数据交换的单位“块”无直接关联】
分页系统中,允许程序的每一页离散的存储在内存的任意物理块中,为了能在内存中找到每个页面所对应的物理块,为每一个程序建立一个反映逻辑页和物理块之间的映射关系的表,称为页表
具体实现:
利用程序的模块化性质,将程序的逻辑空间划分为多个相对独立的部分,每一部分称为 段 。例如主程序段 (main) ,子程序段 (sub) ,数据段 (data) ,堆栈段 (stack) 。段作为信息的完整基本单位可以在内存-外存之间传送或者定位。每一个段有 段名,段基址,段长等信息。
由于页表在内存中 , CPU 为了读取一条指令或数据,首先访问内存中的页表,从中找到指定页的物理块号,根据块号和块内地址形成的物理地址第二次读取内存获得需要的数据,如果发生缺页还要进行页面置换,使计算机的处理速度下降一半,因此引入快表 (TLB)
TLB: 快表,实质是一个相联存储器(CAM),为了提高虚存处理速度而设定的直接按内容进行查找的存储器。如果请求的虚拟地址在TLB中存在,CAM 将给出一个非常快速的匹配结果,之后就可以使用得到的物理地址访问存储器。如果请求的虚拟地址不在 TLB 中,就会使用标签页表进行虚实地址转换,而标签页表的访问速度比TLB慢很多。有些系统允许标签页表被交换到次级存储器,那么虚实地址转换可能要花非常长的时间
持续更新中……
我是桐小白,一个摸爬滚打的计算机小白