# AmigaDOS

AmigaDOS è uno dei moduli principali del sistema operativo AmigaOS e si occupa della memorizzazione dei dati su dispositivi come hard disk e floppy disk.
Commissionato a MetaComCo da Commodore, AmigaDOS deriva principalmente dal sistema operativo TripOS, quest'ultimo scritto in BCPL. Dall'integrazione con TripOS deriva anche l'interfaccia a riga di comando di AmigaDOS, AmigaShell.

## Storia

Il file System originario Amiga FileSystem è derivato dal porting di alcune parti di TripOS in AmigaOS e fu scritto in BCPL prima del 1985. Da principio non era stato pensato per la velocità, aveva inoltre un alto grado di ridondanza per salvaguardare quanto più possibile i dati memorizzati sui floppy disk. Con l'avvento di hard disk sempre più capienti ed economici si decise di migliorare l'Amiga Filesystem includendo il supporto di questi dispositivi ed eseguendo un lavoro di riscrittura dal BCPL all'assembly 68000 per renderlo più veloce. Da questa riscrittura nacque l'Amiga FastFileSystem che venne introdotto per la prima volta con la versione 1.3 di AmigaOS e presenta anche un timido supporto per gli hard link.
Con l'avvento di AmigaOS 2.x vennero introdotte due varianti che integravano la caratteristica International che permette di avere i nomi dei file contenenti anche caratteri accentati.
Con la versione 3.0 dell'OS fu presentata una nuova versione del FastFileSystem Amiga. Questa supporta gli hard link e i soft link, introducendo un'ulteriore variante allo stesso filesystem cui si aggiunge il supporto alla cache per la lettura delle directory. Questa variante, definita Directory Caching, è un accorgimento che permette di ritrovare i dati più velocemente sul floppy e sull'Hard Disk. Come i sistemi di caching usati su altri sistemi fa un certo uso dello spazio sul disco.
Con le revisioni 3.5 e 3.9 di AmigaOS L'Amiga FileSystem, comprendente tutte le sue varianti, viene reso estremamente più robusto e sicuro ed introduce il supporto di hard disk maggiori di 4 Gb, accogliendo come standard la modifica chiamata NSDPatch che permette ad Amiga di indirizzare 2$^{64}$ bit, pari a 4 exabyte di memoria fisica. Dalla versione 3.5 di AmigaOS sia NSDPatch, che il supporto a dischi rigidi di grandissime dimensioni sono quindi standard per questo sistema operativo.
Con AmigaOS 4.0 l'Amiga FileSystem è stato completamente riscritto in C mantenendo tutte le sue precedenti caratteristiche ed implementando nuove API. Nasce così l'Amiga FastFileSystem2 per PowerPC che supporta i nomi fino a 108 caratteri (LFN o Long File Name).

## Caratteristiche

