嵌入式系统存储结构研究.docx
- 文档编号:13553076
- 上传时间:2023-06-15
- 格式:DOCX
- 页数:10
- 大小:190.76KB
嵌入式系统存储结构研究.docx
《嵌入式系统存储结构研究.docx》由会员分享,可在线阅读,更多相关《嵌入式系统存储结构研究.docx(10页珍藏版)》请在冰点文库上搜索。
嵌入式系统存储结构研究
嵌入式系统的存储层次研究
摘要:
存储器是嵌入式系统的核心部件之一,其性能直接关系到整个嵌入式系统的性能的高低。
“Cache-主存”和“主存-辅存”层次是常见的两种存储层次结构,几乎所有的现代计算机都同时具有这两种层次。
文本从Cache和虚拟存储器基本原理出发,阐述了这嵌入式系统的两个存储层次。
关键字:
存储器,Cache,虚拟存储,主存,辅存,存储层次
1.Cache-主存层次
Cache-高速缓冲存储器,一种特殊的存储器子系统,其中复制了频繁使用的数据以利于快速访问。
存储器的高速缓冲存储器存储了频繁访问的RAM位置的内容及这些数据项的存储地址。
当处理器引用存储器中的某地址时,高速缓冲存储器便检查是否存有该地址。
如果存有该地址,则将数据返回处理器;如果没有保存该地址,则进行常规的存储器访问。
因为高速缓冲存储器总是比主RAM存储器速度快,所以当RAM的访问速度低于微处理器的速度时,常使用高速缓冲存储器。
1.1主存与Cache的地址映射
由于主存容量远大于高速缓存的容量,因此两者之间就必须按一定的规则对应起来。
高速缓存的地址镜像就是指按什么规则把主存块装入高速缓存中。
地址变换是指当按某种镜像方式把主存块装入高速缓存后,每次访问高速缓存时,如何把主存的物理地址或虚拟地址变换成高速缓存的地址,从而访问高速缓存中的数据。
镜像和变换的方式有四种:
直接镜像、全相连镜像、组相连镜像、区段相连镜像。
(1)全相联映射方式
主存中一个块的地址与块的内容一起存于cache的行中,其中块地址存于cache行的标记部分中。
这种方法可使主存的一个块直接拷贝到cache中的任意一行上,非常灵活。
它的主要缺点是比较器电路难于设计和实现,因此只适合于小容量cache采用。
(2)直接映射方式
这也是一种多对一的映射关系,但一个主存块只能拷贝到cache的一个特定行位置上去。
cache的行号i和主存的块号j有如下函数关系:
i=jmodm (m为cache中的总行数)直接映射方式的优点是硬件简单,成本低。
缺点是每个主存块只有一个固定的行位置可存放,容易产生冲突。
因此适合大容量cache采用。
(3)组相联映射方式
这种方式是前两种方式的折衷方案。
它将cache分成u组,每组v行,主存块存放到哪个组是固定的,至于存到该组哪一行是灵活的,即有如下函数关系:
m=u×v组号 q=jmodu组相联映射方式中的每组行数v一般取值较小,这种规模的v路比较器容易设计和实现。
而块在组中的排放又有一定的灵活性,冲突减少。
1.2Cache中数据查找方法
当CPU访问Cache时,如何确定Cache中是否有要访问的块?
若有,如何确定其位置,这是通过查找目录来实现的。
Cache中设置有一个目录表,该表有M项,每一项对应于Cache中的一个快,用于指出当前该块中存放的信息是哪个主存块的(有多少个主存块映像到该Cache块)。
它实际上是记录了该主存块的块地址的高位部分,称为标识(Tag)。
每个主存块能唯一的由标识来确定。
标识在主存块中的位置如图所示:
为了指出Cache中的快是否含有有效地信息,一般是在目录表中给出每一项设置一个有效位。
例如,当该位为“1”时标示:
该目录项有效,Cache中相应块所包含的信息有效。
当一个主存块被调入Cache中某个位置时,它的标示就被填入目录表中与该Cache块相对应的项中,并且该项的有效位别置为“1”。
根据映像规则不同,在一个主存块可能映像到Cache中的一个或则多个Cache块位置。
为便于讨论,我们把它们称为选侯位置,当CPU访问该主存块的时候,必须且只需查找它的候选位置所对应的目录表项。
如果有与所访问的主存块相同的标示,且其有效位为“1”,则它所对应的Cache块即是所要找的块。
为了保证速度,对各候选位置的标识的检查比较应该并行的进行。
直接映像Cache的候选位置最少,只有一个;全相联映像Cache的候选位置最多,为M个;而n路组相联映像则介于两者之间,为n个。
并行查找的实现方法有两种:
(1)用相联存储器实现;
(2)用单体多字存储器和比较器来实现。
如下图画出了第二种方法来实现4路组相联映像的情况。
这时需要4个比较器。
CPU访问时,用本次访问地址中的索引作为地址从标识存储器中选取一行,并从该行读出4个标识,然后将他们与本次访问的地址中的标示进行比较。
根据比较结果确定是否命中以及该组中哪个块是要访问的块。
由上图可以看出,n越大,实现查找的的机制就越复杂,代价就越高。
直接映像Cache的查找最简单:
只需要一个位置。
所访问的块要么就在这个位置上,要么不在Cache中。
无论是直接映像还是组相联映像,查找时只需比较标识,索引无需参加比较。
这时因为索引已被用来选择要查找的组,而所有索引相同的块被映像到该组中,所以该组中存放的块的索引一定与本次访问的索引相同。
如果Cache的容量不变,提高相联度会增加每一组的块数,从而会减少索引的位数和增加标识的位数,当采取上图所示的方案的时候,不仅所需要的比较器的个数会增加,而且比较器的位数也随之增加。
在全相联映像的情况下,索引的位数为0,块地址就是标识。
1.3Cache替换策略
cache工作原理要求它尽量保存最新数据,必然要产生替换。
对直接映射的cache来说,只要把此特定位置上的原主存块换出cache即可。
对全相联和组相联cache来说,就要从允许存放新主存块的若干特定行中选取一行换出,下面是三种常见Cache替换算法:
(1)最不经常使用(LFU)算法
LFU算法将一段时间内被访问次数最少的那行数据换出。
每行设置一个计数器。
从0开始计数,每访问一次,被访行的计数器增1。
当需要替换时,将计数值最小的行换出,同时将这些行的计数器都清零。
这种算法将计数周期限定在对这些特定行两次替换之间的间隔时间内,不能严格反映近期访问情况。
(2)近期最少使用(LRU)算法
LRU算法将近期内长久未被访问过的行换出。
每行也设置一个计数器,cache每命中一次,命中行计数器清零,其它各行计数器增1。
当需要替换时,将计数值最大的行换出。
这种算法保护了刚拷贝到cache中的新数据行,有较高的命中率。
(2)随机替换
随机替换策略从特定的行位置中随机地选取一行换出。
在硬件上容易实现,且速度也比前两种策略快。
缺点是降低了命中率和cache工作效率。
1.4Cache写策略
按照存储层次的要求,Cache内容应是主存部分内容的一个附本。
但是“写”
访问却可能导致他们内容的不一致。
例如,当处理机进行“写”访问,网Cache写入新的数据后,则Cache中相应单元的内容已发生了变化,而主存中该单元的内容却任然是原来的。
这就产生了所谓的Cache与主存内容的一致性问题。
显然,为了保证正确性,主存的内容也必须更新。
至于何时更新,这正是写策略所要解决的问题。
下面是三种常见Cache写算法:
(1)写回法
当CPU写cache命中时,只修改cache的内容,而不立即写入主存;只有当此行被换出时才写回主存。
这种方法减少了访问主存的次数,但是存在不一致性的隐患。
实现这种方法时,每个cache行必须配置一个修改位,以反映此行是否被CPU修改过。
(2)全写法
当写cache命中时,cache与主存同时发生写修改,因而较好地维护了cache与主存的内容的一致性。
当写cache未命中时,直接向主存进行写入。
cache中每行无需设置一个修改位以及相应的判断逻辑。
缺点是降低了cache的功效。
(3)写一次法
基于写回法并结合全写法的写策略,写命中与写未命中的处理方法与写回法基本相同,只是第一次写命中时要同时写入主存。
这便于维护系统全部cache的一致性。
2.主存-辅存层次
主存不能无限扩大,空间有限;如何有限的主存空间运行运行较大的用户程序,采用虚拟存储器来扩大寻址空间;虚拟主存空间是靠外存(磁盘)来支持的。
虚拟存储采用与Cache技术类似的原理,提高速度,降低成本,用户感觉到的是一个速度接近主存而容量极大的存储器。
虚拟存储器是“主存-辅存”层次进一步发展的结果。
它由价格较贵,速度较快,容量较小的主存储体M1和一个价格较低廉,速度较慢,容量较大的辅助存储器M2组成,在系统软件和辅助硬件的作用下,就像一个单一的,可直接访问的大容量主存储器。
引用程序员可以用机器指令的地址码对整个程序统一编制,就如同应用程序员具有对应于这个地址码宽度的存储空间一样,而不必考虑实际主存空间的大小。
虚拟存储器分为两种类型:
页式和段式。
页式虚拟存储器把空间划分为大小相同的块,称为页面。
而段式虚拟存储器则把空间划分为可变长的块,称为段。
页面是对空间机械的划分,而段往往是安程序的逻辑意义进行划分。
2.1物理地址,虚拟地址概念
物理地址:
是指出目前CPU外部地址总线上的寻址物理内存的地址信号,是地址变换的最终结果地址。
如果启用了分页机制,那么线性地址会使用页目录和页表中的项变换成物理地址。
如果没有启用分页机制,那么线性地址就直接成为物理地址了。
虚拟地址:
是指计算机呈现出要比实际拥有的内存大得多的内存量。
因此他允许程式员编制并运行比实际系统拥有的内存大得多的程式。
这使得许多大型项目也能够在具有有限内存资源的系统上实现。
一个非常恰当的比喻是:
你不必非常长的轨道就能让一列火车从上海开到北京。
你只需要足够长的铁轨(比如说3公里)就能完成这个任务。
采取的方法是把后面的铁轨即时铺到火车的前面,只要你的操作足够快并能满足需求,列车就能象在一条完整的轨道上运行。
这也就是虚拟内存管理需要完成的任务。
2.2段式虚拟存储器
在段式存储管理系统中,用户可以根据逻辑结构将程序划分为若干的段,每一段的虚拟地址空间各自都从0开始编制,因为整个作业的虚拟地址空间是二维的。
一个程序被划为主程序段,子程序段,数据段和工作区段,各段的长短不一,各从0开始编制。
主存分配以段为单位,每一个段要分配一个连续的主存分区,各个段之间不必相邻。
在段式存储系统中,指令的虚拟地址字分为段号s和段内偏移d两个部分。
类似如页式管理,段式管理要通过一个段表来进行地址的变换。
系统为在主存中的每一个作业建立一种如下图的段表,在段表中包含作业中各段的长度,在主存中的起始地址,在辅存中的地址及状态域。
系统还要集中建立一张所有作业的段起始地址和长度的表,并将当前作业的段起始地址和长度装入段表控制寄存器。
2.3页式虚拟存储器
在X86平台的Linux系统中,地址码采用32位,因而每个进程的虚拟空间可达4GB。
Linux内核将这4GB的空间分为两部分:
最高的1GB是“系统空间”,供内核本身使用;而较低地址的3GB是各个进程的“用户空间”。
系统空间由所有进程共享。
虽然理论上每个进程的可用空间是3GB,但实际的存储空间大小受到物理存储器的限制。
由于Linux系统中页面的大小为4KB,因此进程虚存空间要划分为1M个页面。
如果直接用页表描述这种映射关系,那么每个进程的页表就要有1M个表项。
很显然,用大量的内存资源来存放页表的办法是不可取的。
为此,Linux系统采用三级页表的方式,如下图所示:
3.总结
Cache是一种高速缓冲存储器,是为了解决CPU和主存之间速度不匹配而采用的一项重要的硬件技术,并且发展为多级cache体系,指令cache与数据cache分设体系。
要求cache的命中率接近于1。
主存与cache的地址映射有全相联、直接、组相联三种方式。
其中组相联方式是前二者的折衷,适度兼顾了二者的优点又尽量避免其缺点,从灵活性、命中率、硬件投资来说较为理想,因而得到了普遍采用。
虚拟存储器指的是主存-外存层次,它给用户提供了一个比实际主存空间大得多的虚拟地址空间。
因此虚拟存储器只是一个容量非常大的存储器的逻辑模型,不是任何实际的物理存储器。
限于篇幅,本文仅简单介绍了Cache和虚拟存储管理的原理,作为深入探讨嵌入式系统的存储层次的初步研究,希望能起到抛砖引玉的作用。
参考文献
[1]张晨曦,王志英;计算机系统结构;高等教育出版社;2008年6月
[2]尹朝庆;计算机系统结构教程;清华大学出版社;2005年
[3]毛德操,胡希明;LINUX内核源代码情景分析;浙江大学出版社;2001年9月
[4]孙天泽;嵌入式Linux操作系统;人民邮电出版社;2009年8月
[5]袁镱;Linux0.11下的内存管理;网络下载PDF文档
[6]蒙庆昌;操纵系统教程;西安电子科技大学;2004年2月
[7]史子旺;嵌入式Linux内存使用与性能优化;机械工业出版社;2009年5月
[8]戈尔曼(白洛等译);深入理解Linux虚拟内存管理;北京航空航天大学出版社;2006年05月
[9]拉芙(美);Linux内核设计与实现;机械工业出版社;2006年1月
[10]莫尔勒(德);深入Linux内核架构;人民邮电出版社;2010年6月
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 系统 存储 结构 研究