Programmazione di Sistema

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Programmazione di Sistema"

Transcript

1 Programmazione di Sistema Massimo Bernaschi Istituto per le Applicazioni del Calcolo Mauro Picone Consiglio Nazionale delle Ricerche Viale Manzoni, Rome - Italy m.bernaschi@iac.cnr.it

2 Libreria C: Allocazione dinamica della memoria #include <stdlib.h> void *calloc(size_t nmemb, size_t size); /* heap */ void *malloc(size_t size); /* heap */ void *realloc(void *ptr, size_t size); /* heap */ void *alloca(size_t size); /* stack */ void free(void *ptr); Unix: char *strdup(const char *s); /* call malloc */ void *sbrk(ptrdiff_t increment); /* incremento */ 2

3 Errori comuni Non controllare il valore di ritorno delle funzioni di allocazione; non allocare spazio per il carattere di terminazione (NULL) di una stringa; char *p; int len=strlen("abcd"); p=malloc(len); strcpy(p,"abcd"); chiamare la malloc passando come argomento zero; chiamare free più di una volta sullo stesso puntatore; chiamare free su un area di memoria che non era stata allocata da malloc, calloc, realloc, strdup; accedere un area di memoria dopo che è stata liberata; non liberare la memoria non più utilizzata (memory leak); 3

4 Informazioni Aggiuntive Quando è invocata con un NULL pointer realloc si comporta come malloc; il secondo argomento di realloc è il nuovo formato della regione, non la differenza tra il vecchio ed il nuovo formato; se viene inclusa stdlib.h, non è necessario applicare un cast esplicito al puntatore ritornato dalle funzioni XXalloc; 4

5 Risorse Variabili d ambiente speciali (come MALLOC CHECK); Può assumere i valori 0, 1, 2. Su alcuni sistemi (quelli derivati da SVR4) sono disponibili delle funzioni (i.e., mallinfo o mallopt) per ottenere informazioni statistiche o fare il tuning del meccanismo di gestione della memoria dinamica; Electric Fence (un debugger per la malloc). in una frase: usare nella fase di link dell applicazione la libefence.a; man libefence per ottenere informazioni aggiuntive. 5

6 Gestione della memoria dinamica La maggior parte delle implementazioni allocano dello spazio aggiuntivo oltre a quello richiesto per tenere informazioni come la dimensione del blocco allocato; un puntatore al successivo blocco allocato. Scrivere oltre la fine di un blocco allocato significa sovrascrivere queste informazioni. Le conseguenze (in genere nefaste...) diventano a volte visibili solo a grande distanza (in termini di tempo di esecuzione o di zona di programma) dal punto in cui è avvenuta la sovrascrittura. 6

7 Gestione della memoria in Win32 7

8 Gestione della memoria in Win32 Ogni processo in Win32 ha uno spazio di indirizzamento virtuale di 4GB. Win32 rende disponibile almeno uno spazio di 2GB per il processo; il resto dello spazio di indirizzamento virtuale è allocato per dati e codice condivisi, codici di sistema, drivers...; per esplorare la struttura della memoria: VOID GetSystemInfo(LPSYSTEM_INFO lpsysteminfo) La struttura LPSYSTEM INFO contiene informazioni quali la dimensione delle pagine di memoria ed i limiti di indirizzamento del processo. 8

9 typedef struct _SYSTEM_INFO { union { DWORD dwoemid; struct { WORD wprocessorarchitecture; WORD wreserved; }; }; DWORD dwpagesize; LPVOID lpminimumapplicationaddress; LPVOID lpmaximumapplicationaddress; DWORD_PTR dwactiveprocessormask; DWORD dwnumberofprocessors; DWORD dwprocessortype; DWORD dwallocationgranularity; WORD wprocessorlevel; WORD wprocessorrevision; } SYSTEM_INFO; 9

10 Gestione della memoria in Win32 Win32 mantiene pool di memoria negli heap. Un processo può utilizzare più heap ma, nella maggior parte dei casi, è sufficiente uno solo. se viene utilizzato un solo heap è possibile utilizzare direttamente le funzioni della libreria C (malloc, free,...); in questo caso non vengono però generate da parte di Win32 le eccezioni. Gli heap sono oggetti nel senso Win32. Sono quindi gestiti tramite handle. 10

11 Ogni processo ha un handle di default che può essere ottenuto tramite la HANDLE GetProcessHeap(VOID) Notare che il fallimento è indicato da un valore di ritorno NULL. 11

12 Heap multipli in Win32 Un nuovo heap viene creato con la primitiva: HANDLE HeapCreate( DWORD floptions, SIZE_T dwinitialsize, SIZE_T dwmaximumsize); SIZE T è definito come un unsigned int a 32 o 64 bit a seconda di quale flag di compilazione viene usato ( WIN32 o WIN64). Il campo floptions determina, ad esempio, se deve essere generata un eccezione nel caso di fallimento di un operazione di allocazione (HEAP GENERATE EXCEPTIONS) I due campi dwinitialsize e dwmaximumsize determinano rispettivamente la dimensione iniziale e quella massima che è 12