A differenza di Linux che richiede un mount point obbligatorio, su Amiga un device può divenire di avvio semplicemente se ha priorità superiore rispetto a tutti gli altri device e il sistema operativo installato. Al momento dell'avvio AmigaDOS crea un'assegnazione denominata "SYS:" che punta al nome del device di boot.
Assumendo come nome di device "DH0", tipicamente usato per i dischi-fissi, e come nome del volume "Workbench" abbiamo 3 modi per indicare ad AmigaDOS il volume di avvio: SYS:, DH0: e Workbench:.
A partire dall'Amiga OS 2.0 è stato reso disponibile un comodo boot menu accessibile tenendo contemporaneamente premuti entrambi i tasti del mouse all'atto dell'accensione o al reset. Questo menu permette di fare il boot da qualsiasi device o hard disk collegato al sistema, e, nelle versioni successive, anche di inibire il caricamento di alcune partizioni rispetto ad altre per nasconderle così al sistema. Amiga non ha limiti riguardo al numero di partizioni: il numero di unità disponibili è limitato dal tipo di interfaccia usata (IDE o SCSI). Più schede di espansione con bus IDE o SCSI possono essere collegate contemporaneamente, aumentando il numero di unità disponibili e moltiplicando le possibilità di suddividerle in partizioni.
* Drawer (o "cassetti"): Il sistema operativo Amiga per convenzione identifica ciascuna directory come drawer, cioè un "cassetto" in cui tenere ordinate le proprie cose, estendendo la metafora del banco di lavoro (workbench). Le icone del Workbench 1.1, 1.2 e 1.3 rimandavano graficamente a questo.
* Ordine dei byte: Amiga usa la notazione big endian, detta anche Motorola Order, nel codificare i byte dei numeri interi su supporto fisico. Il byte più significativo MSB (Most Significant Byte) viene per primo, poi quelli meno significativi o LSB (Lesser Significant Bytes) in ordine decrescente del valore di significatività (MSB LSB per i numeri interi a due byte, B3 B2 B1 B0 per gli interi a 4 byte). Mentre i personal computer basati su processori Intel della famiglia x86 seguono l'ordine byte detto little endian.
* Struttura dei Volumi di AmigaOS: L'inizio del volume floppy contiene uno spazio per i settori che possono contenere il codice di boot. Al centro dello stesso volume vi sono le informazioni sulla directory di root e le informazioni sulle directory e sul loro contenuto e dove sono localizzati i blocchi liberi e quelli usati. La lunghezza dei file e la ramificazione delle directory sono limitate solo dalla grandezza dei dischi usati. Prima dell'avvento del Kickstart versione 2.0 il bootblock di un volume Amiga comprendeva i primi 2 settori del floppy disk (settore 0 e settore 1). Con l'adozione del Kickstart 2.0, il boot tramite blocchi bootblock può essere fatto da qualsiasi device.
* Blocchi dati (grandezza del blocco o BSIZE): L'OFS filesystem supporta 488 byte di dati puri ogni blocco dati di struttura standard di 512 byte. 24 byte sono riservati. FFS invece può utilizzare tutti e 512 byte nel blocco dati. Oltre alla grandezza standard di 512 byte, AmigaOS può usare indifferentemente grandezze del blocco che siano 512 byte, o che siano doppie (1024 byte), quadruple (2048 byte), o maggiori.
* Rootblock, Blocco root (o radice): Il blocco radice risiede fisicamente a metà del volume. Sui dischi a bassa densità è il blocco 880, e 1760 per quelli ad alta densità. Il blocco radice contiene informazioni sul disco, il suo nome, la data in cui è stato formattato, e ovviamente contiene le informazioni su come Amiga debba accedere ai file, alle directory e ai link localizzati nella directory radice.
* Hash table: per trovare il primo settore di una directory o di qualsiasi altra entry all'interno della struttura del media usato AmigaOS calcola il suo valore di hash (hash value) tramite un algoritmo. Il valore di Hash viene quindi usato per accedere alla HashTable (o campo "ht") nel blocco root. La HashTable contiene il numero del primo blocco dell'oggetto considerato che può essere l'intestazione (o header) del file, il blocco di Directory o il blocco Link. Se differenti nomi hanno lo stesso valore nella hashtable, gli altri blocchi sono memorizzati in una lista. Questa fa riferimento al campo chiamato next-hash all'interno dell'intestazione del file o del blocco di Directory. Per esempio i nomi: file_1a, file_24 e file_5u condividono uno stesso valore di hash.
* Case insensitive: I nomi di file non si differenziano con i caratteri maiuscoli e minuscoli.
* Lunghezza dei nomi dei file: Il filesystem Amiga originario supportava nomi di file lunghi al massimo 30 caratteri, meglio dei soli 8 caratteri del DOS, aventi un'estensione di massimo 3 caratteri necessaria al sistema operativo per riconoscere il tipo di file. I nuovi filesystem hanno portato il limite massimo per il nome di un file Amiga a 108 caratteri.
* Estensioni dei nomifile: Le estensioni non sono necessarie sotto Amiga. Ad esempio per riconoscere quali siano gli eseguibili, il sistema operativo fa ricorso a particolari configurazioni esadecimali di byte all'inizio del programma chiamate in gergo magic cookies ossia biscotti magici. Altri file hanno nell'intestazione analoghi segni di riconoscimento riportati in sezioni chiamate "chunk" come avviene per i file IFF standard su Amiga.

