嵌入式系统中的内存压缩技术.docx

上传人:汽*** 文档编号:546120871 上传时间:2022-10-23 格式:DOCX 页数:15 大小:18.77KB
返回 下载 相关 举报
嵌入式系统中的内存压缩技术.docx_第1页
第1页 / 共15页
嵌入式系统中的内存压缩技术.docx_第2页
第2页 / 共15页
嵌入式系统中的内存压缩技术.docx_第3页
第3页 / 共15页
嵌入式系统中的内存压缩技术.docx_第4页
第4页 / 共15页
嵌入式系统中的内存压缩技术.docx_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《嵌入式系统中的内存压缩技术.docx》由会员分享,可在线阅读,更多相关《嵌入式系统中的内存压缩技术.docx(15页珍藏版)》请在金锄头文库上搜索。

1、嵌入式系统中的内存压缩技术摘要:介绍内存压缩技术和一个基于硬件的内存压缩系统模型,探讨内存压缩技术在嵌入式系统中的应用;重点介绍内存压缩系统的硬件要求及操作系统对内存压缩机制的支持;简单介绍内存压缩中常用的算法Lempel-Ziv,并就内存压缩技术在嵌入式系统中的应用问题作一些探讨。关键词:嵌入式系统 内存压缩 压缩内存控制器 Lempel-Ziv算法1 内存压缩技术介绍为节省存储空间或传输带宽,人们已经在计算机系统中广泛地使用了数据压缩技术。在磁介质存储数据或网络传输数据时,人们使用基于硬件或软件的各种压缩技术。当压缩技术在各个领域都很流行时,内存压缩技术却由于其复杂性而一直未得到广泛使用。

2、近年来,由于在并行压缩一解压算法以及在硅密度及速度方面取得的进展,使得内存压缩技术变得可行。内存压缩技术的主要思想是将数据按照一定的算法压缩后存入压缩内存中,系统从压缩内存中找到压缩过的数据,将其解压后即可以供系统使用。这样既可以增加实际可用的内存空间,又可以减少页面置换所带来的开销,从而以较小的成本提高系统的整体性能。内存压缩机制是在系统的存储层次中逻辑地加入一层压缩内存层。系统在该层中以压缩的格式保存物理页面,当页面再次被系统引用时,解压该压缩页后,即可使用。我们将管理这一压缩内存层的相关硬件及软件的集合统称为内存压缩系统。内存压缩系统对于CPU、I/O设备、设备驱动以及应用软件来说是透明

3、的,但是操作系统必须具有管理内存大小变化以及压缩比率变化的功能。对于大多数的操作系统而言,要实现内存压缩,大部分体系结构都不需要改动。在标准的操作系统中,内存都是通过固定数目的物理页框来描述的,由操作系统的VMM来管理。要支持内存压缩,OS要管理的实际内存大小和页框数目是基于内存的压缩比率来确定的。这里的实现内存是指操作系统可的内存大小,它与物理内存的关系假设PM是物理内存,RM是系统在t时刻的实际内存,而CR是压缩比率,在给定时刻t可支持的最大实际内存为RM=CR1PM。然而,由于应用程序的数据压缩率是不依赖于OS而动态变化的,未压缩的数据可能会耗尽物理内存,因此当物理内存接近耗尽时,操作系

4、统必须采取行动来解决这个问题。2 内存压缩系统的硬件模型目前由于内存压缩的思想越来越引起人们的注意市场上也出现了一些基于软件的内存压缩器。这些内存压缩器主要是通过软件对数据进行压缩,但由于访问压缩数据带来的延迟,它在系统性能方面改进并不明显,有些甚至降低了系统性能。本节介绍一种基于硬件的内存压缩系统模型。图1是一个典型的内存压缩系统的硬件模型,包括了压缩内存、L3高速缓冲、压缩内存控制器等硬件部分。其中压缩内存包含了压缩数据。L3高速缓冲是一个共享的、32MB、4路组相联、可回写的高速缓冲,每行大小为1KB,由两倍数据率SDRAM制定。L3高速缓冲包含了未压缩的缓冲行,由于大部分的访问都可以在

