Programmazione concorrente - PowerPoint PPT Presentation

About This Presentation
Title:

Programmazione concorrente

Description:

Programmazione concorrente Linux Programmazione concorrente La concorrenza una caratteristica dei sistemi di elaborazione nei quali pu verificarsi che un insieme ... – PowerPoint PPT presentation

Number of Views:64
Avg rating:3.0/5.0
Slides: 10
Provided by: Alberto146
Category:

less

Transcript and Presenter's Notes

Title: Programmazione concorrente


1
Programmazione concorrente
  • Linux

2
Programmazione concorrente
  • La concorrenza è una caratteristica dei sistemi
    di elaborazione nei quali può verificarsi che un
    insieme di processi o sottoprocessi (thread) sia
    in esecuzione nello stesso istante.
  • Un'importante classe di sistemi informatici nei
    quali gli aspetti di concorrenza sono
    fondamentali è quella dei sistemi operativi.
  • Si può parlare di concorrenza nel caso di
  • parallelismo reale di esecuzione (nel caso di
    sistemi multiprocessore dove si possono eseguire
    parallelamente un numero di processi pari al
    numero di processori)
  • parallelismo virtuale di esecuzione (come nel
    caso del pipelining).
  • Wikipedia

3
Clonazione dei processi
  • Linux ha ereditato da Unix la funzione API fork
    che permette di clonare il processo che la
    invoca.
  • Viene creato un nuovo processo con un PID
    (Process Identifier) differente.
  • Le pagine di memoria del codice sono condivise
  • Le pagine di memoria dei dati sono duplicate

4
fork
  • Per permettere di distinguere nel codice il
    Processo Padre dal Processo Figlio la funzione
    fork restituisce un valore intero
  • lt0 condizione di errore
  • 0 restituito al processo figlio
  • gt0 restituito al processo padre /è il PID del
    figlio)
  • include ltunistd.hgt

5
  • int pFiglio,pPadre,mioPID,s
  • pPadre getpid() //PID del processo padre
  • printf(PID padre i,pPadre)
  • pFiglio fork()
  • if (pFigliolt0) //errore
  • return
  • if (pFigliogt0) //processo padre
  • wait(s) // attesa termine processo figlio
  • return
  • else // processo figlio
  • mioPID getpid()
  • return

6
wait
  • La funzione API wait attende la conclusione del
    processo figlio
  • Largomento passato ritorna lo stato del figlio
    al momento della terminazione.
  • include ltsys/wait.hgt

7
Evoluzione dei processi
8
Esercitazione
  • Caricare un array molto grande con valori casuali
    poi visualizzare gli indici degli elementi con
    valore uguale a quello ricevuto in input
  • Il processo padre clona un processo figlio che
    ricerca nella prima parte dellarray mentre il
    processo padre ricerca nella seconda parte
  • Loutput deve precedere il PID del processo e
    lindice dellelemento
  • Seconda versione ogni processo a sua volta esegue
    una fork per suddividere la ricerca con un
    ulteriore processo figlio

9
Copy on write
  • Per ottimizzare la gestione della memoria e la
    velocità nellesecuzione di una fork (clonazione
    di un processo) le pagine della memoria non
    vengono inizialmente duplicate.
  • La copia di ogni dato avviene solo quando uno dei
    due processi (padre o figlio) lo modifica e si
    rende quindi necessario differenziare la copia
    relativa al processo padre da quella relativa al
    figlio.
Write a Comment
User Comments (0)
About PowerShow.com