13 possibile allocare nel nuovo heap. Se il campo dwmaximumsize è messo a 0 non c è limitazione alla dimensione allocabile (a meno di limiti di sistema quali la dimensione totale dello spazio di indirizzamento). Un heap può essere rimosso dalla funzione: BOOL HeapDestroy(HANDLE hheap); Distruggere un heap è una maniera veloce di liberare strutture dati senza attraversarle (nel caso fossero, ad esempio, delle liste). 13

14 Gestione dell heap È possibile ottenere blocchi di memoria da un certo heap per mezzo della funzione: LPVOID HeapAlloc{HANDLE hheap, DWORD dwflags, SIZE_T dwbytes)} Oltre ai flag visti in precedenza è possibile utilizzare il flag HAVE ZERO MEMORY per inizializzare la memoria allocata a zero. La dimensione del blocco per heap nongrowable è limitata a 0x7FFF8 bytes. Per liberare un blocco: BOOL HeapFree(HANDLE hheap, DWORD dwflags, LPVOID lpmem) Per cambiare la dimensione di un blocco: LPVOID HeapReAlloc(HANDLE hheap, DWORD dwflags, LPVOID lpmem, SIZE_T dwbytes) 14

15 Il flag aggiuntivo interessante è: HAVE REALLOC IT PLACE ONLY. È possibile conoscere la dimensione di un blocco allocato con: DWORD HeapSize (HANDLE hheap, DWORD dwflags, LPCVOID lpmem) Le eccezioni generate dal sistema di gestione della memoria sono STATUS NO MEMORY e STATUS ACCESS VIOLATION. Altre funzioni di gestione dell heap: HeapCompact, HeapValidate, HeapWalk. Quest ultima, in particolare, enumera i blocchi in un heap. esempio: programma sortbt 15

16 File mappati in memoria in Win32 Il primo passo è creare un file mapping object: HANDLE CreateFileMapping( HANDLE hfile, LPSECURITY_ATTRIBUTES lpsa, DWORD fdwprotect, DWORD dwmaximumsizehigh, DWORD dwmaximumsizelow, LPCTSTR lpszmapname) l handle INVALID HANDLE VALUE (0xFFFFFFFF) è utilizzato per far riferimento allo spazio di paginazione, soprattutto per la comunicazione tra processi senza creare un file separato. L oggetto mappato non può crescere, ma può essere specificata una dimensione più grande di quella del file che in questo modo cresce automaticamente. 16

17 Il nome lpszmapname è case-sensitive (è possibile usare NULL se non si vuole condividere memoria) un flag importante è PAGE_WRITECOPY. Il valore di ritorno in caso di errore è NULL. È possibile ottenere un handle su un file mapping esistente con la funzione: HANDLE OpenFileMapping( DWORD dwdesideredaccess, BOOL binherithandle, LPCTSTR lpszmapname) Nel caso in cui si voglia condividere memoria utilizzando il file mapping: Il primo processo crea il mapping con un certo nome 17

18 I successivi processi aprono il mapping con lo stesso nome (la OpenFileMapping fallisce se l oggetto con il nome dato non esiste). La CloseHandle distrugge gli handle creati in entrambi i casi Il passo successivo per l utilizzo dei file mappati in memoria è allocare una porzione dello spazio di indirizzamento del processo. Dal punto di vista del programmatore questa allocazione è simile a HeapAlloc: LPVOID MapViewOfFile ( HANDLE hmapobject, DWORD fdwaccess, DWORD dwoffsethigh, DWORD dwoffsetlow, SIZE_T cbmap) 18

19 Viene ritornato un puntatore al blocco (o file view) l offset può essere 0 ma, in caso contrario, deve essere un multiplo di 64K. cbmap è la dimensione, in byte, della regione mappata. Il valore 0 indica l intero file al momento della chiamata. La funzione MapViewOfFileEx è simile ma è necessario specificare l indirizzo di memoria iniziale della porzione di spazio di indirizzamento da utilizzare. La funzione BOOL UnMapViewOfFile(LPVOID lpbaseaddress) rilascia la porzione di spazio di indirizzamento allocata. La funzione FlushViewOfFile forza il sistema a scrivere le pagine modificate (dirty) a disco. Normalmente non è una buona idea accedere un file attraverso il 19

20 mapping in memoria e le primitive di I/O tradizionale (ReadFile, WriteFile). esempio: programma Asc2UnMM.c (chaptr06). La sequenza standard richiesta dal file mapping può essere riassunta come segue: 1. Si apre il file (è necessario avere accesso almeno GENERIC READ) 2. Se il file è nuovo si definisce la lunghezza (ad esempio con la SetFilePointer) 3. Si mappa il file con la CreateFileMapping o OpenFileMapping 4. Si crea una view con MapViewOfFile 5. Si accede il file attraverso dei riferimenti in memoria. 20

21 Condivisione di memoria 21

22 Memory Mapped I/O in UNIX #include <unistd.h> #include <sys/mman.h> void *mmap(void *start, size_t length, int prot, int flags, int fd, off_t offset); int munmap(void *start, size_t length); int msync(const void *start, size_t length, int flags); Una regione mappata in memoria è ereditata dal processo figlio dopo una fork Una regione mappata in memoria NON è ereditata dal nuovo programma dopo un exec 22

