# OS-9

OS-9 è una famiglia di sistemi operativi multitasking, sistema real-time, basato sui processi, multiutenza e Unix-like sviluppati negli anni 1980, originariamente da Microware Systems Corporation per il microprocessore Motorola 6809. Successivamente acquisito da RadiSys Corporation, è dal 2013 di proprietà di Microware LP
La famiglia OS-9 era popolare per computer general-purpose e rimane in uso nei sistemi embedded commerciali e tra gli hobbisti. Oggi, OS-9 è il "nome di prodotto" usato sia per i sistemi operativi scritti in linguaggio macchina per la serie Motorola 68000 e sia per la versione portabile (PowerPC, x86, ecc.) scritta in C, originariamente conosciuto come OS-9000.

## Storia

La prima versione ("OS-9 Level One"), datato 1979–80, era scritto in linguaggio assembly per la CPU Motorola 6809, e forniva un singolo spazio di indirizzamento di 64 kB in cui erano eseguiti tutti i processi. Era stato sviluppato come sistema operativo di supporto per il progetto BASIC09, attraverso un contratto con Motorola che lo vedeva come parte dello sviluppo per il 6809. Una successiva versione per il 6809 ("Level Two") si avvantaggiava dell'hardware per il mapping della memoria, supportando nella maggior parte delle implementazioni fino a 2 MB di memoria (nel 1980) e includendo in alcune piattaforme anche una GUI (interfaccia grafica).

## Conflitto sul nome e decisione della corte

Nel 1999, diciannove anni dopo il rilascio di OS-9, Apple rilascia Mac OS 9. Microware quell'anno citò in giudizio la Apple per violazione dei diritti d'autore. Sebbene il giudice sentenziò che ci sarebbe stata poca probabilità di confondersi tra i due nomi registrati, alcuni utenti del Macintosh, che non erano a conoscenza del relativamente sconosciuto OS-9 di Microware, avevano postato messaggi sul newsgroup news://comp.os.os9 non realizzando cosa fosse l'OS-9.
Nel 2000, RadiSys acquistò Microware vicina alla bancarotta per entrare in possesso delle risorse riguardanti il network tra processori Intel IXP-1200. L'acquisizione infuse i capitali necessari e permise a Microware di continuare lo sviluppo ed il supporto di OS-9. Nel 2009, OS-9 è ancora supportato da RadiSys e Microware.

## Tecnologia
### Progetto moderno ed arcaico

OS-9 (specialmente dalla versione 68K in avanti) si distingue chiaramente dalla precedente generazione di sistemi operativi embedded in parecchi aspetti:
* Può essere eseguito su CPU ad 8-bit, 16-bit e 32 bit.
* Netta suddivisione tra modalità user mode e supervisor (kernel).
* Uso dinamico di componenti software compilati individualmente e separatamente (immagini di programmi eseguibili e moduli kernel) anziché una singola libreria statica monolitica.
* Modello dello spazio dei nomi dei processi simil-Unix (non memory model) e programmi shell per l'utente.
* Netta separazione tra gli strati indipendenti dall'hardware (es: file manager) e dipendenti dall'hardware (es: driver).
Invece, quando lo si paragona con sistemi operativi più moderni:
* Il kernel è interamente scritto in linguaggio assembler (solo la versione OS-9/68K) tanto quanto in C (versione portabile verso altre architetture)
* Uso di semplici strutture dati interne, che riducono l'obiettivo della flessibilità e del miglioramento, ottenendo però la determinabilità richiesta per i sistemi operativi sistema real-time.
* Per alcune operazioni si ha un impatto sulle performance però il linguaggio assembly dà una mano per il problema velocità.
* Sistemi sprovvisti della MMU non hanno protezione della memoria verso eventuali accessi illegali, ne protezione della memoria per processo; invece i sistemi con MMU possono avere abilitata la protezione della memoria. Il modulo che controlla la MMU può essere inclusa od omessa da parte del system integrator per abilitare o disabilitare la protezione della memoria. Questo permette ad OS-9 di essere eseguito su vecchi sistemi che non includono una MMU.
* Le versioni più vecchie di OS-9 non supportano i POSIX Threads, mentre tutti i processori supportati da OS-9 li supportano.
* Nessun supporto SMP per socket multipli, core multipli o thread hardware nella stessa istanza OS-9 (può essere eseguito un sistema operativo real time su uno dei core del processore dual core come l'CoreDuo e Core2Duo, mentre Linux può essere eseguito sull'altro core eseguendo compiti general purpose)

### Task scheduling

