Sei sulla pagina 1di 4

Corso di Sistemi Operativi 2011

Esercizio sul Context Switch


Arsenico13

20 Aprile 2011

1 Situazione Iniziale
Abbiamo un sistema che utilizza Round Robin e supporta la chiamata a
sistema Yield la quale porta il processo chiamante a rilasciare la CPU. Ogni
processo ha il proprio PCB con i seguenti campi: P C, P S, R1 , R2 , R3 , R4 , SP .
Al tempo t sono presenti due processi, Pi e Pj . Pi è nello stato di
esecuzione mentre Pj è nello stato di pronto. In questo momento avviene la
chiamata alla funzione di servizio Yield. La situazione iniziale al tempo t è
la seguente:
(a) PCB Pi (b) PCB Pj (c) Stack Nucleo
Stato exec Stato pronto 1016 AAAA
PC 4100 PC A100 1015 ...
PS 16F2 PS 16F2 1014 ...
SP EF00 SP F000 ... ...
R1 1111 R1 A111 ... ...
R2 2222 R2 A222
R3 3333 R3 A333
R4 4444 R4 A444
(d) Reg. Utente (e) Reg. Nucleo (f) Reg. Speciali
SP EF00 SP 1016 PC 4FFF
R1 1100 R1 0000 PS 16F2
R2 2200 R2 0001
R3 3300 R3 0002
R4 4400 R4 0003
(g) Vett. Interruzione
Mem.Addr. 0425
PSW 275E

Table 1: Situazione al tempo t

1
2 Chiamata alla routine di servizio
Al tempo t+∆ avviene la chiamata alla ruotine di servizio Yield e l’esercizio
chiede il contenuto dei vari descrittori e di tutti i registri durante la fase di es-
trazione della prima istruzione durante la chiamata alla funzione d’interruzione.
+++I cambiamenti sono segnati in rosso.+++
Nei Reg. Speciali vengono caricati il PC e la PS relative all’interruzione
chiamata (in questo caso la Yield). Inoltre, ho inserito due dati nello stack
del nucleo e di conseguenza aggiorno lo SP nei Registri del Nucleo.
(a) PCB Pi (b) PCB Pj (c) Stack Nucleo
Stato exec Stato pronto 1016 AAAA
PC 4100 PC A100 1015 4FFF
PS 16F2 PS 16F2 1014 16F2
SP EF00 SP F000 ... ...
R1 1111 R1 A111 ... ...
R2 2222 R2 A222
R3 3333 R3 A333
R4 4444 R4 A444
(d) Reg. Utente (e) Reg. Nucleo (f) Reg. Speciali
SP EF00 SP 1014 PC 0425
R1 1100 R1 0000 PS 275E
R2 2200 R2 0001
R3 3300 R3 0002
R4 4400 R4 0003
(g) Vett. Interruzione
Mem.Addr. 0425
PSW 275E

Table 2: Situazione al tempo t+∆

3 Situazione al termine della routine


Al tempo t+∆+1 la funzione di servizio è stata terminata e siamo ad un
passo prima dell’IRET. Qual’è la situazione adesso?
+++I cambiamenti sono segnati in blu.+++
Ricordiamoci che la Yield è la funzione che fa rilasciare l’uso della CPU al
processo che la chiama. In questo caso è stato Pi ad effettuare la chiamata
e quindi dovrà passare nello stato di pronto, mentre Pj dovrà andare in
esecuzione (quindi stato exec).
La Yield è stata eseguita e quindi il PC dei Reg. Speciali sarà stato
incrementato di ?? indirizzi.

2
Devo fare in modo che vada in esecuzione Pj senza problemi e salvare
lo stato di Pi in modo tale che quando verrà richiamato sia tutto a posto
salvando i suoi dati nel proprio PCB.
E’ necessario ripristinare TUTTI i registri con lo stato di Pj per man-
darlo in esecuzione.
(a) PCB Pi (b) PCB Pj (c) Stack Nucleo
Stato pronto Stato exec 1016 AAAA
PC 4FFF PC A100 1015 A100
PS 16F2 PS 16F2 1014 16F2
SP EF00 SP F000 ... ...
R1 1111 R1 A111 ... ...
R2 2222 R2 A222
R3 3333 R3 A333
R4 4444 R4 A444
(d) Reg. Utente (e) Reg. Nucleo (f) Reg. Speciali
SP F000 SP 1014 PC 0425 + ??
R1 A111 R1 0000 PS 275E
R2 A222 R2 0001
R3 A333 R3 0002
R4 A444 R4 0003
(g) Vett. Interruzione
Mem.Addr. 0425
PSW 275E

Table 3: Situazione al tempo t+∆+1

4 Eseguiamo l’IRET
E siamo giunti all’ultimo passo di questo esercizio.
Al tempo t+∆+2 eseguiamo l’IRET. La domanda è sempre la stessa.
Cosa cambia nei vari registri arrivati a questo punto?
+++I cambiamenti sono segnati in verde.+++
Lo stack del nucleo va sui registri speciali e aggiorniamo lo SP dei Reg.
del nucleo.

3
(a) PCB Pi (b) PCB Pj (c) Stack Nucleo
Stato pronto Stato exec 1016 AAAA
PC 4FFF PC A100 1015 A100
PS 16F2 PS 16F2 1014 16F2
SP EF00 SP F000 ... ...
R1 1111 R1 A111 ... ...
R2 2222 R2 A222
R3 3333 R3 A333
R4 4444 R4 A444
(d) Reg. Utente (e) Reg. Nucleo (f) Reg. Speciali
SP F000 SP 1016 PC A100
R1 A111 R1 0000 PS 16F2
R2 A222 R2 0001
R3 A333 R3 0002
R4 A444 R4 0003
(g) Vett. Interruzione
Mem.Addr. 0425
PSW 275E

Table 4: Situazione al tempo t+∆+2

5 Fine
L’esercizio è terminato, spero vi sia d’aiuto. Provate a controllare che non
vi siano errori. Qualora ve ne siano, vi prego di segnalarmeli in modo che
io possa correggerli.
L’indirizzo è mail è: giacomo.monari at student.unife.it

Potrebbero piacerti anche