### Organizzazione delle informazioni

Come tutti i computer, anche Amiga ha un suo sistema per la gestione dei file, delle directory e dei volumi fisici e virtuali (Hard Disk, Tape stream, eccetera).
Amiga supporta diversi tipi di unità e nell'ordine:
* Device, le periferiche sono considerate come entità fisiche (lettore di floppy disk), ad esempio DF0: (Device o Disk Floppy numero 0). Non bisogna confondere i device con i device handler, cioè i programmi che si occupano della gestione di periferiche, che sono equiparabili ai driver. Per convenzione in generale sotto Amiga si distingue fra device handler e driver, ma non necessariamente. Il nome driver viene in genere riservato ai veri e propri driver che controllano le periferiche tipo stampanti, modem, monitor, eccetera.
* Device virtuali, come ad esempio:
** Speak:, che è il device che controlla il sintetizzatore vocale,
** Ram:, un device residente nella RAM fisica (vedere la sezione corrispondente),
** Nil:, che è l'unità dove si reindirizza a NULL l'output di un comando quando non se ne ha bisogno.
* Volumi, cioè i volumi fisici inseriti dentro i lettori e montati dal sistema. Anche questi vengono considerati come unità, come ad esempio il floppy disk inserito all'interno del lettore floppy. Se ad esempio il volume inserito nel lettore floppy è il disco che ha un nomedisco tipo Workbench, esso verrà considerato unità Workbench:. Notare il carattere "due punti" che in Amiga, come nel mondo PC, identifica un'unità.
* Dischi rigidi, che vengono considerati in genere come volumi.
* Unità virtuali, si tratta di unità che non esistono fisicamente e che si appoggiano a unità fisiche realmente esistenti, ad esempio CrossDos che implementa il file system PC per i floppy disk e le partizioni in formato FAT. CrossDos vedrà l'unità lettore floppy come PC0: (o unità PC numero 0). In questo caso alla stessa meccanica si può accedere sia come DF0: quando si usano floppy formattati con Amiga file system, sia come PC0: quando si usano floppy formattati da un PC.
* Partizioni virtuali Un altro esempio tipico di unità virtuali sono le partizioni virtuali, come possono esserlo gli hardfile.
Amiga non supporta gli hardfile (hard disk racchiusi in un solo file) direttamente, ma lo fa tramite i device di programmi presenti sul mercato. L'emulatore di Macintosh A-Max è in grado di creare hardfile in formato Mac; con AmigaUAE (versione Amiga di Unix Amiga Emulator, l'emulatore Amiga source free) la piattaforma Amiga è in grado di vedere hardfile addirittura anche formattati con il suo stesso standard; infine con l'emulatore PC-Task può creare, leggere e scrivere hardfile in formato PC-FAT, che possiedono tutte le caratteristiche di un qualsiasi hard disk reale del mondo PC.

### Gestione dei processi

I processi possono accedere ad alcune funzioni fornite dal modulo AmigaDOS, in particolare quelle legate all'I/O su memorie di massa, a loro volta interfacciate, a basso livello, con AmigaDOS per mezzo di un particolare processo, noto come Amiga FileSystem.

### File system