23 Memory Mapped I/O Lo pseudo file /dev/zero è una sorgente infinita in lettura di bytes a 0. Più processi possono condividere questa regione se un comune antenato specifica il flag MAP SHARED nella chiamata alla funzione mmap. Il flag MAP PRIVATE rende invece le modifiche private al processo (in qualche modo equivalente al PAGE WRITECOPY sotto Windows). Sui sistemi BSD esiste invece il concetto di anonymous memory mapping che permette di specificare -1 come file descriptor se viene utilizzato (ed è supportato) il flag MAP ANON. 23

24 Spazio di indirizzamento in Unix/Linux 24

25 Dynamic Link Libraries (DLL) in Win32 Un esempio di utilizzo del file mapping in Win32 è dato dalle Dynamic Link Libraries (DLL). Le librerie di funzioni usate da un programma possono essere statiche o dinamiche Nel caso di librerie statiche, la dimensione del programma eseguibile cresce considerevolmente maggiore occupazione di spazio disco; maggiore occupazione di memoria durante l esecuzione. Le librerie dinamiche evitano questo problema: le funzioni della libreria non sono incluse nel programma durante la fase di link. Sono invece incluse al caricamento per l esecuzione (implicit linking) o direttamente in esecuzione 25

26 (explicit linking). Le librerie dinamiche possono essere utilizzate in forma condivisa (shared libraries): più programmi condividono una singola DLL e solo una copia è caricata in memoria; tutti i programmi includono il codice della DLL nel proprio spazio di indirizzamento; nuove versioni/implementazioni possono essere utilizzate semplicemente modificando la DLL senza richiedere modifiche/compilazioni ai singoli programmi. La DLL in esecuzione utilizza lo stack del thread chiamante. L intera Win32 API è supportata tramite una DLL. Il concetto di shared library è presente anche in Unix/Linux. Le DLL dovrebbero sempre essere scritte in modo da essere thread-safe. 26

27 Implicit linking in Win32: La procedura di costruzione dipende dal compilatore. Una funzione che è parte di una DLL deve essere dichiarata esportabile. Ad esempio con il Microsoft C o MinGW si utilizza la speciale keyword declspec (dllexport) _declspec (dllexport) DWORD MyFunction(...); Viene quindi creato un file.dll ed uno.lib. Quest ultimo è quello da utilizzare nella fase di linking. Il programma chiamante dichiara che la funzione deve essere importata usando declspec (dllimport). Queste dichiarazioni non sono necessarie sotto Unix/Linux. In fase di esecuzione il file.dll deve essere disponibile al programma chiamante. È possibile esportare/importare sia funzioni che variabili. 27

28 Explicit linking in Win32: Un programma può richiedere che una specifica DLL venga caricata con la funzione HINSTANCE LoadLibrary(LPCTSTR lpfilename); In caso di fallimento viene ritornato NULL. Possono essere caricati sia DLL che file eseguibili.exe. Per rimuovere la libreria: BOOL FreeLibrary(HINSTANCE hinstlib); questa funziona libera le risorse allocate dal chiamante ma la DLL rimane caricata se altri processi la stanno utilizzando (reference count > 0). 28

29 Per ottenere l indirizzo di un qualsiasi entry point: FARPROC GetProcAddress( HMODULE hinstlib LPCSTR lpprocname); i tipi HMODULE e HINSTANCE coincidono. Notare l anacronistico tipo del valore di ritorno (FARPROC) esempio: programma atouel.c in chaptr06. In una DLL può essere specificato un entry point speciale che viene invocato ogni volta che un processo carica o rimuove (implicitamente o esplicitamente) la DLL: BOOL WINAPI DllMain( HINSTANCE hinstdll, DWORD fdwreason, LPVOID lpvreserved); Il sistema serializza l accesso alla funzione definita da DllMain. 29

30 Librerie dinamiche in Unix/Linux #include <dlfcn.h> void* dlopen(const char* path, int mode); Ritorna un handle da utilizzare nelle successive chiamate a: #include <dlfcn.h> void *dlsym(void *handle, const char *symbol); mode può assumere vari valori (in OR tra di loro): RLTD_LAZY, RTLD_NOW, RTLD_GLOBAL, RTLD_LOCAL, etc.. 30

Gestione dinamica della memoria

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.

Dettagli

Il linguaggio C. Puntatori e dintorni

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;

Dettagli

Introduzione al C Lez. 4. Allocazione Dinamica della memoria

Introduzione al C Lez. 4. Allocazione Dinamica della memoria Introduzione al C Lez. 4 Allocazione Dinamica della memoria Allocazione dinamica memoria In C la memoria può essere anche gestita in modo dinamico, attraverso l allocazione esplicita di blocchi di memoria

Dettagli

Liste concatenate e allocazione dinamica

Liste concatenate e allocazione dinamica Liste concatenate e allocazione dinamica Laboratorio di Programmazione I Corso di Laurea in Informatica A.A. 2017/2018 Calendario delle lezioni Ogni lezione consta di una spiegazione assistita da slide,

Dettagli

Introduzione al C Lez. 4