5、L3高速缓冲中命中,因此它隐藏了访问压缩主存引起的延迟。L3高速缓冲对于存储分级体系中的上层而言就是主存,它的操作对于其它硬件,包括处理器和I/O来说都是透明的。压缩内存控制器是整个内存压缩系统的控制中心,它负责数据的压缩/解压,监控物理内存的使用情况以及实际地址到物理地址的寻址过程。数据压缩过程是这样的:压缩内存控制将1KB的高速缓冲行压缩后写入压缩内存中,然后将它们从压缩内存中读出后解压。其压缩算法就是Lempel-Ziv算法,我们会在下一部分介绍这个算法。压缩机制将压缩的数据块以不同的长度格式存放到内存中。压缩内存的存储单元是一个256字节的区域。按照压缩比率不同,一个1KB的内存块可以

6、占据04个压缩区域。压缩内存控制器必须根据长度格式的不同将系统总线上的实际地址翻译成物理内存的中的物理地址。实际地址是出现在处理器外部总线上常规地址。篁 址用来录十压缩内存的256字节区域。实际地址空间存在于L1/L2/L3高速缓冲中,用于立即访问。而其余的内存内容部分以压缩形式存在于物理内存中。内存控制器通过查询压缩翻译表执行从实际地址到物理地址的翻译,这个表被保留在物理内存的某个位置。图2是CTT表的格式及内存控制器的寻址模式。每个1KB内存块的实际地址映射到CTT的一项,而CTT每项共16字节,包括四个物理区域地址,每个地址指向物理内存听一个256字节区域。对于少于120位的块,如一个全

7、为零的块,则使用一种特殊的CTT格式,称为通用行格式。在这种格式中,压缩数据全部存放在CTT项中,代替了四个地址指针。因此,一个1KB的通用块仅占用物理内存中的16字节,其压缩比率达到64:1。压缩内存控制器中有一系列的寄存器用于监控物理内存使用。Sectors Used Register(SUR)向操作系统报告压缩内存的使用情况。The Sectors Used Threshold Registers,SUTHR和SUTLR,用于设置内存耗尽情况的中断入口点。SUTLR寄存器是PCI中断电路INTA的入口,而SUTHR寄存器是NMI中断的入口。当SUR超过了SUTLR的值,内存控制器产生一个

8、中断,则操作系统采取措施来阻止内存消耗。在实际地址到物理地址的转换中,一个有用的方法是快速页操作。它允许控制器仅修改CTT项的四个指针,从而将4KB的页面内容换出或清空。快速页操作通过将与4KB页面相关的CTT项全部修改通用行格式,从而将这4KB页面的内容全部清空。同样,一对页面可以通过交换它们相关的CTT项的区域指针来交换页面内容。由于没有大量的数据移动发生,快速页面操作速度相当快。压缩内存控制器的压缩/解压功能是基于LempelZiv算法来进行的,因此下一节将简单介绍一下该算法的思想。3 内存压缩算法Lempel-Ziv绝大多数的压缩算法,包括用得特别流行的Lempel-Ziv压缩算法家庭

9、,都是基于对原子记录字符串的完全重复检测。这个算法虽然不是最好的算法,但是,Lempel-Ziv算法强调的是算法的简单与取得高压缩率的速率,因此它还是在内存压缩中得到了广泛的应用。Lemple-Ziv算法是编码时将一个位串分成词组,然后将数据流描述成一系列的对。每个对组成一个新的词组,它包含一个数字和一个位。这种编码方式很庞大,可是一旦应用到适合的字符串,它就是相当有效率的编码方式。下面举例说明这种算法是如何编码的。+表示连接,U=0010001101是未被压缩的字符串。C是压缩后的字符串。P表示词组数x。先看一下U=0010001101发现,它可以被写为U=0+010001101,因此得到P

10、=P(0)+0。现在继续将其写为U=0+02+0001101,可得到P(2)=P+1。现在我们已经将P描述为上一词组和一个新的位的组合。下一步,U=0+01+00+01101,并得到P=P+0。现在我们注意到,有U=0+01+00+011+01,而P=011=P(2)+1,最后得到P=P(1)+1。运算的步骤如表1所列。一旦创建了表1,就有了整个编码的图表。要创建Lempel-Ziv数据流,则依照公式创建对。如果公式是P(x)=P(A)+B,则每个对为。因此P=P(0)+0变为,P=P(1)+0变为,依此类推,将所有这些对连接起来,就得到了最后的字符串,结果如表2所列。这样,C就变成00001

