Mi è capitato di studiare i sorgenti di questo piccolo sistema operativo
http://prex.sourceforge.net/Si tratta sostanzialmente di un sistema operativo Real Time, compatibile POSIX, multithreaded, molto leggero (gira addirittura su un GameBoy) e adatto per i processori ARM, PowerPC e x86.
La particolarità di questo sistema è il doppio memory model, funziona in pratica con e senza MMU.
Funzionamento con MMU
Ogni processo ha il suo address space separato, ad ogni context switch avviene anche la riprogrammazione della MMU e il flush del TLB. Non implementa memoria virtuale e/o paginazione, ma sarebbe abbastanza triviale implementarlo data la struttura del kernel.
Funzionamento senza MMU
Ogni processo viene rilocato ad un indirizzo fisico come se fosse una libreria, non essendoci MMU ogni processo può influire sugli altri, simile per certi versi al memory model di AROS / AmigaOS.
Ero riuscito a modificare questo secondo memory model in modo tale da sfruttare la MPU (Memory Protection Unit), per bloccare gli accessi in scrittura sullo spazio degli altri processi. In questo modo la memoria condivisa consente il passaggio dei messaggi IPC, ma impedisce la scrittura diretta (evitando quindi dei crash di sistema). Per scrivere sullo spazio di un altro processo bisognava lanciare una IPC al processo destinatario, e tale scrittura sarebbe avvenuta soltanto in caso di risposta affermativa del processo ricevente (tramite un message handler apposito).
Successivamente a questo esperimento iniziai a programmare un mio kernel che implementasse nuove funzioni, rifatto comunque da zero e con un'API differente, ispirata più a Windows che a POSIX.
Forse un giorno metterò online qualcosa di "cliccabile", ma questa è roba per nerd hardcore... :banana-linedance: