1.6: Processi Concorrenti
|
|
|
- Arrigo Guerra
- 9 anni fa
- Visualizzazioni
Transcript
1 1.6: Processi Concorrenti Programmi concorrenti Chiamate di sistema Unix per il controllo di processi Creazione, terminazione di processi Sincronizzazione sulla terminazione, segnalazione di eventi Comunicazione Esempi di codice Sincronizzazione tra processi Mutua esclusione Produttore consumatore Primitive di sincronizzazione; semafori Implementazione 1.6.1
2 Programmi Concorrenti Programmi: Sequenziali singolo processo Concorrenti più processi (o thread) che competono tra loro per risorse di sistema, si sincronizzano, comunicano tra loro. Più versatili ed efficienti Applicazioni più complesse e sofisticate Requisiti: normale linguaggio sequenziale + primitive (chiamate di sistema o API) per creazione/terminazione processi sincronizzazione/comunicazione/segnalazione tra processi 1.6.2
3 Programmi Concorrenti Esempi: P 0 (sh) P 0 P 1 (ls) P 1 P 2 P 3 P 4 P 0 (sh) Sincronizzazione sulla terminazione Comunicazione dati P
4 Chiamate di Sistema Unix pid = fork(); creazione crea nuovo processo (child figlio), duplicando quello originale (parent padre) ritorna al figlio: 0 al padre: il PID del figlio appena creato in caso di errore, 1 (al padre) il processo figlio eredita tutto l'ambiente del padre, compresi i canali aperti (tutto tranne il PID) il figlio si trova come se avesse eseguito tutto il programma fino al fork, come il padre; continua ad eseguire (indipendentemente) N.B. il figlio riceve una copia dell'ambiente del padre (programma, dati etc.); non c'è condivisione di dati tra padre e figlio. es.: pid = fork(); if(pid diverso da 0) { /* padre */ if(pid uguale a 1) { errore(); exit(1); }... } else { 1.6.4
5 Chiamate di Sistema Unix (Cont.) exit(code); terminazione termina il processo flush dell'i/o pending (stdout etc.), chiude tutti i file, esce trasmette code al Kernel (codice d'uscita exit code) convenzione: code = 0 OK ; code 0 errore (vari codici possibili) non ritorna mai pid = wait(status_address); sincronizzazione su terminazione aspetta finchè uno dei processi figli termina (sincronizzazione) ritorna il PID del primo figlio che ha terminato se status_address non è nullo, ritorna anche, nell'intero puntato, lo stato d'uscita del figlio (exit code e altro). execl(path, name, arg1,...); sostituisce, nel processo corrente, un nuovo programma all'attuale, e lo esegue path è il percorso del file eseguibile, name è il nome del programma, arg1 è il primo argomento, etc. il processo rimane lo stesso, quindi tutto l'ambiente è inalterato "viaggio senza ritorno": se c'è un valore di ritorno, è 1 (impossibile eseguire il nuovo programma) 1.6.5
6 Esempio di Codice 1 Combinazione tipica delle chiamate viste (pseudo codice): pid = fork(); if(pid diverso da 0) { } else { /* processo padre */ if(pid uguale a 1) error_exit("cannot fork");... wait(status_address); excode = (estrai codice da status); exit(excode); /* esce col codice del figlio */ /* processo figlio */ /* eventuale ridirezione dell'i/o */ execl("/usr/local/bin/program", "program", " x", "file", NULL); 1.6.6
7 Chiamate di Sistema Unix (Cont.) kill(pid, sig); segnalazione invia il segnale sig al processo con PID pari a pid (segnalazione: comunicazione di evento asincrono) processo ricevente: stesso UID del processo mittente (salvo se mittente è root) segnale: provoca interrupt software nel processo ricevente azione di default all'interrupt: a) exit b) core dump + exit [*] SIGINT (2) intr char. da terminale SIGQUIT (3) quit char. da terminale [*] SIGKILL (9) terminazione forzata (non intercettabile) SIGTERM (15) terminazione software (default per kill(1)) N.B. la chiamata di sistema signal(sig, func) permette di predisporre un'azione specifica (la chiamata alla funzione func) al ricevimento del segnale sig
8 Esempio di Codice 2 prog() { pid = fork(); if(pid non uguale a 0) { /* processo padre */ print("pid processo figlio = ", pid); print("attesa 10 secondi"); sleep(10); /* attendi 10 sec. senza fare nulla */ print("terminazione del processo figlio"); kill(pid, SIGTERM); /* segnale di terminazione al processo "pid" */ exit(0); } else { /* processo figlio */ print("processo figlio inizia"); pid = getpid(); /* ottengo il mio proprio identificativo */ loop { print("processo figlio", pid, "lavora"); sleep(1); 1.6.8
9 Come lavora la shell di Unix shell() { loop { write(1, "$ ", 2); /* prompt 2 caratteri allo stdout */ read(0, line, SIZE); /* leggi riga da stdin */ parse(line); /* separa i token; applica i vari operatori ($, *,?, [ ], etc.) */ pid = fork(); if(pid non uguale a 0) { /* processo padre: la shell originaria */ if( line non termina con '&' ) { } wait(status_address); excode = (estrai codice d'uscita da status); /* tieni conto di excode per istruzioni di controllo della shell: if, while, etc. */ } else { /* processo figlio */ redirect(); /* applica ridirezioni di stdin, stdout etc. (operatori <, >, >> etc.) */ } execl(file, program, args); /* esegui il comando nel processo figlio */ 1.6.9
10 Chiamate di Sistema Unix (Cont.) pipe(fdc); comunicazione/sincronizzazione è il più semplice (e più limitato) meccanismo di comunicazione dati tra processi stabilisce un canale di comunicazione tra processi, che può essere condiviso con i processi figli (che ereditano i canali aperti) il canale è unidirezionale fdc[0] serve per leggere dal pipe, fdc[1] per scrivere il pipe è implementato come un canale di trasmissione di tipo FIFO, di dimensione finita (di solito 4 Kbyte) sincronizzazione automatica di processi scrittori e lettori, che vanno a dormire in caso di pipe pieno/vuoto EOF fdc[1] (0 byte letti) ritornato dalla read() al lettore se il pipe è chiuso in scrittura fdc[1] fdc[1] N.B. questa descrizione è incompleta per un uso reale. Padre Padre Figlio fdc[0] fdc[0] fdc[0]
11 Esempio di Codice 3 Padre (produttore) fdc[1] fdc[0] Figlio (consum.) stdout file sel file pattern grep pattern
12 Esempio di Codice 3 (Cont.) sel(file, pattern) { pipe(fdc); pid = fork(); if(pid diverso da 0) { /* padre produttore */ ifd = open(file, read only); loop(nread = read(ifd, buffer, 1024); finchè nread diverso da 0) write(fdc[1], buffer, nread); close(fdc[1]); /* così il figlio troverà EOF dopo lo svuotamento della pipe */ close(ifd); wait(status_address); /* sincronizzati sulla terminazione di grep */ code = (estrai exit code da status); exit(code); } else { /* figlio consumatore */ redirect(fdc[0] sul f.d. 0, cioè lo stdin); execl("/usr/bin/grep", "grep", pattern);
13 Sincronizzazione tra Processi Due o più processi interagiscono tra loro quando si contendono l'uso di risorse, permanenti o consumabili. Due paradigmi di base: Mutua esclusione Produttore consumatore Tutti i casi sono riconducibili a produzione e consumo di risorse consumabili. Vincolo di sincronizzazione tra P 1 e P 2 : "P 1 è il produttore di una risorsa consumabile R e P 2 è il consumatore di R". R è una risorsa software creata ad hoc dal Kernel
14 Mutua Esclusione Paradigma della mutua esclusione: risorsa permanente R contesa da più processi P 1... P n garantire che Ad ogni istante vi sia al max. un processo Pi che occupi R (Mutua Esclusione) Ogni processo richiedente ottenga l'uso di R entro un intervallo limitato di tempo (Attesa Limitata) Generalizzazione: esecuzione di una parte di codice che deve gestire dati in modo esclusivo problema della sezione critica. L'accesso concorrente a dati condivisi può provocare un'inconsistenza dei dati stessi, se non si adotta una disciplina di accesso. Caso tipico: quando si vuole rendere seriale una risorsa permanente del sistema (area RAM, disk controller, etc.)
15 Problema della Sezione Critica N processi che si contendono l'uso di dati condivisi Ogni processo ha una parte di codice, chiamata sezione critica, nella quale accede ai dati condivisi. Problema della sezione critica garantire che quando un processo P i sta eseguendo codice nella propria sezione critica, nessun altro processo possa fare altrettanto trovare un protocollo adeguato. Struttura del generico processo P i for(;;) { entry section critical section exit section non critical section
16 Produttore Consumatore Paradigma produttore consumatore: Risorse consumabili (dati) R prodotte in loop da uno o più P p e consumate da uno o più P c Dati normalmente trasmessi tramite un buffer di dimensione finita (canale di comunicazione a capacità limitata) problema del buffer limitato (bounded buffer problem); talvolta il canale è concettualmente a capacità illimitata. Il processo consumatore va comunque a dormire nel caso di risorsa non disponibile (canale vuoto) Il processo produttore va a dormire, solo nel caso di capacità limitata, se il canale è pieno
17 Produttore Consumatore (Cont.) Esempio tipico: due processi comunicano attraverso un buffer comune, di dimensione limitata Dati condivisi: #define N...; typedef... item; item buffer[n]; int in = 0, out = 0,counter = 0; /* in: next free slot in buffer out: first full slot */
18 Produttore Consumatore (Cont.) Processo produttore: item nextp; for(;;) { } produce an item in nextp; while ( counter == N ) /* (while buffer full) */ no op; buffer [in] =nextp; in = ++in % N; ++counter;
19 Produttore Consumatore (Cont.) Processo consumatore: item nextc; for(;;) { } while ( counter == 0 ) /* (while buffer empty) */ no op; nextc = buffer [out]; out = ++out % N; counter; consume the item in nextc; Problema: a causa dell'esecuzione concorrente, le istruzioni: ++counter counter
20 Produttore Consumatore (Cont.) Varianti: Un produttore, un consumatore es. 1: pipe (canale a capacità limitata) es. 2: processo che legge caratteri da tastiera (canale concettualmente a capacità illimitata). Più produttori, un consumatore es.: spooler di stampa Più produttori, più consumatori es.: programma concorrente con più processi che eseguono in multiprogrammazione la stessa funzione. Il server HTTP Apache è normalmente configurato in modo da preallocare da 4 a 10 processi server in parallelo, per essere pronto a picchi di carico
21 Hardware di Sincronizzazione L'hardware può aiutare a risolvere il problema dell'atomicità. Istruzione test+modify di una variabile, in modo atomico: boolean TestAndSet(boolean target) { boolean result = target; target = TRUE; return result; } Dati condivisi: boolean lock = FALSE; Processo P i for(;;) { while (TestAndSet(lock)) no op; critical section lock = FALSE; non critical section
22 Semaforo I problemi visti diventano più complessi quando si estendono a un numero arbitrario di processi concorrenti Occorre disporre di uno strumento di sincronizzazione di uso generale. Mutua esclusione di risorsa permanente R: può ottenersi associando risorse consumabili X R ; ogni processo acquisisce una X R prima di utilizzare R rilascia X R dopo aver utilizzato R. X R : tipo di risorsa fittizia generata dal Kernel, solo per regolare il traffico di processi: affluiscono verso la risorsa permanente R (acquisizione di X R ) se ne distaccano (rilascio di X R )
23 Primitive di Sincronizzazione lock() / unlock(): primitive di implementazione di semafori (la risorsa consumabile). Risolvono qualunque problema di mutua esclusione. Pseudo codice: lock(x) { loop(x non è disponibile) aspetta; consuma X; } unlock(x) { } produci X; /* sblocca eventuale processo in attesa nella chiamata a lock() */
24 Primitive di Sincronizzazione (Cont.) send() / receive(): primitive di implementazione di comunicazione sincronizzata di messaggi (la risorsa consumabile). Risolvono problemi di tipo produttore consumatore. Pseudo codice (caso di canale a capacità limitata): send(m,dest) { loop(canale pieno) aspetta; inserisci <m,dest> nel canale; /* sblocca eventuale processo in attesa nella chiamata a receive() */ } receive(m,mitt) { loop(canale vuoto) aspetta;
25 Esempio: Sezione Critica di n Processi Variabile condivisa: semaphore mutex = 1; /* mutex: mutual exclusion */ Processo P i for(;;) { wait(mutex); critical section signal(mutex); non critical section }
26 Implementazione dei Semafori Nello pseudo codice visto per lock()/unlock() (ma anche per send()/receive() ), l'istruzione "aspetta" può significare in pratica due cose: No op (loop continuo, ovvero busy waiting; impegno di CPU) > spinlock (spin while locked) Vai a dormire (il processo passa in stato Waiting; sarà svegliato successivamente; non impegna CPU) semaforo bloccante In generale, molto più adatto ad ambienti multitasking
27 Implementazione dei Semafori (Cont.) Un semaforo spinlock è normalmente una variabile intera, a cui si accede esclusivamente tramite due operazioni atomiche: wait (S): while (S <= 0) S; no op; signal (S): ++S; Può assumere due valori (semaforo binario): 0 risorsa occupata (semaforo bloccato) 1 risorsa diponibile (semaforo libero)
28 Implementazione dei Semafori (Cont.) Implementazione a livello Kernel di un semaforo bloccante: Semaforo definito come un record (struttura di dati): struct semaphore { int value; process *proclist; /* puntatore a lista di Process Descriptor */ }; Basato su due semplici operazioni: sleep() sospende il processo che la invoca (il processo va a dormire) wakeup(p) riprende l'esecuzione di un processo sospeso P (il processo vene risvegliato). N.B. queste due operazioni possono essere implementate facilmente in qualunque sistema multitasking; in particolare, Unix dispone di funzioni sleep() e wakeup() nel Kernel (N.B. nulla a che vedere con la funzione
29 Implementazione dei Semafori (Cont.) Le primitive di semaforo possono ora definirsi così: wait(s): if ( S.value < 0) signal(s): if (S.value++ < 0) { } add this process to S.proclist; sleep(); { } remove a process P from S.proclist; wakeup(p); Diversamente dall'implementazione vista in precedenza, questo semaforo può assumere valori negativi (semaforo contatore); questi corrispondono al numero di processi in attesa della risorsa
30 Sezione Critica di n Processi: Scenario Sem.value Resource (Free, Busy) 1 F P1: wait() 0 P1: go B... P2: wait() 1 P2: sleep() P3: wait() 2 P3: sleep()... P1: signal() 1 F P1: wakeup(p2) P2: go B P2: signal() 0 F P2: wakeup(p3) P3: go B
31 Sincronizzazione Generica: Scenario Exegui B in P j solo dopo aver eseguito A in P i Si usa un semaforo flag initializzato a 0 Codice: P i P j A signal(flag) wait(flag) B
32 Implementazione in Unix Unix System V: IPC (InterProcess Communication) insieme di chiamate di sistema per sincronizzazione e comunicazione tra processi Comprende: a) code di messaggi b) memoria condivisa c) semafori Implementato ormai in tutti i tipi di Unix, incluso Linux Un esempio di implementazione di lock() / unlock() in Unix a livello utente: Sfrutta l'apertura di file, in modo esclusivo open(file, O_CREAT+O_EXCL): ha successo solo se il file non esiste (e viene dunque creato ex novo) Un semaforo = un file; file esiste: risorsa occupata; file non esiste: risorsa libera
33 Esempio di Codice 4 /* name: nome del file, cioè del semaforo */ lock(name) { loop { fd = open(name, O_CREAT+O_EXCL); if(errore: il file esiste già) sched_yield(); else if(altro tipo di errore) return errore; else return fd; /* file creato in modo esclusivo = risorsa acquisita; restituisci descrittore del semaforo */ } }
34 Esempio di Codice 4 (Cont.) /* name: nome del file, cioè del semaforo; fd: descrittore del semaforo */ unlock(name, fd) { close(fd); if(errore) return errore; /* uso errato del semaforo */ else { unlink(name); /* file rimosso = risorsa rilasciata; da questo momento può essere ricreato tramite lock() */ return OK; } }
35 Problemi di sincronizzazione L'uso delle primitive viste può portare a problemi in caso di errori di programmazione (uso improprio delle primitive) Stallo (deadlock): due o più processi attendono indefinitamente un evento che può essere causato solo da un altro dei processi in attesa. Esempio: processi P A e P B ; semafori R 1 e R 2 P A lock(r 1 ); lock(r 2 );... unlock(r 1 ); unlock(r 2 ); P B lock(r 2 ); lock(r 1 );... unlock(r 2 ); unlock(r 1 ); Soluzione: acquisire semafori in un ordine prefissato (e rilasciarli nell'ordine inverso)
36 Problemi di sincronizzazione (Cont.) Blocco indefinito (starvation): uno o più processi possono non essere mai rimossi dalla coda dei processi in attesa di acquisizione di un semaforo, perchè altri processi in attesa hanno sempre maggior priorità. Ciò può avvenire ad esempio se la coda è gestita in ordine LIFO (Last In, First Out). Problema analogo a quello già visto nel caso dello scheduling di CPU con priorità
Sincronizzazione e comunicazione tra processi in Unix. usati per trasferire ad un processo l indicazione che un determinato evento si è verificato.
Processi parte III Sincronizzazione e comunicazione tra processi in Unix Segnali: usati per trasferire ad un processo l indicazione che un determinato evento si è verificato. Pipe: struttura dinamica,
Capitolo 7: Sincronizzazione
Capitolo 7: Sincronizzazione Il problema della sincronizzazione. Il problema della sezione critica. Hardware per la sincronizzazione. Semafori. Problemi classici di sincronizzazione. Monitor (cenni). 7.1
Monitor. Introduzione. Struttura di un TDA Monitor
Monitor Domenico Cotroneo Dipartimento di Informatica e Sistemistica Introduzione E stato introdotto per facilitare la programmazione strutturata di problemi in cui è necessario controllare l assegnazione
Pronto Esecuzione Attesa Terminazione
Definizione Con il termine processo si indica una sequenza di azioni che il processore esegue Il programma invece, è una sequenza di azioni che il processore dovrà eseguire Il processo è quindi un programma
Inter Process Communication. Laboratorio Software 2008-2009 C. Brandolese
Inter Process Communication Laboratorio Software 2008-2009 C. Brandolese Introduzione Più processi o thread Concorrono alla relaizzazione di una funzione applicativa Devono poter realizzare Sincronizzazione
Sistemi Operativi. Lezione 7 Comunicazione tra processi
Lezione 7 Comunicazione tra processi Introduzione La soluzione sw al problema della mutua esclusione è abbastanza complessa Algoritmo di Peterson La soluzione hw mediante disabilitazione degli interrupt
Computazione multi-processo. Condivisione, Comunicazione e Sincronizzazione dei Processi. Segnali. Processi e Threads Pt. 2
Computazione multi-processo Avere più processi allo stesso momento implica/richiede Processi e Threads Pt. 2 Concorrenza ed efficienza Indipendenza e protezione dei dati ma deve prevedere/permettere anche:
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
Sistemi Operativi. Lez. 13: primitive per la concorrenza monitor e messaggi
Sistemi Operativi Lez. 13: primitive per la concorrenza monitor e messaggi Osservazioni I semafori sono strumenti particolarmente potenti poiché consentono di risolvere ogni problema di sincronizzazione
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
SISTEMI OPERATIVI. Sincronizzazione dei processi. Domande di verifica. Luca Orrù Centro Multimediale Montiferru 30/05/2007
2007 SISTEMI OPERATIVI Sincronizzazione dei processi Domande di verifica Luca Orrù Centro Multimediale Montiferru 30/05/2007 Sincronizzazione dei processi 1. Si descrivano i tipi di interazione tra processi?
Sistemi Operativi (modulo di Informatica II) I processi
Sistemi Operativi (modulo di Informatica II) I processi Patrizia Scandurra Università degli Studi di Bergamo a.a. 2009-10 Sommario Il concetto di processo Schedulazione dei processi e cambio di contesto
IPC System V. Code di messaggi
IPC System V Code di messaggi Panoramica coda di messaggi una lista concatenata di messaggi, FIFO semaforo un contatore condiviso, atomicamente modificabile memoria condivisa uno spazio di memoria accessibile
Il problema del produttore e del consumatore. Cooperazione tra processi
Il problema del produttore e del consumatore Cooperazione tra processi Risorsa consumabile I processi disgiunti possono interferire tra loro a causa dell'uso di risorse permanenti, ma ognuno di essi ignora
Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2015-16. Pietro Frasca.
Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2015-16 Pietro Frasca Lezione 15 Martedì 24-11-2015 Struttura logica del sottosistema di I/O Processi
Java Virtual Machine
Java Virtual Machine programmi sorgente: files.java compilatore files.class bytecode linker/loader bytecode bytecode Java API files.class interprete macchina ospite Indipendenza di java dalla macchina
Il costrutto monitor [Hoare 74]
Il monitor 1 Il costrutto monitor [Hoare 74] Definizione: Costrutto sintattico che associa un insieme di operazioni (entry, o public) ad una struttura dati comune a più processi, tale che: Le operazioni
Sistemi Operativi (modulo di Informatica II)
Sistemi Operativi (modulo di Informatica II) La comunicazione tra processi Patrizia Scandurra Università degli Studi di Bergamo a.a. 2008-09 Sommario Processi cooperanti La comunicazione tra processi Necessità
1. Che cos è la multiprogrammazione? Si può realizzare su un sistema monoprocessore? 2. Quali sono i servizi offerti dai sistemi operativi?
1. Che cos è la multiprogrammazione? Si può realizzare su un sistema monoprocessore? 2. Quali sono i servizi offerti dai sistemi operativi? 1. La nozione di multiprogrammazione prevede la possibilità di
Modello dei processi. Riedizione delle slide della Prof. Di Stefano
Modello dei processi Riedizione delle slide della Prof. Di Stefano 1 Processi Modello di Processi asincroni comunicanti Process Scheduling Operazioni sui Processi Cooperazione tra Processi Interprocess
Corso di Sistemi di Elaborazione delle informazioni
Corso di Sistemi di Elaborazione delle informazioni Sistemi Operativi Francesco Fontanella Complessità del Software Software applicativo Software di sistema Sistema Operativo Hardware 2 La struttura del
Organizzazione Monolitica
Principali componenti di un sistema Applicazioni utente Interprete di comandi (shell) Interfaccia grafica (desktop) Gestore del processore / Scheduler(s) Gestore della memoria Gestore delle periferiche/
Gestione dei processi
Gestione dei processi Dormire unsigned int sleep(unsigned int); Attende un numero specificato di secondi a meno che non si verifichi un segnale Restituisce 0 se l'attesa è terminata senza interruzioni,
Il costrutto monitor [Hoare 74]
Il monitor 1 Il costrutto monitor [Hoare 74] Definizione: Costrutto sintattico che associa un insieme di operazioni (entry o public) ad una struttura dati comune a più processi, tale che: Le operazioni
Con il termine Sistema operativo si fa riferimento all insieme dei moduli software di un sistema di elaborazione dati dedicati alla sua gestione.
Con il termine Sistema operativo si fa riferimento all insieme dei moduli software di un sistema di elaborazione dati dedicati alla sua gestione. Compito fondamentale di un S.O. è infatti la gestione dell
Thread: sincronizzazione Esercitazioni del 09 Ottobre 2009
Thread: sincronizzazione Esercitazioni del 09 Ottobre 2009 Luca Fossati, Fabrizio Castro, Vittorio Zaccaria October 10, 2009 Sincronizzazione - 1 1 Esercizio 1: Sincronizzazione - 1 Qual è il problema
Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:
Tipi primitivi Il linguaggio Java offre alcuni tipi di dato primitivi Una variabile di tipo primitivo può essere utilizzata direttamente. Non è un riferimento e non ha senso tentare di istanziarla mediante
Meccanismi di sincronizzazione: Semafori e Monitor
Meccanismi di sincronizzazione: Semafori e Monitor 1 Introduzione Nelle prossime lezioni vedremo alcuni meccanismi dei sistemi operativi e dei linguaggi di programmazione sviluppati per facilitare la scrittura
Sistemi Operativi. Processi GESTIONE DEI PROCESSI. Concetto di Processo. Scheduling di Processi. Operazioni su Processi. Processi Cooperanti
GESTIONE DEI PROCESSI 4.1 Processi Concetto di Processo Scheduling di Processi Operazioni su Processi Processi Cooperanti Concetto di Thread Modelli Multithread I thread in diversi S.O. 4.2 Concetto di
Esempio produttori consumatori. Primitive asincrone
Primitive asincrone Send non bloccante: il processo mittente, non appena inviato il messaggio, prosegue la sua esecuzione. Il supporto a tempo di esecuzione deve fornire un meccanismo di accodamento dei
CREAZIONE PROCESSI IN UNIX 20
CREAZIONE PROCESSI IN UNIX 20 STRUTTURE DATI PER PROCESSI Un processo puo' essere in escuzione in 2 modi: kernel e utente. Un processo ha almeno 3 regioni: codice, dati e stack Lo stack è allocato dinamicamente.
ESERCIZI DI PROGRAMMAZIONE C IN AMBIENTE UNIX
ESERCIZI DI PROGRAMMAZIONE C IN AMBIENTE UNIX Introduzione In questa dispensa sono stati raccolti alcuni esercizi di programmazione C in ambiente Unix, tratti dagli esami di Sistemi Operativi svoltisi
Drivers. Introduzione Tipologie Struttura Interazione con il kernel
Drivers Introduzione Tipologie Struttura Interazione con il kernel Driver Un driver è un modulo del sistema operativo Esterno al kernel Dedicato alla gestione di una specifica periferica Come altre funzionalità
FONDAMENTI di INFORMATICA L. Mezzalira
FONDAMENTI di INFORMATICA L. Mezzalira Possibili domande 1 --- Caratteristiche delle macchine tipiche dell informatica Componenti hardware del modello funzionale di sistema informatico Componenti software
Comunicazione. La comunicazione point to point e' la funzionalita' di comunicazione fondamentale disponibile in MPI
Comunicazione La comunicazione point to point e' la funzionalita' di comunicazione fondamentale disponibile in MPI Concettualmente la comunicazione point to point e' molto semplice: Un processo invia un
Sistemi Operativi Esercizi Sincronizzazione
Sistemi Operativi Esercizi Sincronizzazione Docente: Claudio E. Palazzi [email protected] Esercizi Sincronizzazione Sistemi Operativi - Claudio Palazzi 14 Semafori (1) Semafori: variabili intere contano
GESTIONE INFORMATICA DEI DATI AZIENDALI
GESTIONE INFORMATICA DEI DATI AZIENDALI Alberto ZANONI Centro Vito Volterra Università Tor Vergata Via Columbia 2, 00133 Roma, Italy [email protected] Rudimenti di programmazione Programming
Programmazione multiprocesso
DTI / ISIN / Titolo principale della presentazione 1 Programmazione multiprocesso Amos Brocco, Ricercatore, DTI / ISIN 20 febbraio 2012 2 Processi Cos'è un processo? Un programma in esecuzione Spazio di
Introduzione. Meccanismi di sincronizzazione: Semafori e Monitor. Semafori - Definizione. Semafori - Descrizione informale
Introduzione Meccanismi di sincronizzazione: Nelle prossime lezioni vedremo alcuni meccanismi dei sistemi operativi e dei linguaggi di programmazione sviluppati per facilitare la scrittura di programmi
AXO. Operativo. Architetture dei Calcolatori e Sistema. programmazione di sistema
AXO Architetture dei Calcolatori e Sistema Operativo programmazione di sistema Il sistema operativo Il Sistema Operativo è un insieme di programmi (moduli software) che svolgono funzioni di servizio nel
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
Esercitazione [5] Input/Output su Socket
Esercitazione [5] Input/Output su Socket Leonardo Aniello - [email protected] Daniele Cono D'Elia - [email protected] Sistemi di Calcolo - Secondo modulo (SC2) Programmazione dei Sistemi di Calcolo
CAPITOLO 7 - SCAMBIO DI MESSAGGI
CAPITOLO 7 - SCAMBIO DI MESSAGGI Lo scambio di messaggi è una forma di comunicazione nel quale un processo richiede al sistema operativo di mandare dei dati direttamente ad un altro processo. In alcuni
Java threads (2) Programmazione Concorrente
Java threads (2) emanuele lattanzi isti information science and technology institute 1/28 Programmazione Concorrente Utilizzo corretto dei thread in Java emanuele lattanzi isti information science and
Corso di Sistemi Operativi Ingegneria Elettronica e Informatica prof. Rocco Aversa. Raccolta prove scritte. Prova scritta
Corso di Sistemi Operativi Ingegneria Elettronica e Informatica prof. Rocco Aversa Raccolta prove scritte Realizzare una classe thread Processo che deve effettuare un numero fissato di letture da una memoria
Programmazione concorrente in Java. Dr. Paolo Casoto, Ph.D. - 2012 1
+ Programmazione concorrente in Java 1 + Introduzione al multithreading 2 La scomposizione in oggetti consente di separare un programma in sottosezioni indipendenti. Oggetto = metodi + attributi finalizzati
SOMMARIO Coda (queue): QUEUE. QUEUE : specifica QUEUE
SOMMARIO Coda (queue): Specifica: interfaccia. Implementazione: Strutture indicizzate (array): Array di dimensione variabile. Array circolari. Strutture collegate (nodi). Prestazioni. Strutture Software
I THREAD O PROCESSI LEGGERI Generalità
I THREAD O PROCESSI LEGGERI Generalità Thread: segmento di codice (funzione) Ogni processo ha un proprio SPAZIO DI INDIRIZZAMENTO (area di memoria) Tutti i thread genereti dallo stesso processo condividono
GESTIONE DEI PROCESSI
Sistemi Operativi GESTIONE DEI PROCESSI Processi Concetto di Processo Scheduling di Processi Operazioni su Processi Processi Cooperanti Concetto di Thread Modelli Multithread I thread in Java Concetto
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
Processi UNIX. I Processi nel SO UNIX. Gerarchie di processi UNIX. Modello di processo in UNIX
Processi UNIX I Processi nel SO UNIX UNIX è un sistema operativo multiprogrammato a divisione di tempo: unità di computazione è il processo Caratteristiche del processo UNIX: processo pesante con codice
Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli
CODICE Le fonti in cui si possono trovare tutorial o esempi di progetti utilizzati con Arduino si trovano nel sito ufficiale di Arduino, oppure nei forum di domotica e robotica. Il codice utilizzato per
CAPITOLO 27 SCAMBIO DI MESSAGGI
CAPITOLO 27 SCAMBIO DI MESSAGGI SCAMBIO DI MESSAGGI Sia che si guardi al microkernel, sia a SMP, sia ai sistemi distribuiti, Quando i processi interagiscono fra loro, devono soddisfare due requisiti fondamentali:
POSIX - Gestione dei Segnali. E.Mumolo, DEEI [email protected]
POSIX - Gestione dei Segnali E.Mumolo, DEEI [email protected] Segnali in POSIX Segnali in Posix Modalità di notifiche relative a vari eventi asincroni I signal interrompono un processo e possono o meno essere
1 Processo, risorsa, richiesta, assegnazione 2 Concorrenza 3 Grafo di Holt 4 Thread 5 Sincronizzazione tra processi
1 Processo, risorsa, richiesta, assegnazione 2 Concorrenza 3 Grafo di Holt 4 Thread 5 Sincronizzazione tra processi Il processo E' un programma in esecuzione Tipi di processo Stati di un processo 1 indipendenti
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 -
Processi. Laboratorio Software 2008-2009 C. Brandolese
Processi Laboratorio Software 2008-2009 Introduzione I calcolatori svolgono operazioni simultaneamente Esempio Compilazione di un programma Invio di un file ad una stampante Visualizzazione di una pagina
Il Sistema Operativo
Il Sistema Operativo Il Sistema Operativo Il Sistema Operativo (S.O.) è un insieme di programmi interagenti che consente agli utenti e ai programmi applicativi di utilizzare al meglio le risorse del Sistema
dall argomento argomento della malloc()
Allocazione dinamica Quando? Tutte le volte in cui i dati possono crescere in modo non prevedibile staticamente a tempo di sviluppo Un array con dimensione i fissata a compile-time non è sufficiente È
Sistema Operativo. Fondamenti di Informatica 1. Il Sistema Operativo
Sistema Operativo Fondamenti di Informatica 1 Il Sistema Operativo Il Sistema Operativo (S.O.) è un insieme di programmi interagenti che consente agli utenti e ai programmi applicativi di utilizzare al
ASPETTI GENERALI DI LINUX. Parte 2 Struttura interna del sistema LINUX
Parte 2 Struttura interna del sistema LINUX 76 4. ASPETTI GENERALI DEL SISTEMA OPERATIVO LINUX La funzione generale svolta da un Sistema Operativo può essere definita come la gestione dell Hardware orientata
Laboratorio di Sistemi Operativi
Le FIFO pipe vs fifo la pipe può essere usata solo tra processi "imparentati" (che hanno un antenato comune che ha creato la pipe) la fifo consente di scambiare dati tra processi qualsiasi 2 1 FIFO (named
CAP. 6: Nucleo del sistema operativo (La gestione dei processi)
Struttura interna del sistema operativo Linux CAP. 6: Nucleo del sistema operativo (La gestione dei processi) Architettura del sistema operativo shell Programmi utente Modo utente Interfaccia delle chiamate
Esercitazione [8] Pipe e FIFO
Esercitazione [8] Pipe e FIFO Leonardo Aniello - [email protected] Daniele Cono D'Elia - [email protected] Sistemi di Calcolo - Secondo modulo (SC2) Programmazione dei Sistemi di Calcolo Multi-Nodo
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,
Sistemi Operativi. [email protected] 3 LEZIONE PROCESSI CORSO DI LAUREA TRIENNALE IN INFORMATICA. Sistemi Operativi 2007/08
Sistemi Operativi Docente: Ugo Erra [email protected] 3 LEZIONE PROCESSI CORSO DI LAUREA TRIENNALE IN INFORMATICA UNIVERSITA DEGLI STUDI DELLA BASILICATA Sommario della lezione Concetto di processo
ISTITUTO TECNICO INDUSTRIALE STATALE LA GESTIONE DEI FILE DI TESTO IN C++
ISTITUTO TECNICO INDUSTRIALE STATALE G A L I L E O F E R R A R I S DIISPENSA DII IINFORMATIICA E SIISTEMII AUTOMATIICII LA GESTIONE DEI FILE DI TESTO IN C++ Le classi per la gestione dei file. Il C++ è
SISTEMI OPERATIVI 14 settembre 2015 corso A nuovo ordinamento e parte di teoria del vecchio ordinamento indirizzo SR
SISTEMI OPERATIVI 14 settembre 2015 corso A nuovo ordinamento e parte di teoria del vecchio ordinamento indirizzo SR Cognome: Nome: Matricola: 1. Ricordate che non potete usare calcolatrici o materiale
ESERCIZIO 1 (b) Dove è memorizzato il numero del primo blocco del file? Insieme agli altri attributi del file, nella cartella che contiene il file.
ESERCIZIO 1 Si consideri un hard disk formattato la cui memoria è suddivisa in 16 blocchi (numerati da 0 a 15). Si supponga che sull hard disk sia memorizzato un unico file, contenuto, nell ordine, nei
Corso sul linguaggio Java
Corso sul linguaggio Java Modulo JAVA6 A1 I file testo 1 Prerequisiti Programmazione base in Java Utilizzo di classi e oggetti Modello produttore consumatore Operazioni logiche su struttura file 2 1 Introduzione
MODELLO AD AMBIENTE GLOBALE
MODELLI DI INTERAZIONE TRA PROCESSI Modello ad ambiente globale ( global environment ) Modello a scambio di messaggi ( message passing ) MODELLO AD AMBIENTE GLOBALE Il sistema è visto come un insieme di
Introduzione alla programmazione in C
Introduzione alla programmazione in C Testi Consigliati: A. Kelley & I. Pohl C didattica e programmazione B.W. Kernighan & D. M. Ritchie Linguaggio C P. Tosoratti Introduzione all informatica Materiale
INFORMATICA 1 L. Mezzalira
INFORMATICA 1 L. Mezzalira Possibili domande 1 --- Caratteristiche delle macchine tipiche dell informatica Componenti hardware del modello funzionale di sistema informatico Componenti software del modello
SISTEMI OPERATIVI. Prof. Enrico Terrone A. S: 2008/09
SISTEMI OPERATIVI Prof. Enrico Terrone A. S: 2008/09 Che cos è il sistema operativo Il sistema operativo (SO) è il software che gestisce e rende accessibili (sia ai programmatori e ai programmi, sia agli
Il sistema di I/O. Hardware di I/O Interfacce di I/O Software di I/O. Introduzione
Il sistema di I/O Hardware di I/O Interfacce di I/O Software di I/O Introduzione 1 Sotto-sistema di I/O Insieme di metodi per controllare i dispositivi di I/O Obiettivo: Fornire ai processi utente un interfaccia
LA SINCRONIZZAZIONE TRA PROCESSI
LA SINCRONIZZAZIONE TRA PROCESSI E' più complesso scrivere programmi concorrenti rispetto a programmi sequenziali in quanto non basta essere sicuri della correttezza dei singoli moduli ma è necessario
Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a. 2009-10. prof.
Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Programmazione I - corso B a.a. 009-10 prof. Viviana Bono Blocco 9 Metodi statici: passaggio parametri, variabili locali, record
Lab. di Sistemi Operativi - Esercitazione n 7- -Gestione dei processi Unix-
Lab. di Sistemi Operativi - Esercitazione n 7- -Gestione dei processi Unix- 1 Sommario Esercizi sulla gestione dei processi Creazione di un nuovo processo: fork Sincronizzazione tra processi: wait 2 -
Sommario. G. Piscitelli
Sommario Interprocess Communication Processi (e thread) cooperanti Il paradigma produttore-consumatore Shared Memory e Inter Process Communication (IPC) facility Proprietà caratteristiche della comunicazione
STRUTTURE DEI SISTEMI DI CALCOLO
STRUTTURE DEI SISTEMI DI CALCOLO 2.1 Strutture dei sistemi di calcolo Funzionamento Struttura dell I/O Struttura della memoria Gerarchia delle memorie Protezione Hardware Architettura di un generico sistema
Il Sistema Operativo. C. Marrocco. Università degli Studi di Cassino
Il Sistema Operativo Il Sistema Operativo è uno strato software che: opera direttamente sull hardware; isola dai dettagli dell architettura hardware; fornisce un insieme di funzionalità di alto livello.
Introduzione al Linguaggio C
Introduzione al Linguaggio C File I/O Daniele Pighin April 2009 Daniele Pighin Introduzione al Linguaggio C 1/15 Outline File e dati Accesso ai file File I/O Daniele Pighin Introduzione al Linguaggio C
Corso di Linguaggi di Programmazione
Corso di Linguaggi di Programmazione Lezione 19 Alberto Ceselli [email protected] Dipartimento di Tecnologie dell Informazione Università degli Studi di Milano 18 Maggio 2010 idea: sfruttare i
Esercitazione finale per il corso di Sistemi Operativi (A.A. 2004/2005)
Esercitazione finale per il corso di Sistemi Operativi (A.A. 2004/2005) Descrizione dell esercitazione L esercitazione consiste nell implementare un semplice gestore di aste attraverso il quale gli utenti
Strutture. Strutture e Unioni. Definizione di strutture (2) Definizione di strutture (1)
Strutture Strutture e Unioni DD cap.10 pp.379-391, 405-406 KP cap. 9 pp.361-379 Strutture Collezioni di variabili correlate (aggregati) sotto un unico nome Possono contenere variabili con diversi nomi
Lo scheduler di UNIX (1)
Lo scheduler di UNIX (1) Lo scheduling a basso livello è basato su una coda a più livelli di priorità 1 Lo scheduler di UNIX (2) Si esegue il primo processo della prima coda non vuota per massimo 1 quanto
Le system call: fork(), wait(), exit()
Le system call: fork(), wait(), exit() Di seguito viene mostrato un programma che fa uso di puntatori a funzione, nel quale si mette in evidenza il loro utilizzo. Programma A1 #include int add(a,b,c)
