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