b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

[精品店]内存压缩技术简介

电脑杂谈  发布时间:2020-08-09 08:05:59  来源:网络整理

内存拯救技术_内存虚拟化 技术_内存虚拟硬盘技术

摘要: 介绍了内存压缩技术和基于硬件的内存压缩系统模型,探讨了内存压缩技术在嵌入式系统中的应用;重点关注内存压缩系统的硬件要求以及操作系统对内存压缩机制的支持;简单介绍内存压缩中常用的算法Lempel-Ziv,并讨论内存压缩技术在嵌入式系统中的应用. 关键字: 嵌入式系统存储器压缩存储器控制器Lempel-Ziv算法1存储器压缩技术简介为了节省存储空间或传输带宽,人们在计算机系统中广泛使用了数据压缩技术. 当将数据存储在磁性介质上或在网络上传输数据时,人们使用基于硬件或软件的各种压缩技术. 尽管压缩技术在各个领域中很流行,但是由于其复杂性,存储器压缩技术尚未得到广泛使用. 近年来,由于并行压缩-解压缩算法的进步以及硅密度和速度的提高,存储器压缩技术已变得可行. 内存压缩技术的主要思想是根据某种算法压缩数据并将其存储在压缩的内存中. 系统从压缩内存中找到压缩数据并对其进行解压缩,然后系统才能使用它们. 这样可以增加实际的可用内存空间,并减少由页面替换引起的开销,从而以较低的成本提高系统的整体性能. 内存压缩机制是在逻辑上向系统的存储层添加一层-压缩内存层.

系统在此层以压缩格式保存物理页面. 当页面再次被系统引用时,可以在解压缩压缩的页面后使用它. 我们将将管理该压缩内存层的相关硬件和软件统称为内存压缩系统. 内存压缩系统对CPU,I / O设备,设备驱动程序和应用程序软件是透明的,但是操作系统必须具有管理内存大小更改和压缩率更改的功能. 对于大多数操作系统而言,要实现内存压缩,不需要更改大多数体系结构. 在标准操作系统中,内存由固定数量的物理页面框架描述,并由操作系统的VMM管理. 为了支持内存压缩,将基于内存压缩率确定操作系统要管理的实际内存大小和页面帧数. 这里实现的内存是指操作系统可用内存的大小,它与物理内存的关系如下: 假设PM是物理内存,RM(t)是时间t的系统实际内存,CR(t )是压缩率在给定时间t可以支持的最大实际内存为RM(t)= CR1(t)×PM. 但是,由于应用程序的数据压缩率不取决于OS,而是动态变化,因此未压缩的数据可能会耗尽物理内存. 因此,当物理内存快要用完时,操作系统必须采取措施来解决此问题.

内存虚拟化 技术_内存拯救技术_内存虚拟硬盘技术

2内存压缩系统的硬件模型目前,由于内存压缩的思想越来越受到人们的关注,因此一些基于软件的内存压缩器已经出现在市场上. 这些内存压缩器主要通过软件压缩数据,但是由于访问压缩数据而导致的延迟,因此不能显着提高系统性能,甚至不能降低系统性能. 本节介绍基于硬件的内存压缩系统模型. 图1是存储器压缩系统的典型硬件模型,包括诸如压缩存储器,L3高速缓存和压缩存储器控制器之类的硬件部分. 压缩内存(133MHz SDRAM)包含压缩数据. L3高速缓冲区是一个共享的32MB,4路组关联的回写式高速缓冲区,每行大小为1KB,并由双倍数据速率(DDR)SDRAM定义. L3高速缓存包含未压缩的缓冲区行. 由于大多数访问都可以在L3高速缓存中进行,因此它隐藏了由于访问压缩主内存而引起的延迟. L3高速缓存是存储层次结构中上层的主内存,其操作对其他硬件(包括处理器和I / O)是透明的. 压缩内存控制器是整个内存压缩系统的控制中心. 它负责数据压缩/解压缩,监视物理内存的使用以及从实际地址到物理地址的寻址过程.

数据压缩的过程如下: 压缩内存控制将压缩1KB高速缓存行并将其写入压缩内存,然后从压缩内存中读取它们并将其解压缩. 压缩算法是Lempel-Ziv算法,我们将在下一部分中介绍. 压缩机制以不同的长度格式将压缩的数据块存储在内存中. 压缩内存的存储单元为256字节区域. 根据压缩率,一个1KB的存储块(恰好是L3每行的大小)可以占用0到4个压缩区域. 压缩内存控制器必须根据长度格式将系统总线上的实际地址转换为物理内存中的物理地址. 实际地址是出现在处理器外部总线上的常规地址. 该地址用于记录压缩内存的256字节区域. 实际的地址空间存在于L1 / L2 / L3高速缓存中,可以立即访问. 存储器内容的其余部分以压缩形式存在于物理存储器中. 存储器控制器通过查询压缩转换表(CTT)来执行从实际地址到物理地址的转换,该压缩转换表保留在物理存储器中的某个位置. 图2显示了CTT表的格式和内存控制器的寻址模式. 每个1KB存储块的实际地址都映射到CTT的项,并且CTT的每个项共有16个字节,包括四个物理区域地址,每个地址都指向物理内存的256字节区域.

内存虚拟硬盘技术_内存拯救技术_内存虚拟化 技术