Come caratteristica intrinseca, l'Amiga Filesystem è innanzitutto un processo particolare che accede alle funzioni offerte dall'AmigaDOS. Al momento dell'avvio di AmigaOS il filesystem assegna come mount point (punto di montaggio/volume di avvio) la root (radice) del device da cui attingere i file di sistema necessari al caricamento dell'OS. Tipicamente il volume di avvio è la partizione che contiene il sistema operativo, ma questi può essere anche un generico volume: un dischetto, un CD-ROM, una chiave USB.
Nel corso degli anni Amiga ha visto l'alternarsi di diversi file system usati per l'organizzazione logica dei suoi dispositivi fisici. Quando viene trattato l'argomento filesystem Amiga sarebbe dunque più corretto parlare di filesystem al plurale. Ognuna di queste versioni successive del filesystem ha migliorato sensibilmente prestazioni e caratteristiche del suo predecessore, ha implementato nuove funzioni e ne ha corretto man mano i difetti, e mancanza di robustezza del filesystem primigenio. I filesystem di altre piattaforme (FAT, FAT32, Ext2, Apple, ed altri) vengono supportati da Amiga tramite programmi driver di compatibilità che ne implementano funzioni di lettura e scrittura. Alcuni filesystem di programmatori terzi (PFS, SFS), assai apprezzati dagli utenti, dapprima letti tramite driver, sono stati supportati in modalità standard, in successive versioni dell'AmigaOS, in sue varianti come MorphOS.
Esistono numerose varianti dell'Amiga Filesystem: il filesystem Amiga che accompagnava le primissime versioni di AmigaOS viene definito come OFS, cioè OLD File System, poi si ha il FFS cioè Fast File System. Le varianti di Amiga Filesystem sono INTL o International, DIRC o Directory Cache Mode, LFN o LongFileNames:
Old File System / Fast File System:
* OFS (DOS0)
* FFS (DOS1)
* OFS International (DOS2)
* FFS International (DOS3)
* OFS Directory Caching (DOS4)
* FFS Directory Caching (DOS5)
Fast File System 2 (AmigaOS 4.0):
* OFS Long filenames (DOS6)
* FFS Long filenames (DOS7)
FFS2 comprende tutte le precedenti varianti ed attraverso delle nuove API tale filesystem può acquisire nuove caratteristiche a livello di blocchi per mezzo di un'interfaccia a plugin. In AmigaOS4.0Update-1 sono stati inclusi due plugin:
* fs_plugin_cache: incrementa le prestazioni del fileSystem per mezzo della bufferizzazione dei dati già letti;
* fs_plugin_encrypt: effettua la crittazione/decrittazione al volo dei dati di un hard disk/partizione usando l'algoritmo Blowfish;
Vi sono anche alcuni filesystem prodotti da terzi che si distinguono per essere più efficienti:
Lo Smart File System (SFS) freeware e il Professional File System (PFS) commerciale, scritto in interamente in assembly 68k. Lo Smart File System è diventato uno dei due file system supportati da MorphOS ed è supportato anche da AmigaOS4.

### Gestione delle memorie di massa

AmigaOS fino alla versione 3.x per convenzione riconosceva tutti gli Hard Disk come se fossero SCSI (anche quelli EIDE, o XT, o quelli connessi con qualsiasi altro bus). Lo SCSI_Device di AmigaOS si occupava poi delle "traduzioni" dei comandi da dare alle diverse periferiche. Ciò deriva dal fatto che la prima interfaccia per hard disk su Amiga fu lo scsi dei modello A2000 e del contemporaneo hard disk esterno per A500. Nel momento in cui vennero commercializzati i modelli A600, A1200 ed A4000 con interfaccia IDE i progettisti pensarono di far gestire questa nuova interfaccia sempre dal "file driver", lo scsi.device. In alcuni casi alcuni controller di terze parti utilizzavano opportuni Device-Handler, ma in linea di massima tutti i compiti di gestione erano affidati allo scsi.device.
I dispositivi di memorizzazione che vengono riconosciuti da Amiga automaticamente, vengono preparati all'uso e gestiti da un programma di sistema unico chiamato HDToolBox che permette la loro prima inizializzazione, l'installazione del RDB, il partizionamento, ecc.
Dalla versione 4.0 AmigaOS riconosce nativamente i dispositivi SCSI, IDE, ATA, USB, ecc. che vengono manipolati dal programma di sistema MediaToolBox. MTB mette a disposizione due modi per operare: "Normale" e "Esperto" per gli utenti avanzati. Nella modalità "Esperto" l'utente può modificare praticamente tutti i valori dell'RDB. Sempre dalla versione 4.0, AmigaOS mette a disposizione Partition Wizard: un programma di sistema per il recupero ed il salvataggio delle informazioni sui dispositivi di memorizzazione.

#### Rigid Disk Block

Gli Hard disk formattati con i file system Amiga sono caratterizzati dalla presenza dell'RDB o rigid disk blocK, che risiede nel primo(i) cilindro del disco rigido.
L'RDB indica al sistema operativo da dove fare il boot e informazioni sull'hard disk. Data la sua relativa capienza può contenere il descrittore ad un intero filesystem. Amiga può così supportare di base anche filesystem non standard o non proprietari.
L'RDB solitamente risiede nei primi 16 blocchi sul disco. I blocchi possono anche essere memorizzati in cilindri sparsi su hard disk, ma questo tipo di approccio è stato sempre sconsigliato nei manuali Amiga. È più corretto utilizzare il primo cilindro (o cilindri) dell'hard disk per memorizzare questi blocchi dati. L'RDB (detto anche hardblocks), contiene tutti i dati specifici di un hard disk: il numero e la grandezza dei blocchi, il numero di tracce e di cilindri presenti su hard disk, ed altro. L'RDB punta anche a dei blocchi particolari: quelli che riportano le descrizioni delle partizioni (PartitionBlocks), i blocchi che riportano le immagini dei filesystem (FileSysHeaderBlocks), quelli che contengono le liste (dette 'mappe') dei blocchi danneggiati quei blocchi alternativi da usare al posto dei danneggiati (BadBlockBlocks), e infine, i blocchi che indicano le inizializzazioni da fare all'hard disk in fase di boot (LoadSegBlocks).
Questa differenza rende un disco rigido formattato con AmigaOS assai diverso dai sistemi presenti sui comuni PC, che nelle prime due tracce inseriscono un boot sector chiamato MBR (master boot record). Le tecnologie RDB ed MBR sono ovviamente incompatibili tra di loro e ciò ha creato non pochi problemi. AmigaOS non riconosce i dischi in formato MBR mentre tra i sistemi operativi dei PC Linux è l'unico OS in grado di gestire, seppur in modo limitato, gli hard disk in formato RDB.

#### Dispositivi ottici

Un discorso a parte meritano i filesystem per CD. Su Amiga sono implementati quelli riconosciuti dal consorzio per gli standard ISO 9660, con le estensioni Joliet e Rock Ridge. Lo stesso dicasi anche per i DVD. Anche in questo caso Amiga supporta gli standard esistenti. Questo significa che con Amiga è possibile scrivere e leggere CD che saranno visti su qualsiasi altro computer.
Nel caso di CD formattati con Amiga, vi possono essere sporadici problemi di lettura di alcune directory o dei nomi dei file su altre macchine (esempio: Windows 98). Il problema è dovuto all'eventuale utilizzo in Amiga di caratteri speciali (lettere accentate o altro), nei nomi delle directory o dei file. Se si ha l'accortezza di non usarli, non è stato rilevato nessun altro particolare problema. Viceversa Amiga supporta assai bene i nomi di file del PC o del Macintosh. Questo è dovuto al fatto che Amiga segue lo standard dei caratteri ANSI (American Standard National Institute) /ISO-8859-1.
Il nome di periferica convenzionalmente adottato da AmigaOS per queste unità ottiche è CD0:, a seguire vengono CD1:, CD2: e così via a seconda di quanti CD, o quanti masterizzatori siano connessi al sistema.

#### Geometria dei floppy disk

* Floppy Disk Amiga a bassa e ad alta densità
** Doppia Densità: 512 Byte/settore 11 settori/traccia, 2 tracce/cilindro, 80 cilindri/disco. Un disco a doppia densità ha 11*2*80=1760 blocchi numerati da 0 a 1759.
** Alta densità: 512 Byte/settore 22 settori/traccia, 2 tracce/cilindro, 80 cilindri/disco. Un disco ad alta densità ha 22*2*80=3520 blocchi.
* Limite massimo per la grandezza di un disco formattato Amiga.
Il file system Amiga classico ha un comando interno con un parametro wide offset a 32 bit (unsigned), quindi a massima grandezza raggiungibile per un disco Amiga con questo filesystem era 2^32 bit = 4 Gb.
Prima dell'avvento dell'OS 3.5 esistevano numerose patch che aggiravano il limite dei 32 bit e portavano questo valore a 64. Dal File System incluso con l'OS 3.5 in poi, tutti i FS si appoggiano all'NSDPatch.
Il filesystem Amiga supporta dunque adesso volumi pari a 2$^{64}$ bit = 36.893.488.147.419.103.232 bit o, detto in byte: 4.611.686.018.427.387.904 cioè 4 exabyte.

