1 Laboratorio di Programmazione di Sistema - C Susanna Pelagatti Ricevimento: Me 14.00-16.00, 18.00-19.00

Slides:



Advertisements
Presentazioni simili
Puntatori Linguaggio C.
Advertisements

Introduzione al linguaggio C++
INFORMATICA Altre Istruzioni di I/O
LINGUAGGIO DI PROGRAMMAZIONE C
Introduzione al linguaggio C
Puntatori in C e C++.
Introduzione alla programmazione A. Ferrari. Il linguaggio C Nel 1972 Dennis Ritchie nei Bell Laboratories progettò il linguaggio C Il linguaggio possiede.
PUNTATORI Introduzione
PHP.
Algoritmi e Programmazione
Massa Laura Mela Enrica
1 Semantica Operazionale di un frammento di Java: lo stato.
1 Informatica Generale Susanna Pelagatti Ricevimento: Mercoledì ore presso Dipartimento di Informatica, Via Buonarroti,
Sistemi Operativi - C Susanna Pelagatti
SC che operano su processi
Differenze tra C e C++ Commenti: Adesso puoi inserire dei commenti tra // e la fine della linea. Usare le librerie C: In C++ puoi anche chiamare una funzione.
Introduzione al linguaggio C
Fondamenti di Informatica Prof. Cantone
Programmazione Procedurale in Linguaggio C++
FUNZIONI DI BIBLIOTECA
Caratteri e stringhe di caratteri
Argomenti dalla linea dei comandi Gli argomenti possono essere passati a qualsiasi funzione di un programma, compresa la main(), direttamente dalla linea.
Funzioni definite dall’utente
Laboratorio di informatica: ASSEMBLER
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Stringhe e Puntatori Marco D. Santambrogio – Ver. aggiornata al 18 Marzo 2013.
Laboratorio di Linguaggi lezione VI: puntatori 2/3 Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.
Laboratorio di Linguaggi lezione IV Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.
Introduzione al linguaggio C++ 5 lezioni
Struttura dei sistemi operativi (panoramica)
memoria gestita staticamente:
I File.
Le funzioni.
Espressioni condizionali
Le funzioni a tempo di esecuzione
Introduzione al linguaggio assembly del microprocessore a parte
Il linguaggio C Le funzioni C Language Il passaggio dei parametri
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
Unità Didattica 3 Linguaggio C
Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.
2000 Prentice Hall, Inc. All rights reserved. Attivazione di funzioni La chiamata/attivazione di funzione viene indicata citando il nome della funzione.
Unità Didattica 1 Linguaggio C
Complessità di un algoritmo
Il linguaggio C Puntatori e dintorni.
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Corso di Programmazione 1 a.a.2006/2007 Prof.ssa Chiara Petrioli Corso di Laurea.
Introduzione a Javascript
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 11 Ottobre 2014.
Corso di Algoritmi e Strutture Dati APPUNTI SUL LINGUAGGIO C
Università di Torino – Facoltà di Scienze MFN Corso di Studi in Informatica Programmazione I - corso B a.a prof. Viviana Bono Blocco 7 – Array.
1 Il linguaggio C Puntatori e dintorni. 2 Puntatori : idea di base In C è possibile conoscere e denotare l’indirizzo della cella di memoria in cui è memorizzata.
1 Tipi di Dato §descrittori, tipi, controllo e inferenza dei tipi §specifica (semantica) e implementazione di tipi di dato l implementazioni “sequenziali”
1 SC che operano su processi Getpid, fork, exec, wait, waitpid, exit, dup, dup2.
1 Fabio Scotti – Università degli Studi di Milano Fabio Scotti ( ) Laboratorio di programmazione per la sicurezza Valentina Ciriani ( )
1 Il linguaggio C Precisazioni sull’esperienza in laboratorio.
Introduzione Laboratorio di Calcolo Corso di Laurea in Fisica Università degli Studi di Roma “La Sapienza”
Operatori di incremento e decremento
1 Compilazione separata. 2 Finora abbiamo trattato solo programmi C contenuti in un unico file define/include variabili globali typedef main def F1 …
Il linguaggio C Notate che ....
Il linguaggio C Puntatori e dintorni.
Il linguaggio C Un primo programma C : un primo programma (2) /* Programma che calcola il massimo fra tre numeri inseriti da tastiera */ #include #define.
Concetti Fondamentali sulla Programmazione
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
FI - Algoritmi e Programmazione 1 Variabili Consentono di aumentare notevolmente la potenza espressiva. Una variabile è caratterizzata da:  Un nome 
Esercizi.
Cos’è un sistema operativo ?
1 System Call ancora Vediamo passo passo come funziona una SC.
Il C `e un linguaggio di programmazione di uso generale, originariamente sviluppato per la scrittura del sistema operativo Unix, ed oggi disponibile su.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Algoritmi e basi del C Marco D. Santambrogio – Ver. aggiornata al 24 Agosto 2015.
Introduzione alle Classi e agli Oggetti in Java 1.
13. Strutture dati dinamiche Ing. Simona Colucci Informatica - CDL in Ingegneria Industriale- A.A
Transcript della presentazione:

1 Laboratorio di Programmazione di Sistema - C Susanna Pelagatti Ricevimento: Me ,

2 Struttura del corso Lezioni in aula (B) + esercitazioni (aula H) –gli studenti sono divisi in due gruppi (A e B) –la lezione del Lunedì (9-11) è per tutti gli studenti –le esercitazioni del Giovedì sono per gruppi 9-11 per il gruppo A per il gruppo B

3 Struttura del corso (2) Per partecipare alle esercitazioni è necessario iscriversi nella lista –sul sito web troverete l’assegnazione nomi/gruppi LPS è un corso con obbligo di frequenza –è necessario firmare il foglio di presenza ogni volta –solo gli studenti con almeno l’80% delle presenze possono sostenere l’esame –eccezioni : studenti lavoratori, studenti esentati ufficialmente dalla frequenza

4 Struttura del corso (3) Esame –progetto in gruppi di 2/3 persone –discussione individuale del progetto Studenti esentati dalla frequenza –progetto individuale

5 Programma di massima Introduzione al linguaggio C (18h) Interazione con la shell (2h) Programmazione di sistema in Unix (20h)

6 Libri di Testo Testi di riferimento per C e Unix –Glass, Ables, Unix for programmers and users, Prentice Hall 1999 –Kelley, Pohl C: Didattica e programmazione, Addison Wesley 1996 Testo di esempi ed esercizi –Ruggieri, Scozzari, Sperduti Programmazione di Sistema in Linguaggio C SEU

7 Il linguaggio C

8 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 singoli bit

9 Perché il linguaggio C? (2) Standard di fatto per lo sviluppo di software di sistema (cont.) –possibilità di incapsulare parti di codice assembler che effettuano compiti impossibili da esprimere in linguaggi ad alto livello es. esecuzione di istruzioni ‘speciali’ (TRAP), manipolazione diretta di registri –Compilazione estremamente efficiente –Occupazione di memoria ridotta

10 C : caratteristiche fondamentali Paradigma imperativo –costrutti di controllo simili a Java ( while-do, for, if (..) else, switch ) –tipi base molto simili a Java ( int, double etc…) Ma … NON è un linguaggio ad oggetti –NON supporta la nozione di oggetti, classi o meccanismi di ereditarietà –la principale forma di strutturazione sono le funzioni un programma C è una collezione di funzioni di cui una di nome main le funzioni possono risiedere in uno o più file

11 C : caratteristiche fondamentali (2) Memoria e puntatori –in C è possibile conoscere e denotare l’indirizzo della cella di memoria in cui è memorizzata una variabile (il puntatore) es : int a = 50; /* una var intera */ int * b; /* una var puntatore a interi */... b = &a; /* assegna a b l’indirizzo della cella in cui è memorizzata a */

12 C : caratteristiche fondamentali (3) Memoria e puntatori –in C è possibile conoscere e denotare l’indirizzo della cella di memoria in cui è memorizzata una variabile (il puntatore) es : int a = 50; int *b; … b = &a; a è memorizzata nella cella

13 C : caratteristiche fondamentali (4) Memoria e puntatori –in C è possibile conoscere e denotare l’indirizzo della cella di memoria in cui è memorizzata una variabile (il puntatore) es : int a = 50; int *b; … b = &a; b è memorizzata nella cella

14 C : caratteristiche fondamentali (5) Memoria e puntatori –in C è possibile conoscere e denotare l’indirizzo della cella di memoria in cui è memorizzata una variabile (il puntatore) es : int a = 50; int *b; … b = &a; Dopo questo assegnamento in b è memorizzato l’indirizzo di a

15 C : caratteristiche fondamentali (6) Memoria e puntatori –è possibile conoscere e/o modificare il contenuto di una variabile manipolando direttemente il suo puntatore (operatore di dereferenziazione ‘ * ’) es : int a = 50; int *b = &a; … *b = *b + 4; Dopo questo assegnamento in a è memorizzato il valore

16 C : un primo programma Il più semplice programma C è costituito da –una singola funzione ( main ) –memorizzata in un singolo file

17 C : un primo programma (2) /* Programma che calcola il massimo fra tre numeri inseriti da tastiera */ #include #define N 4 int main (void){ int i, tmp, max=0; printf(“Inserisci %d interi positivi\n”,N); for (i = 0; i < N; i++) { scanf(“ %d”, &tmp); max = (max < tmp)? max : tmp ; } printf(“Il massimo è %d \n”,max); return 0; }

18 C : un primo programma (3) /* Programma che calcola il massimo fra tre numeri inseriti da tastiera */ #include #define N 4 int main (void){ int i, tmp, max=0; printf(“Inserisci %d interi positivi\n”,N); for (i = 0; i < N; i++) { scanf(“ %d”, &tmp); max = (max < tmp)? max : tmp ; } printf(“Il massimo è %d \n”,max); return 0; } Commenti

19 Commenti I commenti possono essere inseriti con –/* qua un commento anche su più linee */ –// commento su singola linea

20 C : un primo programma (4) #include #define N 3 int main (void){ int i, tmp, max=0; printf(“Inserisci %d interi positivi\n”,N); for (i = 0; i < N; i++) { scanf(“ %d”, &tmp); max = (max > tmp)? max : tmp ; } printf(“Il massimo è %d \n”,max); return 0; } Inclusione delle informazioni necessarie per utilizzare le funzioni nelle librerie standard di I/O del C

21 C : un primo programma (5) #include #define N 3 int main (void){ int i, tmp, max=0; printf(“Inserisci %d interi positivi\n”,N); for (i = 0; i < N; i++) { scanf(“ %d”, &tmp); max = (max > tmp)? max : tmp ; } printf(“Il massimo è %d \n”,max); return 0; } Inclusione delle informazioni necessarie per utilizzare le funzioni nelle librerie standard di I/O del C Funzioni per leggere da tastiera, visualizzare dati

22 C : un primo programma (6) #include #define N 3 int main (void){ int i, tmp, max=0; printf(“Inserisci %d interi positivi\n”,N); for (i = 0; i < N; i++) { scanf(“%d”, &tmp); max = (max > tmp)? max : tmp ; } printf(“Il massimo è %d \n”,max); return 0; } Definizione di MACRO (costante simbolica) - N è il nome simbolico per la sequenza di caratteri “3” - Ogni occorrenza di N viene sostituita da “3” prima di iniziare la compilazione

23 C : un primo programma (7) #include #define N 3 int main (void){ int i, tmp, max=0; printf(“Inserisci %d interi positivi\n”,N); for (i = 0; i < N; i++) { scanf(“%d”, &tmp); max = (max > tmp)? max : tmp ; } printf(“Il massimo è %d \n”,max); return 0; } Intestazione della funzione, fornisce : - il tipo del valore prodotto dalla funzione ( int ) - descrizione degli argomenti (in questo caso nessuno ( void ))

24 C : un primo programma (8) #include #define N 3 int main (void){ int i, tmp, max=0; printf(“Inserisci %d interi positivi\n”,N); for (i = 0; i < N; i++) { scanf(“%d”, &tmp); max = (max > tmp)? max : tmp ; } printf(“Il massimo è %d \n”,max); return 0; } Dichiarazione di variabili locali alla funzione (il loro spazio di memoria viene allocato all’inizio della esecuzione della funzione e deallocato alla fine)

25 C : un primo programma (9) #include #define N 3 int main (void){ int i, tmp, max=0; printf(“Inserisci %d interi positivi\n”,N); for (i = 0; i < N; i++) { scanf(“%d”, &tmp); max = (max > tmp)? max : tmp ; } printf(“Il massimo è %d \n”,max); return 0; } Invocazione della funzione di libreria che scrive su video

26 C : un primo programma (10) #include #define N 3 int main (void){ int i, tmp, max=0; printf(“Inserisci %d interi positivi\n”,N); for (i = 0; i < N; i++) { scanf(“%d”, &tmp); max = (max > tmp)? max : tmp ; } printf(“Il massimo è %d \n”,max); return 0; } Stringa di formattazione Placeholder (segnaposto) per un valore intero (%d)

27 C : un primo programma (11) #include #define N 3 int main (void){ int i, tmp, max=0; printf(“Inserisci %d interi positivi\n”,N); for (i = 0; i < N; i++) { scanf(“%d”, &tmp); max = (max > tmp)? max : tmp ; } printf(“Il massimo è %d \n”,max); return 0; } Il segnaposto viene rimpiazzato con il valore dei parametri (in ordine)

28 C : un primo programma (12) #include #define N 3 int main (void){ int i, tmp, max=0; printf(“Inserisci %d interi positivi\n”,N); for (i = 0; i < N; i++) { scanf(“%d”, &tmp); max = (max > tmp)? max : tmp ; } printf(“Il massimo è %d \n”,max); return 0; } Invocazione della funzione di libreria che legge da tastiera

29 C : un primo programma (13) #include #define N 3 int main (void){ int i, tmp, max=0; printf(“Inserisci %d interi positivi\n”,N); for (i = 0; i < N; i++) { scanf(“%d”, &tmp); max = (max > tmp)? max : tmp ; } printf(“Il massimo è %d \n”,max); return 0; } Indirizzo ( & ) della variabile ( tmp ) in cui deve essere inserito il valore intero ( %d ) letto da tastiera.

30 C : un primo programma (14) #include #define N 3 int main (void){ int i, tmp, max=0; printf(“Inserisci %d interi positivi\n”,N); for (i = 0; i < N; i++) { scanf(“%d”, &tmp); max = (max > tmp)? max : tmp ; } printf(“Il massimo è %d \n”,max); return 0; } Espressione condizionale

31 C : un primo programma (15) #include #define N 3 int main (void){ int i, tmp, max=0; printf(“Inserisci %d interi positivi\n”,N); for (i = 0; i < N; i++) { scanf(“%d”, &tmp); max = (max > tmp)? max : tmp ; } printf(“Il massimo è %d \n”,max); return 0; } Comando return : termina l’esecuzione della funzione e restituisce il valore delle espressione specificata Per convenzione se tutto è andato bene il main restituisce 0.

32 Come si esegue un programma C? Prima di essere eseguito dal processore il programma deve essere –1. pre-processato –2. compilato –3. collegato (linking) –4. caricato in memoria (loading) Vediamo come funzionano le fasi 1,2,4 –il linking verrà discusso più avanti

33 Pre-processing e compilazione Il programma deve essere editato e salvato in un file con estensione ‘.c’ –es. posso salvare il programma esempio nel file prova.c Non c’è alcun rapporto fra il nome del file ed il nome delle funzioni in esso contenute (!= Java)

34 Pre-processing e compilazione (2) Il compilatore può essere invocato con il comando gcc -Wall -pedantic -g prova.c -o nomees –-Wall -pedantic opzioni che aumentano il numero di controlli e di messaggi di ‘avvertimento’ visualizzati –-g opzione che include anche le informazioni necessarie al debugger –prova.c nome del file da compilare/preprocessare –-o nomees opzione che permette di decidere il nome del file eseguibile ( nomees ). Altrimenti il file eseguibile si chiama di default a.out

35 Pre-processing e compilazione (3) Preprocessing –#include –#include “file” queste linee vengono rimpiazzate dal contenuto dei file specificati ( viene cercato tra gli header standard, su Linux /usr/include; “file” viene cercato a partire dalla directory corrente ) –#define nome testo rimpiazza ogni occorrenza di nome con il testo specificato è possibile specificare del testo parametrico

36 Pre-processing e compilazione (4) Compilazione –trasforma il file preprocessato (senza più #include o #define ) in un file eseguibile che contiene alcune informazioni di carattere generale rappresentazione binaria di (parte dei) dati del programma (variabili globali) codice assembler eseguibile dal processore target (testo) –per capire come avviene questa traduzione, dobbiamo specificare come un programma vede la memoria durante la sua esecuzione (spazio di indirizzamento) –un programma in esecuzione viene comunemente detto processo

37 Spazio di indirizzamento Text Data Stack Area vuota Traduzione in assembler delle funzioni che compongono il programma Variabili globali a tutte le funzioni Pila di FRAME, uno per ogni chiamata di funzione da cui non abbiamo ancora fatto ritorno

38 Spazio di indirizzamento (2) Text Data Stack Area vuota Contenuti tipici di un FRAME : - variabili locali della funzione - indirizzo di ritorno (indirizzo dell’istruzione successiva a quella che ha effettuato la chiamata alla funzione) - copia dei parametri di chiamata Direzione di crescita dello stack

39 Spazio di indirizzamento (3) Spazio di indirizzamento Text Data Stack Area vuota All’inizio dell’esecuzione lo Stack contiene solo il FRAME per la funzione main Successivamente : * ogni volta che viene chiamata una nuova funzione viene inserito un nuovo frame nello stack * ogni volta che una funzione termina ( es. return 0 ) viene eliminato il frame in cima dello stack e l’esecuzione viene continuata a partire dall’indirizzo di ritorno

40 Spazio di indirizzamento (4) Text Data Stack Area vuota Direzione di crescita dello heap Spazio di memoria dedicato ai dati globali a tutte le funzioni. Diviso in statico per i dati la cui dimensione è nota a tempo di compilazione e dinamico (heap) heap

41 Compilazione : un esempio int main (void){ int i, tmp, max=0; printf(“Inserisci %d interi positivi\n”,N); for (i = 0; i < N; i++) { scanf(“%d”, &tmp); max = (max < tmp)? max : tmp ; } printf(“Il massimo è %d \n”,max); return 0; } Ogni variabile corrisponde ad una o più parole/celle di memoria &i &max &tmp 32 bit

42 Compilazione : un esempio (2) int main (void){ int i, tmp, max=0; printf(“Inserisci %d interi positivi\n”,N); for (i = 0; i < N; i++) { scanf(“%d”, &tmp); max = (max < tmp)? max : tmp ; } printf(“Il massimo è %d \n”,max); return 0; } Ogni statement viene tradotto in - istruzioni assembler che lavorano sulle celle rilevanti - CALL di altre funzioni (es. printf) &i &max &tmp

43 Formato del file eseguibile La compilazione produce un file eseguibile (es. a.out ) Il formato di un eseguibile dipende dal sistema operativo In Linux un eseguibile ha il formato ELF (Executable and Linking Format)

44 Formato del file eseguibile (2) –Formato di un eseguibile ELF Text segment I-Data segment Ampiezza BSS Altre info Magic number File a.out Variabili globali inizializzate Ampiezza area di memoria occupata dalle variabili globali NON inizializzate Numero che contraddistingue il file come eseguibile Codice del programma (assemblato)

45 Formato del file eseguibile (3) –L’eseguibile contiene tutte le informazioni per creare la configurazione iniziale dello spazio di indirizzamento (loading) Text I-Data segment Stack Area vuota BSS-segment Text segment I-Data segment Ampiezza BSS Altre info Magic number File a.out Data FRAME per la funzione main