Vai alla Home Page About me Courseware Federica Living Library Federica Virtual Campus 3D Le Miniguide all'orientamento Gli eBook di Federica
 
I corsi di Scienze Matematiche Fisiche e Naturali
 
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