Az LZMA ( angolul Lempel-Ziv-Markov chain-Algorithm ) egy adattömörítési algoritmus, amelyet 1996 vagy 1998 óta fejlesztett ki Igor Pavlov [1] . A 7-Zip archiválóban ugyanaz a szerző használta tömörített archívumok létrehozásához 7z formátumban.
Az algoritmus egy szótári adattömörítési sémán alapul , hasonlóan az LZ77 -ben használthoz , és magas tömörítési arányt biztosít (általában magasabb, mint a bzip2 használatával történő tömörítés esetén ), valamint lehetővé teszi különböző méretű szótárak használatát (legfeljebb 4 GB [2] ).
Ezenkívül az lzma egy nyílt forráskódú parancssori adattömörítő segédprogram az LZMA SDK -ból , amely .lzma formátumú és kiterjesztésű fájlokkal működik .
A C++ nyelven írt nyílt forráskódú LZMA fejlesztőkészlet a továbbfejlesztett LZ77 tömörítési algoritmust használja , kiegészítve egy térközű kódolási algoritmussal , valamint speciális eljárásokkal a bináris fájlok feldolgozására.
Az LZMA támogatja a hash láncok , bináris fák és előtagfák különféle változatait a szótári keresési algoritmusok alapjaként.
Az LZMA SDK az x86 , ARM , PowerPC , IA-64 és ARM Thumb architektúra processzorokhoz implementált BCJ/BCJ2 algoritmust is tartalmazza . Ebben az ugráspontok normalizálásra kerülnek a tömörítés előtt - azaz például x86 esetén ez azt jelenti, hogy a közeli és feltételes ugrásokra, valamint a függvényhívásokra vonatkozó utasítások az űrlapról relatív eltolású "menj vissza 1665 bájttal" az űrlapra konvertálva. az abszolút cím "ugorjon az 5554-es címre".
A 7-Zip- ben megvalósított BCJ2 algoritmus 32 bites címzést használ. Az UPX végrehajtható csomagolóban a címzés az architektúra típusától függ (például 16 bites címzést használnak a DOS futtatható fájlok ).
A 4.61-es bétaverzió óta a CPL -ből köztulajdonba helyezett megvalósítás a következő tulajdonságokkal rendelkezik:
Az LZMA kicsomagoló kód mérete körülbelül 5 KB; a dinamikus memóriafelhasználás a szótárak méretétől függ. Ezek a funkciók lehetővé teszik a kicsomagolás megvalósítását beágyazott rendszereken .
A Microsoft Windows szolgáltatásainak forráskódban való használata megnehezíti a program Unix verzióinak létrehozását. Van azonban két működőképes portolt verzió: a 7z és 7za parancssori segédprogramok p7zip többé-kevésbé portolt változatai POSIX rendszerekre ( GNU/Linux , Solaris , OpenBSD , FreeBSD , Cygwin és mások), Mac OS X és BeOS .
Létezik egy hivatalos hordozható megvalósítás is, az LZMA Utils, amely a gzip -hez hasonló beépített tömörítők létrehozására szolgál [3] . 2008 óta egyre gyakrabban használják csomagkezelő rendszerekben - különösen a dpkg és az RPM .
A 7-Zip meglehetősen rugalmas archív formátumot használ, és néhány harmadik féltől származó segédprogram is támogatja (például a 7z olvasás támogatja a WinRAR -t ).
A Mac OS X-hez egy Compress nevű 7-Zip port is található, amely jelenleg meglehetősen befejezetlen eszköz. A Mac OS X operációs rendszerhez p7zip és 7zX buildek is rendelkezésre állnak .
Az LZMA-val való együttműködéshez a szerző rendelkezésre bocsátja a többplatformos SDK-ját, amely a fenti tulajdonságokkal rendelkezik. Az SDK nagy része C++ nyelven íródott, és eredetileg a GNU LGPL feltételei szerint terjesztették. Érdemes megjegyezni néhány szempontot:
Egyes hálózati eszközök (például a US Robotics 9105 és 9106) módosított Linuxot használnak firmware -ként, tömörített fájlrendszerről indítva. A fájlrendszer tömörítési algoritmusaként a Zlib helyett az LZMA algoritmust használják. Ez a fájlrendszer jellemzően squashfs egy LZMA javítással [4] [5] .
Ezenkívül az LZMA-t az UEFI implementációkban használják a tömörítési algoritmusok egyikeként.
Az LZMA2 az LZMA algoritmus új verziója. Ennek az algoritmusnak a következő előnyei vannak az LZMA algoritmushoz képest:
Tömörítési módszerek | |||||||
---|---|---|---|---|---|---|---|
Elmélet |
| ||||||
Veszteségmentes |
| ||||||
Hang |
| ||||||
Képek |
| ||||||
Videó |
|
Archív formátumok | |
---|---|
Csak archiválás | |
Csak tömörítés | |
Archiválás és tömörítés | |
Szoftver csomagolás és forgalmazás |