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

內存壓縮演算法

發布時間:2022-08-29 08:55:23

壓縮後的文件大小與內存的關系

對 和內容有關系 因為不同的數據文件採用的壓縮演算法有區別
比如一個AVI的視頻可以壓縮成很小 而一個安裝程序比如EXE格式的壓縮了和沒壓縮大小都差不多~

② 壓縮後的文件能夠減少內存嗎

內存是減少不掉的,減少的是硬碟空間,不過你要放的是電影文件,如果你還是想要原來的文件,那麼是減少不掉的,電影文件壓縮的掉最多也就幾MB多出來,不過你可以把它轉換成其他格式的文件,比如AVI轉RM就可以小一點的。所以如果想減少空間佔用,就要轉成其他小一點的格式。

③ 為什麼把文件壓縮後,文件大小卻不變呢

為什麼把文件壓縮後,文件大小卻不變?這種情況受到文件自身以及壓縮演算法等多方面影響。如果想要進一步擴大壓縮比,可以試試用嗨格式壓縮大師進行操作。

→點擊下載正版無損壓縮軟體

嗨格式壓縮大師可以解決哪些問題?
1、相機拍攝的照片佔用內存較大,嗨格式壓縮大師可以在不改變圖片尺寸和清晰度的情況下壓縮圖片內存;
2、上傳到某些有視頻大小要求的平台,如微信上傳視頻要求不大於25M,絢星平台上傳要求不大於50M,通過嗨格式壓縮大師可以最大化保證視頻清晰度的情況壓縮大小;
3、文件壓縮後出現畫面受損情況,通過嗨格式壓縮大師可以完美避免這樣的問題;
4、發送郵件發現pdf文檔大小超出上傳限制,嗨格式壓縮大師可以無損壓縮文件;

嗨格式壓縮大師支持哪些格式進行壓縮?
1、圖片壓縮:可批量壓縮JPG/JPEG/GIF/PNG/BMP等格式圖片;
2、視頻壓縮:可壓縮各種格式視頻,如mp4、avi、flv、m4v、mkv、mov、wmv等;
3、文件壓縮:可壓縮多種文件格式,如PDF、PPT、Word等office常見文檔;

④ 為什麼同一個壓縮軟體壓縮同一個文件壓縮成同一個壓縮格式,採取同一種壓縮演算法,反而壓縮出來的文件卻不

方提問者尼豪,
7z相對rar,zip採用了更大的字典和單詞(和英語無關)
而且演算法較為先進且一般壓縮效果

但是同時也消耗大量的內存和cpu資源。
而且,對於一些已經高壓縮的文件,一般已經沒有可壓縮內容即重復內容,7z已經無能為力,再壓縮只會增加一些解壓相關信息。導致變大。而rar和zip會檢測壓縮內容,但會變大時自動採用
存儲方式壓縮,所以只打了一點點,不超過1kb,這1kb就是壓縮文件信息
有問題請追問^_^

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

摘要:介紹內存壓縮技術和一個基於硬體的內存壓縮系統模型,探討內存壓縮技術在嵌入式系統中的應用;重點介紹內存壓縮系統的硬體要求及操作系統對內存壓縮機制的支持;簡單介紹內存壓縮中常用的演算法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的價格更低,具有一定的實用價值。

⑥ 如何把100MB多的文件壓縮成50多MB甚至更小

20%的壓縮率不是沒有可能,我的這兒有個壓縮包還能達到10多%呢!我說這並沒有其他目的,只是說不同的文件,不同的演算法,壓縮率也不同。你想想,txt純文本文件和exe程序哪個的壓縮率高?肯定是txt嘛!所以呢,不用太在乎這些的!
下邊說說如何盡可能提高壓縮率!WINRAR里操作界面中找到「壓縮效果(或者是什麼,總之在常規選項卡的左下方),選」最好「,在右邊的里邊選固實壓縮文件,一般會比不操作壓縮率高!
還有就是如果你壓縮的不是exe的安裝程序,推薦你用好壓,操作基本相同,也要像上邊的更改一下。壓縮率一般會比WINRAR高!但好壓容易死機,可以在操作界面中點擊」演算法「選項卡,把字典大小調整到4M就可以了。當然,你的機子內存足夠高的話可以適當提高!

⑦ 怎麼用7Z最大幅度壓縮

首先壓縮比與待壓縮文件格式有很到關系。

在忽略待壓縮文件格式情況下,用7Z壓縮的壓縮比與以下幾個參數有關。

1.壓縮檔案格式:選7Z
2.壓縮等級:選極限壓縮
3.壓縮演算法:PPMD
4.字典大小:選最大的
5.單詞大小:選最大的。

PS:字典大小與壓縮和解壓時所用內存有直接的正比關系。
所以在選擇大字典的時候要考慮到是否能夠順利的壓縮和解壓縮。

祝你成功!

⑧ 怎樣把內存2.6M的相片壓縮到1M,然後上傳到個人空間上面

壓縮照片體積大小的話,可以用在線的一些工具比較方便,比如用這個在線智能圖片壓縮工具,你就可以把圖片文件壓縮到你想要的體積,比如你設置壓縮數值到100kb,等待幾秒鍾,在線圖片壓縮工具自動把圖片的文件大小壓縮到最高100kb了。通俗點說,也就是你想要設定壓縮到多少kb文件大小,他壓縮完的輸出圖片就是多少kb了,這應該是已經很方便了。在線智能圖片壓縮,壓縮圖片體積大小,JPG|PNG大圖壓縮

在線圖片智能壓縮使用步驟:

一、首先點擊加號添加需要壓縮的圖片。目前已知支持對jpg、png、webp、bmp等多種常見的圖片格式進行壓縮,如果選擇圖片後正常顯示並能夠壓縮成功,則代表支持該圖片格式。
二、可以自行修改圖片需要被壓縮到的最大寬高尺寸,默認為圖片原始的寬高尺寸,並且寬高比例是自動鎖定的,確保圖片不會變形。
三、必須設置圖片被壓縮後,期望輸出的壓縮之後圖片文件的最大佔用空間,該選項是必填的。
四、選擇圖片壓縮的演算法。默認為智能混合壓縮演算法,絕大多數情況下使用默認演算法進行圖片壓縮即可。
五、當你設置壓縮後的大小單位為」Kb「時,壓縮大小的設定值不能小於1Kb,但圖片壓縮後的最終文件大小是可以小於1Kb的。

⑨ 內存壓縮的原理

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

⑩ 為什麼解壓縮的過程那麼耗CPU和內存呢

1,解壓過程是需要CPU不斷處理大批數據,而且那些數據要求處理迅速,但也很大,所以很耗CPU和內存。
2,要加快解壓速度可以更換一個性能更好的CPU。
2,或者更換性能更好的內存條。

閱讀全文

與內存壓縮演算法相關的資料

熱點內容
天津市伺服器供應商雲伺服器 瀏覽:107
數控車床子程序編程 瀏覽:103
floydwarshall演算法 瀏覽:713
丟失微信app怎麼找 瀏覽:248
php能寫前端嗎 瀏覽:5
伺服器如何更改raid模式 瀏覽:84
方舟伺服器怎麼導出來 瀏覽:608
手機顯示伺服器異常什麼鬼 瀏覽:379
新聞伺服器的網址是什麼 瀏覽:669
程序員年底招人 瀏覽:319
廣發app怎麼查房貸 瀏覽:860
安卓手機怎麼下土豆 瀏覽:921
只有一個app顯示網路異常怎麼回事 瀏覽:988
解壓玩具是水寶寶 瀏覽:817
壓縮機保護怎麼解決 瀏覽:944
單片機簡易電子時鍾 瀏覽:402
pdf影印版 瀏覽:689
單片機的中斷技術 瀏覽:626
表格加密才能打開 瀏覽:39
多態可以提高編譯可靠性嗎 瀏覽:599