嵌入式設備內存數(shù)據(jù)的快速無損壓縮方法
【專利摘要】本發(fā)明公開了一種數(shù)據(jù)處理【技術領域】嵌入式設備內存數(shù)據(jù)的快速無損壓縮方法,主要解決已有的壓縮方法對內存頁面壓縮速度低的問題。其主要特點是設計了兩種適合內存頁面數(shù)據(jù)的壓縮格式:一種是首字節(jié)記錄字符重復長度、偏移距離和新字符長度,從第二個字節(jié)開始依次記錄剩余的新字符長度、新字符和剩余的偏移距離;第二種是首字節(jié)記錄壓縮格式標志、偏移距離和新字符長度,從第二個字節(jié)開始依次記錄剩余的新字符長度、新字符、字符重復長度和剩余的偏移距離。本發(fā)明與目前的LZO無損壓縮方法相比,提高了內存頁面數(shù)據(jù)的壓縮與解壓縮速度,并得到更好的壓縮率,從而提高了嵌入式設備的內存數(shù)據(jù)存儲容量和利用率,可用于存儲受限的嵌入式設備。
【專利說明】嵌入式設備內存數(shù)據(jù)的快速無損壓縮方法
【技術領域】
[0001] 本發(fā)明屬于數(shù)據(jù)處理【技術領域】,涉及嵌入式設備內存數(shù)據(jù)的數(shù)據(jù)壓縮方法,本發(fā) 明在數(shù)據(jù)壓縮時根據(jù)內存數(shù)據(jù)的特征采用新的數(shù)據(jù)壓縮格式提高了壓縮的速度,可用在存 儲受限的嵌入式設備中。
【背景技術】
[0002] 內存是計算機的重要部件之一,它是與CPU進行溝通的橋梁。計算機中所有程序 的運行都是在內存中進行的。內存的性能對計算機的影響很大,而在體積、存儲容量受限的 嵌入式便攜設備中,內存對設備性能和用戶體驗的影響尤為突出。近些年來,隨著移動互聯(lián) 網的發(fā)展,嵌入式便攜設備如手機、平板電腦等已經成為人們必備的一種通信工具。因此對 內存數(shù)據(jù)進行壓縮,挺高內存存儲能力和利用率將大大提高設備的整體性能。隨著社會發(fā) 展,信息量不斷增長,人們對嵌入式設備的系統(tǒng)性能也提出了更高的要求,如更高的速度、 更低的耗能、更小的體積、能存取更多的信息等等。為了達到上面的各種性能要求,人們提 出了各種改進的方法。相較于高額的硬件技術的突破,更加快速有效的方法之一就是無損 數(shù)據(jù)壓縮技術。如若在嵌入式設備中運用無損數(shù)據(jù)壓縮技術,則可以在相同的硬件存儲空 間中存取更多的數(shù)據(jù),提高內存利用率,降低成本,挺高設備性能和用戶體驗。鑒于上述技 術的各種優(yōu)點,運用這種簡單而廉價的改進嵌入式系統(tǒng)性能的技術,研究無損數(shù)據(jù)壓縮技 術是很有必要的。
[0003] Lempel和Ziv于1977年提出了一種高效率的無失真壓縮技術,即LZ77無損數(shù)據(jù) 壓縮算法,該壓縮算法的主要原理是利用較短的標記代表前面出現(xiàn)過的重復字串,標記格 式為重復長度,偏移距離,如abcdekabcdeha,則可以編碼成abcdek(5, 6)ha表不,這樣從整 體上而言,較短的信息代替較長的信息,從而達到了壓縮的效果。1982年,JamesStorer和 ThomasSzymanski在LZ77基礎上將算法進行改進提出了LZSS算法,提高了壓縮效率。后 來Lempel-Ziv-Oberhumer又在LZSS的基礎上將算法進行改進提出了LZ0算法,極大地提 高了壓縮編碼速度。LZ0算法是一種基于字典的無損的數(shù)據(jù)壓縮算法,具有壓縮速度快、即 時性的特點。該算法根據(jù)不同的重復長度和偏移距離設計了五種數(shù)據(jù)壓縮格式,編碼端按 照匹配對,即重復長度,偏移距離的大小選擇某一種壓縮格式編碼,解碼端通過壓縮格式的 首字節(jié)大小區(qū)分這五種不同的格式,最大的偏移距離可以達到48K。該方法存在的不足之處 是,自內存"分頁機制"提出之始,內存頁面的默認大小便被設置為4096字節(jié),即4KB。雖然 在原則上計算機的內存頁面大小是可配置的,但絕大多數(shù)的操作系統(tǒng)在實現(xiàn)中仍然采用默 認的4KB頁面。為便于內存數(shù)據(jù)管理,應對內存數(shù)據(jù)采用逐頁壓縮的方式,而LZ0初始設計 目的是壓縮長度不定的數(shù)據(jù),它在壓縮內存數(shù)據(jù)時,只能取得很低的壓縮率,不能有效的提 高內存利用率,并且壓縮與解壓縮速度都很慢。因此對于內存數(shù)據(jù),用目前的LZ0的壓縮方 式和壓縮格式都不能適用。
【發(fā)明內容】
[0004] 本發(fā)明的目的在于克服上述已有技術的不足,提出了一種嵌入式設備內存數(shù)據(jù)的 快速無損壓縮方法,以能夠更快速的壓縮與解壓縮內存數(shù)據(jù),從而有效提高內存存儲能力 和利用率。
[0005] 實現(xiàn)本發(fā)明的技術方案是:根據(jù)內存頁面的數(shù)據(jù)特征,設計一種適合內存頁面的 壓縮格式,針對內存頁面數(shù)據(jù)進行壓縮編碼,具體步驟包括如下:
[0006] (1)讀取嵌入式設備中內存數(shù)據(jù)的一個內存頁面,即按4KB的頁面大小逐頁讀取 內存頁面;
[0007] (2)判斷所讀頁面的數(shù)據(jù)是否為新數(shù)據(jù),若所讀數(shù)據(jù)未記錄在字典中,則判斷為新 數(shù)據(jù),并把新數(shù)據(jù)位置記入字典中,繼續(xù)讀取內存頁面數(shù)據(jù),直到未出現(xiàn)新數(shù)據(jù)為止;
[0008] 所述字典是根據(jù)關鍵值直接訪問的哈希表結構,該關鍵值是通過哈希函數(shù)計算得 出;
[0009] (3)對已記錄在字典中的所讀數(shù)據(jù),根據(jù)字符重復長度和偏移距離,即字符當前位 置與哈希表內記錄位置之間的距離,選用不同的壓縮格式進行編碼:
[0010] 對于字符重復長度小于8,且偏移距離小于等于2KB的內存頁面數(shù)據(jù),其首字節(jié)記 錄字符重復長度L、偏移距離D和新字符長度S;從第二個字節(jié)開始依次記錄剩余的新字符 長度M、新字符C和剩余的偏移距離N;
[0011] 對于不滿足字符重復長度小于8,且偏移距離小于等于2KB的內存頁面數(shù)據(jù),其首 字節(jié)記錄壓縮格式標志T、偏移距離D和新字符長度S;從第二個字節(jié)開始依次記錄剩余的 新字符長度M、新字符C、字符重復長度L和剩余的偏移距離N;
[0012] (4)判斷編碼位置是否為當前讀入內存頁面結尾,若是,則輸出壓縮后的數(shù)據(jù)和數(shù) 據(jù)的長度,并記錄結束標志,執(zhí)行步驟(5),否則,返回步驟(2),繼續(xù)讀入新數(shù)據(jù);
[0013] (5)判斷當前頁面是否為內存數(shù)據(jù)包的最后一個內存頁面,若是,則編碼結束,否 貝U,返回步驟(1)讀入下一個內存頁面。
[0014] 本發(fā)明由于所采用的壓縮格式簡單,從而提高了內存頁面數(shù)據(jù)的壓縮與解壓縮速 度,并得到更好的壓縮率,能夠較大幅提高嵌入式設備的內存數(shù)據(jù)存儲容量和利用率。
[0015] 測試結果表明:本發(fā)明與目前的LZ0無損壓縮方法相比,其壓縮時間提高了 14. 52%,解壓縮時間提高了 98. 84%,壓縮率提高了 1. 1%。
【專利附圖】
【附圖說明】
[0016]圖1是本發(fā)明的壓縮流程圖;
[0017] 圖2是本發(fā)明中的壓縮格式圖。
【具體實施方式】
[0018] 下面結合圖對本發(fā)明作進一步詳細描述:
[0019] 參照圖1,本發(fā)明的實現(xiàn)步驟如下:
[0020] 步驟1 :從嵌入式設備的內存數(shù)據(jù)包中讀入一個內存頁面,即按4KB的頁面大小逐 頁讀取內存頁面。
[0021] 步驟2 :從所讀內存頁面讀入四個字符,做第一次哈希運算,即通過第一個哈希函 數(shù)計算得出關鍵值,該哈希函數(shù)為目前的LZ0無損壓縮方法中的第一個哈希函數(shù)。
[0022] 步驟3 :根據(jù)步驟2中關鍵值判斷字符的位置是否合法,若合法,則進入步驟4,若 不合法,則更新哈希表,該哈希表是根據(jù)關鍵值直接訪問的數(shù)據(jù)結構,再返回步驟2。
[0023] 所述的合法,是指哈希表中所存的每一個位置都只能根據(jù)一個關鍵值訪問。
[0024] 步驟4:判斷當前哈希表所存位置中的字符是否與讀入字符相同,若相同,則進入 步驟7,若不相同,則進入步驟5。
[0025] 所述的當前哈希表所存位置,是指根據(jù)步驟2中關鍵值直接訪問的哈希表所存的 一個位置。
[0026] 步驟5:用步驟2中得到的關鍵值做第二次哈希運算,即通過第二個哈希函數(shù)計算 得出第二個關鍵值,該哈希函數(shù)為目前的LZ0無損壓縮方法中的第二個哈希函數(shù);再根據(jù) 第二個關鍵值判斷字符位置是否合法,若合法,則進入步驟6,若不合法,則更新哈希表,返 回步驟2。
[0027] 步驟6:判斷該哈希表所存地址中的字符是否與讀入字符相同,若相同,則進入步 驟7,若不相同,則判定讀入字符為新字符C,并更新哈希表,返回步驟2。
[0028] 所述的哈希表所存地址,是指根據(jù)步驟5中第二個關鍵值直接訪問的哈希表所存 的一個地址。
[0029] 步驟7 :計算新字符長度S、字符重復長度L和偏移距離D,即字符當前位置與哈希 表內記錄位置之間的距離。
[0030] 該計算方法與目前的LZ0無損壓縮方法中的計算方法相同。
[0031] 步驟8 :判斷字符重復長度是否小于8且偏移距離是否小于等于2KB,若是,則執(zhí)行 步驟9;若不是,則執(zhí)行步驟10。
[0032] 步驟9 :將字符按壓縮格式1的記錄規(guī)則進行編碼。
[0033]參照圖2(a),本步驟按照壓縮格式1的記錄規(guī)則進行編碼的步驟如下:
[0034] 9. 1)首字節(jié)的前3位記錄字符重復長度L,首字節(jié)的第4、第5、第6位記錄偏移距 離D的后3比特,即每一位記錄1比特;
[0035] 9. 2)判斷新字符長度S是否大于3,若不是,則首字節(jié)的最后2位記錄新字符長 度S,并從第二個字節(jié)開始記錄新字符C;若是,則首字節(jié)的最后2位記錄為0作為標志,并 用新字符長度S減3,得到剩余的新字符長度M,再判斷剩余的新字符長度M是否大于255, 若不是,則記錄剩余的新字符長度M,若是,則記錄一個字節(jié)0,并用剩余的新字符長度M減 255,直到剩余的新字符長度小于255,記錄該剩余的新字符長度,再記錄新字符C;
[0036] 9. 3)記錄新字符完成之后,記錄剩余的偏移距離N,該剩余的偏移距離N是偏移距 離D的前8比特;然后進入步驟11。
[0037] 步驟10:將字符按壓縮格式2的記錄規(guī)則進行編碼。
[0038]參照圖2(b),本步驟按照壓縮格式2的記錄規(guī)則進行編碼的步驟如下:
[0039] 10. 1)首字節(jié)的前2位記錄為01作為壓縮格式標志T,即第1位記錄為0,第2位 記錄為1,首字節(jié)的第3、第4、第5、第6位記錄偏移距離D的后4比特,即每一位記錄1比 特。
[0040] 10. 2)判斷新字符長度S是否大于3,若不是,則首字節(jié)的最后2位記錄新字符長 度S,即每一位記錄1比特,并從第二個字節(jié)開始記錄新字符;若是,則首字節(jié)的最后2位記 錄為〇作為標志,并用新字符長度S減3,得到剩余的新字符長度M,再判斷剩余的新字符長 度M是否大于255,若不是,則記錄剩余的新字符長度M,若是,則記錄一個字節(jié)0,并用剩余 的新字符長度M減255,直到剩余的新字符長度小于255,記錄該剩余的新字符長度,再記錄 新字符C;
[0041] 10. 3)記錄新字符完成之后,判斷字符重復長度L是否大于255,若不是,則記錄字 符重復長度L,若是,則記錄一個字節(jié)0,并用字符重復長度L減255,直到字符重復長度小于 255,記錄該字符重復長度;
[0042] 10. 4)記錄字符重復長度完成之后,記錄剩余的偏移距離N,該剩余的偏移距離N 為偏移距離D的前8比特。
[0043] 步驟11:判斷編碼位置是否與當前讀入內存頁面結尾位置相同,若相同,則輸出 編碼后的數(shù)據(jù)和數(shù)據(jù)的長度,并記錄結束標志,然后進入步驟12,若不相同,則返回步驟2。
[0044] 所述的結束標志,是指記錄三個字節(jié)的數(shù)據(jù),即第1個字節(jié)記錄為17,第2和第3 個字節(jié)都記錄為0。
[0045] 步驟12:判斷當前內存頁面是否為內存數(shù)據(jù)包的最后一個內存頁面,即嵌入式設 備的內存數(shù)據(jù)包中的所有數(shù)據(jù)是否都已經被讀取,若是,則編碼結束,若不是,則返回步驟 1〇
[0046] 下面結合實驗對本發(fā)明的效果做進一步說明:
[0047] 本實驗采用C語言來編寫發(fā)明所提出的壓縮方法,通過比較本發(fā)明與目前的LZ0 無損壓縮方法對內存頁面數(shù)據(jù)的壓縮效果,來說明本發(fā)明方法壓縮與解壓縮速度的優(yōu)點。 LZ0是目前最好的無損壓縮方法。本實驗所采用的內存數(shù)據(jù)為典型移動設備的4KB大小的 內存頁面數(shù)據(jù),實驗使用數(shù)據(jù)為內存頁面數(shù)據(jù)包,數(shù)據(jù)包大小為453MB。在VS2010程序開 發(fā)環(huán)境中,分別用本發(fā)明和目前的LZ0無損壓縮方法壓縮內存頁面數(shù)據(jù),實驗結果如表1所 示:
[0048]表1
[0049]
【權利要求】
1. 一種嵌入式設備內存數(shù)據(jù)的快速無損壓縮方法,包括如下步驟: (1) 讀取嵌入式設備中內存數(shù)據(jù)的一個內存頁面,即按4KB的頁面大小逐頁讀取內存 頁面; (2) 判斷所讀頁面的數(shù)據(jù)是否為新數(shù)據(jù),若所讀數(shù)據(jù)未記錄在字典中,則判斷為新數(shù) 據(jù),并把新數(shù)據(jù)位置記入字典中,繼續(xù)讀取內存頁面數(shù)據(jù),直到未出現(xiàn)新數(shù)據(jù)為止; 所述字典是根據(jù)關鍵值直接訪問的哈希表結構,該關鍵值是通過哈希函數(shù)計算得出; (3) 對已記錄在字典中的所讀數(shù)據(jù),根據(jù)字符重復長度和偏移距離,即字符當前位置與 哈希表內記錄位置之間的距離,選用不同的壓縮格式進行編碼: 對于字符重復長度小于8,且偏移距離小于等于2KB的內存頁面數(shù)據(jù),其首字節(jié)記錄字 符重復長度L、偏移距離D和新字符長度S ;從第二個字節(jié)開始依次記錄剩余的新字符長度 M、新字符C和剩余的偏移距離N ; 對于不滿足字符重復長度小于8,且偏移距離小于等于2KB的內存頁面數(shù)據(jù),其首字節(jié) 記錄壓縮格式標志T、偏移距離D和新字符長度S ;從第二個字節(jié)開始依次記錄剩余的新字 符長度M、新字符C、字符重復長度L和剩余的偏移距離N ; (4) 判斷編碼位置是否為當前讀入內存頁面結尾,若是,則輸出壓縮后的數(shù)據(jù)和數(shù)據(jù)的 長度,并記錄結束標志,執(zhí)行步驟(5),否則,返回步驟(2),繼續(xù)讀入新數(shù)據(jù); (5) 判斷當前頁面是否為內存數(shù)據(jù)包的最后一個內存頁面,若是,則編碼結束,否則,返 回步驟(1)讀入下一個內存頁面。
2. 根據(jù)權利要求1所述的嵌入式設備內存數(shù)據(jù)的快速無損壓縮方法,其特征在于:步 驟(3)所述的首字節(jié)記錄字符重復長度L、偏移距離D和新字符長度S,按如下規(guī)則記錄: 首字節(jié)的前3位記錄字符重復長度L,L〈8 ; 首字節(jié)的第4、第5、第6位記錄偏移距離D的后3比特,即每一位記錄1比特; 判斷新字符長度S是否大于3,若不是,則首字節(jié)的最后2位記錄新字符長度S,即每一 位記錄1比特,若是,則首字節(jié)的最后2位記錄為0作為標志,并用新字符長度S減3,得到 剩余的新字符長度M。
3. 根據(jù)權利要求1所述的嵌入式設備內存數(shù)據(jù)的快速無損壓縮方法,其特征在于:步 驟(3)所述的從第二個字節(jié)開始依次記錄剩余的新字符長度M、新字符C和剩余的偏移距離 N,按如下規(guī)則記錄: 判斷剩余的新字符長度M是否大于255,若不是,則記錄剩余的新字符長度M,若是,則 記錄一個字節(jié)0,并用剩余的新字符長度M減255,直到剩余的新字符長度小于255,記錄該 剩余的新字符長度,再記錄新字符C ; 記錄新字符完成之后,記錄剩余的偏移距離N,該剩余的偏移距離N是偏移距離D的前 8比特。
4. 根據(jù)權利要求1所述的嵌入式設備內存數(shù)據(jù)的快速無損壓縮方法,其特征在于:步 驟(3)所述的首字節(jié)記錄壓縮格式標志T、偏移距離D和新字符長度S,按如下規(guī)則記錄: 首字節(jié)的前2位記錄為01作為壓縮格式標志T,即第1位記錄為0,第2位記錄為1 ; 首字節(jié)的第3、第4、第5、第6位記錄偏移距離D的后4比特,即每一位記錄1比特; 判斷新字符長度S是否大于3,若不是,則首字節(jié)的最后2位記錄新字符長度S,即每一 位記錄1比特,若是,則首字節(jié)的最后2位記錄為0作為標志,并用新字符長度S減3,得到 剩余的新字符長度M。
5.根據(jù)權利要求1所述的嵌入式設備內存數(shù)據(jù)的快速無損壓縮方法,其特征在于:步 驟(3)所述的從第二個字節(jié)開始依次記錄剩余的新字符長度M、新字符C、字符重復長度L 和剩余的偏移距離N,按如下規(guī)則記錄: 判斷剩余的新字符長度M是否大于255,若不是,則記錄剩余的新字符長度M,若是,則 記錄一個字節(jié)0,并用剩余的新字符長度M減255,直到剩余的新字符長度小于255,記錄該 剩余的新字符長度,再記錄新字符C ; 記錄新字符完成之后,判斷字符重復長度L是否大于255,若不是,則記錄字符重復長 度L,若是,則記錄一個字節(jié)0,并用字符重復長度L減255,直到字符重復長度小于255,記 錄該字符重復長度; 記錄字符重復長度完成之后,記錄剩余的偏移距離N,該剩余的偏移距離N為偏移距離 D的前8比特。
【文檔編號】H03M7/30GK104410424SQ201410696377
【公開日】2015年3月11日 申請日期:2014年11月26日 優(yōu)先權日:2014年11月26日
【發(fā)明者】宋彬, 李慧玲, 秦浩, 裴遠 申請人:西安電子科技大學