11、1010101011,看来比U要长得多。但这里由于U的长度短,因此未能看出优势,而且包含P的公式都没有压缩,所以也引起了长度增加。Lempel-Ziv字符串的解码是很简单的,就是抓住其中的对,对照表1进行重构。表1 编码过程步 骤值公 式U0-P(0)001000110110P(1)=P(0)+00+010001101201P(2)=P(1)+10+01+00+01101300P(3)=P(1)+00+01+00+011014011P(4)=P(2)+10+01+00+011+01501P(5)=P(1)+10+01+00+011+01表2 如何创建编码字符串公 式P(1)=P(0)+0P(2

12、)=P(1)+1P(3)=P(1)+0P(4)=P(2)+1P(5)=P(1)+1对00+0=00001+1=01101+0=01010=+1=10101+1=011C000+011+010+101+011=0000110101010114 操作系统对内存压缩的支持在压缩内存系统中,内存大小指的是实际内存大小,它比物理内存大。在引导时,BIOS向操作系统报告的内存大小就比实际安装的物理内存要大。例如,硬件原型安装的是512MB的SDRAM,但BIOS向操作系统报告的内存大小为1GB。当应用程序数据以2:1或更高的比率压缩时,实际内存的工作方式与一般操作系统的内存工作方式是相同的。但当应用程序以

13、未压缩数据来填充内存时,由于一般的OS只看到实际地址空间,因此不能意识到物理内存已经耗尽。例如,一个操作系统的实际内存为1024MB,而牧师内存为512MB。这时实际内存已经分配了600MB,系统显示还有424MB的空闲内存。但是由于已分配内存的压缩率很低,此时物理内存的耗用已经接近512MB。如果再近一步地分配内存,那么系统就会因为物理内存的耗尽而崩溃,尽管它仍然显示还有424MB的空闲内存。这种情况下,必须由操作系统提供对压缩内存进行管理的支持。由于内存压缩是一个比较新的概念,一般的情况作系统都没有这样的机制来区分实际地址和物理地址,也不能处理“物理内存耗尽”的情况。不过,只要对操作系统内

14、核做一些小的改动或者在操作系统之上增加一个设备驱动程序,即可达到目的。一般来说,要从以下几方面对压缩内存进行管理。监控物理内存使用情况通过轮询或中断法,查看物理内存的使用情况,并在物理内存耗尽前给出警告。压缩内存管理例程是通过压缩内存控制器中的一些寄存器来实现对物理内存的监控。SUR报告物理内存的使用情况,SUTHR和SUTLR用于设置中断临界值。压缩内存管理算法是基于物理内存使用的四种状态,分别为steady、acquire、danger和interrupt,其临界值的关系是mc_th_acquiremc_th_dangermc_th_interrupt。我们可以使用轮询和中断相结合的方法进

15、行监控,并对物理内存使用的变化作出反应。通过时钟中断来驱动轮例程,该例程每10ms读取一次SUR的值,并将它与系统设定的临界值比较。当系统处于steady状态时,不用采取任何行动;当使用超过mc_th_acquire,应该增加nr_rsrv_pages来限制内存分配,但这并未引起内存缺乏;当使用超过mc_th_danger,应该增加nr_rsrv_pages到引起内存缺乏,并导致页面分配器和置换进程回收内存页面,一旦进入到该状态,物理内存管理例程会唤醒置换进程回收内存。回收内存以及清空空闲页面内容以减少使用以标准的Linux内核为例,操作系统中有两具主要的变量来管理内存太少的情形。这两个变量是

16、nr_free_pages和struct freepages。为了检测内存是否已耗尽,在分配内存前要进行检查。if(nr_free_)/*内存太少,回收页面*/else/*可以进行分配*/在内存压缩系统中,通过增加一个新变量nr_rsrv_pages来完成此功能。这样就使最小空闲页面数量变为:=+nr_rsrv_pages。通过动态地调整nr_rsrv_pages变量,压缩内存管理例程可以人为地造成内存缺乏的现象,从而引起置换进程回收页面,此时会将调用进程暂时挂起。回收内存包含缩减各种缓冲,并将进程页面置换到磁盘上。当页面返回到空闲页面池时,它们会被清零。我们可以使用前面提到的快速页面操作来减少清空页面操作所带来的开销。阻塞CPU周期以减少物理内存使用率当物理内存使用超过监界值

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 习题/试题

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号