void char void char @param void int int int int

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "void char void char @param void int int int int"

Transcript

1 1 2 /** 3 file definition_ thread. c 4 * contiene l' implementazioni delle diverse funzioni 5 */ 6 7 /** 8 name elaborato Terzo 9 author Nicola Milani VR */ # include " definition_ thread. h" /** 16 brief Questa funzione fa qualcosa quando si genera un errore 17 param prog : nome programma ( funzione) che va in errore 18 param msg : messaggio di errore da stampare 19 */ void syserr ( char * prog, char * msg){ 22 fprintf ( stderr, "% s - error: % s\ n", prog, msg); 23 char buffer[ 40]; 24 sprintf( buffer," system error % s\ n", strerror( errno)); 25 write( 1, buffer, strlen( buffer)); 26 exit (1); 27 } 28 /** 29 brief Questa funzione stampa a video 30 param buffer : caratteri da stampare 31 */ 32 void mywrite ( char * buffer){ 33 int nread; 34 int length = strlen( buffer); 35 if(( nread=write( 0, buffer, length)) ==- 1) 36 syserr(" elaborato: mywrite", " write"); 37 } /** 40 brief Legge il file di configurazione e lo trasferisce in un buffer c har 41 param fd : file descriptor 42 param * nthread : numero di figli 43 param * numerorighe : numero di righe del file di configurazione 44 param * lnprimariga : lunghezza prima riga del file 45 * 46 **/ void leggiconfigurazionefile( int fd, int * nthread, int * numerorighe, int * l nprimariga){ 49 int nread; 50 char c; 51 char buffer[ BUFFER]; 52 char * start=buffer; 53 char * p=buffer; 54 while((nread = read (fd, &c, 1))== 1){ switch( c){ 57 case '\n': 58 if (* numerorighe == 0){ 59 *p='\0'; 60 p=start; 61 * nthread = atoi( p); 62 } 63 (* numerorighe) ++; - 1 -

