Implementa un Sistema Operativo in C
Effettua il login per accedereIl Sistema Operativo è una delle più importanti astrazioni informatiche. Ogni persona, quando utilizza un computer, può utilizzare quel computer perché qualcuno ha scritto un sistema operativo che permette al software di interagire con l'hardware. È difficile misurare l'importanza che questa astrazione ha avuto nel corso dello sviluppo delle tecnologie informatiche.
Al centro di ogni sistema operativo troviamo un componente chiamato kernel. Il kernel è il cuore del sistema operativo, e viene utilizzato dal sistema operativo per interagire con l'hardware della macchina e per implementare le principali astrazioni software. Nello spefifico il kernel è responsabile anche (ma non solo) dei seguenti sotto-sistemi:
-
Gestione della CPU
-
Gestione della memoria
-
Gestione delle eccezioni
-
Interazione con i dispositivi hardware
-
Meccanismi di protezione
- ...
Il seguente corso mostra l'implementazione step-by-step di un kernel minimale per l'architettura hardware RISC-V utilizzando il linguaggio di programmazione C.
L'approccio utilizzato permette allo studente di sviluppare una profonda conoscenza sul funzionamento e sulla programmazione delle necessarie astrazioni per scrivere un sistema operativo ed in generale è utile a tutti coloro che vogliono approfondire le loro conoscenze sui sistemi e sulla programmazione low-level.
Contenuti del corso
- Introduzione
- Configurazione toolchain RISC-V
- Il tuo primo programma RISC-V
- Introduzione layer C - Compiler Extensions
- Introduzione layer C - Implementazione
- Interazione con il firmware OpenSBI
- Una semplice printf
- Funzioni per la memoria
- Funzioni per le stringhe
- Kernel panic
- Le eccezioni in RISC-V - Teoria
- Le eccezioni in RISC-V - Pratica
- La memory map
- Un allocatore di pagine
- Rappresentare un processo
- Il context switch
- Uno scheduler round robin
- Implementare la memoria paginata
- Applicazione user-space
- Attivare lo user-space
- Implementazione delle system call
- Che cos'è un device driver?
- Il ruolo e la struttura della virtqueue
- Le primitive per virtio-blk
- Interagire con il disco
- Implementiamo un file system - teoria
- Implementiamo un file system - pratica
- Implementiamo una user-space shell
- Cosa abbiamo implementato?
- Come possiamo estenderlo?