Introduzione al C Lez. 4 Introduzione al C Lez. 4 Allocazione Dinamica della memoria http://www.di.unipi.it/~rossano/algo1/lez4.pdf Allocazione dinamica memoria In C la memoria può essere anche gestita in modo dinamico, attraverso

Dettagli

Allocazione dinamica della memoria

Allocazione dinamica della memoria Allocazione dinamica della memoria Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica Violetta Lonati

Dettagli

La gestione della memoria dinamica Heap

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

Dettagli

Lezione IX Gestione dinamica della memoria

Lezione IX Gestione dinamica della memoria Programmazione e Laboratorio di Programmazione Lezione IX Gestione dinamica della memoria Programmazione e Laboratorio di Programmazione: Gestione dinamica della memoria 1 Direttiva per il preprocessore

Dettagli

Lezione IX Gestione dinamica della memoria

Lezione IX Gestione dinamica della memoria Programmazione e Laboratorio di Programmazione Lezione IX Gestione dinamica della memoria Programmazione e Laboratorio di Programmazione: Gestione dinamica della memoria 1 Operatore sizeof() Buffer: una

Dettagli

Processi - II. Franco Maria Nardini

Processi - II. Franco Maria Nardini Processi - II Franco Maria Nardini Processi Programmi in esecuzione in memoria sono chiamati processi. Caricati in memoria da una delle sei funzioni exec(3). Ogni processo ha un identificatore univoco

Dettagli

Processi - II. Franco Maria Nardini

Processi - II. Franco Maria Nardini Processi - II Franco Maria Nardini Memory Layout un programma C è composto dalle seguenti parti: text segments: sono le istruzioni che la CPU esegue. è condiviso in memoria (una sola copia). è read-only.

Dettagli

Per quanto sappiamo finora, in C le variabili sono sempre definite staticamente. per variabili di tipo array, in cui dover

Per quanto sappiamo finora, in C le variabili sono sempre definite staticamente. per variabili di tipo array, in cui dover ALLOCAZIONE STATICA: LIMITI Per quanto sappiamo finora, in C le variabili sono sempre definite staticamente la loro esistenza deve essere prevista e dichiarata a priori Questo può rappresentare un problema

Dettagli

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 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

Dettagli

Variabili dinamiche. Obiettivi: Presentare le variabili dinamiche, allocate e deallocate nell area HEAP, e le funzioni malloc e free

Variabili dinamiche. Obiettivi: Presentare le variabili dinamiche, allocate e deallocate nell area HEAP, e le funzioni malloc e free Variabili dinamiche Obiettivi: Presentare le variabili dinamiche, allocate e deallocate nell area HEAP, e le funzioni malloc e free 1 Tipi di variabili in C In C è possibile classificare le variabili in

Dettagli

1.7: Spazio degli Indirizzi di un Processo

1.7: Spazio degli Indirizzi di un Processo 1.7: Spazio degli Indirizzi di un Processo Obiettivo: analizzare come e quando i processi richiedono memoria al Kernel. Indirizzi logici e fisici Spazio degli indirizzi Modifiche dello spazio degli indirizzi

Dettagli

Liste concatenate e allocazione dinamica

Liste concatenate e allocazione dinamica Liste concatenate e allocazione dinamica Laboratorio di Programmazione I Corso di Laurea in Informatica A.A. 2018/2019 Argomenti del Corso Ogni lezione consta di una spiegazione assistita da slide, e seguita

Dettagli

puntatori Lab. Calc. AA 2006/07 1

puntatori Lab. Calc. AA 2006/07 1 puntatori Lab. Calc. AA 2006/07 1 Attributi di un oggetto nome o identificatore; tipo; valore (o valori); indirizzo; Lab. Calc. AA 2006/07 2 Indirizzo Consideriamo la dichiarazione con inizializzazione:

Dettagli

L apertura di un file ci restituisce un puntatore a una struttura chiamata FILE fopen:

L apertura di un file ci restituisce un puntatore a una struttura chiamata FILE fopen: I FILE L apertura di un file ci restituisce un puntatore a una struttura chiamata FILE FILE *mfptr = NULL; mfptr = fopen( nome_del_file.txt, w ); fopen: primo argomento: nome del file secondo argomento:

Dettagli

Allocazione dinamica della memoria

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

Dettagli

Introduzione al C. Lezione 4 Allocazione dinamica della memoria. Rossano Venturini. Pagina web del corso

Introduzione al C. Lezione 4 Allocazione dinamica della memoria. Rossano Venturini. Pagina web del corso Introduzione al C Lezione 4 Allocazione dinamica della memoria Rossano Venturini rossano@di.unipi.it Pagina web del corso http://didawiki.cli.di.unipi.it/doku.php/informatica/all-b/start Lezioni di ripasso

Dettagli

Allocazione dinamica della memoria

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

Dettagli

Allocazione dinamica della memoria - riepilogo

Allocazione dinamica della memoria - riepilogo Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica In breve Storage duration Allocazione dinamica della

Dettagli

Introduzione al C. Unità Gestione Dinamica della Memoria

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

Dettagli

Corso di Informatica A.A

Corso di Informatica A.A Corso di Informatica A.A. 2009-2010 Lezione 11 Corso di Informatica 2009-2010 Lezione 11 1 Utilizzo dei puntatori Funzioni Perche i Puntatori? I puntatori hanno tre importanti applicazioni: 1. Passaggio

