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