Esercitazione n. 8
Salvare il lavoro
Unix (Linux) mette a disposizione alcuni programmi utili per fare archivi e
copie di riserva (backup) dei propri file.
Essi svolgono le funzioni di:
- ARCHIVIAZIONE
- Mettere molti file in un unico archivio per manipolarli come un tutto unico.
- COMPRESSIONE
- Codificare il contenuto di un file in maniera compatta per ridurne
l'occupazione di spazio sul file system o di banda sulla rete.
NOTA - Esistono anche programmi che svolgono le due funzioni insieme:
per esempio, su Windows, WinZIP produce archivi compressi.
Su Unix, i programmi tendono a fare ciascuno una unica funzione, visto
che (p.es. con meccanismi di pipeline e redirezione) è molto facile
poi combinare le varie funzioni.
ARCHIVIAZIONE con il programma tar
tar - tape archiver
Originariamente creato per fare backup su nastro, si può usare anche
per scrivere su file-archivio da mettere dove si vuole.
Come si usa?
Ci sono diverse operazioni da fare su un archivio;
quelle che ci interessano sono le principali:
- Crea un nuovo file archivio a partire da un elenco di file:
- tar -cf <archivio.tar> <lista di file e directory>
- Elenca il contenuto di un file archivio:
- tar -tf <archivio.tar>
- Estrai il contenuto di un file archivio:
- tar -xf <archivio.tar>
Nella creazione degli archivi, le directory vengono esplorate ricorsivamente.
Nella estrazione, tutta la struttura di directory archiviata viene ricreata
nella directory corrente.
ESERCIZIO -
Archiviate il contenuto della directory provalab1 creata nell'esercitazione precedente
e generate un file di archivio dal nome cognomenoma.tar
(ps. usate i vostri dati e non scrivete "cognomenome.tar"!)
COMPRESSIONE con il programma gzip
gzip - gnu zip
Applica un efficiente algoritmo di compressione a un file, elimina la versione
originale del file e la sostituisce con la versione compressa
(stesso nome con aggiunto il suffisso .gz).
gunzip - gnu unzip
Applica l'algoritmo di decompressione a un file compresso con gzip,
elimina la versione compressa del file e la sostituisce con la versione
originale ricreata.
Come si usa?
Per comprimere il file miofile:
gzip miofile
Per comprimere al massimo il file miofile
gzip --best miofile
Per decomprimere il file miofile:
gunzip miofile.gz
ESERCIZIO -
Comprimere l'archivio cognomenome.tar precedentemente creato.
Confrontare la dimensione prima e dopo la cura.
COMPRESSIONE con il programma compress
compress - compress
Applica a un file un algoritmo di compressione
(meno efficiente di quello di gzip), elimina la versione
originale del file e la sostituisce con la versione compressa
(stesso nome con aggiunto il suffisso .Z).
uncompress - uncompress
Applica l'algoritmo di decompressione a un file compresso con compress,
elimina la versione compressa del file e la sostituisce con la versione
originale ricreata.
Come si usa?
Come gzip ma senza l'opzione --best.
Perché si usa, se c'è gzip?
Compress è un comando di sistema che si trova su tutti gli Unix,
anche quelli dove non c'è gzip. Si usa quando si vuole essere
sicuri della portabilità (p.es. se scrivo uno script di installazione
di un mio programma che distribuirò in rete).
Gzip tuttavia è molto diffuso (perfino su DOS; su Windows
i file .gz possono essere
letti da WinZIP, anche se non scritti, così come i file .tar.gz).
Quindi l'uso di compress è sempre meno necessario.
La macchina di Von Neumann
Ora proviamo ad usare un emulatore della macchina di Von Neumann per eseguire
semplici programmi scritti in linguaggio macchina (anche quelli che avete fatto
per esercizio, se non li avete fatti ... c'è tempo adesso ...).
Qui trovate i
sorgenti dell'emulatore della macchina di Von Neumann.
Ecco alcune brevi istruzioni per l'uso
- Salvate l'archivio in locale sulla vostra home directory
- Scompattate l'archivio
- Per creare il file eseguibile digitate
$> cd chivas-3.0
$> ./configure
$> make
- Il file eseguibile si chiama chivas e viene creato nella directory src.
Potete mandarlo in esecuzione scrivendo ./chivas nella shell dei comandi.
Viene creata anche una directory esempi che contiene alcuni semplici
esempi di programmi
- Potete vedere l'help on line digitando
$> ./chivas --help
- Per vedere cosa succede durante l'esecuzioni dei programmi potete
usare l'opzione verbose. In particolare,
$> ./chivas -v1 // fa vedere solo il prompt
$> ./chivas -v2 // fa vedere una istruzione alla volta
$> ./chivas -v3 // per ogni istruzione, fa vedere lo stato dei registri e della RAM
- chivas vi permette di mandare in esecuzioni programmi scritti
nel linguaggio macchina visto a lezione. I programmi possono essere forniti
in input alla macchina in modalità batch oppure in modalità
interattiva.
- modalità batch
dovete scrivere su un file di testo l'intero programma
(che deve sempre iniziare da RAM[0]), ad esempio:
RAM[0] = 2000
RAM[1] = 3000
RAM[2] = 8000
Poi, dovete "dare in pasto" il programma alla macchina scrivendo
$> ./chivas nomefile
- modalità interattiva
dovete scrivere
$>./chivas -I
$> program
$> poi dovete dare in input le istruzioni, una alla volta.
$> run
$>^D // control D per uscire
- Versione assembler
Si possono scrivere i programmi usando anche un liguaggio assembler-like
in cui ogni istruzione corrisponde ad una istruzione numerica della macchina
che abbiamo visto in classe.
istruzione 0, parametro N |
| ADD N oppure add N |
istruzione 1, parametro N |
| SUB N oppure sub N |
istruzione 2 |
| READ oppure read |
istruzione 3 |
| WRITE oppure write |
istruzione 4, parametro N |
| STORE N oppure store N |
istruzione 5, parametro N |
| LOAD N oppure load N |
istruzione 6, parametro N |
| JUMP N oppure jump N |
istruzione 7, parametro N |
| JZER N oppure jzer N |
istruzione 8 |
| HALT |
- È possibile avere una versione a colori digitando
$> ./chivas -Ocolor
- È possibile vedere la versione assmbler corrispondente ad un programma
scritto con istruzioni numeriche, e viceversa, digitando
Da numerico ad assembler
$> ./chivas -d nomefile // viene creato un file di output out.chv
Da assembler a numerico
$> ./chivas -c nomefile // viene creato un file di output out.vnm.