主存和Cache之间的数据调动是由硬件自动完成的,对所有程序员均是透明的;而主存和辅存之间的数据调动则是由硬件和操作系统共同完成的,对应用程序员是透明的。
MDR和MAR逻辑上在主存中,实际上在CPU中;地址译码器在主存中。
Cache由静态随机存取SRAM实现,主存由动态随机存储器DRAM实现,它们都是易失的。
(1) 工作原理
SRAM基于双稳态触发器,存取速度快,但集成度低,功耗较大。
DRAM基于电荷,采用地址复用技术(地址线是原来的一半),存取速度比SRAM慢,集成度高,价位低,容量大,功耗低。
即时电源不断电,信息也会自动消失,因此每个一个刷新周期(2ms)就要刷新一次,每次占用一个存储周期。
刷新方式:
①集中刷新:在死时间/死区对所有行一次刷新,访存速度快,但在死时间内不能访问存储器。
②分散刷新:把对每行的刷新分散到各个工作周期中去,访存速度慢,但没有死时间。若将刷新安排在不需要访问存储器的译码阶段,则既不会加长存取周期,又不会产生"死时间",这是分散刷新方式的发展,也称为"透明刷新"。
③异步刷新:具体做法是将刷新周期除以行数,得到两次刷新操作之间的时间间隔t,利用逻辑电路每隔时间t产生一次刷新请求。这样可以避免使CPU连续等待过长的时间,而且减少了刷新次数,从根本上提高了整机的工作效率。
刷新需注意以下问题∶
①刷新对CPU透明,即刷新不依赖于外部的访问;
②刷新单位是行,因此刷新操作时仅需要行地址;
③刷新操作类似于读操作,但又有所不同;
④刷新操作仅给栅极电容补充电荷,不需要信息输出;
⑤刷新时不需要选片,即整个存储器中的所有芯片同时被刷新。
(2)SRAM和DRAM的比较
结构简单,所以位密度比RAM的高;具有非易失性,所以可靠性高。ROM的升级版有以下几种:
以前我总是分不清这几个,后来发现结合英文全称好记多了。
芯片数=容量/单片芯片容量
(1)合理选择存储芯片
通常选用 ROM存放系统程序,选用 RAM组成用户区。
(2)地址线的连接
低位用于地址空间,高位用于片选。片选原理会在下面单独介绍。
(3)数据线的连接
对应数据位数。
(4)读写控制线
两根,一根读,一根写。
片选信号的产生分为线选法和译码片选法。
优点∶不需要地址译码器,线路简单。缺点∶地址空间不连续,选片的地址线必须分时为低电平(否则不能工作),不能充分利用系统的存储器空间,造成地址资源的浪费。
当两个端口的地址不相同时,在两个端口上进行读写操作一定不会发生冲突。当对同一个主存操作时,写操作只能互斥进行(不能写写、写读),读操作可以同时进行。
(1)单体多字存储器
存储器中只有一个存储体,每个存储单元存储m个字,总线宽度也为m个字。一次并行读出m个字,地址必须顺序排列并处于同一存储单元。即每隔1/m存取周期,CPU向主存取一条指令。显然,这增大了存储器的带宽,提高了单体存储器的工作速度。
(2)多体并行存储器
多体并行存储器由多体模块组成。每个模块都有相同的容量和存取速度,各模块都有独立的读写控制电路、地址寄存器和数据寄存器。它们既能并行工作,又能交叉工作。
总是按顺序访问存储模块,存储模块不能被并行访问,因而不能提高存储器的吞吐率。仍是顺序存储器。
编址后,可在不改变每个模块存取周期的前提下,采用流水线的方式并行存取,提高存储器的带宽。
设模块字长等于数据总线宽度,模块存取一个字的存取周期为T,总线传送周期为r,为实现流水线方式存取,存储器交叉模块数应大于等于m=T/r,以保证启动某模块后经过mxr的时间后再次启动该模块时,其上次的存取操作已经完成(流水线不间断)。
高速缓冲技术就是利用程序访问的局部性原理,把程序中正在使用的部分存放在一个高速的、容量较小的Cache 中,使CPU的访存操作大多数针对Cache 进行,从而大大提高程序的执行速度。
标记:Cache中块是来自主存的哪一块。
有效位:Cache中块/行中的信息是否有效。
(1)方式一: 直接映射
无条件替换,块冲突概率最高,空间利用率最低。
(2)方式二:全相联映射
优点是比较灵活,Cache 块的冲突概率低,空间利用率高,命中率也高。
缺点是标记的比较速度较慢,实现成本较高,通常需采用昂贵的按内容寻址的相联存储器进行地址映射。
(3)方式三:组相联映射
虚拟存储器利用的是程序的局部性原理。对应用程序员透明的。
Cache是为了解决系统速度,虚拟存储器是为了解决主存容量。
CPU使用虚地址的过程:
因为Cache 中的内容是主存块副本,当对Cache中的内容进行更新时,就需选用写操作策略使Cache 内容和主存内容保持一致。此时分两种情况:
(1)写命中(要被修改的单元在Cache中)
全写法:当CPU 对Cache 写命中时,必须把数据同时写入Cache和主存。当某一块需要替换时,不必把这一块写回主存,用新调入的块直接覆盖即可。实现简单,数据的正确性高,但增加了访存次数。需要写缓冲。
写回法:写回法(write-back)。当CPU对Cache写命中时,只修改Cache的内容,而不立即写入主存,只有当此块被换出时才写回主存。减少了访存次数,但存在不一致的隐患。需要设置标志位/脏位。
(2)写不命中
虚拟空间与主存空间都被划分成同样大小的页。
虚拟地址到物理地址由页表(在主存中)转换。
优点:页面的长度固定,页表简单,调入方便。
缺点是,由于程序不可能正好是页面的整数倍,最后一页的零头将无法利用而造成浪费,并且页不是逻辑上独立的实体,所以处理、保护和共享都不及段式虚拟存储器方便。
利用局部性原理,把经常访问的页表项放在快表TLB(在Cache里) 中,相应的页表称为慢表。转换时,先找快表,找不到再找慢表。
快表采用相联存储器(全相联、组相联)器件组成,按照查找内容访问,因此速度更快。但快表只是慢表的副本,无法得到更多的搜索结果。
Cache缺失处理由硬件完成;缺页处理由软件完成;而 TLB缺失既可以用硬件又可以用软件来处理。
段是按程序的逻辑结构划分的,各个段的长度因程序而异。
优点是,段的分界与程序的自然分界相对应,因而具有逻辑独立性,使得它易于编译、管理、修改和保护,也便于多道程序的共享。
缺点是因为段长度可变,分配空间不便,容易在段间留下碎片,不好利用,造成浪费。
把程序按逻辑结构分段,每段再划分为固定大小的页,主存空间也划分为大小相等的页,程序对主存的调入、调出仍以页为基本传送单位。
在段页式虚拟存储器中,每个程序对应一个段表,每段对应一个页表,段的长度必须是页长的整数倍,段的起点必须是某一页的起点。
段页式虚拟存储器的优点是,兼具页式和段式虚拟存储器的优点,可以按段实现共享和保护。缺点是在地址变换过程中需要两次查表,系统开销较大。
1.一SRAM芯片,容量是1024*8位,除电源和接地端外,引脚最小数目是?
地址10根(地址复用技术减半为5),数据8根,读写2根,片选1根(地址复用技术片选为2根),一共21根。
2.一个四体并行低位交叉存储器,每个模块的容量是64K×32位,存取周期为200ns,总线周期为 50ns,在200ns 内,存储器能向CPU提供128位二进制信息。
3.某存储系统中,主存容量是Cache容量的4096倍,Cache被分为64个块,当主存地址和Cache地址采用直接映像方式时,地址映射表的大小应为(64*13位)。(假设不考虑一致维护和替换算法位。)
地址映射表包含标志位和有效位(脏位)。由于Cache一共64块(64行),所以映射表一共64行。由于采用直接映射方式,主存容量是Cache容量的4096倍,所以标志位有12位(24096=12)。脏位1位。所以,容量为64*(12+1)位。
4.有效容量为128KB的Cache,每块16B,采用8路组相联。字节地址为1234567H的单元调入该Cache,则其Tag应为(048DH)。
5.有一主存-Cache层次的存储器,其主存容量为1MB,Cache容量为16KB,每块有8个字,每字32位,采用直接地址映像方式,若主存地址为35301H,且CPU访问Cache 命中,则在Cache的第(152)(十进制表示)字块中。(Cache起始字块为第0字块)
6.采用指令Cache与数据Cache分离的主要目的是(减少指令流水线资源冲突)。
7.某计算机主存地址空间大小为256MB,按字节编址。虚拟地址空间大小为4GB,采用页式存储管理,页面大小为4KB,TLB(快表)采用全相联映射,有4 个页表项,内容如下表所示。则对虚拟地址03FFF180H进行虚实地址变换的结果是(0153180H)。
虚拟地址空间大小为4GB,采用页式存储管理,页面大小为4KB,页表的行数=4GB/4KB=1024* 1024。也就是说,页表行数一共有20位。
虚拟地址03FFF180H由两部分组成:页表行号+页内地址。则前20位03FFF是页表行号,查TLB命中且有效,对应页框号也就是实际页地址为0153,虚拟地址03FFF180H剩下的部分180为页内地址。因此虚实地址变换结果为0153180H。