Esempio di compitino


Domanda 1:

Elencare almeno 3 circostanze che possono causare la transizione di un processo da stato di bloccato a stato di pronto. Motivare la risposta.


Soluzione :
Esecuzione di una up() sul semaforo su cui il processo è bloccato, arrivo di una interruzione da un dispositivo che ha completato una richiesta,
uscita di un processo da un monitor su cui il processo è in attesa.


Domanda 2:

Discutere la differenza fra process table e user area in un sistema Unix. In quale delle due strutture si trova l'immagine dei registri del processore?

 

Soluzione:

La process table e la user area raccologono le informazioni relative ai processi nei sistemi Unix. La differenza fondamentale è che la process table viene tenuta sempre in memoria mentre la user area viene copiata su disco quando il processo è ‘swapped out’. Tipicamente la process table contiene: la signal mask, l’immagine della memoria, il pid del processo e tutte le informazioni che servono anche quando il processo non può passare in esecuzione. Esempi di informazioni contenute nella user area sono invece l’array dei gestori dei segnali, la tabella dei descrittori dei file, la kernel stack.

L’immagine dei registri si trova nella user area.

 

Esercizio 1:
Si consideri il problema dei lettori e scrittori, con riferimento alla soluzione proposta nel testo e riportata di seguito:

 

semaphore mutex=1;

semaphore db=1;

int rc=0;

 

void reader (void) {

while (TRUE) {

                down(&mutex);                                     

                rc=rc+1;

                if (rc==1) down(&db);    (-2-)

up(&mutex);                                                                                                                                                                  

                read_DataBase();

                down(&mutex);                     

                rc=rc-1;

                if (rc==0) up(&db);        (-3-)

up(&mutex);                                                                                                                                                                  

                use_data_read();

}

}

void writer(void) {

                while (TRUE) {

                               Think_Up_Data();

                down(&db);                    (-0-)

 

                write_data_base();

                up(&db);                        (-1-)

}

}

 

Dire cosa accade se:

a)si eliminano gli statement (-0-) e (-1-)

b)si elimina lo statement (-2-)

c)si elimina lo statement (-3-)

 

Soluzione:

a)       si possono avere corse critiche (interferenze) fra i lettori e gli scrittori e fra più scrittori

b)       i lettori possono accedere al database mentre uno scrittore lo sta modificando

c)       gli scrittori possono rimanere bloccati per sempre in attesa su &db

 

Esercizio 2

 Supponiamo di ricevere 5 job (A,B,C,D,E)  tali che:

                job          Tempo stimato     Tempo di arrivo

                A                            26                           0

                B                             60                           1

                C                             5                             2

                D                            8                             3

                E                             10                           4

Descrivere la sequenza di esecuzione dei job in CPU (ad es. tramite Gantt chart) e calcolare l'istante 

in cui ogni job completa il suo task e il relativo tempo totale di completamento ottenuto con:

  1.  scheduling FIFO 

  2.  scheduling round-robin con quanto di tempo 5

  3.  scheduling a code multiple di priorita' con quanto di tempo 5,
     considerando  le seguenti priorità:  A: 3, B: 4, C: 1, D: 2, E: 2  (4 più alta)
     e supponendo che lo scheduler controlli le code  e possa prelazionare la CPU ogni secondo 

 

Si ignori il tempo impiegato nel context-switching.

 

Soluzione.


1. Viene prima eseguito A, quindi B, ecc.

A partire dall’istante 0, l'istante di completamento con scheduling FIFO è:


Job A: 26   (quindi tempo totale compl. = 26)

Job B: 86  (tc=85)

Job C: 91 (tc=89)

Job D: 99 (tc=96)

Job E: 109 (tc=105)

 

2.  A viene eseguito per 5 unità, B x 5, C x 5, D x 5, E x 5, quindi nuovamente A x 5, B x 5, D x 3 (completato), E x 5 (completato),

A x 5, B x 5, A x 5, B x 5, A x 5, B x 5, A x 1, B x le restanti 35 unità.

 

Quindi a partire dall’istante 0, l'istante di completamento con scheduling Round Robin è:


Job A: 74 (tc=...)

Job B: 109

Job C: 15

Job D: 38

Job E: 43

 

3.  Usiamo Gantt chart

Tempo 
0-1
(1unita)
1-61
(12quanti)
61-86
(5quanti)
86-91
(1quanto)
91-96
(1quanto)
96-99
(3unita)
99-104
(1quanto)
104-109
(1quanto)
Job in
CPU
A
B A
D
E
D
E
C



Quindi istante di completamento (a partire dal tempo zero):


Job A: 86 

Job B: 61

Job C: 109

Job D: 99

Job E: 104


Esercizio 3

Supponiamo di ricevere 5 job (A,B,C,D,E)  tali che:
                job          Tempo stimato     Tempo di arrivo    Priorita
                A                            8                          0                     2

                B                             6                           1                    3
                C                             3                           2                    2
                D                            4                           3                    2
                E                             3                           4                    2

Descrivere la sequenza di esecuzione dei job in CPU (ad es. tramite Gantt chart) e calcolare l'istante 

in cui ogni job completa il suo task e il relativo tempo totale di completamento ottenuto con:

 

Scheduling a code multiple di priorita' e feedback dove ogni coda e' gestita con la strategia FCFS.
Il feedback è definito come segue: la priorità diminuisce di 1 (fino al livello base 1) se si passano più di  6 unità di tempo (consecutive)

 in CPU ed aumenta di 1 per ogni 6 unità di tempo passate in attesa in una qualsiasi coda.

 

Soluzione



Lo scheduler controlla le code (prelaziona la CPu se necessario) ogni unita' di tempo
Utilizzamo un Gantt chart:


Tempo (*)

0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 24


Stato dei Job
A
2

3
2
3
3

B

3

C

2
3
3
3
4
4

D

2
3
4

E

2
3
4
4


Istante di completamento:

A 24
B 7
C 23
D 19
E 22


Nota:
 La preemption avviene al tempo 13: C sostituisce A; e al tempo 15: D sostituisce C;
 Al tempo 19: la coda di priorita 4 ha E in testa e C in coda (C entra nella coda dopo E)

Legenda:

(*)  N indica l'intervallo [N,N+1] (ogni casella = 1 unita di tempo)


Non presente
N
Esecuzione in CPU (con priorita N)
N
Attesa nella coda a priorita N

Completato