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
  1. Salvate l'archivio in locale sulla vostra home directory

  2. Scompattate l'archivio

  3. Per creare il file eseguibile digitate
    $> cd chivas-3.0 $> ./configure
    $> make
  4. 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

  5. Potete vedere l'help on line digitando
    $> ./chivas --help

  6. 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

  7. 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.

    1. 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

    2. modalità interattiva
      dovete scrivere

      $>./chivas -I
      $> program $> poi dovete dare in input le istruzioni, una alla volta.
      $> run $>^D // control D per uscire



  8. 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


  9. È possibile avere una versione a colori digitando
    $> ./chivas -Ocolor

  10. È 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.