Condivisione della tecnologia

OS_Sincronizzazione e mutua esclusione

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

2024-07-04: Note di studio sulla sincronizzazione del sistema operativo e sulla mutua esclusione


Processi o programmi concorrenti perderanno la chiusura una volta eseguiti. Vale a dire, se due programmi utilizzano una risorsa condivisa in aree separate, i risultati di ciascuna esecuzione potrebbero essere diversi.
Inserisci qui la descrizione dell'immagine
Il motivo è che non abbiamo protetto la risorsa condivisa x a cui devono accedere sia il programma a che il programma b.


9.1 Concetti base di sincronizzazione e mutua esclusione

9.1.1 Rapporto di sincronizzazione

La relazione reciprocamente restrittiva è la sincronizzazione. Una semplice comprensione della sincronizzazione è che deve esserci un ordine nell'esecuzione dei processi.
Inserisci qui la descrizione dell'immagine


9.1.2 Rapporto mutuamente esclusivo

La relazione che si limita indirettamente a vicenda è chiamata relazione mutuamente esclusiva, ad es
Inserisci qui la descrizione dell'immagine


9.1.3 Risorse critiche

  • Le risorse a cui solo un processo può accedere in un periodo di tempo sono chiamate risorse critiche (o risorse esclusive)
  • Per la condivisione delle risorse critiche, dovrebbe essere utilizzata la mutua esclusione tra i processi

"Modello produttore e consumatore"
Inserisci qui la descrizione dell'immaginecontro+ +

首先把变量放到寄存器里面
register1 = counter;
接下来对寄存器进行一个自增
register1 = register1 + 1;
再把结果返回到counter里
counter = register1;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

contatore- -

首先把变量放到寄存器里面
register2 = counter;
接下来对寄存器进行一个自减
register2 = register2 - 1;
再把结果返回到counter里
counter = register2;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

Inserisci qui la descrizione dell'immagine

Soluzione: trattare il contatore come una risorsa critica e consentire al processo di accedere reciprocamente alla variabile contatore (imparerai il meccanismo di sincronizzazione in seguito)


9.1.4 Parte critica

Che si tratti di una risorsa critica per l'hardware o di una risorsa critica per il software, più processi devono accedervi reciprocamente.
Inserisci qui la descrizione dell'immagine
Queste aree sono essenzialmente codici

  • Zona di ingresso
  • sezione critica
  • Zona di uscita
  • area rimanente

9.1.5 I meccanismi di sincronizzazione dovrebbero seguire delle regole

  • Libero di entrare

Quando nessun processo si trova nella sezione critica, indica che le risorse della sezione critica sono inattive. Un processo che richiede di entrare nella sezione critica dovrebbe essere autorizzato ad entrare immediatamente nella propria sezione critica per utilizzare in modo efficace le risorse.

  • Se sei occupato, aspetta

Quando un processo esistente entra nella sezione critica, indica che è in corso l'accesso alla risorsa critica. Pertanto, altri processi che tentano di entrare nella sezione critica devono attendere per garantire un accesso mutuamente esclusivo alla risorsa critica.

  • attesa limitata

Per i processi che richiedono l'accesso a risorse critiche, dovrebbero garantire di poter entrare nella propria sezione critica entro un tempo limitato per evitare di cadere in uno stato di "attesa di morire".

  • cedi e aspetta

Quando un processo non può entrare nella propria sezione critica, il processore (CPU) dovrebbe essere rilasciato immediatamente per evitare che il processo cada in uno stato di "attesa occupata".


9.2 Meccanismo di sincronizzazione del software

