Introduzione a Shark - Istituto di Informatica
Transcript
Introduzione a Shark - Istituto di Informatica
Università Politecnica delle Marche DEIT Introduzione a Shark Corso di Sistemi Operativi in tempo reale Claudi Andrea Anno Accademico 2007/2008 Argomenti Che cos'è S.Ha.R.K.? Architettura di S.Ha.R.K. Generalità Modelli di task e modelli di risorse Moduli per lo scheduling della CPU Moduli per la gestione di risorse condivise Installazione di S.Ha.R.K. su disco fisso Dimostrazione pratica Bibliografia e link utili 2 Che cos'è S.Ha.R.K.? S.Ha.R.K. è l'acronimo di Soft Hard Real-time Kernel. È un kernel real-time didattico, sviluppato con l'obiettivo di facilitare l'implementazione e il testing di nuovi algoritmi di scheduling, server aperiodici e protocolli di gestione delle risorse. Si tratta di un kernel molto snello, modulare, in grado di gestire processi hard e soft real-time ma anche applicazioni non in tempo reale. S.Ha.R.K nasce nel 2000 all'interno della Scuola Superiore Sant'Anna di Pisa. Deriva da un vecchio progetto del medesimo istituto, HaRTiK. Attualmente è alla versione 1.5.4 ed è rilasciato sotto licenza GPLv2. 3 Che cos'è S.Ha.R.K.? S.Ha.R.K. si pone i seguenti obiettivi: Semplicità nello sviluppo di nuove applicazioni; Ampia flessibilità nella modifica delle politiche di scheduling; Aderenza allo standard POSIX. Le principali caratteristiche di S.Ha.R.K. sono: Kernel fortemente modulare e leggero; Presenza di device drivers per l'hardware più comune; Interfaccia modulare per la specifica di politiche di scheduling della CPU; Interfaccia modulare per la specifica di politiche di gestione delle risorse condivise. 4 Architettura di S.Ha.R.K. 1 2 ... n Application RM Libraries EDF RR PCP Generic Kernel ... SRP ... OSLib Hardware 5 OSLib OSLib è una libreria per lo sviluppo di sistemi operativi. OSLib implementa una astrazione di una macchina generica, in grado di fornire alcuni servizi di base. Tra questi abbiamo: Cambio di contesto tra processi; Gestione della temporizzazione; Gestione degli interrupt; Un subset della libreria di runtime per il linguaggio C. 1 2 ... n Application RM Libraries EDF RR PCP Generic Kernel ... SRP ... OSLib Hardware 6 Generic Kernel Il kernel generico permette di separare l'algoritmo di scheduling dalla gestione delle applicazioni e dai meccanismi interni del kernel medesimo. Il kernel generico non implementa nessun algoritmo di scheduling, ma si limita a posporre le decisioni in merito ad opportuni moduli esterni. 1 2 ... n Application RM Libraries EDF RR PCP Generic Kernel ... SRP ... OSLib Hardware 7 Generic Kernel In pratica il kernel fornisce soltanto le primitive necessarie allo scheduling, senza specificare alcun algoritmo. L'implementazione dell'algoritmo risiede in un modulo esterno, che viene configurato a run-time per mezzo dell'ausilio di uno specifico componente del kernel, il Model Mapper. 1 2 ... n Application RM Libraries EDF RR PCP Generic Kernel ... SRP ... OSLib Hardware 8 Generic Kernel Il kernel generico include uno stimatore del tempo di computazione dei task, denominato JET (Job Execution Time). Questo componente è utilizzato per misure di tipo statistico, per controllare le risorse utilizzate e per implementare meccanismi di protezione temporale. 1 2 ... n Application RM Libraries EDF RR PCP Generic Kernel ... SRP ... OSLib Hardware 9 Libraries L'esportazione delle API del kernel avviene per mezzo di uno strato di librerie intermedie. Queste librerie permettono a S.Ha.R.K. di supportare l'hardware più comune. Esiste un layer di compatibilità che consente di utilizzare i device drivers del kernel Linux (v. 2.6). Un elenco delle periferiche supportate al momento è sul sito di S.Ha.R.K. 1 2 ... n Application RM Libraries EDF RR PCP Generic Kernel ... SRP ... OSLib Hardware 10 Applicazioni e tasks Una applicazione è un insieme di tasks cooperanti che condividono uno spazio di indirizzamento comune. Le comunicazioni tra tasks avvengono per mezzo di buffer condivisi. L'accesso ai buffer deve essere regolato da un qualche meccanismo di sincronizzazione. Attenzione! Il kernel generico non implementa nessun meccanismo di protezione della memoria. 1 2 ... n Application RM Libraries EDF RR PCP Generic Kernel ... SRP ... OSLib Hardware 11 Scheduling della CPU I moduli di scheduling della CPU implementano specifici algoritmi con l'ausilio di set di dati e funzioni specifiche. L'implementazione è indipendente dagli altri moduli presenti nel sistema. In questo modo è possibile definire un gran numero di moduli con differenti configurazioni. Ad esempio per un PS si può decidere di utilizzare sia RM che EDF senza modifiche al codice. 1 2 ... n Application RM Libraries EDF RR PCP Generic Kernel ... SRP ... OSLib Hardware 12 Gestione delle risorse condivise I moduli per la gestione delle risorse condivise sono implementati con la stessa logica di quelli per lo scheduling della CPU. In entrambi i casi le funzioni dei moduli debbono essere chiamate dopo aver disabilitato gli interrupt. Ogni decisione deve essere presa in pochi sec! Non possiamo accettare latenze dovute ad interrupt. 1 2 ... n Application RM Libraries EDF RR PCP Generic Kernel ... SRP ... OSLib Hardware 13 Modelli Il concetto di modello permette a S.Ha.R.K. di conseguire l'indipendenza tra applicazioni ed algoritmi di scheduling. Il modello è un'astrazione che consente di esprimere parametri e richieste di QoS per determinati task. Il kernel utilizzerà il modello per assegnare il task al modulo opportuno, attraverso l'ausilio del model mapper. Esistono due tipi di modelli: Modelli di task Modelli di risorse 14 Modelli di task I modelli per i task sono definiti nel file include/kernel/model.h I parametri più importanti sono: stacksize Consente di specificare la dimensione (in bytes) dello stack richiesta dal task. group Specifica a quale gruppo il task appartiene. Il kernel generico raggruppa i task in base a questo campo, e fornisce primitive quali group_activate e group_kill. control Consente di specificare particolari proprietà per il task. Ad esempio, si può creare un task che non può essere prelazionato, oppure bloccato in attesa che si verifichi una particolare condizione. 15 Modelli di risorse I modelli per le risorse sono definiti nel file include/ kernel/model.h Sono concepiti in maniera simile ai modelli per i task. Ognuno di essi varia in base alla risorsa che deve gestire, dunque è molto difficile evidenziare i campi più importanti. S.Ha.R.K definisce due tipi di modelli di risorse, utilizzati nell'implementazione di PCP e SRP. Si rimanda al codice per ulteriori dettagli. 16 Funzionamento del Model Mapper Task 1 Task 2 Model Mapper QoS Mapper Modulo 2 Modello 2 Modello 1 QoS Mapper Modulo 1 RM (, C, T, R1, R2) EDF (a, C, d) 17 Moduli di scheduling I moduli di scheduling sono organizzati per livelli. Ad ogni livello corrisponde uno ed un solo modulo. I livelli corrispondo alla priorità dei task da schedulare. Il livello 0 è quello a priorità più alta. Il model mapper si occupa di selezionare il modulo adatto per lo scheduling di un task. Il task verrà assegnato al livello corrispondente alle sue richieste di QoS. Level 0 Rate Monotonic Level 1 Deferrable Server Level 2 Non real-time 18 Moduli per la gestione di risorse Alcuni protocolli per la gestione di risorse condivise interagiscono direttamente con lo scheduler. Ad esempio PIP interroga lo scheduler quando un task deve ereditare la priorità da un altro. In questo modo il protocollo diventa dipendente dall'algoritmo di scheduling utilizzato. Dal punto di vista del codice, ciò limita la piena modularità del kernel: un modulo per la gestione delle risorse dovrà appoggiarsi necessariamente ad un particolare modulo di scheduling. Abbiamo bisogno di un meccanismo di ereditarietà della priorità che sia indipendente dal modulo di scheduling. 19 Moduli per la gestione di risorse Il meccanismo si basa sul concetto di shadow task. Uno shadow task è un task schedulato al posto di un altro selezionato dallo scheduler. Un task bloccato su una particolare risorsa condivisa viene mantenuto nella coda dei processi pronti. Ad esso viene legato uno shadow task. Quando lo scheduler selezionato il task bloccato, lo shadow task viene eseguito al suo posto. In pratica lo shadow task eredita la priorità del task bloccato. Il meccanismo di ereditarietà non coinvolge direttamente lo scheduler: così l'implementazione del modulo di gestione delle risorse è disaccoppiata da quella dell'algoritmo di scheduling. 20 Il campo shadow task i shadow 21 Il campo shadow task bloccato shadow task bloccante shadow 22 Il campo shadow task bloccato shadow task bloccato shadow task bloccato shadow task bloccante shadow 23 Evitare l'attesa circolare task bloccato shadow task bloccato shadow task bloccato shadow task bloccato shadow 24 Installazione di S.Ha.R.K. 25 Prima di incominciare... S.Ha.R.K. non è un sistema operativo stand-alone. Il kernel, una volta compilato, gira appoggiandosi ad un sistema operativo di tipo DOS. Linux è un kernel monolitico e modulare, che ha lo scopo di gestire il funzionamento di macchine più o meno complesse; S.Ha.R.K., invece, è un microkernel funzionale solo alla compilazione e all'esecuzione di determinate applicazioni. In pratica si limita a fornire le librerie necessarie alla compilazione. Il team di sviluppo raccomanda di utilizzare FreeDOS. I motivi di questa scelta sono due: Nessun costo di licenza; Possibilità di modificare il codice del sistema operativo ospite. 26 Prima di incominciare... È possibile provare S.Ha.R.K. in tre modi: Installandolo su disco fisso; Installandolo in una macchina virtuale; Utilizzando il live-cd. Quale metodologia scegliere? Dipende da cosa dobbiamo fare! Possiamo dedicare a S.Ha.R.K. una partizione del nostro hard disk se abbiamo intenzione di utilizzarlo in maniera intensiva; Se vogliamo solo provare il funzionamento di una piccola applicazione può essere conveniente utilizzare una macchina virtuale; Se vogliamo dare solo un'occhiata alle applicazioni dimostrative, utilizzeremo il live-cd. 27 Installazione su disco fisso L'installazione può essere divisa in sette fasi: 1. 2. 3. 4. 5. 6. 7. Partizionamento del disco fisso Installazione di Windows Installazione di FreeDOS Installazione di GNU/Linux Configurazione del boot loader Compilazione di S.Ha.R.K. Installazione di S.Ha.R.K. in ambiente FreeDOS Non è necessario installare sulla stessa macchina GNU/Linux e Windows. Uno dei due sistemi operativi è più che sufficiente per l'utilizzo generico del pc. 28 1 – Partizionamento del disco fisso Dobbiamo creare quattro partizioni: La prima, dedicata a FreeDOS, sarà di tipo FAT32; La seconda, dedicata a Windows, sarà di tipo NTFS; La terza, dedicata a GNU/Linux, sarà di tipo Ext3; Infine un'ultima partizione fornirà lo spazio di swap necessario a GNU/Linux. Utilizzeremo il tool fdisk, presente in ogni live-cd GNU/Linux. fdisk /dev/hda Nel prompt digitare a per creare una partizione, d per eliminarla e m per ulteriori informazioni. Attenzione! FreeDOS si rifiuterà di partire se non sarà installato nella prima partizione. 29 2 – Installazione di Windows Dopo aver partizionato il disco rigido, riavviare e installare Windows nella partizione di tipo NTFS. Attenzione! Windows 95 e Windows 98 non sono in grado di avviarsi se non sono posti nella prima partizione del disco. Si consiglia, dunque, l'utilizzo di Windows 2000 o Windows XP. 30 3 – Installazione di FreeDOS A questo punto è possibile scaricare FreeDOS dal sito http://www.freedos.org. Si consiglia di installare FreeDOS manualmente, scaricando tutti i pacchetti e copiandoli nella prima partizione. Il cd di installazione di FreeDOS è affetto da alcuni bug. La situazione potrebbe migliorare in futuro, per il momento il metodo indicato è il più sicuro. Creiamo un floppy di boot con il seguente comando: sys a: E copiamo nel floppy il file sys.com. Riavviamo la macchina utilizzando il floppy appena creato. 31 3 – Installazione di FreeDOS Ora dobbiamo creare un'immagine del MBR in grado di avviare FreeDOS e scriverla sul disco. In seguito, infatti, il MBR dovrà essere sovrascritto dal boot loader GRUB. Senza l'operazione precedente sarebbe impossibile, dunque, avviare FreeDOS. Diamo il comando: sys c: c:\fdosboot.img Dove c: è la lettera della partizione in cui è installato FreeDOS. 32 4 – Installazione di GNU/Linux Riavviare il computer ed installare GNU/Linux nella partizione di tipo Ext3. Attenzione! Se l'installer fornisce diverse opzioni, scegliere il boot loader GRUB ed installarlo nel MBR. LILO potrebbe funzionare ugualmente, ma non è stato testato. 33 5 – Configurazione del boot loader Ora dobbiamo fare in modo che il boot loader possa avviare FreeDOS. Al termine del file /boot/grub/menu.lst, presente nella partizione di GNU/Linux, aggiungere le seguenti righe: title Freedos rootnoverify (hd0,0) makeactive chainloader /fdosboot.img boot 34 6 – Compilare S.Ha.R.K. A questo punto abbiamo tre diversi sistemi operativi sulla stessa macchina. Quale di essi useremo per compilare S.Ha.R.K.? FreeDOS e Windows non hanno un compilatore C nativo, ma possiamo pensare di installarne uno noi. Compilare S.Ha.R.K. in FreeDOS consente di ottenere una installazione immediatamente operativa. Purtroppo la compilazione in ambiente FreeDOS è estremamente lenta! Consiglio: utilizzate un sistema GNU/Linux con compilatore GCC 3.3.3 Verificate la versione in uso sul vostro sistema con il comando 'gcc -v' 35 6 – Compilare S.Ha.R.K. 36 6 – Compilare S.Ha.R.K. in Linux tar xvjf shark-1.5.tar.bz2 Scompatta il pacchetto di S.Ha.R.K. cd shark Entra nella directory appena creata Editare il file shark.cfg, settando il compilatore in uso nel sistema e il clock della CPU. make all Compila il kernel di S.Ha.R.K., le librerie, i moduli e i device drivers cd demos Entra nella directory dei programmi dimostrativi. make Compila i programmi di esempio 37 6 – Compilare S.Ha.R.K. in Windows La procedura seguente è stata testata con i seguenti sistemi Windows: Millenium NT 2000 XP La corretta compilazione non è garantita in sistemi diversi dai precedenti. Windows non fornisce un compilatore C nativo. Per questo prima di iniziare la compilazione è necessario installarne uno. Dal sito di S.Ha.R.K. scarichiamo i file: unzip32.exe mindj333.zip 38 6 – Compilare S.Ha.R.K. in Windows Il secondo file contiene una versione modificata del compilatore DJGPP, una implementazione del GCC per sistemi Windows. Apriamo un prompt di MS-DOS e digitiamo i seguenti comandi. unzip32 -o mindj333.zip -d c: Scompatta il pacchetto del compilatore DJGPP cd c:\djgpp install.bat Installa il compilatore setvar.bat Setta alcune indispensabili variabili d'ambiente 39 6 – Compilare S.Ha.R.K. in Windows unzip32 -o shark15.zip -d c: Scompatta il pacchetto di S.Ha.R.K. cd c:\shark Editare il file shark.cfg, settando il compilatore in uso nel sistema e il clock della CPU. make Compila il kernel di S.Ha.R.K., le librerie, i moduli e i device drivers cd demos make Compila i programmi dimostrativi 40 6 – Compilare S.Ha.R.K. in FreeDOS La procedura è identica a quella appena vista per Windows. 41 7 – Installare S.Ha.R.K. Per installare S.Ha.R.K. in ambiente FreeDOS è sufficiente copiare la directory di S.Ha.R.K. nella partizione opportuna. Per eseguire i programmi di esempio è sufficiente avviare FreeDOS ed impartire i comandi: cd <demo directory> x <demo name> 42 Ed ora... una piccola dimostrazione! 43 Alcuni indirizzi utili... Home page di S.Ha.R.K. http://shark.sssup.it/ Home page di Erika http://erika.sssup.it/ Forum su S.Ha.R.K. ed Erika http://feanor.sssup.it/retis-projects/modules/newbb/ Live-cd con S.Ha.R.K. precompilato http://robot.unipv.it/toolleeo/contrib/shark/cd-images/ Home page di FreeDOS http://www.freedos.org/ Home page di VirtualBox http://www.virtualbox.org/ 44 Bibliografia Buttazzo Giorgio – Hard real-time computing systems, 2° edizione, New York, Springer, 2004. Buttazzo Giorgio, Gai Paolo, Palopoli Luigi, Caccamo Marco, Lipari Giuseppe – S.Ha.R.K. Kernel Architecture, 4° volume di S.Ha.R.K. User Manual, Pisa, SSSUP, 2007. Facchinetti, Tullio – The S.Ha.R.K. Quick Guide, v1.11, Università di Pavia, 2006 45