Vai alla Home Page About me Courseware Federica Virtual Campus 3D Gli eBook di Federica
 
Il Corso Le lezioni del Corso La Cattedra
 
Materiali di approfondimento Risorse Web Il Podcast di questa lezione

Marco Lapegna » 5.Operazioni sui processi


Sistemi operativi

Operazioni sui processi

Operazioni sui processi

Tutti i sistemi operativi forniscono i servizi fondamentali per la gestione dei processi, tra cui:

  • Creazione processi
  • Distruzione processi
  • Sospensione processi
  • Ripresa processi
  • Cambio priorità dei processi
  • Blocco processi
  • Sblocco processi
  • Attivazione processi
  • Comunicazione tra processi

Come vengono creati i processi?

Un processo (padre) può creare numerosi processsi (figli), che, a loro volta, possono creare altri processi, formando un albero (genealogico) di processi.

Albero dei processi in Unix

In figura è mostrato uno schema ad albero relativo ai processi in Unix.

Schema ad albero (Linux)

Schema ad albero (Linux)


Diverse scelte progettuali

Risorse :

  • Il padre e il figlio condividono tutte le risorse. -> Minor carico nel sistema
  • I figli condividono un sottoinsieme delle risorse del padre.
  • Il padre e il figlio non condividono risorse. -> Maggior carico nel sistema

Diverse scelte progettuali

Spazio degli indirizzi

  • Il processo figlio è un duplicato del processo padre (UNIX).
  • Nel processo figlio è caricato subito un diverso programma (VMS).

Esecuzione

  • Il padre e i figli vengono eseguiti concorrentemente.
  • Il padre attende la terminazione dei processi figli.

Un processo termina quando

Esegue l’ultima istruzione e chiede al sistema operativo di essere cancellato per mezzo di una specifica chiamata di sistema (exit in UNIX)

  • Può restituire dati al processo padre.
  • Le risorse del processo vengono deallocate dal SO.

Un processo termina quando

Viene terminato dal padre quando, ad esempio:

  • Il figlio ha ecceduto nell’uso di alcune risorse.
  • Il padre termina (in alcuni sistemi)
    • terminazione a cascata

Viene terminato da un altro processo (eventualmente il padre) per mezzo di una specifica chiamata di sistema (abort in UNIX)

Esempio: UNIX

  • La funzione fork crea un nuovo processo
    • il figlio viene creato copiando tutto il PCB del padre
    • ritorna 0 (zero) nel figlio
    • ritorna il pid del figlio nel padre
  • La funzione execlp carica nel nuovo processo un programma
    • vengono sostituite le aree testo, data e stack

Esempio: UNIX

  • La funzione exit fa terminare un processo
    • eventualmente comunica al padre lo stato di uscita
  • La funzione wait fa attendere al padre la terminazione del figlio
    • eventualmente riceve dal figlio lo stato di uscita

Esempio: UNIX

A chi viene restituito 0 (chi è il padre del main)?

Codice (processo padre/figlio)

Codice (processo padre/figlio)


Processi cooperanti

  • Un processo è indipendente se non può influire su altri processi nel sistema o subirne l’influsso.
  • Processi cooperanti possono influire su altri processi o esserne influenzati.
  • La presenza o meno di dati condivisi determina univocamente la natura del processo.

Vantaggi della cooperazione fra processi

  • Condivisione di informazioni
  • Accelerazione del calcolo (in sistemi multiprocessore)
  • Modularità

Comunicazione tra processi (IPC)

Un sistema operativo è composto da numerosi moduli che devono interagire tra loro

-> Necessità di un meccanismo di comunicazione tra processi

  • Segnali
  • Memoria condivisa
  • Scambio di messaggi

Segnali

  • Interruzioni software per la comunicazione asincrona tra processi
  • Non permettono ai processi di scambiarsi dati
  • Il processo che riceve il segnale non e’ in un particolare stato di attesa (evento asincrono)

Segnali

I processi possono catturare, ignorare o mascherare un segnale

  • Catturare un segnale significa far eseguire al sistema operativo una specifica routine al momento della ricezione del segnale o una azione di default associata al segnale
  • Ignorare un segnale significa far finta che il segnale non sia mai arrivato
  • Mascherare un segnale significa istruire il sistema operativo a non consegnare il segnale fino a nuovo ordine

Principali segnali di Unix

In figura sono tabellati i principali segnali di Unix e le relative cause.

Tabella dei segnali – cause (Unix)

Tabella dei segnali - cause (Unix)


Scambio messaggi / memoria condivisa

Nelle figure sono mostrati schemi esplicativi sul funzionamento dello scambio di messaggi (a sinistra) e della memoria condivisa (a destra).

Scambio di messaggi e memoria condivisa

Scambio di messaggi e memoria condivisa


Scambio di messaggi

Lo scambio di messaggi consente due operazioni:

  • send(messaggio) — la dimensione del messaggio può essere fissa o variabile
  • receive(messaggio)

Se i processi P e Q vogliono comunicare, devono:

  • stabilire fra loro un canale di comunicazione
  • scambiare messaggi per mezzo di send/receive

Problemi di implementazione

  • Come vengono stabiliti i canali (connessioni)?
  • È possibile assegnare un canale a più di due processi?
  • Quanti canali possono essere stabiliti fra ciascuna coppia di processi comunicanti?
  • Qual è la capacità di un canale?
  • Il formato del messaggio che un canale può gestire è fisso o variabile?
  • Stabilire canali monodirezionali o bidirezionali?

Comunicazione diretta o simmetrica

I processi devono dichiarare esplicitamente i loro interlocutori:

  • send (P, messaggio) — invia un messaggio al processo P
  • receive(Q, messaggio) — riceve un messaggio dal processo Q

Comunicazione indiretta o asimmetrica

I messaggi vengono inviati/ricevuti da mailbox

  • Ciascuna mailbox è idendificata con un id unico.
  • I processi possono comunicare solamente se condividono una mailbox.

Sincronizzazione

Le primitive send e receive possono essere sia bloccanti (o sincrone) che non–bloccanti (o asincrone)

  • Invio bloccante: il processo che invia attende che il processo ricevente riceva il messaggio
  • Invio non bloccante: il processo che invia riprende subito l’elaborazione
  • Ricezione bloccante: il processo ricevente attende l’arrivo del messaggio
  • Ricezione non bloccante: il processo ricevente riceve un messaggio valido oppure nullo

Implementazione

La coda dei messaggi legata ad un canale può essere implementata in tre modi.

  1. Capacità zero — Il canale non può avere messaggi in attesa al suo interno. Il trasmittente deve attendere che il ricevente abbia ricevuto il messaggio (rendezvous).
  2. Capacità limitata — Lunghezza finita pari a n messaggi. Se il canale è pieno, il trasmittente deve attendere.
  3. Capacità illimitata — Lunghezza infinita. Il trasmittente non attende mai.

Esempio: client server

E’ un classico paradigma di comunicazione tra processi

  • un processo P (il client) chiede un servizio ad un processo Q (il server).

Es: apertura di un file

Schema dell’esempio (apertura di un file)

Schema dell'esempio (apertura di un file)


Scambio di messaggi in sistemi distribuiti

I messaggi trasmessi si possono perdere

  • Necessità di protocolli che confermino la corretta ricezione del messaggio attraverso “ricevute di ritorno” (es. TCP/IP)
  • Meccanismi di timeout per ritrasmettere i messaggi se la ricevuta non ritorna

Esempio: problema del produttore–consumatore

È un paradigma classico per processi cooperanti. Il processo produttore produce informazioni che vengono consumate da un processo consumatore.

  • Buffer illimitato: non vengono posti limiti pratici alla dimensione del buffer.
  • Buffer limitato: si assume che la dimensione del buffer sia fissata.

Esempio: Un programma di stampa produce caratteri che verranno consumati dal driver della stampante.

Buffer limitato e memoria condivisa

In figura sono mostrati il codice relativo ai dati condivisi e un esempio grafico e numerico.

Codice e schema dell’esempio

Codice e schema dell'esempio


Processo consumatore

Codice (processo consumatore)

Codice (processo consumatore)


Processo produttore

Codice (processo produttore)

Codice (processo produttore)


Osservazione

La soluzione proposta consente l’utilizzo di soli BUFFER_SIZE-1 elementi

PERCHE’?

Trovare una soluzione che utilizza tutti i BUFFER_SIZE elementi

Prossima lezione

I threads

  • Cosa e’ un thread
  • Similitudini e differenze con i processi
  • Il ciclo di vita dei threads
  • Esempi di implementazioni.
  • Contenuti protetti da Creative Commons
  • Feed RSS
  • Condividi su FriendFeed
  • Condividi su Facebook
  • Segnala su Twitter
  • Condividi su LinkedIn
Progetto "Campus Virtuale" dell'Università degli Studi di Napoli Federico II, realizzato con il cofinanziamento dell'Unione europea. Asse V - Società dell'informazione - Obiettivo Operativo 5.1 e-Government ed e-Inclusion

Fatal error: Call to undefined function federicaDebug() in /usr/local/apache/htdocs/html/footer.php on line 93