内存压缩技术介绍_第1页
内存压缩技术介绍_第2页
内存压缩技术介绍_第3页
内存压缩技术介绍_第4页
内存压缩技术介绍_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

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

3、来说是透明的,但是操作系统必须具有管理内存大小变化以及 压缩比率变化的功能。对于大多数的操作系统而言,要实现内存压缩,大部分体系结构都不需要改动。在标准的操 作系统中,内存都是通过固定数目的物理页框(page frame )来描述的,由操作系统的VMM来管理。要支持内存压缩,OS要管理的实际内存大小和页框数目是基于内存的压缩比率来确 定的。这里的实现内存是指操作系统可的内存大小,它与物理内存的关系如下:假设PM是物理内存,RM(t)是系统在t时刻的实际内存,而 CR(t )是压缩比率,在给定时刻 t可支持 的最大实际内存为 RM(t) =CR1( t )X PM然而,由于应用程序的数据压缩率是

4、不依赖于OS而动态变化的,未压缩的数据可能会耗尽物理内存,因此当物理内存接近耗尽时,操作系统 必须采取行动来解决这个问题。2 内存压缩系统的硬件模型目前由于内存压缩的思想越来越引起人们的注意市场上也出现了一些基于软件的内存压缩 器。这些内存压缩器主要是通过软件对数据进行压缩,但由于访问压缩数据带来的延迟,它 在系统性能方面改进并不明显,有些甚至降低了系统性能。本节介绍一种基于硬件的内存压 缩系统模型。图1是一个典型的内存压缩系统的硬件模型,包括了压缩内存、L3高速缓冲、压缩内存控制器等硬件部分。其中压缩内存(133MHz SDRAM包含了压缩数据。L3高速缓冲是一个共享的、 32MB4路组 相

5、联、可回写的高速缓冲,每行大小为 1KB由两倍数据率(DDR SDRAM制定。L3高速缓冲 包含了未压缩的缓冲行, 由于大部分的访问都可以在 L3 高速缓冲中命中, 因此它隐藏了访问 压缩主存引起的延迟。 L3 高速缓冲对于存储分级体系中的上层而言就是主存, 它的操作对于 其它硬件,包括处理器和 I/O 来说都是透明的。压缩内存控制器是整个内存压缩系统的控制 中心,它负责数据的压缩 / 解压,监控物理内存的使用情况以及实际地址到物理地址的寻址过 程。数据压缩过程是这样的:压缩内存控制将1KB的高速缓冲行压缩后写入压缩内存中,然后将它们从压缩内存中读出后解压。 其压缩算法就是 Lempel-Zi

6、v 算法,我们会在下一部分介绍这 个算法。压缩机制将压缩的数据块以不同的长度格式存放到内存中。压缩内存的存储单元是 一个256字节的区域。按照压缩比率不同, 一个1KB的内存块(正好是L3每行的大小)可以 占据04个压缩区域。压缩内存控制器必须根据长度格式的不同将系统总线上的实际地址翻译成物理内存的中的物 理地址。 实际地址是出现在处理器外部总线上常规地址。 篁 址用来录十压缩内存的 256 字节 区域。 实际地址空间存在于 L1/L2/L3 高速缓冲中, 用于立即访问。 而其余的内存内容部分以 压缩形式存在于物理内存中。内存控制器通过查询压缩翻译表(CTT)执行从实际地址到物理地址的翻译,这

7、个表被保留在物理内存的某个位置。图2是CTT表的格式及内存控制器的寻址模式。每个1KB内存块的实际地址映射到 CTT的一项,而CTT每项共16字节,包括四个物理区域地 址,每个地址指向物理内存听一个 256字节区域。 对于少于 120 位的块, 如一个全为零的块, 则使用一种特殊的 CTT格式,称为通用行格式。在这种格式中,压缩数据全部存放在CTT项中,代替了四个地址指针。因此,一个1KB的通用块仅占用物理内存中的16字节,其压缩比率达到 64: 1 。压缩内存控制器中有一系列的寄存器用于监控物理内存使用。Sectors Used Register(SUR)向操作系统报告压缩内存的使用情况。

8、The Sectors Used Threshold Registers,SUTHR 和 SUTLR用于设置内存耗尽情况的中断入口点。SUTLR寄存器是PCI中断电路INTA的入口,而SUTHF寄存器是NMI中断的入口。当 SUR超过了 SUTLR的值,内存控制器产生一个中断, 则操作系统采取措施来阻止内存消耗。在实际地址到物理地址的转换中,一个有用的方法是快速页操作。它允许控制器仅修改CTT项的四个指针,从而将4KB的页面内容换出或清空。 快速页操作通过将与 4KB页面相关的CTT 项全部修改通用行格式(即全为零),从而将这4KB页面的内容全部清空。同样,一对页面可 以通过交换它们相关的 C

9、TT项的区域指针来交换页面内容。由于没有大量的数据移动发生, 快速页面操作速度相当快。压缩内存控制器的压缩 /解压功能是基于 LempelZiv 算法来进行的, 因此下一节将简单介绍一 下该算法的思想。3 内存压缩算法 Lempel-Ziv绝大多数的压缩算法, 包括用得特别流行的 Lempel-Ziv 压缩算法家庭, 都是基于对原子记录(Toke n)字符串的完全重复检测。这个算法虽然不是最好的算法,但是,Lempel-Ziv 算法强调的是算法的简单与取得高压缩率的速率,因此它还是在内存压缩中得到了广泛的应用。Lemple-Ziv算法(简称LZ)是编码时将一个位串分成词组,然后将数据流描述成一

10、系列的对。 每个对组成一个新的词组,它包含一个数字(前一个词组的标识)和一个位(被附加到前一 个词组上)。这种编码方式很庞大, 可是一旦应用到适合的字符串, 它就是相当有效率的编码 方式。下面举例说明这种算法是如何编码的。+表示连接( 010+1=0101), U=0010001101 是未被压缩的字符串。 C 是压缩后的字符串。 P(x)表示词组数x。先看一下 U=0010001101发现,它可以被写为 U=0+010001101,因此得 到 P( 1)=P(0)+0。现在继续将其写为 U=0+02+0001101,可得到 P(2)=P ( 1)+1。现在 我们已经将 P( 2)描述为上一词

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

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

13、1+01表 2 如何创建编码字符串公 式 P(1)=P(0)+0 P(2)=P(1)+1 P(3)=P(1)+0 P(4)=P(2)+1 P(5)=P(1)+1对 00+0=000 01+1=011 01+0=010 10=+1=101 01+1=011C000+011+010+101+011=0000110101010114 操作系统对内存压缩的支持在压缩内存系统中,内存大小指的是实际内存大小,它比物理内存大。在引导时,BIOS 向操作系统报告的内存大小就比实际安装的物理内存要大。例如,硬件原型安装的是512MB的SDRAM但BIOS向操作系统报告的内存大小为1GB当应用程序数据以 2 :

14、1或更高的比率压缩时,实际内存的工作方式与一般操作系统的内存工作方式是相同的。但当应用程序以未压 缩数据来填充内存时(如一个zip文件不可能达到2: 1的压缩比率),由于一般的OS只看到实际地址空间,因此不能意识到物理内存已经耗尽。例如,一个操作系统的实际内存为 1024MB而牧师内存为 512MB这时实际内存已经分配了600MB系统显示还有 424MB的空闲内存。但是由于已分配内存的压缩率很低,此时物理内存的耗用已经接近512MB如果再近一步地分配内存,那么系统就会因为物理内存的耗尽而崩溃,尽管它仍然显示还有424MB的空闲内存。这种情况下,必须由操作系统提供对压缩内存进行管理的支持。由于内

15、存压缩是一个比较新的概念,一般的情况作系统都没有这样的机制来区分实际地址和 物理地址,也不能处理“物理内存耗尽”的情况。不过,只要对操作系统内核做一些小的改 动或者在操作系统之上增加一个设备驱动程序,即可达到目的。一般来说,要从以下几方面对压缩内存进行管理。( 1 )监控物理内存使用情况通过轮询或中断法,查看物理内存的使用情况,并在物理内存耗尽前给出警告。压缩内存管理例程是通过压缩内存控制器中的一些寄存器来实现对物理内存的监控。SUR报告物理内存的使用情况,SUTHR和SUTLR用于设置中断临界值。压缩内存管理算法是基于物理内存使用 的 四 种 状 态 , 分 别 为 steady 、 acq

16、uire 、 danger 和 interrupt , 其 临 界 值 的 关 系 是 mc_th_acquiremc_th_dangermc_th_interrupt 。我们可以使用轮询和中断相结合的方法进行监控,并对物理内存使用的变化作出反应。通过时钟中断来驱动轮例程,该例程每10ms读取一次SURF值,并将它与系统设定的临界值比较。 当系统处于 steady 状态时,不用采取任何行动;当使用超过mc_th_acquire ,应该增加nr_rsrv_pages 来限制内存分配,但这并未引起内存缺乏;当使用超过mc_th_danger ,应该增加 nr_rsrv_pages 到引起内存缺乏,

17、并导致页面分配器和置换进程回收内存页面,一旦进 入到该状态,物理内存管理例程会唤醒置换进程回收内存。(2)回收内存以及清空空闲页面内容以减少使用以标准的 Linux 内核为例,操作系统中有两具主要的变量来管理内存太少的情形。这两个变 量是 nr_free_pages 和 struct freepages 。为了检测内存是否已耗尽,在分配内存前要进行 检查。if(nr_free_pagesfreepages.min)/* 内存太少,回收页面 */else/* 可以进行分配 */在内存压缩系统中,通过增加一个新变量 nr_rsrv_pages 来完成此功能。这样就使最小空闲 页面数量变为: fre

18、epages.min=freepages.min+nr_rsrv_pages 。通过动态地调整 nr_rsrv_pages 变量,压缩内存管理例程可以人为地造成内存缺乏的现象, 从而引起置换进程回收页面,此时会将调用进程暂时挂起。回收内存包含缩减各种缓冲,并 将进程页面置换到磁盘上。当页面返回到空闲页面池时,它们会被清零。我们可以使用前面 提到的快速页面操作来减少清空页面操作所带来的开销。(3)阻塞CPU周期以减少物理内存使用率当物理内存使用超过监界值 mc_th_interrupt ,控制器就中断处理器, nr_rsrv_pages 进一步 增加,然后 CPU blocker 就开始运行。我

19、们在轮询机制的基础上还使用了中断机制,因为中断机制比轮询机制更加快速。如果在10ms的间隔中,物理内存使用突然上升, 硬件中断会比轮询例程更早检测到这一情况。 为了更加安全, 我们使用 CPUblocker 来阻塞引起物理内存使 用的进程。CPU blocker是空闲线程,它们可以使 CPU空忙。由于页面被置换到磁盘是以机 器速度运行的,而物理内存使用却可以以内存访问速度运行,速度从而得到增加。当牧师内 存使用持续增加,以至换页也无法缓解时,进程需要被阻塞。我们就通过启动CPUblocker来阻塞CPU周期直到换页机制能有效地降低物理内存使用。 CPUblocker不会阻塞中断,而且 每40ms它就会让出CPU以免其它进程被饿死。5 内存压缩技术在嵌入式系统中的应用 嵌入式系统是一种特殊的计算机系统,它是一个更大的系统或设备的一部分。通常,一个嵌 入式系统是驻留在单处理机底板上的,其应用程序存储在ROM中。事实上,所有具有数字接口的设备一一监视器、微波炉、VCRs汽车等,都使用了嵌入式系统。一些嵌入式系统包含了操作系统,称为嵌入式操作系统。为了满足嵌入式应用的特殊要求,嵌入式微处理器虽然 在功能上和标准微处理器基本是一样的,但和工业控制计算机相比,嵌入式微处理器具有体 积小、重量

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论