Processo Synchronizzazione: problema della sezione critica nel sistema operativo

Cos'è il processo Syncronizzazione?

Processo Synccronizzazione è il compito di coordinare l'esecuzione dei processi in modo che due processi non possano avere accesso agli stessi dati e risorse condivisi.

È particolarmente necessario in un sistema multiprocesso quando più processi vengono eseguiti insieme e più di un processo tenta di ottenere l'accesso alla stessa risorsa o dati condivisi contemporaneamente.

Ciò può portare all'incoerenza dei dati condivisi. Quindi la modifica apportata da un processo non si riflette necessariamente quando altri processi hanno avuto accesso agli stessi dati condivisi. Per evitare questo tipo di incoerenza dei dati, i processi devono essere sincronizzati tra loro.

Come processo Syncl'armonizzazione funziona?

Ad esempio, il processo A modifica i dati in una posizione di memoria mentre un altro processo B sta tentando di leggere i dati da stesso posizione di memoria. C'è un'alta probabilità che i dati letti dal secondo processo siano errati.

Processo Syncl'arronizzazione funziona

Sezioni di un programma

Ecco quattro elementi essenziali della sezione critica:

  • Sezione di ingresso: Fa parte del processo che decide l'ingresso di un particolare processo.
  • Sezione critica: Questa parte consente a un processo di inserire e modificare la variabile condivisa.
  • Sezione di uscita: La sezione di uscita consente agli altri processi in attesa nella sezione di ingresso di entrare nelle sezioni critiche. Controlla inoltre che un processo che ha terminato la sua esecuzione debba essere rimosso tramite questa sezione.
  • Sezione rimanente: Tutte le altre parti del Codice, che non si trovano nelle sezioni Critica, Entrata e Uscita, sono conosciute come Sezione Resto.

Cos'è il problema della sezione critica?

Una sezione critica è un segmento di codice a cui può accedere un processo di segnale in un momento specifico. La sezione è costituita da risorse di dati condivise a cui è richiesto l'accesso da parte di altri processi.

  • L'ingresso nella sezione critica è gestito dalla funzione wait() ed è rappresentato come P().
  • L'uscita da una sezione critica è controllata dalla funzione signal(), rappresentata come V().

Nella sezione critica è possibile eseguire un solo processo. Altri processi, in attesa di eseguire la loro sezione critica, devono attendere finché il processo corrente non completa la sua esecuzione.

Regole per la sezione critica

La sezione critica deve applicare tutte e tre le regole:

  • Esclusione reciproca: La mutua esclusione è un tipo speciale di semaforo binario utilizzato per controllare l'accesso alla risorsa condivisa. Include un meccanismo di ereditarietà delle priorità per evitare problemi estesi di inversione delle priorità. Non è possibile eseguire più di un processo alla volta nella sua sezione critica.
  • Progress: Questa soluzione viene utilizzata quando nessuno è nella sezione critica e qualcuno vuole entrare. Quindi quei processi non nella sezione promemoria dovrebbero decidere chi dovrebbe entrare, in un tempo finito.
  • Attesa vincolata: Quando un processo richiede di entrare nella sezione critica, esiste un limite specifico al numero di processi che possono entrare nella sua sezione critica. Pertanto, quando viene raggiunto il limite, il sistema deve consentire alla richiesta al processo di entrare nella sua sezione critica.

Soluzioni alla sezione critica

In corso Synchronizzazione, la sezione critica gioca il ruolo principale affinché il problema debba essere risolto.

Ecco alcuni metodi ampiamente utilizzati per risolvere il problema della sezione critica.

Soluzione Peterson

La soluzione di Peterson è una soluzione ampiamente utilizzata per problemi di sezione critica. Questo algoritmo è stato sviluppato dallo scienziato informatico Peterson, ecco perché è chiamato soluzione di Peterson.

In questa soluzione, quando un processo viene eseguito in uno stato critico, l'altro processo esegue solo il resto del codice e può accadere il contrario. Questo metodo aiuta inoltre a garantire che nella sezione critica venga eseguito un solo processo in un momento specifico.

