Blame | Last modification | View Log | RSS feed
#LyX 1.3 created this file. For more info see http://www.lyx.org/
\lyxformat 221
\textclass article
\language english
\inputencoding auto
\fontscheme default
\graphics default
\paperfontsize default
\papersize Default
\paperpackage a4
\use_geometry 0
\use_amsmath 0
\use_natbib 0
\use_numerical_citations 0
\paperorientation portrait
\secnumdepth 3
\tocdepth 3
\paragraph_separation indent
\defskip medskip
\quotes_language english
\quotes_times 2
\papercolumns 1
\papersides 1
\paperpagestyle default
\layout Title
ATTENTI AL LUPO !!!
\layout Description
Progetto per il corso di Sistemi Operativi Real Time a.a.
2003-2004
\layout Description
Gruppo 1: Laura Azzolini, Alessandro Foglini, Alessandro Pellegrini
\layout Paragraph
INTRODUZIONE
\layout Standard
Il progetto da noi sviluppato prevede l'implementazione di più task che
lavorano in maniera concorrente in ambiente S.Ha.R.K..
\layout Standard
L'idea nasce dall'esempio fornito dal programma fly, che crea ad ogni pressione
di un tasto delle
\begin_inset Quotes eld
\end_inset
mosche
\begin_inset Quotes erd
\end_inset
che fluttuano casualmente all'interno di una scatola bidimensionale, senza
però interagire fra loro.
Il nostro progetto era orientato a dare un certo comportamento a tali mosche,
in particolare potevamo scegliere o di creare un mondo virtuale del tutto
automatico o permettere all'utente di interagire direttamente con i processi
in esecuzione in maniera tale da modificare il loro comportamento.
Secondo noi non era trascurabile l'interazione con l'utente, in particolare,
in questa maniera ci sembrava di poter meglio comprendere l'ambiente Real
Time.
Da quì nasce l'idea di avere un task che funge da inseguitore di oggetti
che si muovono casualmente (come le mosche) e di un ulteriore task comandato
dall'utente che influenzi il movimento dell'inseguitore.
Ecco come hanno preso vita il
\begin_inset Quotes eld
\end_inset
Lupo
\begin_inset Quotes erd
\end_inset
, la
\begin_inset Quotes eld
\end_inset
Pecora
\begin_inset Quotes erd
\end_inset
ed il
\begin_inset Quotes eld
\end_inset
Cacciatore
\begin_inset Quotes erd
\end_inset
.
\layout Paragraph
ARCHITETTURA
\layout Standard
La parte Real Time dell'architettura, prevede la condivisione di più strutture
dati per il controllo della posizione dei task in esecuzione, oltre alla
condivisione della grafica.
In particolare usiamo dei semafori per governare l'accesso alle strutture
condivise.
I dati condivisi sono stati realizzati con vettori di stutture, così che
ogni pecora , ogni lupo ed il cacciatore possiedono posizioni cartesiane,
un flag che segna se é stato ucciso o no ed un semaforo privato.
Abbiamo limitato l'utilizzo della mutua esclusione solo alla singola struttura
del vettore stesso, così da non bloccare le altre strutture nelle fasi
di lettura/scrittura.
Con l'utilizzo di tali vettori è stato possibile gestire la lettura/scrittura
dei dati propri di ogni task e l'accesso alle strutture dati.
\layout Subparagraph
Pecora
\layout Standard
La pecora è un task che nasce premendo il tasto
\begin_inset Quotes eld
\end_inset
p
\begin_inset Quotes erd
\end_inset
da tastiera e si muove nello schermo in maniera casuale rimanendo però
all'interno di un perimetro prestabilito.
\layout Standard
Alla creazione, ad ogni task pecora viene assegnata la prima posizione libera
nel vettore di strutture, alla quale accede in mutua esclusione con gli
altri task pecora presenti e con i task lupo.
E' possibile creare pecore fino a che il vettore non si riempie (max quattro
pecore).
Nella struttura che gli è stata assegnata, il task aggiorna le proprie
coordinate ad ogni spostamento.
L'interazione con gli altri task viene realizzata tramite il flag di vita
o morte; in particolare quando un lupo ha raggiunto la pecora, attiva il
flag e la pecora, notando l'attivazione muore.
\layout Subparagraph
Lupo
\layout Standard
Il lupo è un task che nasce premendo il tasto
\begin_inset Quotes eld
\end_inset
l
\begin_inset Quotes erd
\end_inset
da tastiera e si muove nello schermo, all'interno del perimetro prestabilito,
scappando dal task cacciatore o inseguendo il task pecora più vicino.
Se non sono presenti né il cacciatore né le pecore, il lupo rimane nella
sua tana.
\layout Standard
Alla creazione, ad ogni task lupo viene assegnata la prima posizione libera
nel vettore di strutture, alla quale accede in mutua esclusione con gli
altri task lupo presenti e con il task cacciatore.
A seconda della posizione assunta nel vettore, il lupo si muoverà a velocità
crescente.
E' possibile creare lupi fino a che il vettore non si riempie (max tre
lupi).
Nella struttura che gli è stata assegnata, il task aggiorna le proprie
coordinate ad ogni spostamento.
L'interazione con gli altri task viene realizzata tramite il controllo
delle posizioni e il relativo calcolo della distanza dal cacciatore e dalle
pecore, leggendo nelle rispettive strutture dati.
Abbiamo dato priorità alla fuga dal cacciatore se la distanza tra esso
e il lupo è minore di un certo valore.
Se questa condizione non si verifica, il lupo insegue la pecora più vicina.
Quando il lupo raggiunge la pecora, attiva il relativo flag di vita/morte.
Se il cacciatore raggiunge il lupo, gli attiva il flag di vita o morte
e il lupo, notando l'attivazione, muore.
\layout Subparagraph
Cacciatore
\layout Standard
Il cacciatore è un unico task che nasce premendo il tasto
\begin_inset Quotes eld
\end_inset
c
\begin_inset Quotes erd
\end_inset
da tastiera e si muove nello schermo, all'interno del perimetro prestabilito,
controllato dall'utente tramite il mouse.
Lo scopo del cacciatore è quello di raggiungere i lupi ed ucciderli prima
che questi ammazzino tutte le pecore.
\layout Standard
Quando il cacciatore raggiunge il lupo, attiva il relativo flag di vita/morte.
\layout Subparagraph
Main
\layout Standard
All'interno del main abbiamo inserito le inizializzazioni del mouse per
il task cacciatore, del semaforo di mutua esclusione per l'accesso a video,
delle strutture contenute nei vettori (semafori privati e posizione) e
della grafica (creazione del perimetro per il movimento dei task e visualizzazi
one delle istruzioni).
Abbiamo definito il modello di task da utilizzare e premendo i tasti corrispond
enti a pecora, lupo e cacciatore, abbiamo creato i vari task.
Premendo invece il tasto
\begin_inset Quotes eld
\end_inset
Esc
\begin_inset Quotes erd
\end_inset
si esce dal programma.
\layout Subparagraph
Altre funzioni
\layout Itemize
Draw_obj: funzione chiamata dai singoli task per disegnare i lupi e le pecore
accedendo a video in mutua esclusione .
\layout Itemize
my_mouse_handler: funzione richiamata dal task cacciatore per gestire lo
spostamento del cursore del mouse a video e per l'aggiornamento della posizione
del cacciatore.
\layout Itemize
bye_bye: funzione che termina il programma chiudendo la libreria grafica
e quella del mouse.
Stampa inoltre a video la scritta
\begin_inset Quotes eld
\end_inset
Bye bye!
\begin_inset Quotes erd
\end_inset
.
\layout Paragraph
CONCLUSIONI
\layout Standard
Dopo aver verificato la corettezza ed il funzionamento del programma abbiamo
provato a cambiare i parametri del periodo e del wcet di ogni task.
In particolare abbiamo notato che diminuendo il wcet sotto il valore di
30 us, quando tutti i task erano stati creati, il programma terminava con
un errore di wcet-violation.
Per avere un buon margine di sicurezza sulle possibili configurazioni,
abbiamo scelto un valore di wcet pari a 100 us.
Per quanto riguarda il periodo lo abbiamo impostato a 40000 us perchè diminuend
olo i task si muovevano troppo velocemente per avere un programma giocabile.
Sotto i 1000 us anche la visibilità dei vari task era ridotta al minimo.
\layout Standard
E' possibile creare un numero di task (pecore + lupi + cacciatore) anche
più alto di quello massimo impostato nel programma, a condizione che la
somma di tutti i wcet sia minore del periodo specificato, con un certo
margine.
\the_end