Cosa succede se un'attività attende una risorsa nell'algoritmo STCF?

0

Sono uno studente di informatica e ho un esame di domani sui sistemi operativi. Ho le domande d'esame degli anni passati e c'è uno scenario in una domanda. Ci sono due attività nella coda pronta per l'uso (non so come si chiama). E l'algoritmo di pianificazione è il più breve tempo di completamento prima (STCF). E due semafori, S1 e S2. Consente di chiamare l'attività T1 e l'attività due T2. Ecco lo scenario:

T1

{
    down(S1);
    // other codes
    up(S1);
}

T2

{
    down(S1);
    down(S2);
    //Other code...
    up(S2);
    up(S1);
}

L'attività T1 arriva alla coda ready-to-run al momento del 0 ° secondo e impiega 10 secondi per essere completata. T2 arriva in coda read-to-run al 3o secondo e impiega 3 secondi per essere completato.

Qui è dove mi sono bloccato. Il T1 viene eseguito per 3 secondi, dopodiché verrà prerogato, poiché T2 arriva e il suo tempo di completamento è minore. T2 attenderà che il semaforo S1 sia alzato per procedere ulteriormente. Cosa farà il processore in questa situazione? Passerà a T1 o continuerà a tentare di elaborare T2 poiché il suo tempo di completamento è minore e, di conseguenza, deadlock?

    
posta Bora Semiz 25.11.2015 - 12:31
fonte

1 risposta

0

Supponendo che tu stia utilizzando uno schedulatore semi-decente, se un'attività tenta di rivendicare un semaforo che non è disponibile, allora quell'attività viene messa in uno stato "bloccato" o "in attesa" e non sarà considerata "pronta per eseguire "fino a quando il semaforo che sta aspettando diventa disponibile. Quindi lo scheduler controlla di nuovo la coda "ready to run" e seleziona un'attività da quelli in coda da eseguire.

Quindi, nel tuo esempio, quando T2 colpisce il semaforo S1 diventa bloccato. A quel punto solo T1 è "pronto per essere eseguito", quindi l'attività verrà pianificata in quanto ha il tempo di completamento più basso tra le attività che potrebbero far progredire quando viene eseguita.
Quando T1 rilascia il semaforo S1 (ups it), lo scheduler riporterà T2 nella coda "ready to run" e deciderà di nuovo quale task eseguire.

    
risposta data 25.11.2015 - 13:54
fonte

Leggi altre domande sui tag