Dettagli

File binari e file di testo

File binari e file di testo I file File binari e file di testo distinzione tra file binari file di testo si possono usare funzioni diverse per la gestione di tipi di file diversi Programmazione Gestione dei file 2 File binari e file

Dettagli

Gestione della memoria

Gestione della memoria Gestione della memoria Stefano Ferrari Università degli Studi di Milano stefano.ferrari@unimi.it Programmazione anno accademico 2017 2018 Allocazione di memoria A una variabile puntatore si può assegnare

Dettagli

L'allocazione statica: L'allocazione automatica L'allocazione dinamica:

L'allocazione statica: L'allocazione automatica L'allocazione dinamica: Allocazione L'allocazione statica: e' quella con cui sono memorizzate le variabili globali e le variabili statiche, queste vengono allocate all'avvio nel segmento dati da exec, con le distizioni che abbiamo

Dettagli

Processi. Franco Maria Nardini

Processi. Franco Maria Nardini Processi Franco Maria Nardini La funzione main il kernel gestisce l avvio del vostro codice C (attraverso una funzione exec) routine speciale di start-up che prepara l ambiente di esecuzione per il main

Dettagli

Unità 11 Allocazione dinamica

Unità 11 Allocazione dinamica Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Introduzione al C Unità 11 Allocazione dinamica S. Salza, C. Ciccotelli, D. Bloisi, S. Peluso, A. Pennisi

Dettagli

! Per quanto sappiamo finora, in C le variabili sono sempre definite staticamente

! Per quanto sappiamo finora, in C le variabili sono sempre definite staticamente ! Per quanto sappiamo finora, in C le variabili sono sempre definite staticamente!!la loro esistenza deve essere prevista e dichiarata a priori! Questo può rappresentare un problema soprattutto per variabili

Dettagli

Allocazione Dinamica della Memoria

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

Dettagli

Informatica per Statistica Riassunto della lezioni del 14/11/2012 e 16/11/2012

Informatica per Statistica Riassunto della lezioni del 14/11/2012 e 16/11/2012 Informatica per Statistica Riassunto della lezioni del 14/11/2012 e 16/11/2012 Igor Melatti Cenni sui puntatori in C Per ogni variabile normale dichiarata, il compilatore riserva una precisa quantità di

Dettagli

Allocazione statica della memoria

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=

Dettagli

Puntatori. Unità 6. Corso di Laboratorio di Informatica Ingegneria Clinica BCLR. Domenico Daniele Bloisi

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

Dettagli

Uso avanzato dei puntatori Allocazione dinamica della memoria

Uso avanzato dei puntatori Allocazione dinamica della memoria Uso avanzato dei puntatori Allocazione dinamica della memoria Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica

Dettagli

Programmazione di Sistema

Programmazione di Sistema Programmazione di Sistema Massimo Bernaschi Istituto per le Applicazioni del Calcolo Mauro Picone Consiglio Nazionale delle Ricerche Viale Manzoni, 30-00185 Rome - Italy http://www.iac.cnr.it/~massimo

Dettagli

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. 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

Dettagli

Le strutture. Una struttura C è una collezione di variabili di uno o più tipi, raggruppate sotto un nome comune.

Le strutture. Una struttura C è una collezione di variabili di uno o più tipi, raggruppate sotto un nome comune. Le strutture Una struttura C è una collezione di variabili di uno o più tipi, raggruppate sotto un nome comune. Dichiarazione di una struttura: struct point { int x; int y; }; La dichiarazione di una struttura

Dettagli

Puntatori. Unità 6. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR

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

Dettagli

Librerie. Laboratorio di Informatica Antonio Monteleone 28

Librerie. Laboratorio di Informatica Antonio Monteleone 28 Librerie Una libreria è una collezione di funzioni (classi, variabili) usata per sviluppare applicazioni. Le funzioni (classi, variabili) contenute in una libreria si dicono da questa esportate. L'uso

Dettagli

SISTEMI OPERATIVI. Linguaggio C e Linux. Diffusione dei linguaggi di programmazione IEEE Giorgio Giacinto 2016.

SISTEMI OPERATIVI. Linguaggio C e Linux. Diffusione dei linguaggi di programmazione IEEE Giorgio Giacinto 2016. SISTEMI OPERATIVI Linguaggio C e Linux Diffusione dei linguaggi di programmazione IEEE 2016 2 Diffusione dei linguaggi di programmazione IEEE 2015 e 2014 2015 2014 3 Diffusione dei linguaggi di programmazione

Dettagli

Il linguaggio C. Puntatori e dintorni

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;

Dettagli

Titolo presentazione INFORMATICA. sottotitolo A.A Milano, XX mese 20XX Laboratorio n 6 Ing. Gian Enrico Conti Dott.

Titolo presentazione INFORMATICA. sottotitolo A.A Milano, XX mese 20XX Laboratorio n 6 Ing. Gian Enrico Conti Dott. Titolo presentazione INFORMATICA A sottotitolo A.A. 2017-18 Milano, XX mese 20XX Laboratorio n 6 Ing. Gian Enrico Conti Dott. Michele Zanella Info Logistiche (cont d) Calendario laboratori Data Orario

