home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
World of A1200
/
World_Of_A1200.iso
/
programs
/
compress
/
misc
/
compressdisk
/
compressdisk.doc.ita
< prev
next >
Wrap
Text File
|
1995-02-27
|
11KB
|
240 lines
Compressdisk.device 37.14 (release 1.0)
di Antonio Schifano
1 - Introduzione.
La compressione dei dati non è di certo una novità su Amiga: da diversi
anni a questa parte esistono diversi programmi, sia commerciali, sia di
pubblico dominio, in grado di soddisfare le esigenze di tutti gli utenti
desiderosi di risparmiare spazio sui propri dischi. Si possono grosso modo
distinguere due classi fondamentali di compressori: quella degli
archiviatori (ZOO, LHARC, ecc.) e quella dei compressori "file oriented"
(COMPRESS, POWERPACKER, IMPLODER, ecc.). Il principale vantaggio degli
archiviatori è la loro capacità di preservare la gerarchia dei file;
ciononostante questi, una volta compressi, risultano praticamente
inutilizzabili finché non vengono riestratti dagli archivi. I compressori
"file oriented", invece, sacrificano un po' di efficienza in cambio di una
maggiore usabilità: il PowerPacker, ad esempio, è in grado di lasciare
eseguibili i programmi, e fornisce validi tools (come il PPMORE) che in
qualche modo compensano la versatilità perduta con la compressione (i file
di testo, ad esempio, potranno essere letti ma non più modificati, a meno
di non decomprimerli prima). Il compressdisk.device cerca in qualche modo
di ovviare ai difetti di entrambi i tipi di compressori tramite un diverso
approccio al problema.
2 - Cos'è il compressdisk.device?
Come può risultare ovvio per il suo nome, si tratta fondamentalmente di un
device di Exec, simile nel modo di operare al fmsdisk.device di Matt
Dillon. Come questo, infatti, permette di creare dischi virtuali le cui
tracce vengono salvate su un file. Se ne differenzia però per il fatto
di usare un file per ogni traccia, e di comprimere le tracce. Così facendo
permette di creare partizioni virtuali sul proprio hard-disk,
indistinguibili da un punto di vista operativo dalle altre partizioni,
aventi il considerevole vantaggio che tutti i file che vi vengono scritti
vengono automaticamente compressi (e ovviamente, vengono decompressi in
fase di lettura).
3 - Installazione.
Il device può essere installato solo su Amiga con kickstart V37+.
L'installazione è quasi completamente automatica; i programmi "CDInstall"
e "CDPartition" si preoccupano di copiare tutti i file necessari al
funzionamento del device nelle opportune directory. In particolare:
- Il file "compressdisk.device" viene copiato nella directory DEVS:
- Viene creata una entry nel file DEVS:mountlist per ogni partizione
virtuale desiderata. Se si sta usando il Workbench V38+ l'entry viene
creata nella directory DEVS:DOSDrivers.
- Il preference editor "CDPrefs" viene copiato nella directory SYS:Prefs.
Per il corretto funzionamento del device è però necessario modificare
manualmente la propria startup-sequence, aggiungendo la seguente linea
subito dopo il comando SetPatch:
assign CDISK: <directory>
ove <directory> è il percorso completo della directory nella quale si
vuole che il device salvi le tracce compattate.
In caso contrario, le tracce verranno salvate nella directory principale
del disco dal quale si è fatto il boot.
Una volta "montate" le partizioni virtuali bisognerà inizializzarle; a
questo scopo basta usare il comando di sistema "format". Si noti che il
device salva su disco solo le tracce che sono state scritte almeno una
volta; è quindi consigliable formattare le partizioni virtuali usando il
modo QUICK: si eviterà così di occupare spazio inutile sul proprio
hard-disk, risparmiando contemporaneamente un significativo (!) lasso di
tempo (formattare una partizione di 40M richiederebbe più di mezz'ora su un
Amiga 500 standard).
Allo scopo di velocizzare le operazioni di lettura/scrittura il device
mantiene una cache con le tracce di più recente accesso; la dimensione
della cache, configurabile dall'utente mediante il preference editor
CDPrefs, va da un minimo di una traccia ad un massimo di trentadue. La
configurazione di default prevede l'uso di otto buffer di traccia per ogni
unit; da prove sperimentali il device è risultato usabile anche con quattro
o, volendo proprio risparmiare memoria, con due tracce, mentre con una
traccia si nota un decadimento delle prestazioni, soprattutto in fase di
scrittura.
4 - Come utilizzare compressdisk.device.
Le partizioni virtuali create con il compressdisk.device vanno usate in
maniera perfettamente standard; tuttavia, è preferibile seguire qualche
accorgimento per evitare spiacevoli sorprese.
Per prima cosa, è consigliabile non scrivere su nessuna partizione virtuale
se il disco di lavoro del device è quasi pieno: potrebbe accadere che il
device non riesca a scrivere qualcuna delle tracce compattate, con
conseguente perdita di dati. Inoltre, è opportuno evitare di usare le
partizioni virtuali per il transito temporaneo di file: si tenga presente
che cancellando un file (sul file system standard) ci si limita a
"sganciarlo" dalla directory a cui appartiene; il file continua a risiedere
sul disco (tanto che può essere recuperato con apposite utility), almeno
finché il file system non sovrascrive i settori che lo contenevano. Sulle
partizioni virtuali questo si traduce nel fatto che cancellando un file NON
si libera spazio sul disco di lavoro del device.
Le partizioni virtuali create con il programma di partizionamento usano il
Fast File System; questa scelta non è obbligata: volendo, è possibile
usare qualsiasi altro file system. Si tenga però presente che lo Standard
File System e la corrispondente versione internazionalizzata, per la loro
caratteristica di riservare parte dei blocchi dati per informazioni
interne, possono avere un impatto notevole sulla percentuale di
compressione delle tracce; il loro uso è pertanto sconsigliato.
5 - L'algoritmo di compressione.
La scelta più determinante nella realizzazione del device è stata quella
dell'algoritmo di compressione delle tracce: risulta infatti abbastanza
chiaro come le prestazioni siano intrinsecamente dipendenti da quelle del
compressore e del decompressore. Fondamentalmente, era necessario che
l'algoritmo fosse veloce, che non occupasse molta memoria e che la
percentuale di compressione fosse ragionevole. La scelta è alla fine
ricaduta su un algoritmo ideato da Ross Williams e da questi battezzato
LZRW3-A, che richiede solo 16K di memoria di lavoro, e comprime mediamente
del 54%. La versione da me riscritta ed ottimizzata in assembler ha una
velocità di 16K/sec in fase di compressione, e di 64K/sec in fase di
decompressione (su un 68000 a 7.16MHz). La seguente tabella mostra a titolo
di esempio i risultati ottenuti comprimendo due file di testo, un
eseguibile, una link library e un modulo soundtracker:
-------------------+------------+-----------+--------+----------+----------
file | dim. ante | dim. post | % comp | K/sec c. | K/sec d.
-------------------+------------+-----------+--------+----------+----------
intuition.doc | 237916 | 98950 | 58.4 | 19.07 | 84.80
dkbffp | 144648 | 81606 | 44.6 | 13.17 | 60.36
dkb212.doc | 157458 | 74523 | 52.7 | 17.43 | 76.12
amiga.lib | 157880 | 43866 | 72.2 | 26.40 | 118.60
mod.trial | 108946 | 86847 | 20.3 | 8.35 | 39.99
Per ulteriori dettagli sull'algoritmo LZRW3-A si rimanda alla
documentazione originale fornita da Ross Williams (directory
"pub/compression" del nodo FTP sirius.itd.adelaide.edu.au
[IP=129.127.40.3]).
6 - Implementazione.
Da un punto di vista tecnico, il compressdisk.device può apparire un po'
anomalo, nel senso che sembra violare la struttura a livelli dell'Amiga OS.
E' infatti insolito che un device usi il DOS, poichè questo si trova ad un
livello logicamente superiore. La gerarchia fra handler e device è solo
funzionale: i device sono usati per la gestione delle risorse fisiche
(eventualmente virtuali) e gli handler per le risorse logiche del S.O.
Pertanto è lecito che un device implementi i propri meccanismi di accesso
alle risorse usando una risorsa logica del S.O., purché i processi che lo
usano non siano a conoscenza dell'implementazione dei meccanismi del
device.
Il nucleo operativo è rappresentato da un processo che si occupa
di soddisfare tutte le richieste di I/O che giungono al device: quando
viene ricevuto un comando CMD_READ, il processo carica e decomprime tutte
le tracce necessarie a soddisfare la richiesta; in maniera del tutto
analoga, quando viene ricevuto un comando CMD_WRITE o CMD_FORMAT il
processo compatta e scrive le tracce. Quando possibile, viene fatto ampio
uso della cache sia in fase di lettura, sia in quella di scrittura: in
lettura si evita di rileggere una traccia se questa si trova già in uno dei
buffer, mentre in scrittura si modificano i buffer evitando, finché
possibile, di compattarli e riscriverli. L'aggiornamento delle tracce sul
disco viene comunque effettuato quando viene ricevuto un comando
CMD_UPDATE, garantendo in questo modo la consistenza dei dati.
Il numero di buffer, come già detto, è configurabile e può variare da un
minimo di 1 ad un massimo di 32. Ogni traccia è composta da 64 settori di
512 byte ognuno, per un totale di 32K. La quantità di memoria richiesta dal
device per il funzionamento è di circa 60K, più 32K per ogni buffer di
traccia.
Il device pone a 65000 il limite superiore per il numero di traccia. La
dimensione massima di una partizione virtuale è pertanto 2031.25M.
7 - Ringraziamenti.
Per la realizzazione del device desidero ringraziare le seguenti persone,
in ordine sparso:
- Raffaele Dell'Aversana, per le discussioni accademiche preliminari alla
realizzazione del device, nonché per il programma di installazione;
- Ross N. Williams, per l'algoritmo di compressione/decompressione dati;
- Jan van den Baard, per l'utility GadToolsBox;
- Giuseppe Sacco, per l'utility ZeroUno (!);
- Gli organizzatori di I.P.I.S.A. '92;
- Letizia Schifano, per nessun motivo in particolare.
8 - Copyright/distribuzione.
Compressdisk.device, Copyright © 1992 Antonio Schifano.
Tutti i diritti sono riservati. Questo programma è SHAREWARE; la quota da
corrispondere per l'uso è di Lit. 15000 per gli utenti italiani, ovvero 20
DM per gli utenti della Comunità Europea, ovvero 20USD per tutti gli altri.
L'archivio con il programma può essere liberamente distribuito, purchè
inalterato nel contenuto; può essere incluso nei dischi di software di
pubblico dominio, a patto che non si ricavi alcun profitto dalla loro
vendita; può essere distribuito elettronicamente via BBS, FTP e simili. E'
espressamente proibito l'uso del programma per motivi commerciali senza il
permesso scritto dell'autore.
L'autore non può in nessun caso essere ritenuto responsabile per qualsiasi
danno causato direttamente o indirettamente dal programma; al contrario,
l'utente si assume tutte le responsabilità nel momento in cui decide di
usarlo.
Suggerimenti, bug report e commenti sono bene accetti.
Per registrarsi inviare l'apposito modulo (stampato o ricopiato) a:
Antonio Schifano
via Don Bosco, 3/28
56100 Pisa, Italy
(valido fino al 31 Gennaio 1993);
Antonio Schifano
via dell'Oca, 11
91100 Trapani, Italy
(valido sempre);
L'indirizzo FidoNet è: 2:332/607.666