2 64 break; 65 default : 66 if (* numerorighe == 0){ 67 *p=c; 68 p++; 69 } 70 break; 71 } } if (nread == -1) 76 syserr("elaborato: leggiconfigurazionefile", "read"); * lnprimariga=( strlen( p) +1); 79 (*numerorighe)--; } /** 84 brief Creo i figli che dovranno eseguire i lavori. 85 param thread : identifica le thread 86 param nthread : indica numero di figli 87 param data[] : struttura dati disponibile per ogni figlio 88 param first_ sinc : primo lucchetto 89 param second_ sinc : secondo lucchetto 90 param wait : stato del thread 91 param global_ condition : variabile condition 92 */ void creathreads ( pthread_ t threads[], int nthread, struct thread_ data data [], int * wait, pthread_ mutex_ t * first_ sinc, pthread_ mutex_ t * second_ sinc, pth read_ cond_ t * global_ condition){ 96 int i, rtrn; 97 pthread_ attr_ t attr; pthread_ attr_ init(& attr); 100 pthread_ attr_ setdetachstate(& attr, PTHREAD_ CREATE_ JOINABLE); /* inizializo le thread*/ for ( i=1; i<=nthread; i++){ data[i-1].id=i; 107 data[ i- 1]. ultimarigaassegnata=- 1; 108 data[i-1].dead='l'; 109 data[ i- 1]. wait=wait; 110 data[ i- 1]. first_ sinc=first_ sinc; 111 data[ i- 1]. second_ sinc=second_ sinc; 112 data[ i- 1]. global_ condition=global_ condition; 113 data[ i- 1]. ready=0; 114 data[ i- 1]. parentwaitme=0; pthread_mutex_init(&data[i-1].first_lock,null); 117 pthread_mutex_init(&data[i-1].second_lock,null); 118 pthread_cond_init(&data[i-1].condition,null); if(( rtrn= pthread_ create(& threads[ i- 1], & attr, calcolo, ( void *) & data[i-1] ))!=0) 121 syserr(" elaborato_ thread: creathread", " pthread_ create"); } pthread_ attr_ destroy(& attr); - 2 -

3 126 } /** 129 brief Questa funzione contiene il lavoro che devono fare le thread 130 param thread_ arg : faccio fare i lavori alle thread 131 */ void * calcolo( void * thread_ arg){ struct thread_ data * mydata = ( struct thread_ data *) thread_ arg; 136 pthread_ mutex_ lock(& mydata- >first_ lock); 137 int id = mydata- >id; 138 char buffer[ SIZE]; while ( 1) 141 { pthread_ mutex_ lock( mydata- >first_ sinc); 144 pthread_ mutex_ lock( mydata- >second_ sinc); 145 if(*(mydata->wait)==-1){ 146 *( mydata- >wait) =mydata- >id; 147 pthread_ cond_ signal( mydata- >global_ condition); 148 } 149 pthread_ mutex_ unlock( mydata- >second_ sinc); 150 pthread_ mutex_ unlock( mydata- >first_ sinc); sprintf( buffer," id : % d mi metto in attesa, \ n", id); 153 mywrite( buffer); mydata- >ready=1; if( mydata- >parentwaitme == 1){ 158 mydata- >parentwaitme=0; 159 pthread_ cond_ signal(& mydata- >condition); } 162 pthread_ cond_ wait(& mydata- >condition,& mydata- >first_ lock); sprintf( buffer," id :% d parto speriamo bene, \ n", id); 165 mywrite(buffer); if( mydata- >dead == ' K') 168 { 169 pthread_ mutex_ unlock(& mydata- >first_ lock); 170 sprintf( buffer," id: non servo più ciao ciao \ n"); 171 mywrite( buffer); 172 pthread_ exit(( void *) 0); 173 } switch( mydata- >operazione){ 176 case '-': 177 mydata- >risultato =( double) mydata- >op1 - mydata- >o p2; 178 sprintf(buffer,"id:\t%d ho calcolato:\t %d - %d = % f \ n", id, mydata- >op1, mydata- >op2, mydata- >risultato); 179 mywrite( buffer); 180 break; 181 case '+': 182 mydata- >risultato =( double) mydata- >op1 + mydata- >o p2; 183 sprintf(buffer,"id:\t%d ho calcolato:\t %d + %d = % f \ n", id, mydata- >op1, mydata- >op2, mydata- >risultato); 184 mywrite( buffer); 185 break; 186 case '*': - 3 -

4 187 mydata- >risultato =( double) mydata- >op1 * mydata ->op2; 188 sprintf(buffer,"id:\t%d ho calcolato:\t %d * %d = % f \ n", id, mydata- >op1, mydata- >op2, mydata- >risultato); 189 mywrite( buffer); 190 break; 191 case '/': 192 mydata- >risultato =( double) mydata- >op1 / mydata- >o p2; 193 sprintf(buffer,"id:\t%d ho calcolato:\t %d / %d = % f \ n", id, mydata- >op1, mydata- >op2, mydata- >risultato); 194 mywrite( buffer); 195 break; 196 } } } /** 203 brief Questa funzione assegna a ogni thread il lavoro da fare 204 param data[] : strutture dei figli 205 param risultato[] : array risultati 206 param id[] : identifico thread 207 param operazioni[][ 3] : matrice operazioni da assegnare n1 + codop + n2 208 param nthread : numero thread 209 param numerorighe : numero righe lette da file 210 *wait 211 param * second_ sinc : secondo lucchetto 212 param * global_ condition : condition variable 213 * */ void distribuiscilavoro( struct thread_ data data[], double risultato[], int id[], int operazioni[][ 3], int nthread, int numerorighe, int * wait, pthrea d_ mutex_ t * second_ sinc, pthread_ cond_ t * global_ condition){ int i; 218 char buffer[ SIZE]; 219 for(i=0;i<numerorighe;i++){ switch(id[i]){ 222 case 0: id[ i] = trovathreadlibera( data, nthread, wait, second_ sinc, glo bal_ condition); default: /* assegno le operazioni nella zona di memoria del processo i- esimo se il processo è libero */ sprintf( buffer," CONTROLLO SE LA % d THREAD È PRONTA SE NON L O È ATTENDO\n ", id[i]); 232 mywrite( buffer); 233 pthread_mutex_lock(&data[id[i]-1].first_lock); sprintf( buffer," IL LOCK DELL % d THREAD È LIBERO CONTROLLO S E LEI È PRONTA\n ", id[i]); 236 mywrite( buffer); if(data[id[i]-1].ready==0){ 239 data[ id[ i]- 1]. parentwaitme=1; 240 pthread_cond_wait(&data[id[i]-1].condition,&data[id[i]

5 ].first_lock); 241 } sprintf( buffer," LA % d THREAD È PRONTA ALLORA LE DO LAVORO \n", id[i]); 244 mywrite( buffer); if(data[id[i]-1].ultimarigaassegnata!= -1){ 248 /* 249 * se ho assegnato in precedenza un lavoro alla thread i- esima allora data[ i]. ultimarigaassegnata corrisponde 250 * alla riga che è stata eseguita dal processo 251 */ 252 risultato[ data[ id[ i]- 1]. ultimarigaassegnata] =data[ id[ i] -1].risultato; 253 /* 254 * segno che il risultato della riga data[ i]. ultimariga Assegnata elaborata dal processo id[ i] è gia stato registrato 255 * sul array risultati 256 */ 257 id[data[id[i]-1].ultimarigaassegnata]=-1; } sprintf( buffer," CARICO LE OPERAZIONI DELLA % d THREAD\ n", i d[i]); 262 mywrite( buffer); data[id[i]-1].op1 = operazioni[i][0]; 265 data[id[i]-1].op2 = operazioni[i][2]; switch( operazioni[ i][ 1]) 268 { 269 case 0: 270 data[id[i]-1].operazione = '-'; 271 break; 272 case 1: 273 data[id[i]-1].operazione = '+'; 274 break; 275 case 2: 276 data[id[i]-1].operazione = '*'; 277 break; 278 case 3: 279 data[id[i]-1].operazione = '/'; 280 break; 281 } 282 /* sblocco la thread i- esima e segno su data[ i]. ultimarigaa ggegnata la riga che li sto dando */ 283 data[ id[ i]- 1]. ultimarigaassegnata=i; data[id[i]-1].ready=0; 286 pthread_cond_signal(&data[id[i]-1].condition); 287 pthread_mutex_unlock(&data[id[i]-1].first_lock); break; 292 } 293 } } /** 298 brief Nel caso in cui il file di configurazione preveda di assegnare - 5 -

6 299 * un operazione al primo figlio che termina di lavorare, questa funzione restituisce 300 * il suo ID 301 param data[] : struttura dati del figlio 302 param ntherad : numero di figli 303 wait 304 param second_ sinc : secondo lucchetto 305 param global_ condition : variabile condition 306 */ int trovathreadlibera( struct thread_ data data[], int nthread, int * wait, pth read_ mutex_ t * second_ sinc, pthread_ cond_ t * global_ condition){ int i=0; 311 char buffer[ SIZE]; pthread_ mutex_ lock( second_ sinc); sprintf( buffer," STO PER CERCARE LA PRIMA THREAD LIBERA\ n"); 316 mywrite(buffer); for(i=0;i<nthread;i++){ 319 if(data[i].ready==1){ 320 pthread_ mutex_ unlock( second_ sinc); 321 return i+1; 322 } 323 } sprintf( buffer," NON HO TROVATO THREAD LIBERE QUINDI MI METTO IN ATT ESA\n"); 326 mywrite( buffer); * wait=- 1; 329 pthread_ cond_ wait( global_ condition, second_ sinc); 330 pthread_ mutex_ unlock( second_ sinc); return * wait; 334 } /** 337 brief Legge dal file di configurazione le singole righe delle operazi oni 338 * e le colloca in un array operazioni formato da NUM1 + OPERATORE + NUM2 per ogni riga 339 param fd : file descriptor 340 param lnprimariga : lunghezza prima riga 341 param id[] : identifica il figlio 342 param operazioni[][ 3] : matrice delle operazioni caricate sul file co nfiguarazione nel formato n1 + op + n2 343 */ void leggioperazioni( int fd, int lnprimariga, int id[], int operazioni[][ 3] ){ 346 int where, nread, numerorighe=0; 347 char c; 348 char buffer[ BUFFER]; 349 char * start=buffer; 350 char * p=buffer; 351 if (( where=lseek( fd, lnprimariga, SEEK_ SET)) == - 1){ 352 syserr("elaborato: leggioperazioni", "lseek"); 353 } while((nread = read(fd, &c, 1))== 1){

7 357 switch (c){ 358 case ' ': 359 *p='\0'; 360 p=start; 361 id[ numerorighe] = atoi( p); 362 scorririga( fd, operazioni[ numerorighe]); 363 numerorighe++; 364 break; 365 default : 366 *p=c; 367 p++; 368 break; 369 } 370 } if ( nread == - 1) 373 syserr("elaborato: leggioperazioni", "read"); 374 } /** 377 brief Questa funzione attende che figli finiscano di lavorare. 378 param threads[] : identifica i figli 379 param data[] : struttura dati del figlio 380 param nthread : numero figli 381 */ void attendifinelavorofigli( pthread_ t threads[], struct thread_ data data[], int nthread){ 384 int i; 385 char buffer[ 40]; 386 for( i=0; i<nthread; i++){ 387 sprintf( buffer," ASPETTO LA % d THREAD \ n", i+1); 388 mywrite( buffer); 389 pthread_mutex_lock(&data[i].first_lock); 390 if(data[i].ready==0){ 391 data[ i]. parentwaitme=1; 392 pthread_cond_wait(&data[i].condition,&data[i].first_loc k); 393 } 394 pthread_mutex_unlock(&data[i].first_lock); 395 sprintf( buffer," LA % d THREAD HA FINITO \ n", i+1); 396 mywrite(buffer); 397 } 398 } /** 401 brief I figli salvano il risultato in un' array. Ma se un figlio viene eseguito più volte? 402 * Questa funzione controlla che tutti i figli abbiano salvato nell' array i risultati 403 * depositati in memoria condivisa 404 param id[] : identifica figli 405 param risultato[] : contiene risultati 406 param numerorighe : numerorighe file 407 param data[] struttura dati del figlio i- esimo 408 */ void salvarisultatimancanti( int id[], double risultato[], int numerorighe, str uct thread_ data data[]){ 411 int i; for( i=0; i<numerorighe; i++){ if(id[i]>0){

8 417 risultato[ i] = data[ id[ i]- 1]. risultato; 418 } 419 } 420 } /** 423 brief Questa funzione scrive nell' apposita area di memoria il comando di 424 * terminazione dei figli, loro vedono e muoiono. 425 param threads[] : figli da uccidere 426 param data[] : struttura dati del figlio 427 param nthread : numero figli 428 */ void uccidifigli( pthread_ t threads[], struct thread_ data data[], int nthread ){ 431 char buffer[ SIZE]; 432 int j; for ( j=0; j<nthread ; j++){ 435 data[j].dead='k'; 436 } for( j=0 ; j<nthread ; j++){ 439 pthread_mutex_lock(&data[j].first_lock); 440 pthread_ cond_ signal(& data[ j]. condition); 441 pthread_mutex_unlock(&data[j].first_lock); 442 } /* aspetto che tutte le thread siano morti */ 445 int status; 446 int rtrn; 447 int i; for(i=0; i<nthread; i++){ 450 rtrn = pthread_ join( threads[ i],( void **) & status); // id processo ef fettivamente morto, status è lo stato di uscita del figlio if( rtrn){ 453 sprintf( buffer," CODICE DI ERRORE RITORNATO DALLA pthread_ join D ELLA THREAD CON ID: %d È: %d",i+1,rtrn); 454 syserr(" uccidifigli: ", buffer); 455 } 456 sprintf( buffer," JOIN SULLA % d THREAD COMPLETATO STATO= % d \ n", i, s tatus); 457 mywrite( buffer); 458 } } /** 463 brief Questa funzione passa alla riga successiva e codifica 464 * i simboli degli operatori matematici nel formato di operazione[] ( int) 465 param fd : file descriptor 466 param operazione : buffer della riga operazione 467 */ void scorririga ( int fd, int * operazione){ 470 int nread; 471 int fine = 0; 472 char buffer[ 30]; 473 char * p=buffer; 474 char * start=buffer; 475 char c; - 8 -

9 476 while((nread = read (fd, &c, 1)) == 1 &&!fine ){ switch (c){ 479 case '\n': 480 *p='\0'; 481 p=start; 482 * operazione=atoi( p); 483 fine = 1; 484 break; 485 case '-' : 486 *p='\0'; 487 p=start; 488 * operazione++=atoi( p); 489 * operazione++=0; 490 break; 491 case '+' : 492 *p='\0'; 493 p=start; 494 * operazione++=atoi( p); 495 * operazione++=1; 496 break; 497 case '*' : 498 *p='\0'; 499 p=start; 500 * operazione++=atoi( p); 501 * operazione++=2; 502 break; 503 case '/' : 504 *p='\0'; 505 p=start; 506 * operazione++=atoi( p); 507 * operazione++=3; 508 break; default : 511 *p=c; 512 p++; 513 break; 514 } } if ( nread == - 1) 519 syserr("elaborato: scorririga", "read"); int where; 522 if (( where=lseek( fd, - 1L, SEEK_ CUR)) == - 1){ 523 syserr("elaborato: scorririga", "lseek"); 524 } }

Sistemi Operativi (M. Cesati)

Sistemi Operativi (M. Cesati) Sistemi Operativi (M. Cesati) Compito scritto del 26 giugno 2017 Nome: Matricola: Corso di laurea: Cognome: Crediti da conseguire: 5 6 9 Scrivere i dati richiesti in stampatello. Al termine consegnare

Dettagli

Sistemi Operativi (M. Cesati)

Sistemi Operativi (M. Cesati) Sistemi Operativi (M. Cesati) Compito scritto del 16 luglio 2015 Nome: Matricola: Corso di laurea: Cognome: Crediti da conseguire: 5 6 9 Scrivere i dati richiesti in stampatello. Al termine consegnare

Dettagli

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

Dettagli

Sistemi Operativi Teledidattico

Sistemi Operativi Teledidattico Sistemi Operativi Teledidattico Anno 2002 3a esercitazione 5/10/2002 Paolo Torroni processi fork (creazione di un figlio) exec (sostituzione di codice del programma in esecuzione) wait (attesa della terminazione

Dettagli

SmallShell Piccolo processore comandi

SmallShell Piccolo processore comandi SmallShell Piccolo processore comandi /* file smallsh.h */ #include #include #define EOL 1 #define ARG 2 #define AMPERSAND 3 #define SEMICOLON 4 #define RIDIRIN 5 #define RIDIROUT 6

Dettagli

Corso di Laboratorio di Sistemi Operativi

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

Dettagli

Precedenza e associatività. Complementi sul C - 2. Esempi. Esempi

Precedenza e associatività. Complementi sul C - 2. Esempi. Esempi Complementi sul C - 2 Ver. 2.4 2010 - Claudio Fornaro - Corso di programmazione in C Precedenza e associatività () [] ->. S D! ~ ++ + * & (cast ) sizeof S D * / % S D + - (somma e sottrazione) S D >

Dettagli

LinuxThreads: I thread nel sistema operativo LINUX: Linuxthreads. LinuxThreads. LinuxThreads

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

Dettagli

System call fcntl e record locking

System call fcntl e record locking System call fcntl e record locking Esempio: prenotazione di voli aerei La compagnia ACME Airlines usa un sistema di prenotazione dei voli basato su unix. Possiede due uffici per la prenotazione, A e B,

Dettagli

I thread nel sistema operativo LINUX: Linuxthreads

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

Dettagli

Laboratorio di Sistemi Operativi

Laboratorio di Sistemi Operativi II Semestre - Marzo/Giugno 2008 matricole congr. 0 mod 3 I/O non bufferizzato-2 dup, dup2 System Call sync, fsync, fdatasync fcntl 2 1 Condivisione di file Unix supporta la possibilità che più processi

Dettagli

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

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

Comunicazione tra processi: pipe Le pipe sono un meccanismo UNIX di Inter Process Communication (IPC)

Comunicazione tra processi: pipe Le pipe sono un meccanismo UNIX di Inter Process Communication (IPC) Comunicazione tra processi: pipe Le pipe sono un meccanismo UNIX di Inter Process Communication (IPC) Le pipe sono canali di comunicazione unidirezionali Limitazione pipe: permettono la comunicazione solo

Dettagli

ELEMENTI DI INFORMATICA LB ESERCITAZIONE (del 09/03/2007) Files, Strutture e Liste

ELEMENTI DI INFORMATICA LB ESERCITAZIONE (del 09/03/2007) Files, Strutture e Liste ELEMENTI DI INFORMATICA LB ESERCITAZIONE (del 09/03/2007) Files, Strutture e Liste ESERCIZIO n.1 È dato un file di testo che contiene l'elenco dei vestiti presenti in un negozio. Il file contiene al massimo

Dettagli

Gestione di files Motivazioni

Gestione di files Motivazioni Gestione di files Motivazioni Un programma in esecuzione legge (sequenzialmente) una sequenza di caratteri prodotti "al volo" dall'utente (tramite tastiera) il programma in esecuzione scrive (sequenzialmente)

Dettagli

Stringhe. In C le stringhe ben formate sono in realtà array di caratteri terminati sempre da un carattere speciale, \0, detto anche

Stringhe. In C le stringhe ben formate sono in realtà array di caratteri terminati sempre da un carattere speciale, \0, detto anche Fondamenti di Informatica T-1 modulo 2 Laboratorio 04: stringhe 1 Stringhe In C le stringhe ben formate sono in realtà array di caratteri terminati sempre da un carattere speciale, \0, detto anche terminatore

Dettagli

Signalling (IPC) Signalling (segnalazione)

Signalling (IPC) Signalling (segnalazione) Signalling (IPC) Signalling (segnalazione) è un particolare tipo di Inter-Process Communications che permettere di sincronizzare dei processi spedendo e ricevendo dei messaggi minimali che informano dell'accadimento

Dettagli

I/O su Socket TCP: read()

I/O su Socket TCP: read() I/O su Socket TCP: read() I socket TCP, una volta che la connessione TCP sia stata instaurata, sono accedibili come se fossero dei file, mediante un descrittore di file (un intero) ottenuto tramite una

Dettagli

Sistemi Operativi L-A. Esercizi 14 Giugno 2007. Esercizio monitor

Sistemi Operativi L-A. Esercizi 14 Giugno 2007. Esercizio monitor Sistemi Operativi L-A Esercizi 14 Giugno 2007 Esercizio monitor Si consideri la toilette di un ristorante. La toilette è unica per uomini e donne. Utilizzando la libreria pthread, si realizzi un'applicazione

Dettagli

Introduzione al Multithreading

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

Dettagli

Sistemi operativi Modulo II I semafori 2 Select

Sistemi operativi Modulo II I semafori 2 Select Il sistema operativo LINUX Semafori 2 Giorgio Di Natale Stefano Di Carlo Politecnico di Torino Dip. Automatica e Informatica La system call read è bloccante Non

Dettagli

Algebra di Boole: Concetti di base. E un algebra basata su tre operazioni logiche

Algebra di Boole: Concetti di base. E un algebra basata su tre operazioni logiche Fondamenti di Informatica Algebra di Boole: Concetti di base Fondamenti di Informatica - D. Talia - UNICAL Algebra di Boole E un algebra basata su tre operazioni logiche OR AND NOT Ed operandi che possono

Dettagli

Caratteri e stringhe

Caratteri e stringhe Caratteri e stringhe Caratteri Dato che un computer può memorizzare esclusivamente sequenze di bit, per memorizzare un carattere (e quindi testi) è necessario stabilire una convenzione che associa a un

Dettagli

Fondamenti di Informatica 1 Ing.Gestionale (A.A ) - docente Sandro Moriggi RECUPERO. cognome nome

Fondamenti di Informatica 1 Ing.Gestionale (A.A ) - docente Sandro Moriggi RECUPERO. cognome nome Compito 1 Segnare una sola delle risposte indicate; una risposta errata ha un punteggio = 0; una risposta mancante ha un punteggio = 0; più di 1 risposta (incluso modifica della risposta segnata): annullata

Dettagli

Crea un nuovo processo. Al processo padre ritorna il PID del figlio. Al processo figlio ritorna 0

Crea un nuovo processo. Al processo padre ritorna il PID del figlio. Al processo figlio ritorna 0 Crea un nuovo processo. Al processo padre ritorna il PID del figlio. Al processo figlio ritorna 0 Sequenza di operazioni di fork: * alloca una entry nella tabella dei processi * assegna un unico ID al

Dettagli

Esercizio 2 (punti 7) Dato il seguente programma C: #include <stdio.h> int swap(int * nome, int length);

Esercizio 2 (punti 7) Dato il seguente programma C: #include <stdio.h> int swap(int * nome, int length); Fondamenti di Informatica L-A (A.A. 004/005) - Ingegneria Informatica Prof.ssa Mello & Prof. Bellavista I Prova Intermedia del 11/11/004 - durata h - COMPITO B Esercizio 1 (punti 1) Una associazione di

Dettagli

Lab. di Sistemi Operativi - Esercitazione n 9- -Thread-

Lab. di Sistemi Operativi - Esercitazione n 9- -Thread- Lab. di Sistemi Operativi - Esercitazione n 9- -Thread- 1 Sommario Esercizi su: Comunicazione tra processi: la funzione pipe() Condivisione dati e codice tra due o più processi: concetto di Thread 2 -

Dettagli

Laboratorio di Programmazione: Linguaggio C Lezione 21 del 19 maggio 2014

Laboratorio di Programmazione: Linguaggio C Lezione 21 del 19 maggio 2014 Laboratorio di Programmazione: Linguaggio C Lezione 21 del 19 maggio 2014 Damiano Macedonio Esercizio 1 Scrivere una funzione che riceve in ingresso un puntatore ad un array di interi e modifica tale array

Dettagli

Esercizio sulla gestione di file in Unix

Esercizio sulla gestione di file in Unix Esercizio sulla gestione di file in Unix 1 Esercizio Si vuole realizzare un programma C che, utilizzando le system call di Unix, realizzi uno schema di comunicazione tra due processi (padre e figlio) mediante

Dettagli

Soluzioni ai problemi di Mutua Esclusione Primitive di sincronizzazione. Soluzioni ai problemi di Mutua EsclusionePrimitive di sincronizzazione

Soluzioni ai problemi di Mutua Esclusione Primitive di sincronizzazione. Soluzioni ai problemi di Mutua EsclusionePrimitive di sincronizzazione Soluzioni ai problemi di Mutua Esclusione Primitive di sincronizzazione Soluzioni basate su primitive di sincronizzazione Le primitive di sincronizzazione piú comuni sono: Lock (mutex) - realizzati in

Dettagli

Realizzazione di Politiche di Gestione delle Risorse: i Semafori Privati

Realizzazione di Politiche di Gestione delle Risorse: i Semafori Privati Realizzazione di Politiche di Gestione delle Risorse: i Semafori Privati Condizione di sincronizzazione Qualora si voglia realizzare una determinata politica di gestione delle risorse,la decisione se ad

Dettagli

Capitolo 10 - Strutture

Capitolo 10 - Strutture 1 Capitolo 10 - Strutture Strutture In molte situazioni, una variabile non è sufficiente per descrivere un oggetto. Ad esempio, una posizione sul piano cartesiano è identificata da due coordinate, e la

Dettagli

Digressione: man 2...

Digressione: man 2... Syscall File I/O Digressione: man 2... Le funzioni della libreria standard UNIX associate alle system call di Linux sono documentate nella sezione 2 di man e.g.: man 2 open Ogni manpage di system call

Dettagli

Semafori. Semafori classici con i thread POSIX 2

Semafori. Semafori classici con i thread POSIX 2 Semafori classici Semafori I semafori sono primitive, implementate attraverso dei contatori, fornite dal sistema operativo per permettere la sincronizzazione tra processi e/o thread. Per queste primitive

Dettagli

Sincronizzazione. I semafori Stefano Quer Dipartimento di Automatica e Informatica Politecnico di Torino

Sincronizzazione. I semafori Stefano Quer Dipartimento di Automatica e Informatica Politecnico di Torino Sincronizzazione I semafori Stefano Quer Dipartimento di Automatica e Informatica Politecnico di Torino 2 Introduzione Le soluzioni Software sono complesse da utilizzare dal punto di vista del programmatore

Dettagli

L utility Unix awk [Aho-Weinberger-Kernighan]

L utility Unix awk [Aho-Weinberger-Kernighan] L utility Unix awk [Aho-Weinberger-Kernighan] L utility awk serve per processare file di testo secondo un programma specificato dall utente. L utility awk legge riga per riga i file ed esegue una o più

Dettagli

System call per la gestione di 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:

Dettagli

SC che operano su thread. pthread_create() etc...

SC che operano su thread. pthread_create() etc... SC che operano su thread pthread_create() etc... 1 Thread POSIX Obiettivi Fornire una breve introduzione descrivere alcune delle numerose SC relative ai thread POSIX fare qualche esempio concreto Finora

Dettagli

System calls. permettono ai programmi utente di richiedere servizi al Sistema Operativo. servizi come scrittura di file, stampa su video, ecc.

System calls. permettono ai programmi utente di richiedere servizi al Sistema Operativo. servizi come scrittura di file, stampa su video, ecc. Le System Calls System calls permettono ai programmi utente di richiedere servizi al Sistema Operativo servizi come scrittura di file, stampa su video, ecc. corrispondenti procedure di libreria GNU C Library

Dettagli

ERRATA CORRIGE. void SvuotaBuffer(void); void SvuotaBuffer(void) { if(getchar()!=10) {svuotabuffer();} }

ERRATA CORRIGE. void SvuotaBuffer(void); void SvuotaBuffer(void) { if(getchar()!=10) {svuotabuffer();} } ERRATA CORRIGE Pulizia del buffer di input: come fare? (1) Dopo aver richiamato getchar() per prelevare un carattere dal buffer di input, inseriamo una seconda chiamata a getchar(), senza assegnare il

Dettagli

Esercitazione n.1 24 Ottobre Obiettivi:

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

Dettagli

Corso di Laboratorio di Sistemi Operativi

Corso di Laboratorio di Sistemi Operativi Corso di Laboratorio di Sistemi Operativi Lezione 4 Alessandro Dal Palù email: alessandro.dalpalu@unipr.it web: www.unipr.it/~dalpalu Approfondimento su make http://http://capone.mtsu.edu/csdept/facilitiesandresources/make.htm

Dettagli

Laboratorio di Matlab

Laboratorio di Matlab Laboratorio di Matlab Alessandro Formaglio Dipartimento di Ingegneria dell Informazione, Università di Siena alex@dii.unisi.it http://www.dii.unisi.it/ control/matlab/labmatlab.html 9 Luglio 2009 DII -

Dettagli

Sistemi Operativi. Bruschi Monga Re. Sincronizzazione con monitor pthreads. Shell Shell programming Esercizi I/O Esercizi Tabella riassuntiva

Sistemi Operativi. Bruschi Monga Re. Sincronizzazione con monitor pthreads. Shell Shell programming Esercizi I/O Esercizi Tabella riassuntiva 1 Mattia Monga Dip. di Informatica Università degli Studi di Milano, Italia mattia.monga@unimi.it Lezione XV: Concorrenza e sincronizzazione a.a. 2013/14 1 cba 2008 14 M. Monga. Creative Commons Attribuzione

Dettagli

Lezione 8 Struct e qsort

Lezione 8 Struct e qsort Lezione 8 Struct e qsort Rossano Venturini rossano@di.unipi.it Pagina web del corso http://didawiki.cli.di.unipi.it/doku.php/informatica/all-b/start Esercizio 3 QuickSort strambo Modificare il Quicksort

Dettagli

Perche le CPU multicore

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

Dettagli

Laboratorio di Algoritmi e Strutture Dati

Laboratorio di Algoritmi e Strutture Dati Laboratorio di Algoritmi e Strutture Dati Funzioni standard del C: Funzioni di I/O Allocazione dinamica della memoria Funzioni su stringhe di caratteri Testo di riferimento B.W. Kernighan & D.M. Ritchie

Dettagli

Cosa sono i semafori?

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

Dettagli

System Calls per la Gestione dei Processi

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

Dettagli

Esercizio monitor con pthreads

Esercizio monitor con pthreads Esercizio monitor con pthreads Si consideri la pista di pattinaggio sul ghiaccio di una località turistica montana. La pista di pattinaggio è aperta a tutti. In particolare i clienti dell impianto si suddividono

Dettagli

Esercitazione 11. Esercitazione di riepilogo

Esercitazione 11. Esercitazione di riepilogo Esercitazione 11 Esercitazione di riepilogo Agenda Esercizio 1 - Monitor java Gestione della pista di un aereoporto Esercizio 2 Programma C di sistema Gestione e monitoraggio dell esecuzione del programma

Dettagli

Stringhe e allocazione dinamica della memoria

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

Dettagli

Il costrutto monitor

Il costrutto monitor Il Monitor 1 Monitor Definizione del monitor Esempi d uso Realizzazione del costrutto monitor Realizzazione di politiche di gestione delle risorse Chiamate innestate a procedure del monitor Realizzazione

Dettagli

Linguaggio C: PUNTATORI

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

Dettagli

Sommario. Processi e Programmi. Che cosa e un Processo? Lezione 5 Processi e Threads

Sommario. Processi e Programmi. Che cosa e un Processo? Lezione 5 Processi e Threads Sommario Lezione 5 Processi e Threads Processi e Programmi Implementazione dei Processi Casi di Studio relativi a Processi Thread Casi di Studio relativi a Thread 5.2 Processi e Programmi Che cosa e un

Dettagli

4. Accesso diretto per gli archivi con record a lunghezza costante

4. Accesso diretto per gli archivi con record a lunghezza costante 4. Accesso diretto per gli archivi con record a lunghezza costante Nell accesso diretto (in inglese, random) al file binario, le operazioni di lettura o scrittura devono essere precedute dall operazione

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

Le basi del linguaggio Java

Le basi del linguaggio Java Le basi del linguaggio Java Compilazione e interpretazione Quando si compila il codice sorgente scritto in Java, il compilatore genera il codice compilato, chiamato bytecode. È un codice generato per una

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

Il processo figlio : utilizza lo stesso codice che sta eseguendo il padre ;

Il processo figlio : utilizza lo stesso codice che sta eseguendo il padre ; La creazione di un nuovo processo in UNIX int fork(void); Viene creato un nuovo processo (figlio) identico (stesso codice, area dati copiata) al processo (padre) che ha invocato la fork Solo il valore

Dettagli

Operazioni su file di caratteri

Operazioni su file di caratteri Operazioni su file di caratteri Apertura fopen Chiusura fclose Scrittura fprintf Lettura fscanf Controllo fine file feof Prof. E. Occhiuto INFORMATICA 242AA a.a. 2010/11 pag. 1 Apertura di un file: Si

Dettagli

Corso di Programmazione Concorrente Processi. Valter Crescenzi

Corso di Programmazione Concorrente Processi. Valter Crescenzi Corso di Programmazione Concorrente Processi Valter Crescenzi http://crescenzi.inf.uniroma3.it Sommario Processi vs Thread Creazione e terminazione di processi chiamata di sistema fork() chiamata di sistema

Dettagli

Esercitazione 2! Mutex e semafori POSIX. 3 Novembre 2016

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

Dettagli

Corso di Sistemi Operativi Esercitazioni

Corso di Sistemi Operativi Esercitazioni Università di Roma La Sapienza Dipartimento di Informatica e Sistemistica Corso di Sistemi Operativi Esercitazioni Lezione IX Esempio di progetto Server HTTP 0.9 Server HTTP 0.9 Specifiche Si chiede di

Dettagli

Gestione dei file. Stefano Ferrari. Università degli Studi di Milano Programmazione. anno accademico

Gestione dei file. Stefano Ferrari. Università degli Studi di Milano Programmazione. anno accademico Gestione dei file Stefano Ferrari Università degli Studi di Milano stefano.ferrari@unimi.it Programmazione anno accademico 2016 2017 Gli stream Si dice stream qualsiasi sorgente di dati in ingresso e qualsiasi

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

Breve Manuale di Riferimento sulla Sintassi Linguaggi C++ e FORTRAN

Breve Manuale di Riferimento sulla Sintassi Linguaggi C++ e FORTRAN Breve Manuale di Riferimento sulla Sintassi Linguaggi e versione aggiornata al 05/02/2004 Sommario Elementi di Base... 2 Dati, Tipi e Dichiarazioni... 2 Tipi di Dato di Base... 2 Tipi di Dato Strutturati...

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

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I Lezione 4 Elementi lessicali e espressioni logiche Matricole 2-3 Elementi lessicali il linguaggio C ha un suo vocabolario di base i cui elementi sono detti token esistono 6 tipi di token: parole chiave

Dettagli

Il sistema operativo LINUX Script di Shell

Il sistema operativo LINUX Script di Shell Il sistema operativo LINUX Script di Shell Giorgio Di Natale Stefano Di Carlo Bartolomeo Montrucchio Politecnico di Torino Dip. Automatica e

Dettagli

Algoritmi e basi del C Struttura di un programma

Algoritmi e basi del C Struttura di un programma Algoritmi e basi del C Struttura di un programma Marco D. Santambrogio marco.santambrogio@polimi.it Ver. aggiornata al 17 Marzo 2015 Compitini Compitini di INFO: 24 Aprile 2015 4.15pm @ C.G.1 (Ed. 9) 21

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

Puntatori. Un puntatore contiene un numero che indica la locazione di memoria dove è presente la variabile puntata

Puntatori. Un puntatore contiene un numero che indica la locazione di memoria dove è presente la variabile puntata Puntatori int i = 10; int * pi = &i; pi i = 10 116 int * pi = pi contiene un informazione che mi permette di accedere ( puntare ) ad una variabile intera Un puntatore contiene un numero che indica la locazione

Dettagli

IL CONCETTO DI FILE. È illecito operare oltre la fine del file.

IL CONCETTO DI FILE. È illecito operare oltre la fine del file. IL CONCETTO DI FILE Un file è una astrazione fornita dal sistema operativo, il cui scopo è consentire la memorizzazione di informazioni su memoria di massa. Concettualmente, un file è una sequenza di registrazioni

Dettagli

Esercizi Programmazione I

Esercizi Programmazione I Esercizi Programmazione I 9 Novembre 201 Esercizio 1 Valutare e dare il tipo delle seguenti espressioni condizionali. 1 char a= a, b= b ; // a ha v a l o r e decimale 97 2 i n t i= 1, j= 2 ; 3 double x=

Dettagli

2. Nucleo del sistema operativo (la gestione dei processi)

2. Nucleo del sistema operativo (la gestione dei processi) Struttura interna del sistema operativo Linux 2. Nucleo del sistema operativo (la gestione dei processi) Architettura (struttura) del sistema operativo shell Programmi utente Modo utente Interfaccia delle

Dettagli

Sistemi Operativi. Bruschi Monga Re. Dischi virtuali Esercizio. Concorrenza Semafori. Sincronizzazione con monitor pthreads. I-node.

Sistemi Operativi. Bruschi Monga Re. Dischi virtuali Esercizio. Concorrenza Semafori. Sincronizzazione con monitor pthreads. I-node. 1 Mattia Monga Dip. di Informatica Università degli Studi di Milano, Italia mattia.monga@unimi.it Lezione XV: Memoria di massa 2 a.a. 2015/16 1 cba 2008 16 M. Monga. Creative Commons Attribuzione Condividi

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 Sistemi Operativi Marzo-Giugno 2008 matricole congrue 0 mod 3

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

Dettagli

Tutorato Programmazione 1 Modulo 2

Tutorato Programmazione 1 Modulo 2 Tutorato Programmazione 1 Modulo 2 Matrici e Stringhe Do#. Michele Ciampi Esercizi svol5 con standard C99 Matrici Prendere in input una matrice NxN (controllare che N

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

Riepilogo sulla Concorrenza

Riepilogo sulla Concorrenza Riepilogo sulla Concorrenza Passi per la costruzione di un programma concorrente Prima di tutto, definire se la concorrenza avviene mediante Processi concorrenti o Thread concorrenti Definizione delle

Dettagli

Corso di laurea in ingegneria informatica Esame di sistemi operativi 21 gennaio 2009 SOLUZIONI

Corso di laurea in ingegneria informatica Esame di sistemi operativi 21 gennaio 2009 SOLUZIONI Corso di laurea in ingegneria informatica Esame di sistemi operativi 21 gennaio 2009 SOLUZIONI 1. Si consideri il programma C seguente (gli #include necessari sono omessi): / programma principale / 1.

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

Chiamate di sistema. Pipe Flussi di I/O

Chiamate di sistema. Pipe Flussi di I/O Chiamate di sistema Pipe Flussi di I/O Esempio di chiamata di sistema #include int main(int argc, char ** argv) FILE * f; f = fopen("nuovo-file", "w"); fprintf(f, "Hello World!\n"); fclose(f);

Dettagli

La Comunicazione tra Processi in Unix

La Comunicazione tra Processi in Unix La Comunicazione tra Processi in Unix La è un canale di comunicazione tra processi: unidirezionale: accessibile ad un estremo in lettura ed all'altro in scrittura molti-a-molti: più processi possono spedire

Dettagli

Tipi di POSIX Semaphores

Tipi di POSIX Semaphores Semafori POSIX Sono una particolare implementazione dei semafori. Possono svolgere il ruolo di semafori binari o generali (n-ari) a seconda di quale valore viene loro assegnato all'atto della inizializzazione

Dettagli

Esercizi di Verifica Aprile 2005 Università disalerno

Esercizi di Verifica Aprile 2005 Università disalerno Laboratorio di Sistemi Operativi: Prof.ssa A. Rescigno Anno Acc. 2004-2005 Esercizi di Verifica Aprile 2005 Università disalerno Nome e Cognome: Matricola: Classe 1 Classe 2 p-p p-d 1 2 3 4 5 6 7 tot /10

Dettagli

Esercizio sul Monitor. Ponte con utenti grassi e magri 11 Novembre 2013

Esercizio sul Monitor. Ponte con utenti grassi e magri 11 Novembre 2013 Esercizio sul Monitor Ponte con utenti grassi e magri 11 Novembre 2013 1 Ponte con utenti grassi e magri Si consideri un ponte pedonale che collega le due rive di un fiume. Al ponte possono accedere due

Dettagli

Corso di Laboratorio di Sistemi Operativi

Corso di Laboratorio di Sistemi Operativi Corso di Laboratorio di Sistemi Operativi Lezione 6 Alessandro Dal Palù email: alessandro.dalpalu@unipr.it web: www.unipr.it/~dalpalu Interazione tra Processi I processi concorrenti possono interagire

Dettagli

ELEMENTI DI INFORMATICA L-B. Ing. Claudia Chiusoli

ELEMENTI DI INFORMATICA L-B. Ing. Claudia Chiusoli ELEMENTI DI INFORMATICA L-B Ing. Claudia Chiusoli Materiale Lucidi delle lezioni Date degli appelli Testi di esami precedenti Informazioni e contatti http://www.lia.deis.unibo.it/courses/ Programma del

Dettagli

LinuxThreads. LinuxThreads: monitor & variabili condizione

LinuxThreads. LinuxThreads: monitor & variabili condizione LinuxThreads Variabili Condizione LinuxThreads: monitor & variabili condizione Lo standard POSIX 1003.1c (libreria ) non implementa il costrutto Monitor ma implementa i mutex implementa le variabili

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

Sistemi Operativi II. Thread: TSD, Attributi

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

Dettagli

Librerie C. Corso di Linguaggi e Traduttori 1 AA Corso di Linguaggi e Traduttori 1 AA stdio.h

Librerie C. Corso di Linguaggi e Traduttori 1 AA Corso di Linguaggi e Traduttori 1 AA stdio.h Corso di Linguaggi e Traduttori 1 AA 2004-05 1 Corso di Linguaggi e Traduttori 1 AA 2004-05 stdio.h 2 Funzioni comuni di I/O? Le piu' comuni funzioni che permettono I/O sono getchar() e putchar():? int

Dettagli

La sintassi del C APPENDICE H

La sintassi del C APPENDICE H APPENDICE H La sintassi del C Nella notazione della sintassi utilizzata, le categorie sintattiche (non terminali) sono state indicate da uno stile tipografico in corsivo, mentre le parole letterali e i

Dettagli

Sistemi Operativi (M. Cesati)

Sistemi Operativi (M. Cesati) Sistemi Operativi (M. Cesati) Compito scritto del 2 luglio 2015 (Turno 1) Nome: Matricola: Corso di laurea: Cognome: Crediti da conseguire: 5 6 9 Scrivere i dati richiesti in stampatello. Al termine consegnare

Dettagli

Laboratorio di Informatica Ingegneria Clinica Lezione 30/11/2011

Laboratorio di Informatica Ingegneria Clinica Lezione 30/11/2011 Laboratorio di Informatica Ingegneria Clinica Lezione 30/11/2011 Raffaele Nicolussi FUB - Fondazione Ugo Bordoni Via del Policlinico, 147 00161 Roma I/O in C Il sistema di I/O del C è una interfaccia uniforme

Dettagli

Controllo dei Processi 1

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

Dettagli