保存桌面快捷方式 - - 设为首页 - 手机版
凹丫丫旗下网站:四字成语大全 - 故事大全 - 范文大全
您现在的位置: 范文大全 >> 理工论文 >> 电子通信论文 >> 正文

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


对 00++0=000 01++1=011 01++0=010 10=++1=101 01++1=011

C

000++011++010++101++011=000011010101011

4 操作系统对内存压缩的支持

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

由于内存压缩是一个比较新的概念,一般的情况作系统都没有这样的机制来区分实际地址和物理地址,也不能处理“物理内存耗尽”的情况。不过,只要对操作系统内核做一些小的改动或者在操作系统之上增加一个设备驱动程序,即可达到目的。

一般来说,要从以下几方面对压缩内存进行管理。

(1)监控物理内存使用情况

通过轮询或中断法,查看物理内存的使用情况,并在物理内存耗尽前给出警告。压缩内存管理例程是通过压缩内存控制器中的一些寄存器来实现对物理内存的监控。SUR报告物理内存的使用情况,SUTHR和SUTLR用于设置中断临界值。压缩内存管理算法是基于物理内存使用的四种状态,分别为steady、acquire、danger和interrupt,其临界值的关系是mc_th_acquire<mc_th_danger<mc_th_interrupt。

我们可以使用轮询和中断相结合的方法进行监控,并对物理内存使用的变化作出反应。通过时钟中断来驱动轮例程,该例程每10ms读取一次SUR的值,并将它与系统设定的临界值比较。当系统处于steady状态时,不用采取任何行动;当使用超过mc_th_acquire,应该增加nr_rsrv_pages来限制内存分配,但这并未引起内存缺乏;当使用超过mc_th_danger,应该增加nr_rsrv_pages到引起内存缺乏,并导致页面分配器和置换进程回收内存页面,一旦进入到该状态,物理内存管理例程会唤醒置换进程回收内存。

(2)回收内存以及清空空闲页面内容以减少使用

以标准的Linux内核为例,操作系统中有两具主要的变量来管理内存太少的情形。这两个变量是nr_free_pages和struct freepages。为了检测内存是否已耗尽,在分配内存前要进行检查。

if(nr_free_pages<freepages.min){

/*内存太少,回收页面*/

}

else

{/*可以进行分配*/

在内存压缩系统中,通过增加一个新变量nr_rsrv_pages来完成此功能。这样就使最小空闲页面数量变为:freepages.min'=freepages.min+nr_rsrv_pages。

通过动态地调整nr_rsrv_pages变量,压缩内存管理例程可以人为地造成内存缺乏的现象,从而引起置换进程回收页面,此时会将调用进程暂时挂起。回收内存包含缩减各种缓冲,并将进程页面置换到磁盘上。当页面返回到空闲页面池时,它们会被清零。我们可以使用前面提到的快速页面操作来减少清空页面操作所带来的开销。

(3)阻塞CPU周期以减少物理内存使用率

当物理内存使用超过监界值mc_th_interrupt,控制器就中断处理器,nr_rsrv_pages进一步增加,然后CPU

《嵌入式系统中的内存压缩技术(第3页)》
本文链接地址:http://www.oyaya.net/fanwen/view/164903.html

★温馨提示:你可以返回到 电子通信论文 也可以利用本站页顶的站内搜索功能查找你想要的文章。