Compressie in het algemeen
Het probleem
Terwijl moderne PCs meestal uitgerust worden met vrij grote harde disk, komt het nog vaak voor om te weinig plaats vrij te hebben. Een bijkomend probleem ontstaat wanneer men verzendt of dossiers via Internet ontvangt. Het kan tijd nemen om een groot dossier naar iemand -vooral op een langzame verbinding- te verzenden. Wat kan worden gedaan? Het antwoord is de dossiers samen te persen zodat zij minder ruimte en tijd innemen.
Wat is Compressie?
Compressie is het omkeerbare of niet-omkeerbare omzettingsproces om de grootte van een dossier te verminderen door zijn gegevensinformatie te coderen, zodat de gegevens efficiënter kunnen worden opgeslagen of worden overgebracht. Deze compressie kan op gegevens maar ook op een speciaal soort gegevens worden bereikt: het binaire dossier in de vorm van uitvoerbaar bestand of een DLL of een ander soort binaire dossiers. Altijd is het resultaat een vermindering van het aantal bits en bytes, dat tot een kleinere dossiergrootte leidt. De grootte van de gegevens in samengeperste vorm met betrekking tot zijn originele grootte heet de ratio of de compressieverhouding. Ratios kunnen sterk verschillen afhankelijk van het gebruikte algoritme en afhankelijk van de aard van het samen te persen dossier.
Hoe compresseren?
een mogelijkheid is programma's gebruiken die speciaal werden gemaakt om dossiers te compresseren en te decompresseren. Zodra samengeperst, kunnen de dossiers over het algemeen niet worden gebruikt vooraleer zij opnieuw en tot het origineel worden gedecompresseerd. Deze vorm van compressie is goed voor archiveren of voor versturen per e-mail. Een bekend voorbeeld van een compressietechnologie is ZIP, een algemene norm voor het samenpersen van gegevensdossiers. Voor binaire gegevens is deze manier niet mogelijk omdat samengeperste uitvoerbare bestanden niet meer zouden werken aangezien deze zelf-startend moeten zijn (zie hieronder hoe dit in binaire bestanden wordt opgelost).
De compressie wordt ook in veel gevallen gebruikt zonder dat de gebruiker het zich realiseert. Een modem gebruikt een vorm van compressie wanneer het verzendt en gegevens ontvangt. Men kan opgemerkt hebben dat zelfs bij verbinding bij 32K (wat downloadsnelheden zou moeten beperken tot rond 3.5k per seconde), men vaak tot het dubbele van die snelheid komt tijdens het downloaden van tekst of andere hoogst-samendrukbare bestanden. Een andere plaats waar dit gebeurt is met grafiekbestanden.
Hoe werkt compressie?
Wanneer u een bestand hebt dat tekst bevat, kunnen er herhaalde afzonderlijke woorden, woordcombinaties en uitdrukkingen zijn die opslagruimte onproductief uitputten. Of er kunnen grafische media zijn, bvb grafische beelden waarbij gegevensinformatie teveel ruimte bezet. Om deze ondoelmatigheid elektronisch te verminderen, kunt u het document samenpersen.
De compressie wordt gedaan door compressiealgoritmen (formules) te gebruiken die herschikken en gegevensinformatie reorganiseren zodat het economischer kan worden opgeslagen. Door informatie te coderen, kunnen de gegevens minder bits gebruikend worden opgeslagen. Dit wordt gedaan door een compressie en decompressieprogramma te gebruiken dat de structuur van de gegevens voor het vervoeren, het opnieuw invoeren, het archiveren, het sparen, enz. tijdelijk verandert.
De compressie vermindert informatie door verschillende en efficiëntere manieren te gebruiken om de informatie te vertegenwoordigen. De methodes kunnen eenvoudig het verwijderen van ruimtekarakters zijn of het gebruiken van één enkel karakter om een serie van herhaalde karakters te identificeren, of het substitueren van kleinere bitsopeenvolgingen voor terugkomende karakters. Sommige compressiealgoritmen schrappen stukjes informatie om een kleinere dossiergrootte te bereiken. Afhankelijk van het gebruikte algoritme, kunnen de dossiers sterk of heel sterk tegenover zijn originele grootte, worden verminderd.
Als het omgekeerde van het proces, decompressie, een nauwkeurige replica van de oorspronkelijke gegevens veroorzaakt is de compressie "lossless". Daartegenover: de lossy compressie die gewoonlijk op beeldgegevens wordt toegepast, staat geen reproductie van een nauwkeurige replica van het originele beeld toe, maar heeft een hogere compressieverhouding. Aldus staat de lossy compressie slechts een benadering van te produceren origineel toe.
Lossy compressie
De lossy compressie krimpt dossiers in door gegevens weg te werpen. MP3 is zulk een systeem. Het baseert zich op de psycho-akoestische manier waardoor hersenen audio interpreteren en gebruiken diverse trucs om iets te veroorzaken wat eigenlijk bijna het zelfde klinkt maar tot 90% van de gegevens mist. Een ander lossy systeem is Jpeg of JPG, die worden ontworpen om hoge compressie op fotografische typebeelden te verstrekken.
Bijvoorbeeld, in een beeld dat een groen landschap met een blauwe hemel bevat, worden alle verschillende schakeringen van blauw en groen met compressie geëlimineerd. De essentiële aard van de gegevens is er nog doordat essentiële kleuren niet verloren gaan. Één populair voorbeeld van lossy compressie is JPEG compressie die voor grayscale of kleurenbeelden en grafieken geschikt is. De grote gedeelten van het beeld zullen de zelfde kleur hebben, misschien gehele lijnen zijn egaal. Eerder dan het opslaan van een volledige rij van misschien 800 witte pixel wat telkens twee bytes vergt om de kleur (een maximum van 65535 mogelijke kleuren mogelijk) op te slaan wat in 2 x 800 of 1600 bytes zou resulteren, kan men een byte voor de kleur opslaan, een byte die „hoe vaak herhaald“ betekent en nog eens twee bytes om het getal 800 op te slaan. Dat ëindigt dan als 4 bytes om op te slaan wat voorheen 1600 was, een reusachtige besparing!
Lossless Compressie
Lossless Compressie is een type van compressie dat bestanden zonder een verlies van informatie in het proces kan verkleinen. Het oorspronkelijke dossier kan exact tot het origineel worden hersteld door decompressie. Om dit te bereiken, maken de algoritmen verwijzingspunten (substitutiekarakters) voor dingen zoals tekstuele patronen, slaan hen in een catalogus op en verzenden hen samen met het kleinere gecodeerde dossier.
Lossless compressie is ideaal voor documenten die tekst en numerieke gegevens bevatten waar om het even welk verlies van tekstuele informatie niet kan worden getolereerd. ZIP compressie, bijvoorbeeld, is een lossless compressie die patronen ontdekt en hen door één enkel karakter vervangt. De compressie LZMA is een ander voorbeeld van lossless compressie. Dit is ook het soort compressie dat in lARP64Free en lARP64Pro (zie meer hieronder) wordt gebruikt.
Deze schijnbaar onmogelijke taak baseert zich op het feit dat de meeste dossiers hopen ruimte of herhaalde gegevens bevatten. Merk bvb op dat in dit stuk info dat u op dit ogenblik leest, steeds opnieuw het woord „compressie“ verschijnt, dus telkens 11 bytes opslagruimte. Een compressiesysteem kon dit opmerken en na het eerste voorkomen, eerder dan om het daadwerkelijke woord op te slaan, kan het een één byteindicator opslaan om te zeggen het een herhalingswoord is, plus een byte om te wijzen op welk woord het is. Het resultaat is dat elk voorkomen van „compressie“ nu 2 bytes gebruikt en niet 11, wat een besparing van 9 bytes of meer dan 80% voor dat woord meebrengt. Als u nu dat proces voor de 256 gemeenschappelijkste woorden herhaalt, kunt u een mooi verschil in grootte van het dossier maken. Wanneer u het dossier decompresseert, vindt het decompressieprogramma deze codes voor herhaalde woorden en herstelt de volledige woorden in hun plaats die zo het document herstelt in zijn originele grootte en inhoud.
Resultaten
Het succes van gegevenscompressie hangt grotendeels van de gegevens zelf af terwijl sommige gegevenstypes inherent samendrukbaarder zijn dan anderen. Over het algemeen zijn sommige elementen binnen de gegevensreeks gemeenschappelijker dan andere en de meeste compressiealgoritmen exploiteren dit gegeven. Dit staat bekend als "redundancy" of overtolligheid. Hoe groter de overtolligheid, hoe succesvoller de compressie van de gegevens waarschijnlijk wordt. De digitale video bevat heel wat overtolligheid en is zeer geschikt voor compressie.
Een apparaat (software of hardware) dat compresseert staat bekend als coder, terwijl een apparaat dat gegevens decompresseert als decoder gekend is. Een apparaat dat zowel als coder als decoder dienst doet, is gekend als codec.
Een groot aantal compressietechnieken is ontwikkeld en sommige lossless technieken kunnen op om het even welk type van gegevens worden toegepast. De ontwikkeling, de laatste jaren, van lossy technieken specifiek voor beeldgegevens, heeft heel wat bijgedragen tot de totstandbrenging van digitale videotoepassingen.
Tot dusver voor de compressie in het algemeen, wat over compressie op binaire getallen?
Executable compressie
De executable compressie is om het even welk middel om een executable bestand samen te persen en de samengeperste gegevens te combineren met de decompressiecode om het in één enkel executable bestand te verpakken. Deze decompressiecode die aan de samengeperste gegevens wordt toegevoegd wordt vaak de decompressiestomp of "stub" genoemd. Het runnen van samengeperste executables betekent hoofdzakelijk dat de decompressiestomp naar de originele executable code uitpakt alvorens controle aan het opnieuw samengestelde binaire bestand over te geven. Het effect is het zelfde alsof de originele niet samengedrukte executable in werking was gesteld. Voor de gewone gebruiker zijn samengeperste en niet samengedrukte executables niet te onderscheiden.
De handeling van het samenpersen van een executable dossier wordt vaak als de „pakking“ genoemd, een typische naam voor het samenpersende programma van een executable heet dan een „pakker“.
Een samengeperste executable is een zelf-extraherend archief, waar het samengeperste gegeven samen met de decompressiestomp in een uitvoerbaar dossier wordt verpakt. Zo is er geen afzonderlijk programma nodig om een samengeperste executable uit te voeren. De meeste ingepakte executables decompresseren direct in het geheugen en vergen geen vrije ruimte van het dossiersysteem om te beginnen.
De verdelers van software gebruiken uitvoerbare compressie om een verscheidenheid van redenen, hoofdzakelijk om de secundaire opslagcapaciteiten van software te verminderen. De executable compressoren worden specifiek ontworpen om uitvoerbare code samen te persen, dat is waarom zij vaak betere compressieverhouding dan de standaardfaciliteiten van de gegevenscompressie bereiken. Dit staat softwareverdelers toe om binnen de beperkingen van hun gekozen distributiemedia te blijven, of de tijd te verminderen die klanten vereisen om tot software toegang te hebben die via Internet wordt verdeeld.
De uitvoerbare compressie wordt ook vaak gebruikt om cracking af te schrikken of de inhoud van executables te verduisteren door methodes van compressie en/of toegevoegde encryptie. Malware is gekend om in veel van de gevallen te zijn samengeperst, om hun aanwezigheid voor antivirus scanners te verbergen. De executable compressie kan worden gebruikt om directe desassemblage te verhinderen, variabelen te maskeren en signaturen te wijzigen. Nochtans elimineert de executable compressie niet de kans op cracking, het kan het proces slechts moeilijker maken. In het algemeen is de compressie zeker onvoldoende om cracking te verhinderen.
Samengeperste executables vereisen minder bergruimte in het dossiersysteem, dus minder tijd om gegevens van het dossiersysteem in geheugen over te brengen. Enerzijds vereist het wat tijd om de gegevens te decompresseren alvorens de uitvoering begint. Nochtans heeft de snelheid van diverse opslagmiddelen de gemiddelde werksnelheden niet bijgehouden, zodat de opslag zeer vaak het knelpunt is. Aldus zullen samengeperste executables sneller op de meeste systemen laden. Voor moderne bureaucomputers is dit zelden merkbaar tenzij de executable ongebruikelijk groot is. Tenslotte is de ladingssnelheid geen primaire reden voor of tegen het samenpersen van executables.
Executable compressie brengt meer software op de zelfde hoeveelheid ruimte zonder dat de gebruiker die de software wil gebruiken die telkens manueel moet uitpakken.
lARP64Free en lArp64Pro
lARP64Free als 64 bits softwarecompressieprogramma en lArp64Pro als 64 bits beschermingsprogramma hebben allebei softwarecompressie ingebouwd die op het Lempel-Ziv-Markov kettings-Algoritme (LZMA) is gebaseerd. Het is een compressiealgoritme dat een regeling van de woordenboekcompressie gebruikt. Het kenmerkt een hoge compressieverhouding voor een kleine stompgrootte bij een goede compressie en decompressiesnelheid die het tot ideaal executable compressiealgoritme maakt.
Waarom LZMA?
LZMA is een compressiealgoritme dat de nadruk legt op de grootte. Het doet een super werk van het samenpersen van executable dossiers, gewoonlijk een betere compressie verstrekkend dan andere algoritmen, vooral op grotere dossiers. LZMA is een aanpassing van LZ77 voor een grote compressie en snelle decompressie. Het gebruikt gebiedscodering (Huffman) en gebruikt zonodig een woordenboekgrootte naar noodzaak.
lARP64Tech heeft voor LZMA beslist omdat het zo vele voordelen biedt.