9.2.1 Metodo del voto singolo

  • Imposta una variabile intera pubblica per indicare se c'è un processo nella sezione critica. Se c'è già un processo nella sezione critica, attenderà un controllo del ciclo nell'area di ingresso. Dopo che il processo ha lasciato la sezione critica, il flag verrà modificato nella zona di uscita.
  • Il metodo single-flag imposta una variabile intera pubblica turn per indicare il numero di processo a cui è consentito entrare nella sezione critica. Quando turn=0, il processo P0 può entrare nella sezione critica.
  • Quando turn=1, il processo P1 può entrare nella sezione critica, e quando esce dalla sezione critica, il diritto di utilizzare la sezione critica viene dato a un altro processo (quando Pi esce dalla sezione critica, turn=j)

Inserisci qui la descrizione dell'immagine
Inserisci qui la descrizione dell'immagine
两个进程必须交替进入临界区,若一个进程不再进入临界区,则另一个进程也无法进入临界区,违背了“空闲让进”准则


9.2.2 Metodo di controllo con doppio segno

Il metodo di primo controllo a doppio flag imposta un flag di array booleano[2] per contrassegnare la volontà di ciascun processo di entrare nella sezione critica flag[i]=true significa che Pi vuole entrare nella sezione critica.

  • Prima che Pi entri nella sezione critica, controlla prima se l'altra parte è entrata nella sezione critica. In tal caso, attendi
  • Altrimenti, imposta flag[i] su true prima di accedere alla sezione critica
  • Quando Pi esce dalla sezione critica, imposta flag[i] su false

Inserisci qui la descrizione dell'immagine

Inserisci qui la descrizione dell'immagine

  • Il ciclo while è equivalente al meccanismo del semaforo
  • Impostare la bandiera dell'altra parte equivale a cambiare il semaforo dell'altra parte.
  • Tuttavia, poiché entrambi i processi controllano prima il flag [guarda prima il semaforo], ed entrambi sono inizialmente falsi [entrambi semafori verdi], è possibile che i due processi passino il semaforo nello stesso momento ed entrino insieme nella sezione critica .

9.2.3 Metodo post-ispezione con doppio segno

Il metodo di post-controllo a doppio flag controllerà il flag dell'altra parte e quindi imposterà il proprio. Queste due operazioni non possono essere eseguite in una volta sola, quindi i due processi potrebbero entrare nella sezione critica allo stesso tempo. Pertanto, il post-controllo è stato ideato un metodo che prima imposta il proprio flag e poi controlla il flag dell'altra parte, se il flag dell'altra parte è vero, aspetta altrimenti, entra nella sezione critica

Inserisci qui la descrizione dell'immagine
Inserisci qui la descrizione dell'immagine


9.2.4 Algoritmo di Peterson

L'algoritmo di Peterson combinametodo del segno singoloEMetodo di controllo post-controllo con doppio segnoL'idea è di utilizzare flag[] per risolvere il problema di accesso mutuamente esclusivo e utilizzare turn per risolvere il problema della fame.

Se entrambe le parti sono in competizione per entrare nella sezione critica, il processo può essere consentito per dare all'altra parte l'opportunità di entrare nella sezione critica.
Prima che ciascun processo entri nella sezione critica, imposta la propria bandiera e imposta la bandiera di turno a cui è consentito entrare. Successivamente, rileva la bandiera dell'altra parte e gira allo stesso tempo per garantire che solo un processo possa entrare quando. entrambe le parti chiedono di entrare nella sezione critica contemporaneamente.
Inserisci qui la descrizione dell'immagine
Mancata rinuncia al diritto di attesa
Inserisci qui la descrizione dell'immagine


9.3 Meccanismo di sincronizzazione hardware

È difficile per il software risolvere il problema della mutua esclusione di ciascun processo dall'ingresso nella sezione critica e presenta grandi limitazioni. Pertanto, il computer fornisce alcune istruzioni hardware speciali per risolvere il problema.

9.3.1 Disattivare gli interrupt