Dettagli

Strutture Dati Dinamiche

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

Dettagli

SISTEMI OPERATIVI. Processi in Linux. Giorgio Giacinto Sistemi Operativi

SISTEMI OPERATIVI. Processi in Linux. Giorgio Giacinto Sistemi Operativi SISTEMI OPERATIVI Processi in Linux 2 Creazione di processi concorrenti» La creazione di un processo figlio consente di far eseguire alcune funzionalità del programma in modo concorrente» Opzione 1 il

Dettagli

Memoria dinamica. Mauro Fiorentini, Univ. di Milano, 2019 M. Fiorentini Il linguaggio C - 467

Memoria dinamica. Mauro Fiorentini, Univ. di Milano, 2019 M. Fiorentini Il linguaggio C - 467 Memoria dinamica Mauro Fiorentini, 2019 Univ. di Milano, 2019 M. Fiorentini Il linguaggio C - 467 Gestione della memoria dinamica Totalmente sotto il controllo del programmatore. Basata su due funzioni,

Dettagli

INTERPROCESS COMMUNICATION 27

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

Dettagli

Corso di Informatica A.A

Corso di Informatica A.A Corso di Informatica A.A. 2009-2010 Lezione 12 Corso di Informatica 2009-2010 Lezione 12 1 Allocazione dinamica della memoria La funzione calloc() La funzione calloc() alloca memoria dinamicamente. Numero

Dettagli

Ingegneria Elettronica Ingegneria delle Telecomunicazioni (J-Z) Ing. Antonio Monteleone A.A. 2001/02 3 ciclo

Ingegneria Elettronica Ingegneria delle Telecomunicazioni (J-Z) Ing. Antonio Monteleone A.A. 2001/02 3 ciclo Ingegneria Elettronica Ingegneria delle Telecomunicazioni (J-Z) Ing. Antonio Monteleone A.A. 2001/02 3 ciclo In C++ è possibile distinguere due aree distinte di memoria: memoria stack e memoria heap E

Dettagli

Variabili e Funzioni. Informatica 1 / 19

Variabili e Funzioni. Informatica 1 / 19 Variabili e Funzioni Informatica 1 / 19 Programmi C e Un programma C e composto da funzioni e variabili Variabile: memorizza valori appartenenti ad un insieme di definizione (dipendente dal tipo) Funzione:

Dettagli

Laboratorio di Sistemi Operativi

Laboratorio di Sistemi Operativi II Semestre - Marzo/Giugno 2008 matricole congr. 0 mod 3 I/O non bufferizzato System Call open close read write lseek 2 1 file descriptor sono degli interi non negativi il kernel assegna un file descriptor

Dettagli

ACSO Programmazione di Sistema e Concorrente

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à

Dettagli

Esercizio 1. Programmazione I e Informatica II

Esercizio 1. Programmazione I e Informatica II Esercizi Programmazione I e Informatica II Dicembre 015 Esercizio 1 Utilizzo della memoria dinamica Scrivere un programma in C che esegue le seguenti istruzioni in ordine. Leggere un valore n intero da

Dettagli

Funzioni, Stack e Visibilità delle Variabili in C

Funzioni, Stack e Visibilità delle Variabili in C Funzioni, Stack e Visibilità delle Variabili in C Laboratorio di Programmazione I Corso di Laurea in Informatica A.A. 2018/2019 Argomenti del Corso Ogni lezione consta di una spiegazione assistita da slide,

Dettagli

Politecnico di Milano. Strutture dati dinamiche

Politecnico di Milano. Strutture dati dinamiche Politecnico di Milano Strutture dati dinamiche Strutture dati statiche e dinamiche In C le dimensioni di ogni dato sono note prima dell esecuzione Sarebbe utile avere contenitori la cui dimensione varia

Dettagli

Programmazione II. Lezione 9. Daniele Sgandurra 16/11/2010.

Programmazione II. Lezione 9. Daniele Sgandurra 16/11/2010. Programmazione II Lezione 9 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 16/11/2010 1/31 Programmazione II Lezione 9 16/11/2010 Sommario 1 Gestione della Memoria 2/31 Programmazione II Lezione 9 16/11/2010

Dettagli

Organizzazione di un SO monolitico

Organizzazione di un SO monolitico Organizzazione di un SO monolitico Applicazioni Interprete di comandi (shell) Interfaccia grafica (desktop) Gestore del Gestore delle processore / Gestore della periferiche/ Scheduler(s) memoria dispositivi

Dettagli

Informatica 1 Tipi e dichiarazioni in C++ C++ - Tipi e dichiarazioni 1

Informatica 1 Tipi e dichiarazioni in C++ C++ - Tipi e dichiarazioni 1 Informatica 1 Tipi e dichiarazioni in C++ C++ - Tipi e dichiarazioni 1 Cosa è il C++ E un linguaggio di programmazione derivato dal C Può essere usato per modificare il SO Unix e i suoi derivati (Linux)

Dettagli