对于少于120位的块(例如全零的块),将使用一种特殊的CTT格式,称为通用行格式. 以这种格式,所有压缩数据都存储在CTT项目中,而不是存储在四个地址指针中. 因此,一个1KB的通用块仅占用16个字节的物理内存,其压缩率达到64: 1. 压缩内存控制器中有一系列寄存器,用于监视物理内存使用情况. 使用的扇区寄存器(SUR)将压缩的内存使用情况报告给操作系统. 扇区使用阈值寄存器SUTHR和SUTLR用于设置存储器耗尽条件的中断入口点. SUTLR寄存器是PCI中断电路INTA的入口,而SUTHR寄存器是NMI中断的入口. 当SUR超过SUTLR的值时,内存控制器将产生一个中断,操作系统将采取措施防止内存消耗. 在将实际地址转换为物理地址时,一种有用的方法是快速页面操作. 它允许控制器仅修改CTT项目的四个指针,从而换出或清除4KB页面内容. 快速页面操作将与4KB页面相关的所有CTT项目更改为通用行格式(即全零),从而清除4KB页面的所有内容.

类似地,一对页面可以通过交换其相关CTT项的区域指针来交换页面内容. 由于不会发生大量数据移动,因此快速页面操作非常快. 压缩内存控制器的压缩/解压缩功能基于LempelZiv算法,因此下一节将简要介绍该算法的思想. 3内存压缩算法Lempel-Ziv大多数压缩算法,包括特别流行的Lempel-Ziv压缩算法系列,都是基于对原子记录(Token)字符串的完全重复检测. 尽管该算法不是最佳算法,但Lempel-Ziv算法强调该算法的简单性和高压缩率的实现率,因此已广泛用于内存压缩. Lemple-Ziv算法(缩写为LZ)在编码过程中将位字符串划分为短语,然后将数据流描述为一系列对. 每对构成一个新短语,其中包含一个数字(前一个短语的标识)和一个位(附加到前一个短语). 这种编码方法非常大,但是一旦应用于合适的字符串,它就是一种非常有效的编码方法. 以下示例说明了此算法的编码方式. ++表示连接(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)描述为先前短语和新位的组合. 接下来,U = 0 ++ 01 ++ 00 ++ 01101,得到P(3)= P(1)++ 0. 现在我们注意到有U = 0 ++ 01 + 00 + 011 ++ 01,并且P(4)= 011 = 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变为1011,它似乎比U长得多.

但是在这里,因为U的长度很短,所以没有看到好处,并且包含P(0)的公式没有被压缩,因此长度增加了. Lempel-Ziv字符串的解码非常简单,也就是说,要掌握其中的对,然后比较表1即可对其进行重构. 表1编码过程的步长公式U 0-P(0)0010001101 1 0 P(1)= P(0)++ 0 0 ++ 010001101 2 01 P(2)= P(1)++ 1 0+ + 01 ++ 00 ++ 01101 3 00 P(3)= P(1)++ 0 0 ++ 01 ++ 00 ++ 01101 4011 P(4)= P(2)++ 1 0 ++ 01 + + 00 ++ 011 ++ 01 5 01 P(5)= P(1)++ 1 0 ++ 01 ++ 00 ++ 011 ++ 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 = 011 C 000 ++ 011 ++ 010 ++ 101 ++ 011 = 1011 4操作系统对内存压缩的支持在压缩内存系统中,内存大小是指实际内存大小,该大小大于物理内存.

内存拯救技术_内存虚拟硬盘技术_内存虚拟化 技术

在引导时,BIOS向操作系统报告的内存大小大于实际安装的物理内存. 例如,硬件原型安装了512MB SDRAM,但BIOS向操作系统报告的内存大小为1GB. 以2: 1或更高的比率压缩应用程序数据时,实际的内存操作与一般操作系统的相同. 但是,当应用程序用未压缩的数据填充内存时(例如,一个zip文件无法实现2: 1的压缩率),因为一般的OS仅看到实际的地址空间,所以它无法意识到物理内存已用完. 例如,操作系统的实际内存为1024MB,而牧师的内存为512MB. 此时,实际内存已分配了600MB,系统显示仍有424MB的可用内存. 但是,由于分配的内存的压缩率较低,因此物理内存消耗现在接近512MB. 如果将内存进一步分配了一步,则系统将由于物理内存耗尽而崩溃,尽管它仍然表明存在424MB的可用内存. 在这种情况下,操作系统必须提供对管理压缩内存的支持. 由于内存压缩是一个相对较新的概念,因此,通常,系统没有这样的机制来区分实际地址和物理地址,也无法处理“物理内存耗尽”的情况.

但是,只要您对操作系统内核进行一些小的更改或向操作系统添加设备驱动程序,就可以实现目标. 一般来说,压缩内存应从以下几个方面进行管理. (1)监视物理内存的使用情况通过轮询或中断方法,检查物理内存的使用情况,并在物理内存用尽之前发出警告. 压缩内存管理例程通过压缩内存控制器中的某些寄存器来实现对物理内存的监视. SUR报告物理内存使用情况,而SUTHR和SUTLR用于设置中断阈值. 压缩内存管理算法基于物理内存使用的四个状态,即稳定,获取,危险和中断. 临界值之间的关系是mc_th_acquire


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shoujiruanjian/article-295103-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      每日福利
      热点图片
      拼命载入中...