Subversion Repositories shark

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1668 pj 1
#LyX 1.3 created this file. For more info see http://www.lyx.org/
2
\lyxformat 221
3
\textclass article
4
\language english
5
\inputencoding auto
6
\fontscheme default
7
\graphics default
8
\paperfontsize default
9
\papersize Default
10
\paperpackage a4
11
\use_geometry 0
12
\use_amsmath 0
13
\use_natbib 0
14
\use_numerical_citations 0
15
\paperorientation portrait
16
\secnumdepth 3
17
\tocdepth 3
18
\paragraph_separation indent
19
\defskip medskip
20
\quotes_language english
21
\quotes_times 2
22
\papercolumns 1
23
\papersides 1
24
\paperpagestyle default
25
 
26
\layout Title
27
 
28
ATTENTI AL LUPO !!!
29
\layout Description
30
 
31
Progetto per il corso di Sistemi Operativi Real Time a.a.
32
 2003-2004
33
\layout Description
34
 
35
Gruppo 1: Laura Azzolini, Alessandro Foglini, Alessandro Pellegrini
36
\layout Paragraph
37
 
38
INTRODUZIONE
39
\layout Standard
40
 
41
Il progetto da noi sviluppato prevede l'implementazione di più task che
42
 lavorano in maniera concorrente in ambiente S.Ha.R.K..
43
\layout Standard
44
 
45
L'idea nasce dall'esempio fornito dal programma fly, che crea ad ogni pressione
46
 di un tasto delle
47
\begin_inset Quotes eld
48
\end_inset
49
 
50
mosche
51
\begin_inset Quotes erd
52
\end_inset
53
 
54
 che fluttuano casualmente all'interno di una scatola bidimensionale, senza
55
 però interagire fra loro.
56
 Il nostro progetto era orientato a dare un certo comportamento a tali mosche,
57
 in particolare potevamo scegliere o di creare un mondo virtuale del tutto
58
 automatico o permettere all'utente di interagire direttamente con i processi
59
 in esecuzione in maniera tale da modificare il loro comportamento.
60
 Secondo noi non era trascurabile l'interazione con l'utente, in particolare,
61
 in questa maniera ci sembrava di poter meglio comprendere l'ambiente Real
62
 Time.
63
 Da quì nasce l'idea di avere un task che funge da inseguitore di oggetti
64
 che si muovono casualmente (come le mosche) e di un ulteriore task comandato
65
 dall'utente che influenzi il movimento dell'inseguitore.
66
 Ecco come hanno preso vita il
67
\begin_inset Quotes eld
68
\end_inset
69
 
70
Lupo
71
\begin_inset Quotes erd
72
\end_inset
73
 
74
, la
75
\begin_inset Quotes eld
76
\end_inset
77
 
78
Pecora
79
\begin_inset Quotes erd
80
\end_inset
81
 
82
 ed il
83
\begin_inset Quotes eld
84
\end_inset
85
 
86
Cacciatore
87
\begin_inset Quotes erd
88
\end_inset
89
 
90
.
91
\layout Paragraph
92
 
93
ARCHITETTURA
94
\layout Standard
95
 
96
La parte Real Time dell'architettura, prevede la condivisione di più strutture
97
 dati per il controllo della posizione dei task in esecuzione, oltre alla
98
 condivisione della grafica.
99
 In particolare usiamo dei semafori per governare l'accesso alle strutture
100
 condivise.
101
 I dati condivisi sono stati realizzati con vettori di stutture, così che
102
 ogni pecora , ogni lupo ed il cacciatore possiedono posizioni cartesiane,
103
 un flag che segna se é stato ucciso o no ed un semaforo privato.
104
 Abbiamo limitato l'utilizzo della mutua esclusione solo alla singola struttura
105
 del vettore stesso, così da non bloccare le altre strutture nelle fasi
106
 di lettura/scrittura.
107
 Con l'utilizzo di tali vettori è stato possibile gestire la lettura/scrittura
108
 dei dati propri di ogni task e l'accesso alle strutture dati.
109
\layout Subparagraph
110
 
111
Pecora
112
\layout Standard
113
 
114
La pecora è un task che nasce premendo il tasto
115
\begin_inset Quotes eld
116
\end_inset
117
 
118
p
119
\begin_inset Quotes erd
120
\end_inset
121
 
122
 da tastiera e si muove nello schermo in maniera casuale rimanendo però
123
 all'interno di un perimetro prestabilito.
124
\layout Standard
125
 
126
Alla creazione, ad ogni task pecora viene assegnata la prima posizione libera
127
 nel vettore di strutture, alla quale accede in mutua esclusione con gli
128
 altri task pecora presenti e con i task lupo.
129
 E' possibile creare pecore fino a che il vettore non si riempie (max quattro
130
 pecore).
131
 Nella struttura che gli è stata assegnata, il task aggiorna le proprie
132
 coordinate ad ogni spostamento.
133
 L'interazione con gli altri task viene realizzata tramite il flag di vita
134
 o morte; in particolare quando un lupo ha raggiunto la pecora, attiva il
135
 flag e la pecora, notando l'attivazione muore.
136
 
137
\layout Subparagraph
138
 
139
Lupo
140
\layout Standard
141
 