Spazio di indirizzamento virtuale

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 (){

Dettagli

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 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

Dettagli

il tipo di parallelismo dipende dal grado di cooperazione

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

Dettagli

Allocazione Dinamica. Allocazione Statica. malloc() La funzione malloc()

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

Dettagli

L'Allocazione Dinamica della Memoria nel linguaggio C

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

Dettagli

L Allocazione Dinamica della Memoria

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

Dettagli

Puntatori. Operazioni sui puntatori Allocazione dinamica

Puntatori. Operazioni sui puntatori Allocazione dinamica Puntatori Operazioni sui puntatori Allocazione dinamica Puntatori a void la parola chiave void può essere usata per dichiarare dei puntatori che non puntano a nessun tipo di dato in particolare void *ptr;

Dettagli

Puntatori. Grazie ai puntatori:

Puntatori. Grazie ai puntatori: Puntatori Grazie ai puntatori: 1) è possibile permettere ad una funzione di modificare il contenuto di un area di memoria; 2) invece di passare ad una funzione tutto un blocco di memoria, si passa alla

Dettagli

TECN.PROG.SIST.INF. Processi e thread. Roberta Gerboni

TECN.PROG.SIST.INF. Processi e thread. Roberta Gerboni Roberta Gerboni Un processo è generato da un programma in esecuzione. Un programma eseguito su un processore può dare origine a più processi. Ogni processo ha il proprio contesto, ovvero il proprio: process

Dettagli

Sistemi Operativi Il Sistema Operativo Windows (parte 2)

Sistemi Operativi Il Sistema Operativo Windows (parte 2) Sistemi Operativi Il Sistema Operativo Windows (parte 2) Docente: Claudio E. Palazzi cpalazzi@math.unipd.it Crediti per queste slides al Prof. Tullio Vardanega Gestione della memoria 1 Ogni processo dispone

Dettagli

Le strutture. Una struttura C è una collezione di variabili di uno o più tipi, raggruppate sotto un nome comune.

Le strutture. Una struttura C è una collezione di variabili di uno o più tipi, raggruppate sotto un nome comune. Le strutture Una struttura C è una collezione di variabili di uno o più tipi, raggruppate sotto un nome comune. Dichiarazione di una struttura: struct point { int x; int y; }; La dichiarazione di una struttura

Dettagli

Laboratorio di algoritmi e strutture dati

Laboratorio di algoritmi e strutture dati Laboratorio di algoritmi e strutture dati G. Melideo CdL in Informatica A.A. 2009/2010 G. Melideo (CdL in Informatica) Laboratorio di algoritmi e strutture dati A.A. 2009/2010 1 / 23 Indice 1 Richiami

Dettagli

Laboratorio di Algoritmi e Strutture Dati. La gestione della memoria dinamica Heap

Laboratorio di Algoritmi e Strutture Dati. La gestione della memoria dinamica Heap Laboratorio di Algoritmi e Strutture Dati La gestione della memoria dinamica Heap Proff. Francesco Cutugno e Luigi Lamberti 2009 Cenni sui Processi Si definisce Programma un insieme di Istruzioni destinate

Dettagli

LABORATORIO DI SISTEMI OPERATIVI

LABORATORIO DI SISTEMI OPERATIVI LABORATORIO DI SISTEMI OPERATIVI Corso di Laurea Triennale in Ingegneria Informatica A.A. 2018/2019 Guglielmo Cola Email: g.cola@iet.unipi.it Web: iet.unipi.it/g.cola Processi in Unix/Linux caratteristiche

Dettagli

Capitolo 5 -- Stevens

Capitolo 5 -- Stevens Libreria standard di I/O Capitolo 5 -- Stevens Libreria standard di I/O rientra nello standard ANSI C perché è stata implementata su molti sistemi operativi oltre che su UNIX le sue funzioni individuano

Dettagli

La programmazione nel linguaggio C. Liste

La programmazione nel linguaggio C. Liste Liste È molto comune dover rappresentare sequenze di elementi tutti dello stesso tipo e fare operazioni su di esse. Esempi: sequenza di interi (23 46 5 28 3) sequenza di caratteri ( x r f ) sequenza di

Dettagli

Corso di Architettura (Prof. Scarano) 10/05/2002

Corso di Architettura (Prof. Scarano) 10/05/2002 Lezione 0 Il Set di Istruzioni (6) Vittorio Scarano Architettura Corso di Laurea in Informatica Università degli Studi di Salerno Le procedure Prima della chiamata di una procedura In ogni linguaggio di

Dettagli

Allocazione della memoria. Allocazione dinamica della memoria. Allocazione della memoria. Allocazione automatica

Allocazione della memoria. Allocazione dinamica della memoria. Allocazione della memoria. Allocazione automatica Allocazione dinamica della memoria Ver. 2.4 2010 - Claudio Fornaro - Corso di programmazione in C Allocazione della memoria Il termine allocazione viene utilizzato per indicare l assegnazione di un blocco

Dettagli

Directory. Le directory unix sono file.

Directory. Le directory unix sono file. Le directory unix sono file. Directory Molte system call per i file ordinari possono essere utilizzate per le directory. E.g. open, read, fstat, close. Tuttavia le directory non possono essere create con

Dettagli

Dati due punti sul piano calcolare la loro distanza

