Estratto del documento

Interrupt e trap (eccezioni)

Interrupt

Definizione
Evento asincrono causato da un componente hardware.

Caratteristiche

  • Gestito da CPU
  • Causa l'interruzione della elaborazione corrente e viene chiamata una routine di servizio, il cui indirizzo è contenuto nell'Interrupt Vector nel numero di cella codificato all'interno del segnale stesso
  • L'indirizzo di ritorno viene memorizzato nello stack di sistema
  • Passaggio a Kernel Mode se proveniente da dispositivi di I/O
  • Vengono disabilitati quando ne viene servito uno

Uso tipico

  • Termine di un'operazione di I/O
  • Malfunzionamento hardware

Trap

Definizione
Evento sincrono generato dal software o a causa di un errore o per una richiesta specifica fatta da un programma per ottenere un servizio di sistema.

Caratteristiche

  • Il programma può ripartire dall'istruzione interrotta
  • Passaggio a kernel mode se generata da violazioni di protezione da parte di un programma utente

Uso tipico

  • Cannot divide per zero
  • Page fault
  • Memory access violation

Processi user e kernel thread

Un thread (parte di un processo), che è costituito da:

  • PC (Program Counter)
  • Registri
  • Stack
Condivide con gli altri threads concorrenti il dominio del task, ossia:
  • Parte di codice
  • Dati
  • Risorse date dal sistema operativo
Le variabili sono quindi in comune.

User thread

Supportati mediante un insieme di chiamate a livello utente o di librerie di sistema → niente intervento del kernel.

Vantaggi

  • Context switch veloce tra thread dello stesso task
  • Implementazione su un kernel qualsiasi

Svantaggi

  • Solo un thread running per task, anche in sistemi multiprocessore
  • Se un thread effettua una system call bloccante sono bloccati tutti i thread dello stesso task

Kernel thread

Thread generati chiamando la system call del sistema → quindi con l'interazione del kernel.

Vantaggi

  • Thread ready possono esser schedulati anche se appartengono allo stesso task di un thread che ha chiamato una system call bloccante
  • In un sistema multiprocessore possono essere eseguiti thread multipli per task

Svantaggi

  • Context switch più costoso perché richiede il passaggio al modo kernel
  • Limitazione del numero massimo di thread per task

Approccio monolitico

Kernel → insieme enorme di funzionalità combinate in un unico livello.

MS-DOS

  • Scritto per fornire il massimo di funzioni nel minimo spazio
  • Non strutturato a moduli
  • Interfacce e funzioni non separate per livelli

Struttura UNIX consiste di due parti:

  • Programmi di sistema
  • Kernel - è l'interfaccia a livello fisico dell'hw attraverso le system call
  • Fornisce le funzioni relative al file system, scheduling della memoria e molte altre

Approccio a livelli

Il sistema → diviso in strati o livelli che svolgono funzioni specifiche.

  • Ogni livello offre i propri servizi ai livelli superiori, che possono accedere a tali servizi tramite un'interfaccia ben definita.
  • Livello più basso (0) → si appoggia direttamente sull'hw
  • Livello più alto → realizza l'interfaccia utente.
Nel microkernel → struttura SO rimuove componenti non fondamentali; implementa tutte le componenti accessorie tramite programmi utenti o di sistema.

Nelle macchine virtuali → sembra che più processi vengano eseguiti contemporaneamente su un proprio processore e su una propria memoria.

Gestione della protezione dello spazio di indirizzamento

Per proteggere lo spazio di indirizzamento del kernel da accessi diretti vengono utilizzati due registri che determinano l'area di memoria accessibile da un programma utente:

  • Base register → contiene l'indirizzo di memoria dove inizia il programma utente
  • Limit register → contiene la dimensione dell'intervallo di indirizzi disponibile al programma utente
Se si cerca di generare indirizzi al di fuori dello spazio consentito viene generata una trap che invoca una opportuna routine di servizio.

Stati di un processo

Durante la sua esecuzione, un processo cambia di stato.

  • SUBMIT: job suddiviso nei suoi processi componenti, che vengono creati
  • HOLD: in attesa della disponibilità di risorse da parte del sistema
  • READY: logicamente pronto a essere eseguito; in attesa della risorsa processore
  • RUNNING: in esecuzione
  • WAITING: in attesa di un nuovo evento
  • COMPLETE: il processo termina e rilascia le risorse allocate

In un dato momento solo un processo si può trovare nello stato di RUNNING.

Il PCB contiene le informazioni associate al processo: stato, PC, registri CPU, informazioni su scheduling CPU, gestione memoria, stato operazioni I/O e amministrative varie.

Con PCB si possono gestire più processi concorrenti: sembra che la CPU svolga più operazioni nello stesso tempo quando invece attribuisce a ogni processo un certo tempo di esecuzione. (Nei sistemi è implementato in C mediante la struttura task-struct).

Diagramma stati più dettagliato

Problema produttore-consumatore

PROCESSO INDIPENDENTE: non può essere influenzato dall'esecuzione di altri processi, né può influenzarne altri

