OS – Points

Questo documento vi propone una possibile scaletta da seguire nella progettazione di un sistema operativo, soprattutto i principianti si trovano spesso a domandarsi quale potrebbe essere il prossimo passo da seguire, in questa vi e’ un esempio di come si potrebbe organizzare lo sviluppo di un sistema operativo.

1 – Scrivere un BootLoader  (o in alternativa usare un boot manager come grub)
1.a – Impostare gdt
1.b – caricare il kernel
1.c – abilitare a20
1.d – impostare lo stack
1.e – entrare in pmode
1.f – lanciare il kernel

2 – Fornirsi di routine per la gestione della stampa a video
|____ ad esempio kputs kputc, e una funzione per stampare variabili non char

3 – Implementare gestione idt (tabella dei descrittori degli interrupt)
3.a  gestire eccezioni del processore
3.b  fare una routine generica che gestisce gli interrupt sconosciuti e riempirci il     vettore fino alla pos 255

4 – Implementare configurazione del PIC8259, processore per gestire gli interrupt hardware
4.a Dotarsi di una o + routine che gestiscono questi interrupt e metterli nella idt
4.b e’ consigliato implementare gestione irq in asm (per via di un problema nella ottimizzazione con gcc)
4.c Mascherare tutti gli interrupt e abilitare solo quelli utili.

5 – Scrivere driver della tastiera
5.1 – Scrivere una cli minimale utile per debug

6 – Scrivere funzioni per gestire l’allocazione di memoria a livello fisico
6.a se si decide di usare pagine, scrivere alloca_pagine e rilascia_pagine, occupandosi di tenere traccia  della memoria occupata e di quella libera.
6.b A questo punto si possono scrivere la mallo e la free

7 – Scrivere routines per configurare il pit8253/54
7.a configurare pit
7.b abilitare l’interrupt.

8 – Abilitare la paginazione (se si vuole)
8.a Scrivere le strutture dati per gestire le page table e page dir e le relative funzioni         8.b Abilitare la paginazione

9 – Scrivere gestore memoria in ambiente paginato
9.a Decidere modello di indirizzamento (spazio di indirizzamento condiviso, ogni processo con il suo spazio di indirizzamento)
9.b In base allo spazio di indirizzamento scelto, scrivere il relativo gestore di memoria (alcuni esempi: heap, buddy_system, slab allocator). Se si sceglie uno spazio di indirizzamento condiviso fra tutti i processi, e si resta sempre in kernel space, il punto 8 si puo’ saltare e la malloc e la free saranno  quelle del gestore fisico.

10 – Iniziare a lavorare alla gestione dei task (se si desidera fare un o.s. multitasking)
10.a Preparare una struttura dati per la gestione dei task
10.b Preparare funzioni per il cambio di contesto
10.c Scrivere uno scheduler

11 – Scrivere i semafori per gestire la mutua esclusione

12 – Scirvere funzioni per rilevare data e ora

13 – Scrivere il driver per il DMA

14 – Scrivere il driver per il floppy

Etc etc…

Diciamo che i punti dal numero 1 al numero 9 sono quelli che vanno seguiti come sono, in quanto sono passi obbligati per tutti gli os. Dopo di che, potete seguire la mia scaletta se volete, oppure cambiarla, come preferite.

Un pensiero su “OS – Points”

  1. Consiglio vivamente di porre tra i punti due e tre delle routines per il debug, il controllo dei registri e dello stack. La funzione che mostra numeri deve permettere di scegliere la base numerica, cosa molto utile per il debug.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *