A-DOS

ALL'INTERNO DEL
CLI


di Alessando Prandi


Proseguiamo il nostro itinerario alla conquista del CLI

   In questa nostra tappa del viaggio all'interno dell'Amiga ci soffermeremo sul modo di lavoro dell'AmigaDOS. Per capire i cavilli dell'AmigaDOS dovete inanzitutto frenare l'impulso di sfasciare la tastiera e quindi evitare di riempire di cotone le fessure dei vostri drive.
   I drive di cui è dotato l'Amiga sembrano essere molto più lenti di quello che non lo siano in realtà. L'hardware dedicato ai floppy disk può leggere un'intera traccia, circa 5600 byte, in un colpo solo, senza dare noie al microprocessore, tuttavia va detto che per quanto riguarda l'AmigaDOS. se compariamo il suo LIST con il normale DIR del PCDOS notiamo una notevole lentezza del primo rispetto al secondo. Perché? Semplice, il LIST non ha un posto dove andare per prelevare le informazioni necessarie inerenti ai file mentre le directory del PCDOS contengono ben specificati i nomi dei file, la loro misura, e il luogo in cui si trovano.
   L'AmigaDOS divide il disco da 3.5 in 1760 blocchi di 512 byte ciascuno, se volete lo potete verificare tramite il comando INFO del CLI. Undici' blocchi comprendono una traccia (track), un giro completo. Il 
numero di blocco 880 è collocato nel mezzo della superficie del dischetto ed è il blocco principale (root block) che corrisponde alla root directory. Nel root block sono immagazzinati il nome del disco, l'ora e la data dell'ultima modifica e la tavola di controllo (hash table).
L'hash table e una lista di puntatori alle subdirectory o blocchi di inizio file (file header blocks). L'AmigaDOS converte il nome del file in un numero intero positivo. Questo numero intero fa riferimento ad un'entrata nella hash table, L'entrata, a turno, è il numero del blocco contenente la testa del file (file header) o la subdirectory. Le subdirectory ed i file header assomigliano al blocco principale (root block): una subdirectory punta ai file header e alle altre subdirectory, mentre un file header punta ai blocchi di dati, dove il file è posto.
   Per convertire i caratteri del nome di un file in numeri interi l'AmigaDOS applica una funzione di controllo particolare. Un esempio di questa funzione è A = l , B = 2 eccetera. I problemi compaiono quando due nomi di file hanno lo stesso numero. Nell'AmigaDOS per esempio "Quake" e " Los Gatos" hanno tutti e due valore 14. 
   Per risolvere questo dilemma si ricorre alla subdirectory o al blocco dell'header del file. Questo blocco contiene la data e l'ora della sua creazione ed un puntatore indirizzato alla prossima header della quale nome ha lo stesso valore. L'AmigaDOS compara il nome nel blocco con l'altro. Se i nomi differiscono allora l'AmigaDOS passa al blocco successivo di header e cosi via, finché non trova il nome esatto o arriva alla fine della catena, in tal caso il file non esiste.
   Questo meccanismo spiega la lentezza del comando LIST. L'AmigaDOS deve computare il nome del file, andare al prossimo file header, comparare i nomi, andare quindi al prossimo file header se non c'è un riscontro proseguire, e così via. Le informazioni del file sono praticamente disseminate invece di essere centralizzate come nel PCDOS.
   Per alleggerire questo notevole ritardo, l'AmigaDOS mette le subdirectory ed i file header nella metà interna del disco ed i blocchi di dati nella metà esterna. Sfortunatamente però questo schema interno-esterno crea qualche difficoltà al Workbench. Quando voi aprite una drawer, l'AmigaDOS deve portare la testina del drive all'interno per trovare il file header corretto e quindi all'esterno per leggere i file ".info", i quali contengono le icone. Questo rapido spostamento della testina del drive lungo la superficie del disco provoca un racappriciante gracidio. Fortunatamente le ultime versioni del Workbench raccolgono tutte le icone di un drawer in un singolo file.
   Non si può negare che ad un primo esame il sistema di archiviazione si presenti perlomeno intricato, ma bisogna considerare anche i vantaggi che questo metodo offre. La misura e il numero di file sono limitati solo dalla capienza del disco. Ancora più importante, il sistema è sufficientemente sovrabbondante in modo da permettere che l'albero della directory possa essere ricostruito se una parte di esso viene distrutta. Due set di puntatori descrivono ogni branca dell'albero. Per esempio, gli header contengono i puntatori indirizzati al prossimo link nella catena vista prima, ai blocchi di dati e cosi via. Ogni blocco ha un numero in sequenza, il quale indica a chi appartiene, e un checksum il quale segnala se il blocco è stato danneggiato. Con la scansione dei blocchi, i numeri in sequenza, ed i puntatori un programma può ricostruire la struttura danneggiata del file del disco. Il Disk-Validator compie questo compito ma in proporzioni limitate. Ogniqualvolta inserite un dischetto il Disk-Validator controlla che la struttura di archiviazione sia conforme e che nessun blocco sia collocato due volte.
   Per l'utente il sistema di archiviazione dell'AmigaDOS si presenta come una struttura convenzionale ad albero, percorribile tramite il comando CD. L'AmigaDOS vi offre alcuni comandi importanti per poter manipolare le informazioni contenute nelle varie header.
   I blocchi della subdirectory e del file header comprendono una flag di protezione e lo spazio per un commento. Voi potete settare le flag di protezione con il comando PROTECT nel CLI o tramite l'info del Workbench. Per proteggere un file dalla cancellazione scrivete:

