Articulo de referencia

BCJ (algoritmo)

En compresión de datos , BCJ (acrónimo de branch/call/jump ) se refiere a una técnica que mejora la compresión del código máquina al reemplazar las direcciones de salto relativa...

En compresión de datos , BCJ (acrónimo de branch/call/jump ) se refiere a una técnica que mejora la compresión del código máquina al reemplazar las direcciones de salto relativas por absolutas. Esto permite que un compresor Lempel-Ziv identifique destinos duplicados y los codifique de manera más eficiente. Al descomprimir, el filtro inverso restaura la codificación original. Se utilizan diferentes filtros BCJ para diferentes conjuntos de instrucciones , ya que cada uno utiliza diferentes códigos de operación para el salto.

Una forma de BCJ se observa en el formato de archivo Cabinet de Microsoft de 1996, que filtra las instrucciones CALL x86 para el compresor LZX . [ 1 ] Los formatos de archivo 7z y xz implementan BCJ para múltiples arquitecturas. [ 2 ] [ 3 ] ZPAQ denomina a su BCJ x86 como "E8E9", después de los valores del código de operación. [ 4 ]

bsdiff , una herramienta para actualizaciones delta , evita la necesidad de escribir herramientas BCJ específicas para cada arquitectura codificando las diferencias byte a byte. Esto le permite ser mucho mejor que las herramientas de tipo "coincidencia y copia" como VCDIFF, [ 5 ] dando un tamaño de salida de solo el 6% para Google Chrome. Sin embargo, courgette de Google, que añade una capa de desensamblaje explícito, es capaz de producir diffs 9 veces más pequeños. [ 6 ]

Efecto

Para una imagen squashfs de una imagen en vivo de Fedora Linux 31, usar x86 BCJ ahorra 30 MB adicionales del tamaño comprimido de ~1,7 GB, pero duplica el tiempo de instalación. [ 7 ] (Un filtro x86 BCJ es más complejo que los filtros BCJ para otras arquitecturas (especialmente RISC) debido a la longitud variable de las instrucciones. Con instrucciones de longitud fija, un filtro BCJ puede ejecutarse en paralelo).

Referencias

  1. "cabextract: Software gratuito para extraer archivos de gabinete de Microsoft" . Consultado el 17 de marzo de 2020 .
  2. "Formato 7z" . www.7-zip.org .
  3. "El formato de archivo .xz" .
  4. «ZPAQ» . mattmahoney.net .
  5. Colin Percival , Diferencias ingenuas de código ejecutable, http://www.daemonology.net/bsdiff/ , 2003.
  6. "Actualizaciones de software: Calabacín" . www.chromium.org .
  7. "Cambios/OptimizarSquashFS - Wiki del proyecto Fedora" . fedoraproject.org .