Implementa un Sistema Operativo in C
10 Moduli
30 Lezioni
9 Ore

Implementa un Sistema Operativo in C

Avanzato Programmazione C Sistemi Operativi
Effettua il login per accedere

Il 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

1 Introduzione al corso
  • Introduzione
2 Bootstrapping
  • Configurazione toolchain RISC-V
  • Il tuo primo programma RISC-V
  • Introduzione layer C - Compiler Extensions
  • Introduzione layer C - Implementazione
  • Interazione con il firmware OpenSBI
3 Una piccola libreria
  • Una semplice printf
  • Funzioni per la memoria
  • Funzioni per le stringhe
4 Gestione errori ed eccezioni
  • Kernel panic
  • Le eccezioni in RISC-V - Teoria
  • Le eccezioni in RISC-V - Pratica
5 Gestione della memoria
  • La memory map
  • Un allocatore di pagine
6 Gestione dei processi
  • Rappresentare un processo
  • Il context switch
  • Uno scheduler round robin
  • Implementare la memoria paginata
7 Implementazione boundary User space <-> Kernel space
  • Applicazione user-space
  • Attivare lo user-space
  • Implementazione delle system call
8 Disk device driver
  • Che cos'è un device driver?
  • Il ruolo e la struttura della virtqueue
  • Le primitive per virtio-blk
  • Interagire con il disco
9 File system e Shell
  • Implementiamo un file system - teoria
  • Implementiamo un file system - pratica
  • Implementiamo una user-space shell
10 Conclusione
  • Cosa abbiamo implementato?
  • Come possiamo estenderlo?

Insegnanti