PROTECT <nomefile> rwe

Per permettere la cancellazione di un file non cancellabile scrivete:

PROTECT <nomefile> rwed

Le future versioni del software di sistema permetteranno anche di proteggere il file dalla lettura, scrittura e dall'esecuzione. Per aggiungere un commento ad un file scrivete:

FILENOTE <nomefile> "testo"

dove il testo può arrivare sino ad 80 caratteri. Il commento lo potete vedere LISTando il file. Voi potete vedere o cambiare il commento anche tramite l'lnfo del Workbench. Con il comando COPY non si copia il commento del file, poiché questo comando crea un nuovo header del file.
   Quando voi premete due volte il tasto del mouse su un tool o scrivete il nome del file da CLI l'AmigaDOS ricerca il file. Quando il sistema di archiviazione lo localizza il caricatore lo recupera. Il loader legge il programma nella memoria usando una tecnica chiamata scatter loading (caricamento frazionato). Il caricatore fraziona il file in pezzi chiamati hunk (fette). Ogni fetta comprende l'informazione di come essa è inserita rispetto alle altre. Il loader a questo punto ripone ciascuna fetta, ogniqualvolta riesce a trovare spazio nella RAM e le modifica in modo che ne possano trovare un'altra. Lo scatter loading sfrutta al meglio la memoria disponibile.
   Una volta che il caricatore ha finito il suo compito l'AmigaDOS deve definire come il programma interagisce con il resto del computer. Il DOS infatti tratta il programma come un processo. Ogni processo pensa ad un proprio uso esclusivo del microprocessore, anche se altri processi possono spartire l'uso del processore. I programmi caricati da CLI condividono il processo CLI, mentre il Workbench genera un nuovo processo per ogni tool clickato due volte. L'AmigaDOS inoltre crea dei processi per sorvegliare la porta seriale, il drive, la porta parallela e così via.
   Questi vari tipi di processi comunicano tra loro attraverso delle porte di comunicazione che agiscono similarmente ai nostri telefoni. Per esempio un editor di testo può chiedere al processo del disco di leggere in un documento. L'I/O del disco però rimane impantanato quando due processi richiedono il disco allo stesso momento. La testina del drive vola avanti ed indietro prelevando i dati di un processo e quindi dell'altro. Dal punto di vista dell'utente i processi sembrano agire contemporaneamente. Diversi comandi vi permettono di esaminare e controllare questi processi. 
   Normalmente i programmi condividono il task del CLI ma voi potete usare un prefisso per il nome del file con il comando RUN, con questa istruzione l'AmigaDOS esegue il programma come un processo indipendente. Voi potete usare una stringa di programmi usando il segno più:

RUN COPY File RAM: +
DELETE File +
ECHO "File spostato in RAM"

   I processi generati con il RUN continuano ad usare la finestra CLI per l'output, per creare un nuovo processo con una sua finestra scrivete NEWCLI. Con il comando STATUS potete listare quali processi CLI sono in esecuzione. 
   L'AmigaDOS non può interrompere un processo una volta iniziato, essi devono estinguersi per conto loro. Molti programmi tuttavia vi concedono molto gentilmente di essere fermati durante l'esecuzione usando i tasti CTRL-C. Al posto di CTRL-C potete anche usare il comando BREAK, BREAK 2 interomperrà l'esecuzione nel secondo CLI task, quello con il segno "2>". Quello che succede quando usate CTRL-C o BREAK dipende solamente dal programma, un programma che si rispetti riconosce il segnale di interruzione e si ferma. 
   Benché l'AmigaDos offra all'utente dei mezzi molto potenti non si può definire il suo ambiente dei più amichevoli. Fortunatamente il programmatore può accedere ai compiti dell'AmigaDOS modificando alcune funzioni. In effetti ci sono già due programmi in grado di addomesticare il CLI, questi sono lo SHELL e MyCLI.
   Ad esempio il programma SHELL scritto da Randell E. Jesup traduce i vostri sinonimi in comandi AmigaDOS. Basterà inserire un file "comandi" nella directory SYS:. Il file contiene la risistemazione dei comandi CLI. Un solo sinonimo può comprendere un'intera lista di comandi CLI dandovi delle notevoli capacità macro. Comunque una volta che lo SHELL ha compiuto i suoi processi passa i comandi attraverso al CLI: essi non sono comandi interni.
   Indubbiamente l'integrazione dell'AmigaDOS da parte di programmi di questo genere semplifica e sopratutto velocizza enormemente il lavoro da eseguire mediante CLI. Un'altro aspetto importante di questi programmi è il tipo di editing: nel CLI spesso dopo aver scritto una lunga sequenza di comandi vi accorgete di aver commesso un'errore all'inizio della riga (parolaccia!) e quindi siete costretti a cancellare e riscrivere quasi l'intera sequenza. L'editor di questi programmi invece si comporta quasi come quello di un normale wordprocessor con talvolta delle varianti molto interessanti.
   Sicuramente nei prossimi numeri assieme al CLI tratteremo parallelamente anche i modi di impiego di programmi molto utili come ad esempio lo Shell della Metacomco. 
 

Settembre 1988