導航:首頁 > 文件處理 > 內存壓縮

內存壓縮

發布時間:2022-01-13 12:30:37

㈠ 內存能不能壓縮

不可以壓縮
但是可以使用windows優化大師之類的軟體清理內存,就是把內存里不常用的東西清除掉以騰出給常用的程序

㈡ 內存壓縮的原理

就是把「占著毛坑不拉絲」的清除出去

㈢ 壓縮內存是什麼意思 壓縮了有什麼好處

摘要:介紹內存壓縮技術和一個基於硬體的內存壓縮系統模型,探討內存壓縮技術在嵌入式系統中的應用;重點介紹內存壓縮系統的硬體要求及操作系統對內存壓縮機制的支持;簡單介紹內存壓縮中常用的演算法Lempel-Ziv,並就內存壓縮技術在嵌入式系統中的應用問題作一些探討。
關鍵詞:嵌入式系統 內存壓縮 壓縮內存控制器 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<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 blocker就開始運行。我們在輪詢機制的基礎上還使用了中斷機制,因為中斷機制比輪詢機制更加快速。如果在10ms的間隔中,物理內存使用突然上升,硬體中斷會比輪詢常式更早檢測到這一情況。為了更加安全,我們使用CPUblocker來阻塞引起物理內存使用的進程。CPU blocker是空閑線程,它們可以使CPU空忙。由於頁面被置換到磁碟是以機器速度運行的,而物理內存使用卻可以以內存訪問速度運行,速度從而得到增加。當牧師內存使用持續增加,以至換頁也無法緩解時,進程需要被阻塞。我們就通過啟動CPUblocker來阻塞CPU周期直到換頁機制能有效地降低物理內存使用。CPUblocker不會阻塞中斷,而且每40ms它就會讓出CPU以免其它進程被餓死。

5 內存壓縮技術在嵌入式系統中的應用

嵌入式系統是一種特殊的計算機系統,它是一個更大的系統或設備的一部分。通常,一個嵌入式系統是駐留在單處理機底板上的,其應用程序存儲在ROM中。事實上,所有具有數字介面的設備——監視器、微波爐、VCRs、汽車等,都使用了嵌入式系統。一些嵌入式系統包含了操作系統,稱為嵌入式操作系統。為了滿足嵌入式應用的特殊要求,嵌入式微處理器雖然在功能上和標准微處理器基本是一樣的,但和工業控制計算機相比,嵌入式微處理器具有體積小、重量輕、成本低、可靠性中,內存仍然是珍貴的資源,因此研究內存壓縮技術在嵌入式系統中的應用具有一定的價值。

內存壓縮的思想在一些嵌入式操作系統中,實際上已經得到了體現。例如在VxWorks中,當操作系統下載到目標機上時,其中一種方式是將引導程序和VxWorks映像都存放在ROM中。為了將其解壓後再從ROM拷貝到RAM。這種基於軟體的壓縮方式,可以節省ROM空間,但其引導過程相對較慢。

以上的內存壓縮技術在ROM中得到了應用,但對於RAM來講,基於軟體內存壓縮技術,由於其訪問壓縮數據可能造成的延遲和不確定性,會對嵌入式系統的實時性造成和。因此它與虛擬內存技術一樣,在嵌入式系統中未得到廣泛應用。

本文所介紹的內存壓縮系統是基於硬體的。在相同基準下,測試結果顯示出,該系統的運行速度比標准系統的運行速度快1.3倍。如果要實現相同大小的內存,採用內存壓縮系統的硬體費用比購買RAM的費用要低,而且內存越大,其節省的費用越多,可以達到一半的價錢。因此筆者認為在內存資源極其寶貴的嵌入式系統中,實現基於硬體的內存壓縮系統具有較大的價值。

結語

本文介紹的內存壓縮系統是基於專門的硬體支持,即L3高速緩沖和內存控制器。在目前大多數Pentium以上架構的硬體平台上,只需要對操作系統內核做一些小的屐,或者增加一個設備驅動及服務程序,即可完成此項功能。由於嵌入式系統對實時性的要求,基於硬體的內存壓縮技術可以在增大可用內存的同時不影響系統的實時性,其硬體費用相對RAM的價格更低,具有一定的實用價值。

㈣ win10—— 任務管理器——內存——使用中(已壓縮)是怎麼回事能把壓縮解掉嗎

是微軟對 WIN 10 使用的一種新技術。就是在內存使用量不大的情況下對內存進行壓縮,把壓縮也來的空間用於緩存一些剛剛使用過,並且還將再使用的過程程序,當再運行這個程序時就可以直接從內在中提取,而不必從硬碟提取,這樣可以提高系統的運行速度。可以把壓縮解掉,更換程序就可以了。

㈤ 文件大占內存怎麼壓縮

  1. 下個壓縮軟體壓縮

  2. 存到雲盤等

㈥ 內存管理能壓縮出多大空間

是vista嗎?是的話就別用內存整理!
不如加個1G的內存,才150~180。
內存整理會把你系統的好多東西禁用的,搞死你呢!!!

㈦ 怎樣使用壓縮包把文件內存變小

壓縮文件雖然可以減小空間,但是也是有極限的,不可能無止境的壓縮下去,關於winrar有個壓縮參數,在壓縮選項卡,高級按鈕裡面有個壓縮。。。。打開按照需要設置就行了

㈧ 怎樣把文件內存壓縮變小

可以把電腦中的文件製作成壓縮包的形式,就能夠把文件內存壓縮下來了。具體操作請參考以下內容。

工具/原料:Windows7系統電腦。

1、右擊一個要壓縮的文件。

㈨ 視頻內存太大了,如何壓縮內存

狸.窩視頻壓縮軟體

1原視頻mp4格式,體積為572mb

㈩ win10為什麼會壓縮使用中的內存

win10「系統和壓縮內存」內存佔用過大解決方法
工具/原料

win10系統電腦一台
方法/步驟

首先我們右鍵打開電腦屬性,點擊系統保護

找到系統屬性里的高級--性能 設置

打開性能選項選擇高級--虛擬內存更改

取消1的對勾
--2選擇C盤除外的任意一個盤
--3初始大小改為2048,最大值改為8192
--4設置,確定
保存了以後重啟計算機

5
好了,現在我們在任務管理器進程內可以看到「系統和壓縮內存」明顯減少了,這樣就會使我們win10系統使用更加敏捷。

閱讀全文

與內存壓縮相關的資料

熱點內容
php讀取文檔內容 瀏覽:626
亞馬遜雲的虛擬雲伺服器的產品 瀏覽:891
打開php網站空白 瀏覽:165
phpxml讀取數據 瀏覽:335
如何安裝微信安卓版 瀏覽:121
51單片機藍牙傳送到手機 瀏覽:70
使用hmcl壓縮包用完不保存 瀏覽:267
php開啟phpfpm 瀏覽:655
看pdf常亮 瀏覽:835
麒麟系統如何用命令新建文件夾 瀏覽:134
php判斷是手機訪問還是電腦訪問 瀏覽:607
python停車系統收費模塊 瀏覽:804
哪個app可以約大巴車 瀏覽:183
linux中seq命令 瀏覽:829
代理伺服器的地址埠號碼 瀏覽:165
程序員給領導提意見 瀏覽:463
哪裡可以看夏木的電影app 瀏覽:454
如何辨別原裝數據線安卓 瀏覽:631
手機pc游戲解壓教程 瀏覽:696
安卓怎麼設置高清動態壁紙 瀏覽:777