(1) Definizione di disattivazione degli interrupt

  • La disattivazione degli interrupt è stata discussa nei principi di composizione del computer. Si riferisce alla modifica di un bit nel registro PSW nella CPU. Questo bit controllerà se la CPU corrente risponderà all'interrupt corrispondente. Questo interrupt può bloccare solo gli interrupt mascherabili. Gli interrupt non mascherabili non possono essere interrotti
  • La pianificazione dei processi nel sistema operativo si basa su interruzioni, come le interruzioni dell'orologio.
  • Durante l'esecuzione di un processo nella sezione critica, il sistema informatico interrompe gli interrupt, che non attiveranno la pianificazione e non ci sarà alcun cambio di processo o thread.

(2) Svantaggi della disattivazione degli interrupt

  • L'uso improprio dei terminali può portare a gravi conseguenze
  • Se il tempo di spegnimento è troppo lungo, ciò influenzerà l'efficienza del sistema.
  • Il metodo di disattivazione degli interrupt non si applica ai sistemi multi-CPU. La disattivazione degli interrupt su un processore non impedisce al processo di eseguire lo stesso codice critico su altri processori.

9.3.2 Comando Test-and-Set (comando TS)

Inserisci qui la descrizione dell'immagine

L'istruzione TS può essere considerata come un processo di funzione (primitivo) il cui processo di esecuzione è indivisibile.

  • il blocco ha due stati:
    • *lock=FALSE indica che la risorsa è libera
    • *lock=TRUE indica che la risorsa è in uso

Utilizza TS per gestire le sezioni critiche e impostare un blocco per ciascuna risorsa critica.

  • Il valore iniziale è FALSE, indicando che le risorse critiche sono inattive.
  • Prima che il processo entri nella sezione critica, utilizza TS per testare il lock. Se è FALSE, può entrare e assegnare il valore TRUE al lock, chiudendo la risorsa critica.

9.3.3 Comando di scambio

Inserisci qui la descrizione dell'immagine
Si chiama istruzione di scambio e viene utilizzata per scambiare il contenuto di due parole.

  • Imposta un blocco variabile booleana globale per ciascuna risorsa critica, con un valore iniziale FALSE.
  • Utilizzare le istruzioni hardware sopra riportate per completare il processo di mutua esclusione
  • In questo modo però il processo di accesso viene continuamente testato e si trova nello stato "occupato in attesa", che non rispetta il principio "right-waiting".

9.4 Meccanismo del semaforo

9.4.1 Semaforo intero

È definito come un numero intero S utilizzato per rappresentare il numero di risorse. Ci sono solo tre operazioni per questo semaforo intero: inizializzazione (assegnando un valore iniziale), attesa (decremento), segnale (incremento).
Inserisci qui la descrizione dell'immagine

  • Sia l'attesa che il segnale sono operazioni atomiche e non possono essere interrotte durante l'esecuzione.
  • Quando un processo modifica un semaforo, nessun altro processo può modificare il semaforo contemporaneamente.

9.4.2 Registra il semaforo

Meccanismo di sincronizzazione del processo senza fenomeno di "attesa di occupato".

  • Oltre a un valore variabile intero utilizzato per rappresentare il numero di risorse
  • È inoltre necessario aggiungere una lista collegata di processi L per collegare tutti i processi in attesa della risorsa.

Inserisci qui la descrizione dell'immagine

  • L'operazione di attesa è equivalente all'operazione P
  • L'operazione del segnale è equivalente all'operazione V
  • Solo due nomi diversi, le funzioni sono esattamente le stesse
  • attendere(A) = P(A)
  • segnale(B) = V(A)

(1) Utilizzare il semaforo per realizzare la mutua esclusione dei processi

Imposta un semaforo mutex=1 mutuamente esclusivo, quindi posiziona la sezione critica per ciascun processo per accedere alle risorse critiche tra wait(mutex) e signal(mutex)
Inserisci qui la descrizione dell'immagine


(2) Utilizzare i semafori per ottenere la sincronizzazione dei processi

Impostare un semaforo di sincronizzazione S=0, in modo che prima segnali l'istruzione(S) da eseguire e poi l'attesa(S)
Inserisci qui la descrizione dell'immagine