關鍵詞:嵌入式系統 內存壓縮 壓縮內存控制器 Lempel-Ziv算法
1 內存壓縮技術介紹
為節省存儲空間或傳輸帶寬,人們已經在計算機系統中廣泛地使用了數據壓縮技術。在磁介質存儲數據或網絡傳輸數據時,人們使用基于硬件或軟件的各種壓縮技術。當壓縮技術在各個領域都很流行時,內存壓縮技術卻由于其復雜性而一直未得到廣泛使用。近年來,由于在并行壓縮一解壓算法以及在硅密度及速度方面取得的進展,使得內存壓縮技術變得可行。
內存壓縮技術的主要思想是將數據按照一定的算法壓縮后存入壓縮內存中,系統從壓縮內存中找到壓縮過的數據,將其解壓后即可以供系統使用。這樣既可以增加實際可用的內存空間,又可以減少頁面置換所帶來的開銷,從而以較小的成本提高系統的整體性能。
內存壓縮機制是在系統的存儲層次中邏輯地加入一層——壓縮內存層。系統在該層中以壓縮的格式保存物理頁面,當頁面再次被系統引用時,解壓該壓縮頁后,即可使用。我們將管理這一壓縮內存層的相關硬件及軟件的集合統稱為內存壓縮系統。內存壓縮系統對于CPU、I/O設備、設備驅動以及應用軟件來說是透明的,但是操作系統必須具有管理內存大小變化以及壓縮比率變化的功能。
對于大多數的操作系統而言,要實現內存壓縮,大部分體系結構都不需要改動。在標準的操作系統中,內存都是通過固定數目的物理頁框(page frame)來描述的,由操作系統的VMM來管理。要支持內存壓縮,OS要管理的實際內存大小和頁框數目是基于內存的壓縮比率來確定的。這里的實現內存是指操作系統可的內存大小,它與物理內存的關系如下:假設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。
壓縮內存控制器中有一系列的寄存器用于監控物理內存使用。Sectors Used Register(SUR)向操作系統報告壓縮內存的使用情況。The Sectors Used Threshold Registers,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就變成000011010101011,看來比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 |
4 | 011 | 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=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 我們可以使用輪詢和中斷相結合的方法進行監控,并對物理內存使用的變化作出反應。通過時鐘中斷來驅動輪例程,該例程每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 /*內存太少,回收頁面*/ } else {/*可以進行分配*/ 在內存壓縮系統中,通過增加一個新變量nr_rsrv_pages來完成此功能。這樣就使最小空閑頁面數量變為:freepages.min'=freepages.min+nr_rsrv_pages。 通過動態地調整nr_rsrv_pages變量,壓縮內存管理例程可以人為地造成內存缺乏的現象,從而引起置換進程回收頁面,此時會將調用進程暫時掛起。回收內存包含縮減各種緩沖,并將進程頁面置換到磁盤上。當頁面返回到空閑頁面池時,它們會被清零。我們可以使用前面提到的快速頁面操作來減少清空頁面操作所帶來的開銷。 (3)阻塞CPU周期以減少物理內存使用率 當物理內存使用超過監界值mc_th_interrupt,控制器就中斷處理器,nr_rsrv_pages進一步增加,然后CPU blocker就開始運行。我們在輪詢機制的基礎上還使用了中斷機制,因為中斷機制比輪詢機制更加快速。如果在10ms的間隔中,物理內存使用突然上升,硬件中斷會比輪詢例程更早檢測到這一情況。為了更加安全,我們使用CPUblocker來阻塞引起物理內存使用的進程。CPU blocker是空閑線程,它們可以使CPU空忙。由于頁面被置換到磁盤是以機器速度運行的,而物理內存使用卻可以以內存訪問速度運行,速度從而得到增加。當牧師內存使用持續增加,以至換頁也無法緩解時,進程需要被阻塞。我們就通過啟動CPUblocker來阻塞CPU周期直到換頁機制能有效地降低物理內存使用。CPUblocker不會阻塞中斷,而且每40ms它就會讓出CPU以免其它進程被餓死。 嵌入式系統是一種特殊的計算機系統,它是一個更大的系統或設備的一部分。通常,一個嵌入式系統是駐留在單處理機底板上的,其應用程序存儲在ROM中。事實上,所有具有數字接口的設備——監視器、微波爐、VCRs、汽車等,都使用了嵌入式系統。一些嵌入式系統包含了操作系統,稱為嵌入式操作系統。為了滿足嵌入式應用的特殊要求,嵌入式微處理器雖然在功能上和標準微處理器基本是一樣的,但和工業控制計算機相比,嵌入式微處理器具有體積小、重量輕、成本低、可靠性中,內存仍然是珍貴的資源,因此研究內存壓縮技術在嵌入式系統中的應用具有一定的價值。 內存壓縮的思想在一些嵌入式操作系統中,實際上已經得到了體現。例如在VxWorks中,當操作系統下載到目標機上時,其中一種方式是將引導程序和VxWorks映像都存放在ROM中。為了將其解壓后再從ROM拷貝到RAM。這種基于軟件的壓縮方式,可以節省ROM空間,但其引導過程相對較慢。 以上的內存壓縮技術在ROM中得到了應用,但對于RAM來講,基于軟件內存壓縮技術,由于其訪問壓縮數據可能造成的延遲和不確定性,會對嵌入式系統的實時性造成和。因此它與虛擬內存技術一樣,在嵌入式系統中未得到廣泛應用。 本文所介紹的內存壓縮系統是基于硬件的。在相同基準下,測試結果顯示出,該系統的運行速度比標準系統的運行速度快1.3倍。如果要實現相同大小的內存,采用內存壓縮系統的硬件費用比購買RAM的費用要低,而且內存越大,其節省的費用越多,可以達到一半的價錢。因此筆者認為在內存資源極其寶貴的嵌入式系統中,實現基于硬件的內存壓縮系統具有較大的價值。 結語 本文介紹的內存壓縮系統是基于專門的硬件支持,即L3高速緩沖和內存控制器。在目前大多數Pentium以上架構的硬件平臺上,只需要對操作系統內核做一些小的屐,或者增加一個設備驅動及服務程序,即可完成此項功能。由于嵌入式系統對實時性的要求,基于硬件的內存壓縮技術可以在增大可用內存的同時不影響系統的實時性,其硬件費用相對RAM的價格更低,具有一定的實用價值。 相關推薦
5 內存壓縮技術在嵌入式系統中的應用
嵌入式技術在醫療儀器設備有什么應用?
嵌入式技術在生活中有哪些行業應用?
嵌入式技術是什么
嵌入式技術究竟是什么?
嵌入式系統中內存的分布情況
嵌入式系統內存優化使用
嵌入式系統內存管理
嵌入式系統EMC的產生原理是什么?
嵌入式系統主要學什么
嵌入式系統產品有哪些
嵌入式系統和嵌入式電腦有什么區別?
嵌入式系統在行業中的應用
嵌入式系統開發要素的選擇原則是什么
嵌入式系統是什么 什么叫嵌入式系統
嵌入式系統是什么 什么叫嵌入式系統
嵌入式系統是什么意思
嵌入式系統有什么安全技巧?
嵌入式系統特點詳解 嵌入式系統的六大特點
嵌入式系統特點詳解 嵌入式系統的六大特點
嵌入式系統特點詳解 嵌入式系統的六大特點
嵌入式系統電子的實時性是什么?
嵌入式系統的技術特點及廣泛運用
嵌入式系統的發展歷史
嵌入式系統的實時性與快速性有關
嵌入式系統設計
嵌入式GUI系統的特點是什么?
嵌入式Linux系統中內核抽象的動態擴展技術
嵌入式Linux系統中內核抽象的動態擴展技術
嵌入式Linux系統中內核抽象的動態擴展技術
嵌入式實時系統的關鍵技術是什么?
嵌入式實時系統設計模式是什么?
嵌入式實時操作系統如何簡化應用軟件的設計
嵌入式最小系統的啟動架構是什么?
嵌入式組態軟件系統應用舉例
嵌入式視覺技術是什么?
嵌入式視頻監控系統視頻服務器該怎么設計?
ARM嵌入式最小系統的啟動架構是什么?
Linux嵌入式系統中內核技術的可動態拓展技術有哪些
slab分配器在嵌入式系統有什么優點?
什么是嵌入式系統技術的核心DSP器件?
什么是嵌入式系統技術的核心?
什么是嵌入式系統?
什么是嵌入式系統?深嵌入式系統又是什么
什么是嵌入式Linux系統下的CGI程序設計技術?
什么是嵌入式操作系統內存管理技術?
幾種嵌入式軟件代碼壓縮技術的比較分析
分析嵌入式系統的技術特點
在分布式嵌入式系統的過程中利用Jini技術有什么優勢?
基于嵌入式WEB的網絡視頻監控系統該如何去設計?
基于FPGA的嵌入式系統應用
如何使用嵌入式的內存分配管理技術
如何設計嵌入式無線視頻監控系統?
如何設計一種嵌入式網絡化視頻監控系統?
工業嵌入式系統有哪些應用?
怎么實現基于ADV202的嵌入式視頻壓縮系統軟硬件設計?
怎么實現基于Winodws CE的嵌入式網絡監控系統的設計?
怎么設計嵌入式系統的內存管理
我國嵌入式技術及應用現狀分析
汽車嵌入式系統發展歷程介紹
汽車嵌入式系統發展歷程回顧
汽車嵌入式系統的發展如何?
淺析嵌入式系統中的數據無損壓縮
物聯網嵌入式系統有什么特征?
談一談嵌入式設備的壓縮存儲算法
嵌入式系統數據無損壓縮
1
評論