Domanda sull'algoritmo della sezione critica
-
06-07-2019 - |
Domanda
I Concetti relativi al sistema operativo 6a edizione presentano un algoritmo trival per implementare la sezione ciritica.
do{
while (turn != i);
critical section
trun = j;
remainder section
} while(1);
Nota , Pi è il processo con identificatore i, Pj è il processo con identificatore j. Per semplificare la domanda, il libro limita i, j a 0 e 1, i due processi ambiente costruttivo.
Domanda1 è, la dose di questo algoritmo annulla il requisito Progresso che è uno dei tre requisiti per la soluzione della sezione ciritica?
Secondo me, quando Pi è nella sua sezione rimanente, non può partecipare alla decisione se Pj può entrare nella sezione critica, quindi è vincolato al requisito.
O la mia comprensione dei requisiti di progresso è totalmente sbagliata, quindi se Pi si ritirava dalla sezione rimanente, non poteva entrare immediatamente nella sezione cirtica, questo alg violava la regola.
Domanda 2 ,
Se turn == 0 e P1 è pronto per entrare nella sua sezione critica, P1 non può farlo così, anche pensato che P0 potesse essere nel suo sezione restante
Qual è il significato di questa affermazione? Per quanto potessi pensare, non riuscivo a capire perché turn == 0 e p0 nella sua sezione rimanente potrebbero esistere contemporaneamente ...
Quindi questa affermazione è sbagliata?
Soluzione
Supponi che turn = 0
inizialmente. P0 fa la sua sezione critica e imposta turn = 1
. Ora, P1 deve eseguire la sua sezione critica prima che P0 possa eseguire di nuovo la sua sezione. Ma solo perché entrambi i thread hanno una sezione critica non significa che vorranno alternare il loro uso in questo modo & # 8212; infatti, P1 potrebbe non fare mai il suo turno. (E nel caso generale, non puoi determinarlo al momento della compilazione .)
Quindi sostanzialmente il problema è che i thread sono costretti ad alternare i loro turni , anche se uno di loro in realtà non vuole entrare nella sua sezione critica per un tempo indefinitamente lungo.
A proposito, la tua risposta alla domanda 1 è corretta. L'algoritmo non fallisce la condizione Progresso , non riesce la condizione Attesa limitata .