Thread. Introduzione Creazione, distruzione Sincronizzazione
|
|
- Silvio Zamboni
- 6 anni fa
- Visualizzazioni
Transcript
1 Thread Introduzione Creazione, distruzione Sincronizzazione
2 Parallelismo Il tipo di meccanismo a supporto del parallelismo dipende dal grado di cooperazione tra le varie entità che costituiscono un'applicazione Scambio d informazione Sincronizzazione Dipendenza funzionale Il processo Realizza il concetto di macchina virtuale Implementa forte isolamento Prevede meccanismi per lo scambio di informazioni Permette di implementare attività parallele indipendenti Il thread Realizza un'attività specifica e leggera Consente un livello di cooperazione elevato Lo scambio d informazione è naturale molto facilitato Permette di realizzare attività parallele fortemente interagenti
3 Thread e processi Creazione Distruzione Processi Richiedono allocazione, copia e deallocazione di grandi quantità di memoria Thread Richiedono solamente la creazione di uno stack per il thread Errore Non può danneggiare altri processi Può danneggiare altri thread e l'intero processo cui appartiene Codice Condivisione Mutua esclusione Prestazioni Un processo può modificare il proprio codice mediante il cambiamento di eseguibile E' onerosa e deve essere implementata dal programmatore La mutua esclusione è garantita automaticamente dall'isolamento proprio dei processi Limitate dall'overhead di gestion Il codice di un thread è fissato e presente nella sezione text del processo cui appartiene E' automaticamente garantita poiché tutti i thread condividono la memoria del processo cui appartengono Deve essere realizzata dal programmatore mediante semafori, mutex, ecc Elevate Concorrenza Limitata dalla difficoltà di comunicazione Elevate
4 Sequenzialità e concorrenza Sequenzialità Due attività A e B sono sequenziali se, conoscendo il codice del programma, possiamo sapere con certezza l ordine in cui esse vengono svolte, cioè Se A è svolta prima di B, indicato con A < B Se B è svolta prima di A, indicato con B < A Concorrenza Due attività A e B sono concorrenti se non possiamo determinare tale ordinamento in base al solo codice del programma In un sistema monoprocessore risulterà sempre A < B oppure A > B Parallelismo E' un sinonimo di concorrenza Parallelismo reale Riguarda i sistemi multiprocessore In tal caso le attività A e B possono anche essere svolte nello stesso momento Quando A e B sono svolte simultaneamente, scriveremo A = B Il parallelismo reale implica la concorrenza (o paralellismo semplice) ma non viceversa
5 Thread Flusso di controllo E' una esecuzione sequenziale di istruzioni L'esecuzione è determinata unicamente dalle istruzioni Un thread realizza un flusso di controllo Che può essere svolto in parallelo con altri Che convive con altri all'interno di uno stesso processo Il flusso di controllo di un thread E' realizzato mediante una funzione La funzione viene eseguita all'atto della creazione del thread Le funzioni nei vari thread Convivono nello stesso processo Condividono lo spazio di indirizzamento Condivisono i dati del processo Sono eseguite in parallelo In questo modo si ottiene Parallelismo Facilità di scambio di informazioni
6 Thread Esistono diversi modelli di thread Differiscono tra loro nei dettagli Condividono l idea generale In questo corso considereremo i thread definiti dallo standard POSIX Generalmente detti "pthread" Analizzeremo solo gli aspetti fondamentali Per un approfondimento si veda, per esempio: Larrie Benton Zacharie, "Native POSIX Thread Library: Software Feature", VerPublishing, 2011 POSIX: Portable Operating System Interface for Computing Environments Insieme di standard per le interfacce applicative (API) dei sistemi operativi Obiettivo di tale standard è la portabilità dei programmi in ambienti diversi Un programma applicativo utilizza solamente i servizi previsti dalle API di POSIX può essere portato su tutti i sistemi operativi che implementano tali API
7 Thread Tra thread e processi esistono le seguenti relazioni Un thread è attivato nell ambito di un processo Il codice di un thread è raccolto in una funzione In un processo possono coesistere più thread I thread devono essere creati esplicitamente Attraverso opportune funzioni delle API dello standard POSIX Quando il processo termina Tutti i suoi thread terminano forzatamente I thread possono terminare in un punto qualsiasi del loro flusso di controllo Durante la vita di un processo I thread vengono attivati e terminati dal programmatore E' necessario garantire una terminazione coerente di tutti i thread
8 Thread Ogni thread ha un identificatore di thread Il tipo di tale identificatore è pthread_t L identificatore di thread identifica il thread univocamente L identificatore di thread è diverso dall identificatore di processo Tutti i thread di un processono Condividono lo stesso process id La funzione getpid( ), eseguita all interno dei thread di un medesimo processo, restituisce sempre il PID del processo stesso Le operazioni che si possono compiere sui thread sono Creazione Distruzione Sospensione in attesa di un evento
9 Creazione La creazione di un thread avviene mediante la funzione #include <pthread.h> int pthread_create( pthread_t* thread, const pthread_attr_t* attr, void *(*function)(void *), void * arg ); Argomenti thread E' l'identificatore del thread, passato per indirizzo in quanto è un parametro di uscita attr E' una struttura dati che raccoglie gli attributi che si vogliono assegnare al thread start_routine E' un puntatore alla funzione che il thread deve eseguire arg E' l'argomento che deve essere passato alla funzione eseguita dal thread Valore di ritorno In caso di successo viene restituito 0, altrimenti un codice di errore diverso da zero
10 Creazione La creazione di un thread ricorda la creazione di un processo La funzione pthread_create() ha un comportamento logicamente analogo a fork( ) Tuttavia La creazione di un thread non comporta la copia di memoria Le sezioni text, data, bss eccetera sono le stesse del processo Ogni thread tuttavia dispone di un proprio stack Il codice eseguito dal thread è raccolto in una funzione specifica Non coincide con l'intero codice del processo L'esecuzione del codice del thread inizia sempre dalla prima istruzione della funzione A differenza dei processi in cui l'esecuzione nel processo figlio inizia dall'istruzione immediatamente successiva al ritorno della fork() Ogni thread ha totale visibilità del codice e delle variabili del processo in cui esiste Dal punto di vista della visibilità e del valore dei simboli e dei dati la situazione è identica al caso in cui la funzione eseguita dal thread fosse direttamente chiamata dal processo Una modifica ad una variabile del processo E' immediatamente visibile nel processo e quindi in tutti gli altri thread Nel caso di un processo figlio, la modifica è invece locale alla sua copia della sezione dati
11 Creazione Ogni thread viene creato nell ambito di un processo Il processo ha un suo flusso di controllo Il flusso di controllo del processo inizia dalla funzione main() In un contesto di multithreading La funzione main() costituisce il thread principale o "main thread" Quando viene eseguito un programma Viene creato un nuovo processo All'interno del processo viene creato il main thread Il main thread esegue il codice della funzione main() Quando il thread principale termina, il processo termina Creazione Il thread principale può creare altri thread Ogni thread può creare altri thread In questo senso il thread principale non ha nulla di speciale Nel momento in cui coesistono più thread Inizia l'esecuzione concorrente del loro codice
12 Creazione Un thread è eseguito nello spazio d indirizzamento del processo che lo ha creato Tutti i thread di un processo condividono la stessa memoria dati Ogni thread Ha un proprio stack privato, indipendente da quello degli altri thread Ogni stack è allocato dal sistema operativo Nel contesto del processo Ad indirizzi differenti per ogni thread Ogni thread ha quindi un proprio stack pointer per la gestione dello stack Ne consegue che Le variabili locali della funzione eseguita dal thread sono allocate sul suo stack privato Tali variabili quindi sono locali e appartengono solo a quel thread Le variabili statiche e globali non sono allocate sullo stack Pertanto sono condivise da tutti i thread Questo tipo di situazione Rende facile e naturale lo scambio d informazione tra thread Rende più difficile garantire la correttezza del programma multithreading
13 Creazione La funzione pthread_create() richiede come argomento un puntatore alla funzione che deve essere eseguita nel thread che verrà creato Tale funzione deve avere come prototipo void* function( void* argument ); La funzione accetta un unico argomento di tipo puntatore a void La funzione restituisce un puntatore a void I puntatori a void possono essere utilizzati per puntare a qualsiasi tipo di dato E' lecito eseguire cast tra puntatore a void e qualsiasi altro tipo Non è possibile dereferenziare un puntatore a void, per cui il casting è sempre necessario Ne consegue che il tipo dell'argomento da passare a pthread_create() è void* (*function)(void*); Può essere utile definire tale tipo, per esempio come typedef void* (*task_t)(void*);
14 Creazione Un puntatore a void è un intero Si può convertire direttamente tra questi due tipi void* task( void* a ) { // Catches the "int" argument. Must know that it is an integer. Type checking is broken int value = (int)a; // Uses value as an integer printf( "value = %d\n", value ); } // Terminates return (void*)0 int main() { // Thread id pthread_t* tid; // Data to pass to the thread function int data = 123; // Converts to void* void* arg = (void*)data; } // Creates the thread pthread_create( tid, NULL, task, arg );...
15 Creazione Dati di un tipo più grande di un intero devono essere passati per indirizzo Si deve eseguire una conversione tra puntatori void* task( void* a ) { // Catches the "double" argument. double* pvalue = (double*)a; double value = *pvalue; // Uses the value printf( "value = %f\n", value ); return (void*)0 } int main() { // Thread id pthread_t* tid; // Data to pass to the thread function double data = 1.23; // Takes the address of data and converts it to void* void* arg = (void*)(&data); } // Creates the thread pthread_create( tid, NULL, task, arg );...
16 Creazione Lo stesso ragionamento vale per il valore di ritorno della funzione eseguita all'interno del thread Si puo convertire direttamente il dato in void* se il valore da restituire è Un intero Un tipo più piccolo o della stessa dimensione di un intero Si deve convertire il puntatore al dato in void* se il valore da restituire Ha una dimensione maggiore di quella di un intero La soluzione che prevede la conversione sempre tra puntatori E' più elegante E' più portabile Non dipende in alcun modo dalla dimensione dei vari tipi sulla macchina specifica E' quindi da preferirsi
17 Terminazione La terminazione di un thread avviene mediante la funzione #include <pthread.h> void pthread_exit( void* retval ); Argomenti retval E' il valore che deve essere restituito alla funzione eseguita dal thread Valore di ritorno La funzione non ritorna mai
18 Terminazione Dal momento che la funzione pthread_exit() non ritorna Il codice successivo alla chaimata di questa funzione è codice morto L'istruzione return nella funzione eseguita da un thread Ha lo stesso effetto della chiamata della funzione pthread_exit() E' analogo al caso dell'istruzione return nel main() e la funzione exit() Il valore che si desidera restituire deve essere Convertito in void* Passato come argomento alla funzione pthread_exit() Tale valore sarà recuperato dalla corrispondente funzione pthread_join() Vedi oltre Se la funzione pthread_exit() viene chiamata nel main thread Termina l'esecuzione del main thread Non termina l'esecuzione dei thread ancora esistenti nel processo Se la funzione exit() viene chiamata nel main thread Termina l'esecuzione di tutti i thread E' equivalente ad eseguire una return dalla funzione main()
19 Attesa L'attesa della terminazione di un thread avviene mediante la funzione #include <pthread.h> int pthread_join( pthread_t thread, void** value_ptr ); Argomenti thread E' l'identificatore del thread di cui si vuole attendere la terminazione value_ptr E' l'indirizzo di memoria in cui viene memorizzato il valore di ritorno Il valore di ritorno è quello passato a pthread_exit() o alla return nel thread specificato Se value_ptr è NULL, la funzione non recupera il valore di ritorno del thread Valore di ritorno La funzione restituisce 0 in caso di successo, altrimenti un codice di errore diverso da 0
20 Attesa Dati di tipo intero possono essere restituiti in modo semplice Si deve eseguire una conversione tra void* e intero void* task( void* a ) { pthread_exit( (void*)12 ); } int main() { // Thread id pthread_t* tid; // Return value void* pretval; int retval; // Creates the thread pthread_create( tid, NULL, task, NULL ); // Waits (joins) the thread pthread_join( tid, &pretval ); } // Uses the return value retval = (int)(pretval); printf( "Thread returned %d\n", retval );
21 Attesa Passare dati diversi da interi da un thread al chiamante richiede attenzione Un tale dato non può essere convertito in puntatore a void E' quindi necessario Prenderne l'indirizzo Convertire l'indirizzo in void* Restituire tale valore, passandolo a pthread_exit() o all'istruzione return Ciò richiede che il dato da restituire non sia contenuto in una variabile automatica della funzione in esecuzione nel thread Le variabili automatiche risiedono sullo stack del thread Al termine della funzione, lo stack del thread viene rilasciato L'indirizzo restituito quindi punta ad una zona di memoria non più esistente In casi di questo tipo si può Modificare una variabile globale invece di restituire un valore Dichiarare la variabile da restituire come static nella funzione del thread Allocare memoria dinamica e restituire il puntatore all'area allocata Pericoloso, poiché il chiamante deve farsi carico di rilasciare tale memoria
il tipo di parallelismo dipende dal grado di cooperazione
Thread Settembre 2009 programma e parallelismo il tipo di parallelismo dipende dal grado di cooperazione (scambio d informazione) necessario tra attività svolte in parallelo processo macchina virtuale
ACSO Programmazione di Sistema e Concorrente
ACSO Programmazione di Sistema e Concorrente P2 Modello Thread 2/12/2015 programma e parallelismo il tipo di parallelismo dipende dal grado di cooperazione (scambio di informazione) necessario tra attività
I THREAD O PROCESSI LEGGERI
I THREAD O PROCESSI Processi (pesanti): LEGGERI entità autonome con poche risorse condivise (si prestano poco alla scrittura di applicazioni fortemente cooperanti) Ogni processo può essere visto come Immagine
LinuxThreads: I thread nel sistema operativo LINUX: Linuxthreads. LinuxThreads. LinuxThreads
I thread nel sistema operativo LINUX: Linuxthreads : Caratteristiche Processi leggeri realizzati a livello kernel System call clone: int clone(int (*fn) (void *arg), void *child_stack, int flags, void
2. I THREAD. 2.1 Introduzione
2. I THREAD 2.1 Introduzione Il tipo di parallelismo che è opportuno avere a disposizione nelle applicazioni varia in base al grado di cooperazione necessaria tra le diverse attività svolte in parallelo:
Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.
Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2016-17 Pietro Frasca Lezione 20 Giovedì 22-12-2016 Comunicazione: pipe In Unix, processi possono comunicare
Introduzione al Multithreading
Introduzione al Multithreading Claudia Calidonna Istituto di di Cibernetica C.N.R. Argomenti principali Parleremo di : Processi & Threads Operazioni sui threads ed eventuali confronti tra operazioni sui
Esercitazione n.1 24 Ottobre Obiettivi:
Esercitazione n.1 24 Ottobre 2013 Obiettivi: Gestione dei thread mediante libreria pthreads: creazione: pthread_create terminazione: pthread_exit join: pthread_join 1 Richiami sui thread 2 Processi Immagine
Principles of Concurrent Programming
Principles of Giuseppe Anastasi g.anastasi@iet.unipi.it Pervasive Computing & Networking Lab. () Dept. of Information Engineering, University of Pisa Overview Concetti preliminari Interazione fra processi
System call per la gestione di processi
System call per la gestione di processi Chiamate di sistema per creazione di processi: fork() sostituzione di codice e dati: exec...() terminazione: exit() sospensione in attesa della terminazione di figli:
Thread. La libreria Pthread Stefano Quer Dipartimento di Automatica e Informatica Politecnico di Torino
Thread La libreria Pthread Stefano Quer Dipartimento di Automatica e Informatica Politecnico di Torino 2 Librerie di thread Fornisce l interfaccia per effettuare la gestione dei thread da parte del programmatore
I THREAD. thread 2. thread 1
I THREAD Un thread è un singolo flusso di istruzioni, all interno di un processo, che lo scheduler può fare eseguire separatamente e concorrentemente con il resto del processo. Per fare questo uno thread
Cosa sono i semafori?
Semafori Cosa sono i semafori? I semafori sono primitive fornite dal sistema operativo per permettere la sincronizzazione tra processi e/o thread. Semafori di mutua esclusione con i thread POSIX 2 Operazioni
Processi Concetti di base. Esecuzione parallela e sequenziale Il concetto di processo Gestione dei processi
Processi Concetti di base Esecuzione parallela e sequenziale Il concetto di processo Gestione dei processi Esecuzione sequenziale I sistemi di calcolo più semplici consentono unicamente l'esecuzione sequenziale
I thread. Motivazioni e definizione. Modelli di programmazione multithread. Librerie per i thread. Problemi nella programmazione multithread
I Thread I thread Motivazioni e definizione Modelli di programmazione multithread Librerie per i thread Problemi nella programmazione multithread Thread di Linux 4.2 Motivazioni 1 La gestione dei processi
Principles of Concurrent Programming
Principles of Giuseppe Anastasi g.anastasi@iet.unipi.it Pervasive Computing & Networking Lab. () Dept. of Information Engineering, University of Pisa Overview Concetti preliminari Interazione fra processi
Corso di Laboratorio di Sistemi Operativi
Corso di Laboratorio di Sistemi Operativi Lezione 7 Alessandro Dal Palù email: alessandro.dalpalu@unipr.it web: www.unipr.it/~dalpalu Threads Un thread è l unità di base per l utilizzo della CPU. Composto
eseguire comandi dati dall'utente, utilizzando una macchina reale, di livello inferiore,
La programmazione di sistema Introduzione ai sistemi operativi multiprocesso Primitive per la gestione dei processi http://home.dei.polimi.it/silvano/acso.htm Il sistema ste operativo Il Sistema Operativo
istruzioni eseguite in ordine predeterminabile in base al codice del programma e dei valori dei dati in ingresso
Programmazione Concorrente sequenze critiche e mutua esclusione istruzioni atomiche deadlock sincronizzazione e semafori settembre 2009 programmazione concorrente 1 modello di esecuzione sequenziale istruzioni
Esercitazione 2! Mutex e semafori POSIX. 3 Novembre 2016
Esercitazione 2! Mutex e semafori POSIX 3 Novembre 2016 Strumenti di sincronizzazione nella libreria LinuxThread I semafori nelle librerie pthread e LinuxThreads La libreria pthread definisce soltanto
Ottenere una modifica del parametro attuale
Ottenere una modifica del parametro attuale Le variabili passate come parametri a una funzione, se alterate durante l esecuzione, non cambiano valore all uscita dalla funzione (parametri passati per valore)
I thread nel sistema operativo LINUX: Linuxthreads
I thread nel sistema operativo LINUX: Linuxthreads LinuxThreads: Caratteristiche Processi leggeri realizzati a livello kernel System call clone: int clone(int (*fn) (void *arg), void *child_stack, int
I Processi nel Sistema Operativo Unix. Gerarchie di processi Unix. Stati di un processo Unix. Stati di un processo Unix.
I Processi nel Sistema Operativo Unix Processi Unix Unix è un sistema operativo multiprogrammato a divisione di tempo: l unità di computazione è il processo. Caratteristiche del processo Unix: processo
Gestione dinamica della memoria
Programmazione M-Z Ingegneria e Scienze Informatiche - Cesena A.A. 2016-2017 Gestione dinamica della memoria Pietro Di Lena - pietro.dilena@unibo.it A pessimistic programmer sees the array as half empty.
Sistemi Operativi. Marzo-Giugno 2011 matricole congrue 0 mod 3. Controllo dei processi - I
Marzo-Giugno 2011 matricole congrue 0 mod 3 Controllo dei processi - I Controllo dei processi Creazione di nuovi processi Esecuzione di programmi Processo di terminazione Altro 2 1 Identificatori di processi
Threads: 1. Concetti di base 2. Threads in sistemi operativi attuali (NT/UNIX)
Sistemi Operativi I Corso di Laurea in Ingegneria Informatica Facolta di Ingegneria, Universita La Sapienza Docente: Francesco Quaglia Threads: 1. Concetti di base 2. Threads in sistemi operativi attuali
Sistemi Operativi GESTIONE DEI PROCESSI. D. Talia - UNICAL. Sistemi Operativi 4.1
GESTIONE DEI PROCESSI 4.1 Processi Concetto di Processo Scheduling di Processi Operazioni su Processi Processi Cooperanti Concetto di Thread Modelli Multithread I thread in diversi S.O. 4.2 Concetto di
System Calls per la Gestione dei Processi
System Calls per la Gestione dei Processi Domenico Cotroneo Dipartimento di Informatica e Sistemistica Università degli Studi di Napoli Federico II Roadmap Process Context Identificativi getpid() getppid()
Spazio di indirizzamento virtuale
Programmazione M-Z Ingegneria e Scienze Informatiche - Cesena A.A. 016-01 Spazio di indirizzamento virtuale Pietro Di Lena - pietro.dilena@unibo.it // The function name says it all int stack_overflow (){
Le risorse. Alcune definizioni
Le risorse Dicesi risorsa un qualunque oggetto, fisico o logico, di cui un processo necessita per portare a termine la sua evoluzione. Poiché un processo evolve eseguendo istruzioni (procedure), una risorsa
Il linguaggio C. Puntatori e dintorni
Il linguaggio C Puntatori e dintorni 1 Puntatori : idea di base In C è possibile conoscere e denotare l indirizzo della cella di memoria in cui è memorizzata una variabile (il puntatore) es : int a = 50;
Architettura dei calcolatori e sistemi operativi. Il Nucleo del Sistema Operativo. N4 I servizi di Sistema
Architettura dei calcolatori e sistemi operativi Il Nucleo del Sistema Operativo N4 I servizi di Sistema 04.01.2016 Avviamento, inizializzazione e interprete comandi Al momento dell avviamento (bootstrap)
Introduzione al C. Unità Gestione Dinamica della Memoria
Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Introduzione al C Unità Gestione Dinamica della Memoria D. Bloisi, A. Pennisi, S. Peluso, S. Salza Gestione
Laboratorio di Sistemi Operativi Marzo-Giugno 2008 matricole congrue 0 mod 3
Marzo-Giugno 2008 matricole congrue 0 mod 3 Controllo dei processi - I Controllo dei processi Creazione di nuovi processi Esecuzione di programmi Processo di terminazione Altro 2 1 Identificatori di processi
Perche le CPU multicore
Perche le CPU multicore I processi industriali producono chip sempre piu densi in termini di transistor 2000 Inoltre: Watt ~ Volt 2 x frequenza Frequenza ~ Volt Watt ~ frequenza 3 Il rapporto Watt/mm 2
I Thread. Laboratorio Software 2008-2009 M. Grotto R. Farina
I Thread M. Grotto R. Farina Sommario 1. I Thread Introduzione 2. Creazione e terminazione Utilizzo Scheduling dei processi 3. Comunicazione 4. Attributi Passaggio di parametri Funzioni utili Descrizione
La gestione della memoria dinamica Heap
Laboratorio di Algoritmi e Strutture Dati La gestione della memoria dinamica Heap Prof. Luigi Lamberti 2005 Cenni sui Processi Un Programma è un insieme di Istruzioni memorizzato in un file con le costanti
Computazione multi-processo. Condivisione, Comunicazione e Sincronizzazione dei Processi. Segnali. Processi e Threads Pt. 2
Computazione multi-processo Avere più processi allo stesso momento implica/richiede Processi e Threads Pt. 2 Concorrenza ed efficienza Indipendenza e protezione dei dati ma deve prevedere/permettere anche:
La torta caprese. I Thread. L analogia. L analogia. Parallelismo e concorrenza. Processi con sequenze di esecuzione singole e multiple.
Introduzione I Thread Parallelismo e concorrenza Thread a livello utente e nucleo I modelli multithread Aspetti sui thread Pthreads Solaris 2 Threads Windows 2000 Threads Linux Threads Java Threads Ingredienti
Modelli di programmazione parallela
Modelli di programmazione parallela Oggi sono comunemente utilizzati diversi modelli di programmazione parallela: Shared Memory Multi Thread Message Passing Data Parallel Tali modelli non sono specifici
Fondamenti di Informatica T. Linguaggio C: i puntatori
Linguaggio C: i puntatori Il puntatore E` un tipo di dato, che consente di rappresentare gli indirizzi delle variabili allocate in memoria. Dominio: Il dominio di una variabile di tipo puntatore è un insieme
Scope delle variabili e passaggio parametri. Danilo Ardagna Politecnico di Milano
Scope delle variabili e passaggio parametri Danilo Ardagna Politecnico di Milano 1-4-2014 Introduzione! Con le funzioni è stato introdotto un meccanismo per definire dei piccoli programmi all interno di
Allocazione dinamica della memoria
Allocazione dinamica della memoria Allocazione statica: limiti Per quanto sappiamo finora, in C le variabili sono sempre dichiarate staticamente la loro esistenza deve essere prevista e dichiarata a priori
Architettura dei calcolatori e sistemi operativi. M2 Organizzazione della memoria virtuale Struttura dello spazio virtuale kernel e utente
Architettura dei calcolatori e sistemi operativi M2 Organizzazione della memoria virtuale Struttura dello spazio virtuale kernel e utente 18.01.2015 Architettura Intel x64 Lo spazio di indirizzamento virtuale
Modelli di interazione tra processi
Modelli di interazione tra processi Modello a memoria comune (ambiente globale, global environment) Modello a scambio di messaggi (ambiente locale, message passing) 1 Modello a memoria comune Il sistema
Linguaggio C: PUNTATORI
Linguaggio C: PUNTATORI I puntatori sono una delle più importanti caratteristiche del linguaggio C. Permettono di lavorare a basso livello, mantenendo flessibilità e praticità. Il C utilizza molto i puntatori
Funzioni. (Passaggio dei parametri per riferimento) Passaggio dei parametri
Funzioni (Passaggio dei parametri per riferimento) Passaggio dei parametri Per passaggio dei parametri si intende l associazione fra parametri attuali e parametri formali che avviene al momento della chiamata
Controllo dei Processi 1
Controllo dei Processi 1 I processi Nei sistemi Unix/Linux ogni processo ne può generare altri. Il processo che li genera è detto processo padre (parent process), mentre i processi generati sono detti
Strutture Dati Dinamiche
Strutture Dati Dinamiche Motivazioni Le variabili considerate fino a questo punto devono essere dichiarate staticamente, ossia la loro esistenza, il loro nome e la loro dimensione devono essere previsti
Lezione 5. Processi e thread. Sistemi operativi. Marco Cesati System Programming Research Group Università degli Studi di Roma Tor Vergata
Lezione 5 Sistemi operativi 24 marzo 2015 System Programming Research Group Università degli Studi di Roma Tor Vergata SO 15 5.1 Di cosa parliamo in questa lezione? Relazione tra processi e thread, e relative
Puntatori. Unità 6. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR
Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Domenico Daniele Bloisi Docenti Parte I prof. Silvio Salza salza@dis.uniroma1.it http://www.dis.uniroma1.it/~salza/fondamenti.htm
Puntatori. Unità 6. Corso di Laboratorio di Informatica Ingegneria Clinica BCLR. Domenico Daniele Bloisi
Corso di Ingegneria Clinica BCLR Domenico Daniele Bloisi Docente Ing. Domenico Daniele Bloisi, PhD Ricercatore Dipartimento di Ingegneria Informatica, Automatica e Gestionale Antonio Ruberti Via Ariosto
Corso di Fondamenti di Informatica
Corso di Fondamenti di Informatica Puntatori a funzioni 1 Funzioni che restituiscono puntatori Il valore di ritorno restituito da una funzione può essere di qualsiasi tipo, compreso il tipo puntatore.
Lab 1: Java Multithreading
Dept. of Computer Science Lab 1: Java Multithreading Matteo Camilli matteo.camilli@unimi.it Laboratorio di Sistemi Operativi a.a. 2015/16 Università degli Studi di Bergamo 1 Outline Programmazione multithreading
Capitolo 5 - Funzioni
Capitolo 5 - Funzioni Divide and conquer Introduzione Costruire un programma da pezzi più piccoli o da singole componenti Questi pezzi più piccoli sono chiamati moduli Ogni singolo pezzo è più facilmente
Ogni variabile in C è una astrazione di una cella di memoria a cui corrisponde un nome, un contenuto e un indirizzo.
Ogni variabile in C è una astrazione di una cella di memoria a cui corrisponde un nome, un contenuto e un indirizzo. int a = 5; a 5 α=&a Esistono in C particolari variabili dette puntatori che possono
L'Allocazione Dinamica della Memoria nel linguaggio C
L'Allocazione Dinamica della Memoria nel linguaggio C Prof. Rio Chierego riochierego@libero.it http://www.riochierego.it/informatica.htm Sommario Questo documento tratta l'allocazione dinamica della memoria
Programmazione con Java
Programmazione con Java Classi e istanze in Java Definizione di classe in Java A meno che non si usino classi già scritte da altri, prima di poter creare un qualsiasi oggetto devo creare la sua rappresentazione:
Funzioni, Stack e Visibilità delle Variabili in C
Funzioni, Stack e Visibilità delle Variabili in C Programmazione I e Laboratorio Corso di Laurea in Informatica A.A. 2016/2017 Calendario delle lezioni Lez. 1 Lez. 2 Lez. 3 Lez. 4 Lez. 5 Lez. 6 Lez. 7
Allocazione dinamica
Allocazione dinamica Quando non si sa a priori quanto un array debba essere grande allocazione dinamica di array Quando si deve restituire un array come risultato di una funzione (a meno di non barare
Sistemi Operativi II. Thread: TSD, Attributi
Sistemi Operativi II Thread: TSD, Attributi Dati Privati di un Thread I thread condividono il segmento dati Complementarietà rispetto ai processi thread semplice scambiare dati con altri thread appositi
Programmazione a Oggetti Lezione 7. Il linguaggio Java: aspetti generali
Programmazione a Oggetti Lezione 7 Il linguaggio Java: aspetti generali Sommario Obiettivi di JAVA Portabilità: produrre codice eseguibile su più piattaforme (JVM) Affidabilità: Evitare il più possibile
Funzioni e. Alessandra Giordani Mercoledì 16 maggio 2012
Funzioni e passaggio parametri Alessandra Giordani agiordani@disi.unitn.it Mercoledì 16 maggio 2012 http://disi.unitn.it/~agiordani/ Cosa vedremo oggi Le funzioni Il passaggio dei parametri Le dichiarazioni
Relazione tra thread e processi
I Thread POSIX Relazione tra modello a processi e a thread Creazione di un thread Attesa Distacco Terminazione Ricerca e confronto Inizializzazione dinamica Relazione tra thread e processi Nel modello
Cosa e un processo? Stato del processo
Cosa e un processo? LABORATORIO DI PROGRAMMAZIONE 2 Corso di laurea in matematica Un sistema operativo esegue programmi di varia natura: Compilatori, word processor, programmi utente, programmi di sistema,
Perché il linguaggio C?
Il linguaggio C 7 Perché il linguaggio C? Larga diffusione nel software applicativo Standard di fatto per lo sviluppo di software di sistema Visione a basso livello della memoria Capacità di manipolare
L Allocazione Dinamica della Memoria
L Allocazione Dinamica della Memoria Maurizio Palesi DIIT Università di Catania Viale Andrea Doria 6, 95125 Catania mpalesi@diit.unict.it http://www.diit.unict.it/users/mpalesi Sommario Questo documento
Parametri by reference. Funzioni. Passaggio dei parametri. Parametri by reference. Soluzione. Problemi
Funzioni Introduzione Operatori & e * Passaggio by reference Passaggio di vettori Esercizio strcpy 2 Passaggio dei parametri Il linguaggio C prevede il passaggio di parametri by value Il chiamato non può
Passaggio parametri puntatore
Passaggio parametri puntatore Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER Domenico Daniele Bloisi Docenti Metodi Numerici prof. Vittoria Bruni vittoria.bruni@sbai.uniroma1.it
Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.
Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2014-15 Pietro Frasca Lezione 20 Martedì 16-12-2014 1 System call per la gestione dei processi Creazione
Il puntatore. Il puntatore
Il puntatore È un tipo scalare, che consente di rappresentare gli indirizzi delle variabili allocate in memoria. Il dominio di una variabile di tipo puntatore è un insieme di indirizzi: Il valore di una
Introduzione ai puntatori in C Definizione
Introduzione ai puntatori in C Definizione Un puntatore è una variabile che contiene l indirizzo di un altra variabile Tramite i puntatori si può quindi accedere a un oggetto indirettamente (si usa il
Fondamenti di informatica, Sez. Ing. Informatica, Ing. Gestionale, Ing. Ambientale II prova in itinere, 29 Gennaio 2009
Fondamenti di informatica, Sez. Ing. Informatica, Ing. Gestionale, Ing. Ambientale II prova in itinere, 29 Gennaio 2009 Esercizio 1 (punti 3) Sia data la funzione ricorsiva seguente: void elabora (unsigned
Università degli Studi di Cassino e del Lazio Meridionale Corso di Fondamenti di Informatica Allocazione dinamica di memoria
di Cassino e del Lazio Meridionale Corso di Informatica Allocazione dinamica di memoria Anno Accademico 2015/2016 Francesco Tortorella Allocazione dinamica di memoria Finora abbiamo considerato variabili
Allocazione statica della memoria
2015 - Roberta Gerboni 1 2 Allocazione statica della memoria Cosa succede nella memoria del computer quando il un programma vengono dichiarate delle variabili? memoria Ad esempio: int main() 57 { int x=
Allocazione Dinamica della Memoria
Allocazione Dinamica della Memoria Elisa Marengo Università degli Studi di Torino Dipartimento di Informatica Elisa Marengo (UNITO) Allocazione Dinamica della Memoria 1 / 10 Scelta delle variabili Quando
Assembly (3): le procedure
Architettura degli Elaboratori e delle Reti Lezione 13 Assembly (3): le procedure Proff. A. Borghese, F. Pedersini Dipartimento di Scienze dell Informazione Università degli Studi di Milano L 13 1/23 Chiamata
INTERPROCESS COMMUNICATION 27
INTERPROCESS COMMUNICATION 27 - Le comunicazioni tra processi (IPC, Intreprocess Communication) sono realizzate mediante strutture dati rese disponibili dal kernel. Sono disponibili 3 tipologie di comunicazioni
Java Virtual Machine. Indipendenza di java dalla macchina ospite. I threads in Java
programmi sorgente: files.java compilatore Indipendenza di java dalla macchina ospite Programmi java Programmi java Programmi java files.class bytecode linker/loader bytecode bytecode Java API files.class
Unità Didattica 4 Linguaggio C. Vettori. Puntatori. Funzioni: passaggio di parametri per indirizzo.
Unità Didattica 4 Linguaggio C Vettori. Puntatori. Funzioni: passaggio di parametri per indirizzo. 1 Vettori Struttura astratta: Insieme di elementi dello stesso tipo, ciascuno individuato da un indice;
Tempo di vita e scope delle variabili
Tempo di vita e scope delle variabili Richiami sulla struttura di un programma C Un programma C deve essere contenuto in uno o più file (salvo diversa specifica, per ora si assume tutto in un unico file):
I Processi nel SO UNIX
I Processi nel SO UNIX 1 Processi UNIX UNIX è un sistema operativo multiprogrammato a divisione di tempo: unità di computazione è il processo Caratteristiche del processo UNIX: processo pesante con codice
Unità Didattica 1 Linguaggio C. Fondamenti. Struttura di un programma.
Unità Didattica 1 Linguaggio C Fondamenti. Struttura di un programma. 1 La storia del Linguaggio C UNIX (1969) - DEC PDP-7 Assembly Language BCPL - un OS facilmente accessibile che fornisce potenti strumenti
Processi e thread. Dipartimento di Informatica Università di Verona, Italy. Sommario
Processi e thread Dipartimento di Informatica Università di Verona, Italy Sommario Concetto di processo Stati di un processo Operazioni e relazioni tra processi Concetto di thread Gestione dei processi
Allocazione Dinamica. Allocazione Statica. malloc() La funzione malloc()
Allocazione Statica Finora abbiamo visto che le variabili sono sempre definite staticamente. Questo è un limite perché la loro esistenza deve essere prevista e dichiarata a priori. In particolare per variabili
Argomenti Avanzati.! I puntatori! Stack! Visibilità delle Variabili
Linguaggio C Argomenti Avanzati! I puntatori! Stack! Visibilità delle Variabili 2 ! Il C consente di associare ai tipi di dati nomi definiti dal programmatore, mediante la parola chiave typedef! Dal punto
Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.
Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2016-17 Pietro Frasca Lezione 5 Martedì 25-10-2016 Definizione di processo Esiste una distinzione concettuale
Linguaggio C: le funzioni. Introduzione e sintassi
ISIS "Guido Tassinari" di Pozzuoli Indirizzo Informatico - Articolazione Informatica Informatica Prof. A.S. 2012/2013 Linguaggio C: le funzioni. Introduzione e sintassi 21/10/2012 Introduzione Spesso alcuni
Programmazione (imperativa)
Programmazione (imperativa) Corso di Laurea in Informatica Roberto Cordone DI - Università degli Studi di Milano Lezioni: Lunedì 12.00-13.00 e 14.00-16.00 Mercoledì 14.00-17.00 Laboratorio: Giovedì 12.00-13.00
Programmazione Orientata agli Oggetti. Emilio Di Giacomo e Walter Didimo
Programmazione Orientata agli Oggetti Emilio Di Giacomo e Walter Didimo Una metafora dal mondo reale la fabbrica di giocattoli progettisti Un semplice giocattolo Impara i suoni Dall idea al progetto Toy
Puntatori in C. Puntatori. Variabili tradizionali Esempio: int a = 5; Proprietà della variabile a: nome: a
Puntatori in C Puntatori Variabili tradizionali indirizzo int a = 5; A00E... Proprietà della variabile a: nome: a A010 A012 5 tipo: int A014 valore: 5 indirizzo: A010 Finora abbiamo usato solo le prime
I Processi. Il Concetto di Processo
I Processi Il Concetto di Processo Il processo è un programma in esecuzione È l unità di esecuzione all interno del SO Solitamente, l esecuzione di un processo è sequenziale (le istruzioni vengono eseguite
Thread. Thread. Creazione di nuovi processi. Applicazioni reali. La creazione di un nuovo processo costa I tempi di context switch sono elevati
Thread Thread Motivazioni Modelli Multithread Pthread, Threads in Win32, Thread in Java Problematiche relative ai Thread Thread Windows XP Thread Linux Applicazioni reali Creazione di nuovi processi Browser
Allocazione dinamica della memoria
Andrea Marin Università Ca Foscari Venezia Laurea in Informatica Corso di Programmazione part-time a.a. 2011/2012 Tipi di memoria dati Nella macchina astratta C esistono tre tipi di memoria per allocare
I thread. Operating System Concepts 9 th Edition
I thread I thread Motivazioni e definizione Programmazione multicore Modelli di programmazione multithread Librerie per i thread Threading implicito Problemi nella programmazione multithread Thread di
Stringhe e allocazione dinamica della memoria
Stringhe e allocazione dinamica della memoria Esercizio Scrivere un programma strings.c che legge da standard input una sequenza di parole separate da uno o più spazi, e stampa le parole lette, una per
Linguaggio C - sezione dichiarativa: costanti e variabili
Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Linguaggio C - sezione dichiarativa: costanti e variabili La presente
Puntatori in C Lucidi della Pof.ssa Pazienza
Puntatori in C Lucidi della Pof.ssa Pazienza http://www.uniroma2.it/didattica/foi2/ Puntatori L operatore di indirizzo & Indirizzi, puntatori Aritmetica dei puntatori L operatore di dereferenziazione *
Lezione 9: Puntatori a funzioni. Tipi enumerativi e orientati ai bit
Lezione 9: Puntatori a funzioni. Tipi enumerativi e orientati ai bit Vittorio Scarano Laboratorio di Informatica I Corso di Laurea in Informatica Università degli Studi di Salerno Struttura della lezione
Capitolo 7 I puntatori in C
1 Capitolo 7 I puntatori in C 7.2 Dichiarazione e inizializzazione di puntatori Variabili puntatore Contengono gli indirizzi di memoria come valore Le normali variabili contengono uno specifico valore