Esempio

Soluzioni alla sezione critica

PROCESS Pi
FLAG[i] = true
while( (turn != i) AND (CS is !free) ){ wait;
}
CRITICAL SECTION FLAG[i] = false
turn = j; //choose another process to go to CS
  • Supponiamo che ci siano N processi (P1, P2, … PN) e che ogni processo ad un certo punto del tempo richieda di entrare nella sezione critica
  • Viene mantenuto un array FLAG[] di dimensione N che per impostazione predefinita è falso. Quindi, ogni volta che un processo richiede di entrare nella sezione critica, deve impostare il suo flag su vero. Ad esempio, se Pi vuole entrare, imposterà FLAG[i]=TRUE.
  • Un'altra variabile denominata TURN indica il numero del processo che attualmente desidera entrare nel CS.
  • Il processo che entra nella sezione critica mentre esce cambierà il TURN in un altro numero dall'elenco dei processi pronti.
  • Esempio: il turno è 2 quindi P2 entra nella sezione Critica e mentre esce turno=3 e quindi P3 esce dal ciclo di attesa.

Synccronizzazione Hardware

Alcune volte i problemi della Sezione Critica vengono risolti anche dall'hardware. Alcuni sistemi operativi offrono una funzionalità di blocco in cui un processo acquisisce un blocco quando entra nella sezione critica e rilascia il blocco dopo averla lasciata.

Pertanto, quando un altro processo tenta di accedere alla sezione critica, non sarà in grado di accedervi poiché è bloccato. Può farlo solo se è libero acquisendo il blocco stesso.

Blocchi mutex

SyncL'arronizzazione dell'hardware non è un metodo semplice da implementare per tutti, quindi è stato introdotto anche un metodo software rigoroso noto come Mutex Locks.

In questo approccio, nella sezione di ingresso del codice, si ottiene un LOCK sulle risorse critiche utilizzate all'interno della sezione critica. Nella sezione di uscita il lucchetto viene rilasciato.

Semaphore Soluzione

Semaphore è semplicemente una variabile non negativa e condivisa tra i thread. È un altro algoritmo o soluzione al problema della sezione critica. È un meccanismo di segnalazione e un thread in attesa su un semaforo, che può essere segnalato da un altro thread.

Utilizza due operazioni atomiche, 1) wait e 2) signal per la sincronizzazione del processo.

Esempio

WAIT ( S ):
while ( S <= 0 );
S = S - 1;
SIGNAL ( S ):
S = S + 1;

Sintesi

  • La sincronizzazione dei processi è l'attività di coordinamento dell'esecuzione dei processi in modo che due processi non possano avere accesso agli stessi dati e risorse condivisi.
  • Quattro elementi della sezione critica sono 1) Sezione di ingresso 2) Sezione critica 3) Sezione di uscita 4) Sezione di promemoria
  • Una sezione critica è un segmento di codice a cui può accedere un processo di segnale in un momento specifico.
  • Tre regole obbligatorie che devono essere applicate dalla sezione critica sono: 1) Mutua esclusione 2) Soluzione del processo 3) Attesa vincolata
  • La mutua esclusione è un tipo speciale di semaforo binario utilizzato per controllare l'accesso alla risorsa condivisa.
  • La soluzione di processo viene utilizzata quando nessuno si trova nella sezione critica e qualcuno vuole entrare.
  • Nella soluzione di attesa vincolata, dopo che un processo ha effettuato una richiesta per entrare nella sua sezione critica, esiste un limite al numero di altri processi che possono entrare nella sua sezione critica.
  • La soluzione di Peterson è una soluzione ampiamente utilizzata per problemi di sezione critica.
  • I problemi della sezione critica vengono risolti anche tramite la sincronizzazione dell'hardware
  • SyncL'arronizzazione dell'hardware non è un metodo semplice da implementare per tutti, quindi è stato introdotto anche il rigoroso metodo software noto come Mutex Locks.
  • Semaphore è un altro algoritmo o soluzione al problema della sezione critica.

Riassumi questo post con: