LZMA

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 17. února 2021; kontroly vyžadují 3 úpravy .

LZMA ( anglicky  Lempel-Ziv-Markov chain-Algorithm ) je algoritmus pro kompresi dat vyvinutý od roku 1996 nebo 1998 Igorem Pavlovem [1] . Používá se v archivátoru 7-Zip stejným autorem k vytváření komprimovaných archivů ve formátu 7z.

Algoritmus je založen na schématu komprese dat ze slovníku , podobnému schématu používanému v LZ77 , a poskytuje vysoký kompresní poměr (obvykle vyšší než poměr získaný při komprimaci pomocí bzip2 ) a také umožňuje použití slovníků různých velikostí (až 4 GB [2] ).

lzma  je také nástroj pro kompresi dat příkazového řádku s otevřeným zdrojovým kódem ze sady LZMA SDK , který pracuje se soubory, které mají formát .lzma a příponu .

Přehled

Open source vývojová sada LZMA, napsaná v C++ , používá vylepšený kompresní algoritmus LZ77 doplněný o algoritmus pro vzdálené kódování a také speciální postupy pro zpracování binárních souborů.

LZMA podporuje různé varianty řetězců hash , binární stromy a stromy předpon jako základ algoritmů vyhledávání ve slovníku.

Algoritmy BCJ/BCJ2 pro spustitelné soubory

LZMA SDK také obsahuje algoritmus BCJ/BCJ2 implementovaný pro procesory architektury x86 , ARM , PowerPC , IA-64 a ARM Thumb. V něm se skokové body před kompresí normalizují - tedy např. pro x86 to znamená, že instrukce pro blízké a podmíněné skoky a volání funkcí se převedou z formuláře s relativním posunem "jdi zpět o 1665 bajtů" do podoby s absolutní adresa "přejít na adresu 5554".

Algoritmus BCJ2 implementovaný v 7-Zip používá 32bitové adresování. V UPX spustitelném packeru závisí adresování na typu architektury (například 16bitové adresování se používá pro spustitelné soubory DOS ).

Implementace

Implementace, která byla od verze 4.61 beta přesunuta z CPL do veřejné domény , má následující vlastnosti:

Velikost rozbalovacího kódu LZMA je asi 5 KB; dynamická spotřeba paměti závisí na velikosti slovníků. Tyto vlastnosti umožňují implementovat rozbalování na vestavěných systémech .

Použití funkcí Microsoft Windows ve zdrojovém kódu znesnadňuje vytváření unixových verzí programu. Existují však dvě funkční portované verze: p7zip více či méně portované verze nástrojů příkazového řádku 7z a 7za pro systémy POSIX ( GNU/Linux , Solaris , OpenBSD , FreeBSD , Cygwin a další), Mac OS X a BeOS .

Existuje také oficiální přenosná implementace LZMA Utils, která je navržena pro vytváření inline kompresorů jako gzip [3] . Od roku 2008 se stále více používá v systémech pro správu balíčků  - zejména dpkg a RPM .

7-Zip používá poměrně flexibilní formát archivu a podporují jej i některé nástroje třetích stran (například čtení 7z podporuje WinRAR ).

K dispozici je také port 7-Zip pro Mac OS X s názvem Compress, což je v současné době poměrně nedokončený nástroj. Pro Mac OS X existují také sestavení p7zip a 7zX .

Pro práci s LZMA autor poskytuje své multiplatformní SDK, které má výše uvedené vlastnosti. Většina SDK je napsána v C++ a původně distribuována za podmínek GNU LGPL. Stojí za zmínku několik bodů:

Některá síťová zařízení (jako US Robotics 9105 a 9106) používají jako firmware upravený Linux , spouštěný z komprimovaného souborového systému. Algoritmus LZMA se používá namísto Zlib jako kompresní algoritmus souborového systému. Obvykle je tímto souborovým systémem squashfs s opravou LZMA [4] [5] .

Kromě toho se LZMA používá v implementacích UEFI jako jeden z kompresních algoritmů.

LZMA2

LZMA2 je nová verze algoritmu LZMA. Tento algoritmus má oproti algoritmu LZMA následující výhody:

Poznámky

  1. Igor Pavlov několikrát na SourceForge uvedl, že vytvořil algoritmus LZMA. Specifikace LZMA? (19. února 2004). Získáno 16. června 2013. Archivováno z originálu 9. listopadu 2012.
  2. Formát 7z . Získáno 13. listopadu 2009. Archivováno z originálu 3. dubna 2011.
  3. LZMA utils Archivováno 27. října 2020 na Wayback Machine 
  4. projekt squashfs na SourceForge.net
  5. Oficiální stránky squashfs-lzma . Datum přístupu: 30. ledna 2009. Archivováno z originálu 29. října 2012.

Odkazy