### Unità logiche

Il sistema operativo Amiga permette di creare delle unità logiche. Se si vuole creare un volume logico DATI da usare come unità "fittizia" all'interno dell'unità hard disk di boot (DH0: su Amiga), è sufficiente ad esempio creare una directory e aggiungere una riga di comandi con un editor di testi:
nella prima riga del file batch chiamato user-startup (lo script di sistema che carica ad ogni boot i programmi e le preferenze volute dall'utente), situato nella directory s (abbreviazione che sta per script) e che in Amiga è obbligatoriamente presente nella partizione di boot (DH0:s). Da quel momento e per qualsiasi tipo di operazione (esempio: nei salvataggi o nello spostamento di file) è sufficiente fare riferimento come percorso di unità a DATI: che comparirà automaticamente fra le altre unità disponibili nelle finestre di salvataggio o nei requester a schermo. È possibile assegnare un'unità logica anche a un'unità fisica già esistente e per accedervi si potranno usare entrambi i percorsi.
Scorciatoie e trucchi analoghi sono possibili per qualsiasi unità, directory o sottodirectory presenti sul sistema Amiga su cui si sta lavorando.

### RAM disk

Ram: e Rad: sono due device virtuali particolari. Si tratta di parti della memoria RAM che vengono usate come periferiche (RAM disk). Sono assai utili come destinazione di "transito" per qualsiasi file in caso di copia da un supporto fisico a un altro qualora si abbia un solo lettore floppy disk, perché eliminano la necessità di togliere e mettere i dischi nel floppy disk più volte come avveniva nel mondo PC DOS. A differenza delle analoghe unità RAM disk comuni al mondo PC di grandezza fissa, il device RAM: di AmigaOS è completamente rientrante, cioè se non vi sono contenuti dati, occupa 0 byte di memoria, mentre se vi sono contenuti dati la sua dimensione massima è limitata della memoria fisica disponibile nel computer.
Rad:, introdotto con l'OS 1.3, è un device RAM disk resistente ai soft reset (riavviamento semplice della macchina successivo al primo boot). In questo modo l'utente ha a disposizione un device molto potente che può essere usato in maniera assai proficua. Ad esempio se in Rad: viene replicato il sistema operativo Amiga, sarà possibile effettuare numerosi altri boot della macchina utilizzando questo device. In questo modo AmigaOS può partire direttamente dalla RAM di sistema, senza impegnare e usurare floppy disk o dischi rigidi che sottoposti a un continuo utilizzo si consumerebbero più rapidamente. Amiga si comporta dunque allo stesso modo di un quiet computer, detto anche computer senza ventola e con hard disk a stato solido, fino all'eventuale spegnimento, o al dismount del device Rad:.
Per essere visto dal sistema Amiga, il device Rad: richiede di essere montato (AmigaOS supporta anche i mount di periferiche in stile simile al sistema operativo linux), ma non basta smontarlo (unmount) per rimuovere la sua presenza dal sistema: data questa natura di device resistente al reset, Rad: può essere rimosso dal sistema solo effettuando un riavvio o spegnendo la macchina.

### Variabili d'ambiente

Le variabili d'ambiente sono un insieme di variabili condivise tra tutti i processi (task, nella terminologia AmigaOS). Di fatto sono implementate come una serie di file memorizzati in un file system residente in RAM e accessibile tramite l'unità virtuale ENV:; vi è un file per ogni variabile d'ambiente, ed esse sono manipolabili dall'utente tramite i comandi setenv e getenv.
Per rendere le variabili d'ambiente persistenti tra un avvio e l'altro del sistema, i file corrispondenti possono essere copiati nell'unità virtuale ENVARC:, che risiede su memoria di massa; all'avvio successivo il sistema provvede a ripristinare il contenuto di ENV: con i file presenti in ENVARC:.