Giter Site home page Giter Site logo

angelogalav / pandos Goto Github PK

View Code? Open in Web Editor NEW
2.0 0.0 0.0 1.14 MB

PandOS Operating System Kernel code, aka the main project of the UniBo Operating Systems course (y. 2020/2021)

C 97.03% Makefile 2.97%
c kernel operating-system unibo rikaya-os pandos

pandos's Introduction

Progetto PandOS del corso di Sistemi Operativi 2020/2021

Autori:

  • Adriano Pace
  • Angelo Galavotti
  • Denis Pondini
  • Antonin Avdei

Introduzione

PandOs è un "sistema operativo" creato per essere rappresentabile tramite più layer astratti che implementano le funzioni chiave di un sistema operativo Unix. L’ambiente di riferimento per l’esecuzione del software e’μMPS3. Si tratta di un emulatore per architettura MIPS con interfaccia grafica integrata per l’esecuzione, l’interazione e il debugging del software. Alcuni celebri esempi di dispositvi basati su MIPS: le consolePlaystation 2, Playstation Portable e Nintendo64; la sonda spaziale New Horizons; l’autopilota della Tesla Model S.

Tecnologie usate

  • Ambiente di sviluppo Unix
  • Linguaggio di programmazione C
  • Emulatore per architettura MIPS μMPS3

Fase 1

Il tema di questa fase è la gestione dei processi e dei semafori. I primi vengono gestiti attraverso i pcb (ovvero i descrittori dei processi) che possono essere organizzate in code o alberi. Inoltre, la lista monodirezionale pcbFree_h contiene i pcb liberi, che potranno essere inseriti nelle code o alberi prima citati e reinserite nella lista una volta che non vengono più utilizzate.

I semafori vengono organizzati tramite una lista di descrittori di semafori (semd) detta ASL, che contiene due nodi "dummy" agli estremi. Ogni descrittore della lista contiene una chiave di riconoscimento (semAdd) e una coda di processi pcb. Ogni semaforo diventa attivo una volta che questo contiene un processo, ad esclusione dei nodi dummy che hanno chiave 0 e MAXINT rispettivamente e che non contengono pcb. La lista in sé è ordinata in senso crescente in base a semAdd. Anche per i semafori abbiamo una lista monodirezionale di descrittori semd liberi, che ha la stessa esatta funzione di pcbFree_h, anche se nel contesto degli semd.

Le strutture dei semafori e dei pcb vengono inizializzate attraverso le funzioni initASL e iniPcbs rispettivamente.

Fase 2

Il tema di questa fase è la creazione della parte principale del nostro kernel. Vengono implementati il codice dello scheduler, del gestore delle eccezioni, del gestore degli interrupt e delle syscall di cui si può fare uso.

Lo scheduler prende un processo corrente dalla readyQueue (ovvero la coda dei processi ready che possono essere avviati) e ne riprende (o inizia) l'esecuzione. Le syscall sono particolari funzioni usabili esclusivamente in kernel mode, che permettono di eseguire determinate funzioni come la terminazione e creazione di processi, esecuzione di comandi P e V sui semafori, ritorno delle informazioni sul tempo usato da un processo etc... L'interrupt handler gestisce gli interrupt di device timer (come il PLT e l'interval timer) e non-timer (come dispositivi di networking, terminali e stampanti), permettendo di eseguire delle V nei semafori di questi device e liberando i processi bloccati nelle queue ad essi associati. L'exception handler gestisce le eccezioni (tra cui anche syscall e interrupt) ridirezionando i processi nelle procedure richieste o che possono gestire tale eccezione. In caso di Program Trap o di TLB exception (eccezioni che riguardano l'organizzazione della memoria), si esegue una procedura "Pass Up or Die", che permette di passare la gestione dell'eccezione al layer di supporto in caso esso sia presente, o di terminare il processo che ha causato l'eccezione altrimenti.

Fase 3

Il tema di questa fase è la creazione dello strato di supporto. Questa fase include il supporto per la memoria virtuale e la paginazione, assieme alla gestione di syscall con codice maggiore di 9. Otto processi in user-mode vengono creati, inizializzando la loro struttura di supporto e la page table di ognuno dei processi. Inoltre, il pager permette di gestire i pagefault, inserendo in memoria le pagine richieste da un dato processo.

Come compilare e avviare

La compilazione avviene attraverso il makefile presente nella directory del progetto. Per avviare il programma è necessario avviare μMPS3 e creare una "nuova macchina virtuale" salvando le configurazioni nella directory del progetto, a quel punto l'emulatore sarà in grado di leggere i file generati dal makefile.

N.B: se si usa una distro di linux basata su arch, bisogna modificare il makefile includendo anche il percorso commentato.

$ cd Progetto_Sistemi/
$ cd Fase3/
$ make

In caso si voglia eliminare i file creati, esistono due semplici comandi: Per la fase 1 basta usare $ make clean, mentre per la fase 2 e fase 3 esiste $ make clean_all.

pandos's People

Contributors

adrianorieti avatar angelogalav avatar pondo95 avatar

Stargazers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.