142
Il lupo è un task che nasce premendo il tasto
143
\begin_inset Quotes eld
144
\end_inset
145
 
146
l
147
\begin_inset Quotes erd
148
\end_inset
149
 
150
 da tastiera e si muove nello schermo, all'interno del perimetro prestabilito,
151
 scappando dal task cacciatore o inseguendo il task pecora più vicino.
152
 Se non sono presenti né il cacciatore né le pecore, il lupo rimane nella
153
 sua tana.
154
\layout Standard
155
 
156
Alla creazione, ad ogni task lupo viene assegnata la prima posizione libera
157
 nel vettore di strutture, alla quale accede in mutua esclusione con gli
158
 altri task lupo presenti e con il task cacciatore.
159
 A seconda della posizione assunta nel vettore, il lupo si muoverà a velocità
160
 crescente.
161
 E' possibile creare lupi fino a che il vettore non si riempie (max tre
162
 lupi).
163
 Nella struttura che gli è stata assegnata, il task aggiorna le proprie
164
 coordinate ad ogni spostamento.
165
 L'interazione con gli altri task viene realizzata tramite il controllo
166
 delle posizioni e il relativo calcolo della distanza dal cacciatore e dalle
167
 pecore, leggendo nelle rispettive strutture dati.
168
 Abbiamo dato priorità alla fuga dal cacciatore se la distanza tra esso
169
 e il lupo è minore di un certo valore.
170
 Se questa condizione non si verifica, il lupo insegue la pecora più vicina.
171
 Quando il lupo raggiunge la pecora, attiva il relativo flag di vita/morte.
172
 Se il cacciatore raggiunge il lupo, gli attiva il flag di vita o morte
173
 e il lupo, notando l'attivazione, muore.
174
 
175
\layout Subparagraph
176
 
177
Cacciatore
178
\layout Standard
179
 
180
Il cacciatore è un unico task che nasce premendo il tasto
181
\begin_inset Quotes eld
182
\end_inset
183
 
184
c
185
\begin_inset Quotes erd
186
\end_inset
187
 
188
 da tastiera e si muove nello schermo, all'interno del perimetro prestabilito,
189
 controllato dall'utente tramite il mouse.
190
 Lo scopo del cacciatore è quello di raggiungere i lupi ed ucciderli prima
191
 che questi ammazzino tutte le pecore.
192
\layout Standard
193
 
194
Quando il cacciatore raggiunge il lupo, attiva il relativo flag di vita/morte.
195
 
196
\layout Subparagraph
197
 
198
Main
199
\layout Standard
200
 
201
All'interno del main abbiamo inserito le inizializzazioni del mouse per
202
 il task cacciatore, del semaforo di mutua esclusione per l'accesso a video,
203
 delle strutture contenute nei vettori (semafori privati e posizione) e
204
 della grafica (creazione del perimetro per il movimento dei task e visualizzazi
205
one delle istruzioni).
206
 Abbiamo definito il modello di task da utilizzare e premendo i tasti corrispond
207
enti a pecora, lupo e cacciatore, abbiamo creato i vari task.
208
 Premendo invece il tasto
209
\begin_inset Quotes eld
210
\end_inset
211
 
212
Esc
213
\begin_inset Quotes erd
214
\end_inset
215
 
216
 si esce dal programma.
217
 
218
\layout Subparagraph
219
 
220
Altre funzioni
221
\layout Itemize
222
 
223
Draw_obj: funzione chiamata dai singoli task per disegnare i lupi e le pecore
224
 accedendo a video in mutua esclusione .
225
\layout Itemize
226
 
227
my_mouse_handler: funzione richiamata dal task cacciatore per gestire lo
228
 spostamento del cursore del mouse a video e per l'aggiornamento della posizione
229
 del cacciatore.
230
\layout Itemize
231
 
232
bye_bye: funzione che termina il programma chiudendo la libreria grafica
233
 e quella del mouse.
234
 Stampa inoltre a video la scritta
235
\begin_inset Quotes eld
236
\end_inset
237
 
238
Bye bye!
239
\begin_inset Quotes erd
240
\end_inset
241
 
242
.
243
 
244
\layout Paragraph
245
 
246
CONCLUSIONI
247
\layout Standard
248
 
249
Dopo aver verificato la corettezza ed il funzionamento del programma abbiamo
250
 provato a cambiare i parametri del periodo e del wcet di ogni task.
251
 In particolare abbiamo notato che diminuendo il wcet sotto il valore di
252
 30 us, quando tutti i task erano stati creati, il programma terminava con
253
 un errore di wcet-violation.
254
 Per avere un buon margine di sicurezza sulle possibili configurazioni,
255
 abbiamo scelto un valore di wcet pari a 100 us.
256
 Per quanto riguarda il periodo lo abbiamo impostato a 40000 us perchè diminuend
257
olo i task si muovevano troppo velocemente per avere un programma giocabile.
258
 Sotto i 1000 us anche la visibilità dei vari task era ridotta al minimo.
259
\layout Standard
260
 
261
E' possibile creare un numero di task (pecore + lupi + cacciatore) anche
262
 più alto di quello massimo impostato nel programma, a condizione che la
263
 somma di tutti i wcet sia minore del periodo specificato, con un certo
264
 margine.
265
\the_end