Anteprima
Vedrai una selezione di 10 pagine su 172
SISTEMI OPERATIVI Pag. 1 SISTEMI OPERATIVI Pag. 2
Anteprima di 10 pagg. su 172.
Scarica il documento per vederlo tutto.
SISTEMI OPERATIVI Pag. 6
Anteprima di 10 pagg. su 172.
Scarica il documento per vederlo tutto.
SISTEMI OPERATIVI Pag. 11
Anteprima di 10 pagg. su 172.
Scarica il documento per vederlo tutto.
SISTEMI OPERATIVI Pag. 16
Anteprima di 10 pagg. su 172.
Scarica il documento per vederlo tutto.
SISTEMI OPERATIVI Pag. 21
Anteprima di 10 pagg. su 172.
Scarica il documento per vederlo tutto.
SISTEMI OPERATIVI Pag. 26
Anteprima di 10 pagg. su 172.
Scarica il documento per vederlo tutto.
SISTEMI OPERATIVI Pag. 31
Anteprima di 10 pagg. su 172.
Scarica il documento per vederlo tutto.
SISTEMI OPERATIVI Pag. 36
Anteprima di 10 pagg. su 172.
Scarica il documento per vederlo tutto.
SISTEMI OPERATIVI Pag. 41
1 su 172
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

DEADLOCK

Algoritmo del banchiere (Teorema di Habermann):

  • Ipotesi di base:
    • Istanze multiple delle risorse.
    • Ogni processo deve dichiarare il numero massimo di istanze per ogni tipo di risorsa di cui può avere bisogno.
    • La richiesta massima di risorse non può eccedere la disponibilità totale del sistema.
    • Quando un processo ottiene tutte le sue risorse deve restituirle in un periodo di tempo finito.
  • Quando un processo richiede delle risorse, mediante l'algoritmo si determina se l'assegnazione lascia il sistema in uno stato sicuro.
    • Se sì, le risorse vengono allocate.
    • Se no, il processo deve attendere per la de-allocazione di risorse da parte di altri processi.

Supponiamo: n = numero dei processi, e m = numero di tipi di risorse.

Available: vettore di lunghezza m. Se Available [j] = k, ci sono k istanze di risorse di tipo R disponibili.

Max: matrice n x m. Se Max [i,j] = k, allora il processo P può chiedere al più

k istanze di risorse del tipo Rj sono richieste dal processo P. L'algoritmo di richiesta di risorse è il seguente: 1. Verifica se la richiesta è valida: se Request [j] > Need [P,j], la richiesta supera il limite massimo di risorse che il processo P può richiedere. In questo caso, la richiesta viene rifiutata. 2. Verifica se la richiesta può essere soddisfatta: se Request [j] > Available [j], le risorse richieste non sono disponibili al momento. In questo caso, il processo P deve attendere fino a quando le risorse richieste diventano disponibili. 3. Simula l'assegnazione delle risorse: se la richiesta è valida e può essere soddisfatta, simula l'assegnazione delle risorse al processo P. Aggiorna le matrici Allocation, Need e Available di conseguenza. 4. Verifica se lo stato del sistema rimane sicuro: utilizza l'algoritmo di sicurezza descritto in precedenza per verificare se lo stato del sistema rimane sicuro dopo l'assegnazione delle risorse. Se lo stato rimane sicuro, la richiesta viene accettata. Altrimenti, la richiesta viene rifiutata e le risorse assegnate precedentemente vengono restituite al sistema. L'algoritmo di richiesta di risorse viene utilizzato per gestire le richieste di risorse da parte dei processi in un sistema a risorse condivise. Garantisce che le risorse vengano assegnate in modo sicuro e che non si verifichino situazioni di deadlock o starvation.processo P desidera k istanze del tipo di risorsa iRj. Quando P fa una richiesta di risorse, vengono eseguite le seguenti azioni: 1. Se la richiesta di bisogno [i, *] va al passaggio 2. Altrimenti, viene generata una condizione di errore, poiché il processo ha superato la sua richiesta massima. 2. Se la richiesta è disponibile, vai al passaggio 3. Altrimenti, P deve attendere, poiché le risorse non sono disponibili. 3. Fingi di allocare le risorse richieste a P modificando lo stato come segue: - Available = Available - Request - Allocation [i, *] = Allocation [i, *] + Request - Need [i, *] = Need [i, *] - Request - Se è sicuro, le risorse vengono allocate a P - Se non è sicuro, P attende (lo stato di allocazione delle risorse precedente viene ripristinato) Esempio: - Si consideri un sistema con 5 processi da P1 a P5 e 3 tipi di risorse: R1, R2, R3. - Supponiamo che al tempo T ci sia la seguente situazione del sistema: - Il contenuto della matrice Need è definito come: Need [i, j] = Max [i, j] - Allocation [i, j]sistema è in uno stato sicuro poiché la sequenza soddisfa i criteri di sicurezza 4 2 5 3 1. • Executing safety algorithm shows that sequence satisfies safety requirement. 2 4 5 1 3. • Can request for [3,3,0] by P be granted? And request for [0,2,0] by P? 5 1 Rilevazione del deadlock: • Permettere al sistema di entrare in uno stato di deadlock. • Algoritmo di rilevazione • Schema di recupero • Risorse a singola istanza: o Mantiene un grafo di attesa (wait-for graph). ➢ I nodi delle risorse sono rimossi. ➢ →P P se P sta attendendo P. o Il sistema deve invocare periodicamente un algoritmo che cerca un ciclo nel grafo. 2 o Un algoritmo per rilevare un ciclo in un grafo richiede n operazioni, dove n è il numero di nodi del grafo. • Risorse ad istanze multiple • Il wait-for graph non è applicabile nel caso di risorse ad istanze multiple. • Un comune algoritmo per la

<p>Rilevazione di un deadlock adopera strutture dati variabili nel tempo simili a quelle dell'algoritmo del banchiere:</p>
<ul>
  <li>Available: vettore di lunghezza m, indica il numero di risorse disponibili per ogni tipo.</li>
  <li>Allocation: matrice n x m, definisce il numero di risorse di ciascun tipo attualmente assegnate a ogni processo.</li>
  <li>Request: matrice n x m, indica la richiesta corrente di ogni processo. Se Request [i, j] = k, allora il processo P richiede altre k istanze della risorsa di tipo R .</li>
</ul>
<p>L'algoritmo di rilevazione controlla ogni possibile sequenza di allocazione per i processi da completare</p>
<p>Algoritmo di rilevazione:</p>
<ol>
  <li>Supponiamo che Work e Finish siano rispettivamente vettori di lunghezza m e n. Inizializziamo:</li>
  <ul>
    <li>Work = Available</li>
    <li>Per i = 1,2, ..., n, se Allocation [i,·] = 0, allora Finish[i] = false; altrimenti, Finish[i] = true.</li>
  </ul>
  <li>Si cerca un indice i che soddisfi entrambe le condizioni seguenti:</li>
  <ul>
    <li>Finish[i] = false</li>
    <li>Request ≤ Work[i]</li>
  </ul>
  <li>Se una tale i non esiste,</li>
</ol>

passare al punto 4.3. Work = Work + Allocation [i,·]Finish[i] = true

passare al punto 2.4. Se Finish[i] = false per qualche i, ,allora il sistema è in uno stato di deadlock e particolarmente il processo P è in stallo

L'algoritmo richiede 2m x n operazioni per rilevare se il sistema è in un deadlock.

Esempio:

di rilevazione:

Uso dell'algoritmo

Quando e con quale frequenza invocare l'algoritmo di rilevazione dipende da:

▪ Con quale frequenza può accadere un deadlock?

▪ Quanti processi saranno coinvolti nel deadlock quando questo si verificherà?

di rilevazione dovrebbe essere

o Se il sistema è soggetto frequentemente a deadlock, l'algoritmo invocato spesso. Si ricordi che:

▪ Le risorse assegnate a processi in deadlock saranno bloccate fino alla rimozione dello stallo

▪ Il numero di processi coinvolti in un deadlock può crescere nel tempo.

o I deadlock avvengono solo quando una richiesta di risorse

non può essere soddisfatta immediatamente Al limite si potrebbe richiamare l’algoritmo ogni qual volta ci si trova in questa situazioneidentificando così anche il processo causa del deadlock Ne derivano overhead e ritardi sensibili.Se l’algoritmo di rilevazione è invocato in momenti casuali possono essere trovati molti cicli nel grafoo di risorsa.o Potremmo non essere in grado di dire quale dei molti processi in deadlock ne è la causaRipristino dei deadlock:
  • Il ripristino dal deadlock può avvenire:
    • a carico dell’utente che viene informato dal sistema dell’esistenza di uno stallo o per via automatica;
    • abortendo uno o più processi o requisendo risorse detenute da processi in deadlock.
  • Abort di processi:
    • Abortire tutti i processi in deadlock (i risultati parziali dell’elaborazione di tutti i processi coinvoltio devono essere scartati).
    • Abortire un processo alla volta fino ad eliminare il ciclo di

deadlock (è notevole l’overhead poiché dopoo lanciare l’algoritmo di rilevazione).

ogni abort si deveo In quale ordine devono essere terminati i processi?

  • Priorità del processo
  • Per quanto tempo il processo ha elaborato e per quanto tempo ancora il processo proseguirà primadi completare l’operazione pianificata
  • Quanti e quali tipi di risorse sono state adoperate dal processo.
  • Di quante altre risorse il processo necessita per completare l’elaborazione
  • Quanti processi devono essere terminati
  • Caratteristica del processo (interattivo o batch)

Rilascio anticipato delle risorse

Selezione della vittima (minimizzazione del costo)

  • I fattori di costo includono:
  • Numero di risorse occupate.
  • Per quanto tempo il processo ha elaborato e per quanto tempo ancora il processoproseguirà prima di completare l’operazione pianificata.

Rollback (permette di riportare ad una versione o stato precedente)

Prelazionando una risorsa da un processo occorre riportarlo ad uno stato sicuro e far ripartire il processo da quello stato.

La soluzione più semplice è un rollback totale del processo.

Starvation

In un sistema in cui la selezione della vittima è basata soprattutto sui fattori costo, alcuni processi potrebbero essere sempre scelti come vittime.

Occorre verificare che un processo possa essere selezionato solo un numero limitato di volte.

Il numero di rollback viene incluso nei fattori costo

CAPITOLO 9: MEMORIA CENTRALE

  • Per essere eseguito un programma deve essere portato dalla memoria di massa in memoria centrale e essere attivato come processo.
  • La memoria è sostanzialmente un vettore di word ciascuna delle quali è accessibile singolarmente (dotata di un indirizzo specifico).
  • Ciclo istruzione-esecuzione:
  • Prelievo di una istruzione dalla memoria centrale in base al valore del program counter
  • Decodifica dell'istruzione

Prelievo di operandi dalla memoria ed esecuzioneo Memorizzazione dei risultati in memoria

  • Dal punto di vista della memoria, in ingresso/uscita abbiamo solo un flusso di indirizzi
  • Coda di entrata: processi su disco che sono in attesa di essere caricati in memoria centrale perl'esecuzione.
  • I programmi utente passano attraverso più stadi prima di essere eseguiti (compiling, linking, loading)

Collegamento degli indirizzi:

Il collegamento delle istruzioni e dei dati agli indirizzi di memoria viene effettuato mediante la seguente successione di passi:

  • Fase di compilazione: se in fase di compilazione si conosce l'alocazione del processo in memoria, allora si può generare un codice assoluto; se la locazione di partenza cambia bisogna ricompilare il codice.
  • Fase di caricamento: se al momento della compilazione non è nota l'alocazione del processo in memoria, il compilatore deve generare un codice rilocabile

Il linking finale è rinviato

fino all'istante di caricamento

Modificandosi l'indirizzo di partenza, c'è la necessità di modificare il solo codice utente per incorporare il valore cambiato.

  • Fase di esecuzione: se il processo può essere spostato, durante l'esecuzione, da un segmento di memoria a un altro, allora il collegamento dell'esecuzione deve essere ritardato fino al momento dell'esecuzione.

Necessita di un hardware specifico.

Indirizzamento logico e fisico:

  • Spazio di indirizzamento logico (insieme di tutti gli indirizzi logici generati da un programma).
Dettagli
A.A. 2019-2020
172 pagine
SSD Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher melissa.meli.1997.21.06 di informazioni apprese con la frequenza delle lezioni di Basi di dati e sistemi informativi e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Politecnico di Bari o del prof Ruta Michele.