LZMA

La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la versión revisada el 17 de febrero de 2021; las comprobaciones requieren 3 ediciones .

LZMA ( inglés  Lempel-Ziv-Markov chain-Algorithm ) es un algoritmo de compresión de datos desarrollado desde 1996 o 1998 por Igor Pavlov [1] . Utilizado en el archivador 7-Zip por el mismo autor para crear archivos comprimidos en formato 7z.

El algoritmo se basa en un esquema de compresión de datos de diccionario , similar al utilizado en LZ77 , y proporciona una alta relación de compresión (generalmente más alta que la que se obtiene cuando se comprime usando bzip2 ), y también permite el uso de diccionarios de varios tamaños (hasta 4 ES [2] ).

Además , lzma  es una utilidad de compresión de datos de línea de comandos de código abierto del LZMA SDK que funciona con archivos que tienen el formato y la extensión .lzma .

Resumen

El kit de desarrollo LZMA de código abierto, escrito en C++ , utiliza el algoritmo de compresión LZ77 mejorado , complementado con un algoritmo de codificación espaciado , así como procedimientos especiales para procesar archivos binarios.

LZMA admite varias variantes de cadenas hash , árboles binarios y árboles de prefijos como base de los algoritmos de búsqueda de diccionarios.

Algoritmos BCJ/BCJ2 para ejecutables

El LZMA SDK también contiene el algoritmo BCJ/BCJ2 implementado para procesadores de arquitectura x86 , ARM , PowerPC , IA-64 y ARM Thumb. En él, los puntos de salto se normalizan antes de la compresión, es decir, por ejemplo, para x86, esto significa que las instrucciones para saltos casi condicionales y llamadas a funciones se convierten del formulario con un desplazamiento relativo "regresar 1665 bytes" al formulario con la dirección absoluta "ir a la dirección 5554".

El algoritmo BCJ2 implementado en 7-Zip utiliza direccionamiento de 32 bits. En el empaquetador de ejecutables UPX , el direccionamiento depende del tipo de arquitectura (por ejemplo, el direccionamiento de 16 bits se utiliza para los ejecutables de DOS ).

Implementaciones

Una implementación que se ha movido de la CPL al dominio público desde la versión 4.61 beta tiene las siguientes propiedades:

El tamaño del código de desempaquetado LZMA es de unos 5 KB; el consumo de memoria dinámica depende del tamaño de los diccionarios. Estas características hacen posible implementar el desempaquetado en sistemas embebidos .

El uso de funciones de Microsoft Windows en el código fuente dificulta la creación de versiones Unix del programa. Sin embargo, hay dos versiones portadas viables: versiones p7zip más o menos portadas de las utilidades de línea de comandos 7z y 7za para sistemas POSIX ( GNU/Linux , Solaris , OpenBSD , FreeBSD , Cygwin y otros), Mac OS X y BeOS .

También hay una implementación portátil oficial, LZMA Utils, que está diseñada para crear compresores en línea como gzip [3] . Desde 2008, se ha utilizado cada vez más en los sistemas de gestión de paquetes  , en particular, dpkg y RPM .

7-Zip usa un formato de archivo bastante flexible, y algunas utilidades de terceros también lo admiten (por ejemplo, 7z reading admite WinRAR ).

También hay un puerto de 7-Zip para Mac OS X llamado Compress, que actualmente es una herramienta bastante inacabada. Para Mac OS X, también hay compilaciones p7zip y 7zX .

Para trabajar con LZMA, el autor proporciona su SDK multiplataforma, que tiene las propiedades anteriores. La mayor parte del SDK está escrito en C++ y se distribuye originalmente bajo los términos de GNU LGPL. Vale la pena señalar algunos puntos:

Algunos dispositivos de red (como US Robotics 9105 y 9106) usan Linux modificado como firmware , arrancado desde un sistema de archivos comprimido. El algoritmo LZMA se utiliza en lugar de Zlib como algoritmo de compresión del sistema de archivos. Por lo general, este sistema de archivos es squashfs con un parche LZMA [4] [5] .

Además, LZMA se usa en implementaciones de UEFI como uno de los algoritmos de compresión.

LZMA2

LZMA2 es una nueva versión del algoritmo LZMA. Este algoritmo tiene las siguientes ventajas sobre el algoritmo LZMA:

Notas

  1. Igor Pavlov ha declarado varias veces en SourceForge que creó el algoritmo LZMA. ¿Especificaciones LZMA? (19 de febrero de 2004). Consultado el 16 de junio de 2013. Archivado desde el original el 9 de noviembre de 2012.
  2. Formato 7z . Consultado el 13 de noviembre de 2009. Archivado desde el original el 3 de abril de 2011.
  3. LZMA utils Archivado el 27 de octubre de 2020 en Wayback Machine . 
  4. proyecto squashfs en SourceForge.net
  5. Sitio oficial squashfs-lzma . Fecha de acceso: 30 de enero de 2009. Archivado desde el original el 29 de octubre de 2012.

Enlaces