Il kernel real-time di OS-9 permette l'esecuzione simultanea di applicazioni indipendenti multiple, attraverso le feature di task switching e comunicazioni inter-processo. Tutti i programmi OS-9 vengono eseguiti come processi che contengono almeno un processo "leggero" (thread) ma effettivamente può contenere un illimitato numero di thread. All'interno di un processo, questi processi "leggeri" condividono la memoria, path di ingresso e di uscita e altre risorse, in accordo con le specifiche e le API dei thread POSIX. OS-9 schedula i thread usando un algoritmo a schedulazione pre-rilascio (preemptive) con priorità fisse e con schedulazione round-robin tra i thread con la stessa priorità. È supportato il time slicing (a quanti di tempo). I livelli di priorità possono essere suddivisi in range che supportano l'"invecchiamento" e la schedulazione a più alta priorità. Ogni processo può accedere a qualsiasi risorsa di sistema chiedendo ad OS-9 l'appropriata richiesta di servizio. Ad ogni momento di schedulazione, OS-9 confronta la priorità del thread in testa alla coda di priorità correntemente attiva con la priorità del thread corrente. OS-9 fa lo switch di contesto verso il thread nella coda attiva se la sua priorità è più alta della priorità del processo corrente. L'invecchiamento incrementa artificialmente l'effettiva priorità dei thtread nella code attiva al passare del tempo. A intervalli definiti, il time slicing rimette il thread correntemente in esecuzione nella coda attiva dietro gli altri thread che hanno la medesima priorità.

## Confronto con Unix

La nozione dei processi e dei percorsi di I/O da parte di OS-9 è abbastanza simile a quella di UNIX in quasi tutti gli aspetti, ma ci sono alcune differenze significative. Prima di tutto il file system non è un singolo albero ma una foresta, dove ogni albero corrisponde ad un differente dispositivo. Secondo, OS-9 non ha una chiamata di sistema alla Unix come la 'fork'; ha invece una chiamata di sistema che crea un processo per eseguire uno specifico programma, facendo quindi un lavoro simile ad una fork-exec o ad una spawn. Inoltre i processi di OS-9 tengono traccia di due "directory correnti" anziché una sola; la "directory corrente di esecuzione" è la directory dove cercherà per default di caricare i programmi da eseguire (che è ovviamente simile all'uso della variabile d'ambiente PATH sotto UNIX). L'altra è la directory corrente per i dati. OS-9 ha avuto una progettazione modulare fin dalla nascita, influenzato dalle idee dei progettisti del 6809 e di come si aspettavano sarebbe stato distribuito il software nel futuro (si veda la serie di articoli in tre parti pubblicati da Byte di Gen-Mar 1979 scritti da Terry Ritter e altri progettisti della CPU di Motorola).
    La struttura dei moduli richiede un approfondimento:
   * OS-9 mantiene una "directory dei moduli"; una lista residente in memoria di tutti i moduli che sono in memoria essendo stati caricati o essendo stati trovati nella ROM durante il caricamento (scan) iniziale a tempo di boot.
   * Quando si digita un comando nella shell di OS-9, esso prima guarda nella corrente "directory dei moduli" alla ricerca di un modulo avente il nome specificato; se trovato, lo userà (e incrementerà il suo contatore di collegamenti/esecuzioni effettuate); se invece non è stato trovato cercherà sul disco un programma con nome appropriato.
   * Nell'OS-9/6809 e OS-9/68000, la "directoty dei moduli" è piatta, mentre l'OS-9000 ha una "directory dei moduli" strutturata ad albero. La shell dell'OS-9000 cerca in un alternativo "modulo di directory" la variabile d'ambiente MODPATH, analoga alla variabile PATH, che indichi la sequenza di "directory di moduli" nei quali cercare i riferimenti a moduli precaricati.
   * I moduli non sono usati solamente per tutto ciò che riguarda i programmi. I moduli possono anche essere creati al volo per mantenere i dati; sono il modo attraverso cui OS-9 supporta la memoria condivisa.
Lo OS-9 (non-68000) supporta i POSIX threads. Un singolo processo può far partire un qualsiasi numero di thread. La rivalità tra Unix ed OS-9 divenne così aspra che nella versione 2.4 del manuale "Using Professional OS-9" era presente questa voce che descriveva UNIX nel glossario della appendice C:
La voce può essere così tradotta: Unix, sistema operativo simile ad OS-9 ma con minori funzionalità e con speciali caratteristiche progettate per saturare la memoria in eccesso, lo spazio su disco e il tempo di CPU di grandi e costosi computer. Questa voce fu poi rimossa nella versione 3.0 del manuale.
La shell di OS-9 aveva una easter egg nella sua command history, invocata con CTRL-A. Appena dopo un reboot, la command history sarebbe dovuta essere vuota; se però l'utente digitava un singolo spazio seguito da un backspace e poi premeva CTRL-A, venivano visualizzati i nomi degli autori: 'by K. Kaplan, L. Crane, R. Doggett'.

