Schedulazione e risveglio di processi

di il
4 risposte

Schedulazione e risveglio di processi

Buongiorno, una domanda relativa al cambiamento di stato dei processi.
Supponiamo che una funzione metta in sleep un processo (per esempio perché ha trovato un mutex a zero) e dopo un po' il mutex viene messo a 1 da un altro processo: a questo punto il processo in sleep dovrebbe risvegliarsi. Ma è il kernel che lo risveglia? E, se sì, in che modo? Con un segnale catturabile solo dalla funzione di attesa? E, sempre se è vero che sia il kernel a risvegliarlo, qual è il meccanismo di controllo delle condizioni di risveglio? Un modulo del kernel controlla le strutture relative ai semafori ad ogni interruzione del timer e, verificate le condizioni, toglie il processo dallo stato di sleep?

Grazie

4 Risposte

  • Re: Schedulazione e risveglio di processi

    Forse ho capito: è il kernel che mette in running il processo e quindi sarà disponibile fra i processi eseguibili per lo scheduler. Se ho capito bene, però, mi sorge la domanda, legata a quella che ho fatto prima: il kernel controlla lo stato dei processi ad ogni interruzione destinata a far eseguire lo scheduler?
  • Re: Schedulazione e risveglio di processi

    Certamente.
    Cioe', quasi: ovviamente non di tutti i processi, ma solo di quelli che sono in relazione con l'oggetto di sincronizzazione che ha cambiato stato.

    Ovviamente il in che modo e' semplice/complicato a seconda di quanto vuoi andare in dettaglio.

    Spiegazione semplice:

    Lo scheduler ha la lista dei descrittor dei processi attivi. Quando un processo si mette in attesa su un oggetto di sincronizzazione, il suo descrittore viene rimosso dalla lista dei processi attivi ed inserito nella lista dei processi in attesa su quell'oggetto.

    Quando il processo viene risvegliato, perche' il corrispondente oggetto di sincronizzazoine ha cambiato stato, il suo descrittore viene rimosso dalla lista dei processi in attesa e reinserito nella lista dei processi attivi.

    Et voila'!

    Tutto questo, e molto altro ancora, e' spiegato nei libri che trattano i Sistemi Operativi.
  • Re: Schedulazione e risveglio di processi

    Grazie, mi basta questa spiegazione, non voglio diventare un esperto di Sistemi Operativi, voglio solo capirci qualcosa a grandi linee. Un'altra cosa: una read bloccante (per esempio su una coda) mette il processo in sleep quando non ci sono dati e il processo stesso viene risvegliato quando sono presenti dati oppure il processo rimane in running ed è la read stessa che controlla ogniqualvolta lo scheduler mette in esecuzione il processo?
  • Re: Schedulazione e risveglio di processi

    migliorabile ha scritto:


    Certamente.
    Cioe', quasi: ovviamente non di tutti i processi, ma solo di quelli che sono in relazione con l'oggetto di sincronizzazione che ha cambiato stato.

    Ovviamente il in che modo e' semplice/complicato a seconda di quanto vuoi andare in dettaglio.

    Spiegazione semplice:

    Lo scheduler ha la lista dei descrittor dei processi attivi. Quando un processo si mette in attesa su un oggetto di sincronizzazione, il suo descrittore viene rimosso dalla lista dei processi attivi ed inserito nella lista dei processi in attesa su quell'oggetto.

    Quando il processo viene risvegliato, perche' il corrispondente oggetto di sincronizzazoine ha cambiato stato, il suo descrittore viene rimosso dalla lista dei processi in attesa e reinserito nella lista dei processi attivi.

    Et voila'!

    Tutto questo, e molto altro ancora, e' spiegato nei libri che trattano i Sistemi Operativi.
    Una curiosità su quanto da te detto: il kernel sposta il descrittore del processo in relazione con il semaforo dalla lista dei processi in attesa alla lista dei processi eseguibili nel momento in cui esegue la chiamata di sistema che incrementa il contatore del semaforo?
Devi accedere o registrarti per scrivere nel forum
4 risposte