Simple Operating System
Introduzione
Quando utilizziamo un computer, prima ancora di utilizzare le applicazioni a cui siamo abituati stiamo utilizzando un Sistema Operativo (OS). I più famosi e popolari sistemi operativi sono Windows, MacOS e Linux. Storicamente UNIX è stato il primo sistema operativo scritto nel linguaggio C, e ha rappresentato uno step importante nella storia dei sistemi operativi.
Un sistema operativo è un programma. Un programma significativo, con dei ruoli molto particolari. Un sistema operativo deve, prima di tutto, interagire con l'hardware disponibile in modo da sfruttare e gestire nel modo migliore tutte le risorse offerte dalla macchina su cui esegue. Si parla quindi della CPU, della memoria, della GPU, del disco, del monitor, dei dispositivi rimovibili, e via dicendo.
Come seconda cosa il sistema operativo deve implementare tutte le astrazioni software che sono necessarie per permettere alle nostre applicazioni di girare in modo efficiente e sicuro. Tra queste astrazioni troviamo: la gestione della CPU tramite uno scheduler, la gestione della memoria tramite un allocatore, la gestione delle trap, la gestione dei permessi, la divisione tra user space e kernel space, e via dicendo.
Una delle più importanti astrazioni implementate da un sistema operativo è il layer delle chiamate di sistema, che implementa la divisione tra kernel space e user space. Il kernel space è la parte del sistema operativo privilegiata, che interagisce con l'hardware e che decide come implementare i meccanismi di sicurezza. Nello user space invece troviamo le classiche applicazioni, come il browser, il text editor, la shell, il terminale, e qualsiasi altra applicazione utilizziamo ogni giorno. Queste applicazioni girano in ambienti meno privilegiati e possono funzionare proprio perché dietro c'è un kernel che parla con l'hardware. Per comunicare con il kernel le applicazioni user space utilizzano le chiamate di sistema.
Quando implementiamo un sistema operativo dobbiamo scegliere quale
hardware supportare. Questa scelta non è banale da fare. Sistemi
operativi moderni, come Linux, supportano tantissimi hardware
diversi. Più hardware supportiamo, e più cresce la complessità del
sistema operativo. In questo progetto didattico scriveremo un sistema
operativo che supporta un hardware specifico: l'architettura RISC-V
a 32 bit. Perché RISC-V? Perché a differenza di altre architetture,
come x86-64 e x86, l'architettura RISC-V è più semplice e utile
per un progetto didattico.
Durante lo sviluppo non abbiamo bisogno di un hardware reale con un processore RISC-V. Tutto l'hardware infatti sarà emulato all'interno di una macchina virtuale tramite virt e QEMU. Questo significa che il progetto potrà essere seguito da qualsiasi computer.
Riferimenti
Il progetto segue la traccia del libro di Seiya Nuta. Le specifiche RISC-V che lo seguono sono le altri fonti primarie.