PROCESSO COOPERANTE: può essere influenzato dall'esecuzione di altri processi e può influenzarne altri.

Vantaggi

  • Condivisione informazioni
  • Maggior velocità di calcolo
  • Modularità

Problema produttore-consumatore: tipico dei processi cooperanti:
Il processo produttore produce e inserisce in buffer informazioni usate da un processo consumatore;

  • Si può assumere che il buffer sia di dimensioni illimitate
  • Si assume che il buffer abbia dimensioni finite

Soluzione con buffer circolare:

  • Dati condivisi
#define N 10
typedef struct {...} Item;
Item buffer[N];
int in = 0, out=0;

Processo produttore

item nextp;
while (true) {
    ... // produce an item in nextp
    ...
    while ((in+1) % N == out); /// occhio al ;!!! // non fa nulla
    buffer [in] = nextp; // metto il dato
    in = (in+1) % N; // avanza di una posizione
}

Processo consumatore

item nextc;
while (true) {
    while (in == out); /// occhio, c'è il ;! // non fa nulla finché non c'è qualcosa da leggere
    nextc = buffer [out]; // prelevo il dato
    out = (out+1) % N; // avanzo
    ... // consume the item in nextc
    ...
}

La soluzione NON è corretta per N=1.

System call

Definizione
Richiesta di un servizio del sistema operativo. Metodo usato da un processo per richiedere un'azione da parte del kernel.

Caratteristiche

  • Disponibili come istruzioni assembler
  • Normalmente realizzata come una trap a un indirizzo specifico nell'interrupt vector
  • Passaggio a kernel mode se si richiede un'operazione di I/O

Meccanismo

  • Salvato nello stack lo stato del programma utente (PC, registri, bit di modo, IR, segmento di codice del programma utente)
  • Controllo passa, attraverso l'interrupt vector, ad una routine di servizio del kernel
  • Bit mode settato a monitor mode
  • Monitor verifica che i parametri associati siano corretti e legali, esegue la richiesta e restituisce il controllo all'istruzione successiva alla system call

Uso tipico

  • Fork
  • Execve
  • Wait
  • Signal

Chiamata a funzione

Definizione
Richiesta di passare a un altro indirizzo dell'area accessibile al programma utente.

Caratteristiche

  • L'indirizzo di ritorno (che contiene la successiva istruzione) viene memorizzato nello stack del processo.

Uso tipico
Un programma utente richiama un compito specifico da eseguire.

Fork(): creazione processi

Crea copia identica del processo che l'ha invocata (padre), facendo sì che abbia stessa immagine in memoria, inclusi i descrittori di file, stack, dati...

  • Un processo padre crea processi figli che a loro volta possono generare altri processi figli, formando un albero di processi.
  • Condivisione risorse
    • Padre e figli condividono tutte le risorse del padre
    • Figli condividono col padre parte delle sue risorse
    • Padre e figli non condividono alcuna risorsa
  • Esecuzione
    • Padre e figli eseguono in concorrenza
    • Il padre aspetta finché i figli terminano
  • Spazio indirizzi
    • Il kernel duplica quello del padre
    • Il figlio eventualmente cambia il suo spazio degli indirizzi
  • Esempi di system call UNIX
    • Fork crea un nuovo processo
    • Execve può essere usata dopo una fork per cambiare lo spazio di memoria del nuovo processo con un nuovo codice eseguibile

Restituisce:

  • -1 se è il padre in fallimento
  • 0 se è un figlio o il PID del figlio nel caso in cui l'operazione vada a buon fine

Exit(): terminazione processi

System call: void exit()

Anteprima
Vedrai una selezione di 8 pagine su 34
Riassunto esame Sistemi Operativi, prof. Laface Pag. 1 Riassunto esame Sistemi Operativi, prof. Laface Pag. 2
Anteprima di 8 pagg. su 34.
Scarica il documento per vederlo tutto.
Riassunto esame Sistemi Operativi, prof. Laface Pag. 6
Anteprima di 8 pagg. su 34.
Scarica il documento per vederlo tutto.
Riassunto esame Sistemi Operativi, prof. Laface Pag. 11
Anteprima di 8 pagg. su 34.
Scarica il documento per vederlo tutto.
Riassunto esame Sistemi Operativi, prof. Laface Pag. 16
Anteprima di 8 pagg. su 34.
Scarica il documento per vederlo tutto.
Riassunto esame Sistemi Operativi, prof. Laface Pag. 21
Anteprima di 8 pagg. su 34.
Scarica il documento per vederlo tutto.
Riassunto esame Sistemi Operativi, prof. Laface Pag. 26
Anteprima di 8 pagg. su 34.
Scarica il documento per vederlo tutto.
Riassunto esame Sistemi Operativi, prof. Laface Pag. 31
1 su 34
D/illustrazione/soddisfatti o rimborsati
Acquista con carta o PayPal
Scarica i documenti tutte le volte che vuoi
Dettagli
SSD
Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher seagirl1987 di informazioni apprese con la frequenza delle lezioni di Sistemi operativi 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 Torino o del prof Laface Pietro.
Appunti correlati Invia appunti e guadagna

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community