Piccolo OS è un sistema operativo multitasking di piccole dimensioni progettato per Raspberry Pi Pico. Concepito con l'obiettivo principale di fungere da strumento didattico. Il progetto punta a porre le basi di una piattaforma multitasking cooperativa da combinare alle caratteristiche del processore Arm Cortex-M0+.
Un sistema operativo scritto in C per Raspberry Pi Pico
Il sistema operativo è stato sviluppato utilizzando il Raspberry Pi Pico SDK e il compilatore GCC. Il codice sorgente è scritto in C. Con alcune parti più critiche implementate in linguaggio Assembly per gestire operazioni come il context switching. context_switch.s
contiene invece il codice Assembly responsabile del salvataggio e del ripristino dei contesti dei task durante il passaggio da un'attività all'altra.
Il file piccolo_os.h
definisce le strutture dati e le funzioni principali del sistema operativo su Raspberry Pi Pico, tra cui la struttura task_t
che rappresenta un task con il suo stack, il puntatore alla funzione da eseguire e lo stato corrente. Il file piccolo_os.c
implementa infine le funzioni dichiarate nell'header, vengono così gestiti l'inizializzazione del sistema operativo, la creazione dei task e il meccanismo di scheduling cooperativo.
Su Raspberry Pi Pico sistema operativo utilizza un approccio cooperativo al multitasking. Con esso ogni task è responsabile di cedere il controllo al sistema operativo chiamando esplicitamente la funzione os_yield()
. Questo metodo semplifica l'implementazione rispetto al multitasking preemptive. Non richiede infatti un timer hardware per forzare il context switch.
Le gestione dei task in Piccolo OS
Il file piccolo_os_demo.c
fornisce un esempio di utilizzo del sistema operativo su Raspberry Pi Pico. Con esso vengono infatti creati due task che stampano messaggi alternati su un terminale seriale. Questo permette di creare e avviare task utilizzando le funzioni fornite da Piccolo OS.
È importante notare che Piccolo OS presenta ancora diverse limitazioni. Tra di esse vi è per esempio l'assenza di memoria per i task, supporto multicore, mutex, code, file system, networking e shell. Tali restrizioni lo rendono inadatto per applicazioni complesse. È però adeguato come strumento educativo per comprendere i concetti base di un sistema operativo multitasking cooperativo su hardware embedded.
Il progetto è disponibile su GitHub. Dalla pagina è possibile accedere al codice sorgente, alla documentazione e alle istruzioni per la compilazione e l'esecuzione su un dispositivo Raspberry Pi Pico.