## Usi nel ventunesimo secolo

* Diverse versioni del OS-9/68K sono usate su un'ampia varietà di piattaforme della famiglia 68000, incluso lo Sharp X68000 in Giappone, alcuni personal computer sviluppati dai progettisti con l'intento di sostituire il Color Computer (per esempio il 68070, lo MM/1 basato sul 68340 e su altri computer sviluppati da Frank Hogg Laboratories, PEP e Delmar Co.) È stato realizzato il porting sull'Atari ST da parte di Recc-o-ware nei primi anni 1990 ed era distribuito in Europa da Cumana. È stato anche riportato che esisterebbe un porting per l'Amiga.
* Lo OS-9/68K si può trovare anche in alcune applicazioni embedded, tra cui il generatore di caratteri per le trasmissioni televisive di Quanta Delta, ancora in produzione da parte di ScanLine Technologies in Utah. Mentre l'interfaccia a livello di utente sul sistema è fatta partire a tempo di boot, c'è una sequenza da premere sulla tastiera (nascosta e non documentata) che fornirebbe all'utente un prompt shell di root in una finestra provvista di scroll sul monitor di editing del canale del dispositivo.
* Nel mercato embedded, lo OS-9 ha trovato applicazione in dispositivi come nei sintetizzatori CMI della Fairlight, in robotica, nei navigatori preinstallati sulle macchine e nello standard industriale Compact Disc-Interactive (CD-i) della Philips.
* Il TRS-80 Color Computer (e relativi cloni) hanno ancora utenti ed una conferenza annuale in Chicago CoCoFEST. Un gruppo di programmatori canadese, ha riscritto lo OS-9/6809 Level II per CoCo 3 per ottenere maggior efficienza (hardware con traslazione (o traduzione) degli indirizzi) e per avvantaggiarsi della modalità nativa (native mode) dell'Hitachi 6309. Gli utenti seri del CoCo di oggi, tipicamente rimpiazzano il 68B09E nel CoCo 3 con un Hitachi 63B09E ed utilizzano la riscrittura dell'OS-9 chiamato NitrOS9. La combinazione è sorprendemente veloce se consideriamo che esso viene eseguito su un computer ad 8-bit espressamente a basso costo.
* OS-9000/80x86 può essere eseguito su macchine di tipo PC costruite con CPU Intel x86. OS-9000 è stato anche portato sul PowerPC, MIPS, alcune versioni del processore ARM dell'Advanced RISC Machines ed alcuni dei processori della famiglia Hitachi SuperH.
* L'unità di riproduzione audio DigiCart/II Plus utilizza l'OS-9/68K. È un sostituto a stato solido per un riproduttore con cartucce a 8 tracce come quelli usati nelle stazioni radio. Queste unità sono utilizzate nelle radio ed in posti come il Walt Disney World dove essi riproducono gli annunci del parco.
* Il produttore di elettronica tedesco Eltec ha prodotto il modello Eurocom di schede con CPU per scopi industriali a partire dai tardi anni settanta. Ha iniziato con il 6802 e il 6809 per Eurocom-1 e Eurocom-2, passando poi a schede di CPU per il 68K e derivati fino ad arrivare ai giorni nostri. Le moderne schede possono essere consegnate a scelta con diversi sistemi operativi tra cui l'OS-9.

## Collegamenti

* (EN) Sito ufficiale, su microware.com.
* Archivio di informazioni e software per OS-9, inclusa una OS-9 FAQ, di Real-time Services Inc.
* Archivio per tools a riga di comando per manipolare le immagini dei dischi dell'OS-9 per 6809, su SourceForge
* Ambiente di sescuzione per programmi user-mode di OS-9 sul Mac/Win/linux host OS, su sourceforge.net.
* Sito ufficiale per NitrOS-9 , su SourceForge
* Un port dell'OS-9 per il Thomson MO5, su os9.forler.ch.
* comp.os.os9 newsgroup attraverso Google, interfaccia web al newsgroup.
* Blog ufficiale di OS-9, su os9.typepad.com. URL consultato il 27 aprile 2019 (archiviato dall'url originale il 10 gennaio 2007).
* Un emulatore di 6809 basato sul sistema SWTPC 6809 che riesce ad eseguire OS9, UniFLEX e FLEX, su swtpcemu.com.
* Accesso ai dischi di OS-9 dal PC, su reischke.de.