Dati due punti sul piano calcolare la loro distanza Introduzione al C Primo esempio in C Dati due punti sul piano calcolare la loro distanza Soluzione: la distanza fra due punti si calcola secondo il teorema di Pitagora, con la formula: y Distanza = (lato12

Dettagli

L oggetto creato. Creazione di Oggetti. Rectangle: il concetto 10. Costruzione. Lo spazio di memoria del linguaggio Java. Rectangle: l oggetto

L oggetto creato. Creazione di Oggetti. Rectangle: il concetto 10. Costruzione. Lo spazio di memoria del linguaggio Java. Rectangle: l oggetto Usare e costruire oggetti Variabili e Oggetti Lo spazio di memoria di Java Le API di Java Gli oggetti sono entità di un programma che si possono manipolare invocando i metodi System.out oggetto della classe

Dettagli

Threads: 1. Concetti di base 2. Threads in sistemi operativi attuali (NT/UNIX)

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

Dettagli

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. 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;

Dettagli

Corso di Laboratorio di Sistemi Operativi A.A

Corso di Laboratorio di Sistemi Operativi A.A Corso di Laboratorio di Sistemi Operativi A.A. 2016 2017 Lezione 11 Ivan Scagnetto ivan.scagnetto@uniud.it Nicola Gigante gigante.nicola@spes.uniud.it Dipartimento di Scienze Matematiche, Informatiche

Dettagli

GESTIONE DELLA COMUNICAZIONE LOCALE TRA PROCESSI IN UNIX:

GESTIONE DELLA COMUNICAZIONE LOCALE TRA PROCESSI IN UNIX: GESTIONE DELLA COMUNICAZIONE LOCALE TRA PROCESSI IN UNIX: Il primo meccanismo di comunicazione tra processi locali in ambiente Unix e stato il meccanismo delle pipe. Per processo locale si intende un processo

Dettagli

Calcolatori Elettronici Parte VIII: linguaggi assemblativi

Calcolatori Elettronici Parte VIII: linguaggi assemblativi Anno Accademico 2013/2014 Calcolatori Elettronici Parte VIII: linguaggi assemblativi Prof. Riccardo Torlone Universita di Roma Tre Linguaggi di Programmazione Linguaggi ad alto livello Maggiore espressività

Dettagli

TECN.PROG.SIST.INF. Creazione di un processo in Windows. Roberta Gerboni

TECN.PROG.SIST.INF. Creazione di un processo in Windows. Roberta Gerboni Roberta Gerboni // Funzione delle API di Windows // Crea un nuovo processo e il relativo thread primario. // Il nuovo processo viene eseguito nel contesto di protezione // del processo chiamante BOOL WINAPI

Dettagli

INFORMATICA A. Titolo presentazione sottotitolo. Laboratorio n 6 Dott. Michele Zanella Ing. Gian Enrico Conti

INFORMATICA A. Titolo presentazione sottotitolo. Laboratorio n 6 Dott. Michele Zanella Ing. Gian Enrico Conti INFORMATICA A Titolo presentazione sottotitolo A.A. 2018-19 Milano, XX mese 20XX Laboratorio n 6 Dott. Michele Zanella Ing. Gian Enrico Conti Ricorsione La ricorsione è un approccio per la risoluzione

Dettagli

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. 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

Dettagli

programmazione distribuita Introduzione Introduzione alla programmazione distribuita

programmazione distribuita Introduzione Introduzione alla programmazione distribuita Reti Informatiche Introduzione alla programmazione distribuita Introduzione Richiami di Programmazione C Differenze principali C/C++ 2 1 Definizioni di variabili Le variabili possono essere definite solo

Dettagli

I puntatori e l allocazione dinamica di memoria. Esercizi risolti

I puntatori e l allocazione dinamica di memoria. Esercizi risolti I puntatori e l allocazione dinamica di memoria Esercizi risolti 1 Esercizio Si vuole realizzare un tipo struct, utilizzato per informazioni su operazioni di vendita, avente i seguenti campi: codice: numero

Dettagli

ALGORITMI E STRUTTURE DATI

ALGORITMI E STRUTTURE DATI ALGORITMI E STRUTTURE DATI Esercitazioni AndreA Orlandini http://www.dia.uniroma3.it/~orlandin/asd/ e-mail: orlandin@dia.uniroma3.it Orario di ricevimento: Martedì 14.00-16.00 Puntatori e Liste StudentiDIA

Dettagli

Esercitazione 11. Liste semplici

Esercitazione 11. Liste semplici Esercitazione 11 Liste semplici Liste semplici (o lineari) Una lista semplice (o lineare) è una successione di elementi omogenei che occupano in memoria una posizione qualsiasi. Ciascun elemento contiene

Dettagli

Funzioni, Stack e Visibilità delle Variabili in C

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

Dettagli

LISTE E RIPASSO. Sesto Laboratorio

LISTE E RIPASSO. Sesto Laboratorio LISTE E RIPASSO Sesto Laboratorio STRUTTURE E LISTE RIVEDIAMO LE STRUTTURE typedef struct anagrafico{ char nome[20]; int anni; char indirizzo[30]; dati; cittadino.anni = 3; dati popolazione[1000]; Scrivere

Dettagli