Programmazione di Sistema

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Programmazione di Sistema"

Transcript

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

2 Threads e Scheduling in Win32 I thread sono l unità fondamentale di esecuzione in Win32. I thread all interno di un processo condividono gli stessi dati e lo stesso codice. Ogni thread ha un proprio stack e può ricevere un parametro (tipicamente un puntatore) all atto della creazione. Ogni thread può allocare un proprio Thread Local Storage che rimane privato (ma globale). Solo sui sistemi Windows NT, 2000/3, XP è possibile allocare i thread su più processori. 2

3 Per creare un nuovo thread: HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpthreadattributes, SIZE_T dwstacksize, LPTHREAD_START_ROUTINE lpstartaddress, LPVOID lpparameter, DWORD dwcreationflags, LPDWORD lpthreadid); la dimensione dello stack di default del nuovo thread è uguale a quella del processo che invoca la CreateThread. Normalmente la dimensione è 1 MB; con 0 si richiede che lo stack abbia dimensione uguale allo stack del chiamante. notare come viene tornato sia un handle sia un identificatore (lpthreadid) del nuovo thread; lpstartaddress punta ad una funzione che accetta un singolo puntatore e ritorna un exit code (DWORD a 32 bit) 3

4 (DWORD WINAPI ThreadFunc(LPVOID)); se dwcreationflags è uguale a CREATE SUSPENDED, il thread non va in esecuzione immediatamente ma deve essere attivato con la ResumeThread; Un thread termina quando completa l esecuzione la funzione puntata da lpstartaddress. La terminazione può avvenire anche invocando la funzione VOID ExitThread(DWORD dwexitcode); Un thread può terminare un altro thread con la funzione: BOOL TerminateThread( HANDLE hthread, DWORD dwexitcode); ma questa tecnica è fortemente scoraggiata (non vengono liberate le risorse del thread, non vengono eseguiti i completion handler...). 4

5 Il codice di ritorno di un thread può essere ottenuto con la: BOOL GetExitCodeThread( HANDLE hthread, LPDWORD lpexitcode); notare che se il thread è ancora running viene ritornato STILL ACTIVE. Come nel caso dei processi, è possibile accedere ad un thread usando la funzione HANDLE OpenThread( DWORD dwdesiredaccess, BOOL binherithandle, DWORD dwthreadid); Ogni thread ha un suspend count e può andare in esecuzione solo se questo contatore vale zero. ricordare come un thread può essere creato nello stato suspended (il suspend count vale 1 in questo caso); 5

6 le funzioni per la manipolazione del suspend count sono: DWORD SuspendThread(HANDLE hthread) e DWORD ResumeThread(HANDLE hthread). Notare come per l attesa della terminazione di un thread si utilizzano le stesse primitive dei processi: WaitForSingleObject e WaitForMultipleObject (con quest ultima si può attendere la terminazione di un massimo di 64 thread). la funzione HANDLE CreateRemoteThread( HANDLE hprocess, LPSECURITY_ATTRIBUTES lpthreadattributes, SIZE_T dwstacksize, LPTHREAD_START_ROUTINE lpstartaddress, LPVOID lpparameter, DWORD dwcreationflags, LPDWORD lpthreadid); 6

7 permette di creare un thread che gira nello spazio di indirizzamento del processo specificato da hprocess (è supportata solo su Windows NT, ). Le principali differenze per quanto riguarda la creazione dei thread Win32 con i pthreads sono: non esiste una primitiva per sospendere un altro pthread; non è possibile creare un pthread in un altro processo; i pthread permettono di terminare in maniera pulita un altro thread (con la primitiva pthread cancel) mentre nel caso di Win32, la terminazione, come detto, non esegue tutte le operazioni di cleanup (ad esempio l invocazione dei completion handler). 7

8 Libreria C e Threads in Win32 È necessario controllare che le primitive della libreria C utilizzate siano thread-safe, cioè che possano essere invocate da più thread che fanno parte dello stesso processo. un esempio di funzione non thread-safe è la strtok (char *strtok(char *s, const char *delim)) che può essere utilizzata per effettuare il parsing di una stringa. Questa funzione non è thread-safe perché utilizza un buffer di memoria allocato in una zona dello spazio di indirizzamento accessibile a tutti i thread del processo. Il C Microsoft fornisce un implementazione della libreria C (LIBCMT.LIB) che è garantita essere thread-safe. In questo caso la creazione del thread avviene con la funzione beginthreadex invece della CreateThread. 8

9 gli argomenti della beginthreadex sono esattamente gli stessi della CreateThread ma è necessario fare un cast del valore di ritorno a HANDLE Per terminare il thread si deve utilizzare endthreadex al posto di ExitThread. Attenzione: non usare le funzioni beginthread e endthread Attenzione (2): definire la macro MT se si usa il Visual C++. 9

10 Codice rientrante e thread-safety Una funzione rientrante non mantiene dati statici e non ritorna un puntatore a dati statici. Tutti i dati sono forniti dal chiamante alla funzione chiamata. Una funzione rientrante non deve invocare funzioni non rientranti. Una funzione thread-safe protegge le risorse condivise tramite lock. Una funzione che non usa dati statici o altre risorse condivise è (banalmente) thread-safe int diff(int x, int y) { /* threadsafe function */ int delta; delta = y - x; if (delta < 0) delta = -delta; return delta; } 10

11 Merge-sort con threads Esempio: sortmtx.c (CHAPTR08). 11

12 Thread Local Storage (TLS) Win32 mette a disposizione un insieme di puntatori privati per ogni thread. Questi permettono ad ogni thread di accedere zone di memoria globale private. Inizialmente non è allocato nessun indice per il TLS. 12

13 Un nuovo indice è allocato con la funzione: DWORD TlsAlloc(VOID) Possono essere allocati almeno fino a 64 indici. Se non sono più disponibili indici viene ritornato 1. Il valore corrispondente ad una slot del TLS può essere ottenuto e definito con le funzioni: LPVOID TlsGetValue(DWORD dwtlsindex); BOOL TlsSetValue( DWORD dwtlsindex, LPVOID lptlsvalue); ovviamente dwtlsindex deve essere stato allocato con TlsAlloc. Per liberare un indice: BOOL TlsFree(DWORD dwtlsindex); Sebbene nessun thread può accedere il TLS di un altro thread, 13

14 qualsiasi thread può invocare TlsFree distruggendo in questo modo l indice per tutti i thread. Il TLS è frequentemente usato all interno delle DLL. esempio: tls.c (locale) 14

15 Priorità e Scheduling Il kernel di Windows esegue sempre il thread con priorità più alta. Esistono quattro classi di priorità: 1. IDLE PRIORITY CLASS: priorità base 4 2. NORMAL PRIORITY CLASS: priorità base 9 o 7 Se la finestra ha il focus la priorità base è 9 altrimenti è HIGH PRIORITY CLASS: priorità base REALTIME PRIORITY CLASS: priorità base 24 Notare come le priorità, al contrario di Unix/Linux, sono definite in ordine decrescente, valori più alti corrispondono a priorità superiori. La prima e l ultima classe sono usate raramente. Un processo può conoscere o modificare la propria priorità o 15

16 quella di un altro processo tramite le funzioni: BOOL SetPriorityClass( HANDLE hprocess, DWORD dwpriorityclass); DWORD GetPriorityClass( HANDLE hprocess); sono necessari i diritti di PROCESS SET INFORMATION e PROCESS QUERY INFORMATION rispettivamente sul processo hprocess. Le priorità dei thread sono definite rispetto alla priorità base del processo. Alla creazione, la priorità del thread è uguale a quella del processo L intervallo di variabilità è ±2 dalla priorità base del processo. 16

17 THREAD PRIORITY LOWEST, THREAD PRIORITY BELOW NORMAL, THREAD PRIORITY NORMAL, THREAD PRIORITY ABOVE NORMAL, THREAD PRIORITY HIGHEST. Esistono inoltre due priorità assolute : THREAD PRIORITY IDLE con valore 1 THREAD PRIORITY TIME CRITICAL con valore 15 usate però solo per casi particolari. Le funzioni per definire le priorità dei thread sono: BOOL SetThreadPriority( HANDLE hthread, int npriority); int GetThreadPriority(HANDLE hthread); notare come per i thread le priorità siano definite come int invece di DWORD. 17

18 Ricordare che le priorità dei thread cambiano automaticamente con quelle dei processi relativi. Tramite la funzione VOID Sleep(DWORD dwmilliseconds); un thread può rilasciare il processore ed entrare nello stato wait per uno periodo di tempo specificato da dwmilliseconds. se dwmilliseconds è uguale a zero, il thread rilascia il processore ma non entra nello stato wait. 18

19 Possibili problemi con i thread Ricordare che i thread vanno in esecuzione in maniera asincrona. Non c e un ordinamento nell esecuzione, a meno che questo non venga imposto esplicitamente dall applicazione. 1. non fare mai assunzioni sull ordine con cui un thread che invoca CreateThread ed il thread creato da questa chiamata vanno in esecuzione; 2. in caso di necessità creare il thread nello stato SUSPENDED e riesumarlo esplicitamente al momento opportuno; 3. l area di memoria puntata dal parametro passato all atto della CreateThread deve essere riservata per ogni singolo thread; 4. non usare le priorità dei thread come meccanismo di sincronizzazione; 19

20 5. usare i thread quando ha senso. Se un applicazione ha natura sequenziale i thread aggiungono solo complessità. 20

21 Stati possibili per un thread 21

22 Fibre in Win32 Una fibra è una parte di un thread che può essere schedulata dall applicazione invece che dal kernel. un thread può creare più fibre e le fibre stesse determinano quale sarà eseguita successivamente; le fibre hanno stack indipendenti ma condividono il TLS del thread; la gestione delle fibre avviene interamente a livello utente fuori dal kernel; le fibre sono disponibili solo su Windows NT, 2000, XP...; uno degli utilizzi più comuni delle fibre è quello di fare polling su una risorsa (ad esempio un lock, un mutex,...) e passare il controllo ad un altra specifica fibra se la risorsa non è disponibile. 22

23 In questo modo si evita di bloccare l intero thread; le fibre permettono di implementare il concetto di co-routine. In altre parole l applicazione tieni attivi più task e passa il controllo esplicitamente a quello che ritiene più opportuno (ricordare che il programmatore non può decidere quale thread deve prendere il controllo della CPU). 23

24 L API per le fibre è costituita da 6 primitive. La sequenza logica di utilizzo è la seguente: 1. Il thread deve per prima cosa abilitare le operazioni sulle fibre: LPVOID ConvertThreadToFiber( LPVOID lpparameter); il thread consiste a questo punto di una singola fibra primaria. lpparameter ha lo stesso ruolo dell argomento passato ad un thread all atto della creazione; il valore di ritorno è l indirizzo della fibra (gioca in qualche modo il ruolo di un handle); 2. La fibra primaria (o qualsiasi altra fibra successivamente) crea nuove fibre tramite la funzione: LPVOID CreateFiber( SIZE_T dwstacksize, LPFIBER_START_ROUTINE lpstartaddress, LPVOID lpparameter); 24

25 il significato degli argomenti è del tutto simile al caso della CreateThread. Notare che il valore di ritorno (che è un indirizzo) non deve concidere con lpstartaddress che è il puntatore alla funzione iniziale; la funzione iniziale deve essere VOID perché un return terminerebbe l intero thread (VOID WINAPI FiberFunction(LPVOID lpparameter)). 3. Una fibra passa il controllo ad un altra fibra tramite la funzione: VOID SwitchToFiber(LPVOID lpfiber); dove lpfiber è l indirizzo della fibra che deve essere eseguita; notare come l esecuzione della fibra che invoca SwitchToFiber riprende dall istruzione successiva alla chiamata solo quando un altra fibra ripassa il controllo a questa esplicitamente; 25

26 4. Una fibra può conoscere il valore dell argomento che le è stato passato o il proprio indirizzo con le macro: PVOID GetFiberData(void); PVOID GetCurrentFiber(void); 5. Infine una fibra può cancellare un altra fibra con la funzione: VOID DeleteFiber(LPVOID lpfiber); se l indirizzo della fibra è lo stesso della fibra chiamante, l intero thread viene terminato; se viene cancellata una fibra che fa parte di un altro thread i risultati sono impredicibili; Recentemente è stato introdotto il concetto di Fiber Local Storage, simile a quello del Threads Local Storage. Esempio: 26

27 Sincronizzazione dei thread in Win32 I meccanismi di sincronizzazione in Win32 possono essere utilizzati non solo tra thread all interno dello stesso processo ma, in molti casi, anche tra thread appartenenti a processi separati. Alcune semplici regole generali sono le seguenti: 1. I thread dovrebbero cambiare il process environment solo nel caso in cui tutti i thread devono essere impattati. 2. Se una funzione deve mantenere un valore attraverso chiamate successive, è necessario allocare la relativa variabile nel TLS o comunque in una struttura dati dedicata per ogni thread. 3. Le variabili che devono essere effettivamente condivise dovrebbero essere dichiarate con lo storage modifier volatile. 27

28 Le più semplici funzioni di sincronizzazione che risolvono comunque un problema molto comune sono: LONG InterlockedIncrement(LONG volatile* Addend); LONG InterlockedDecrement(LONG volatile* Addend); queste funzione incrementano e decrementano di 1 il valore della locazione (a 32 bit) puntata da Addend. 28

29 CRITICAL SECTION La CRITICAL SECTION implementa il relativo concetto ed è un oggetto mantenuto nello spazio utente. A differenza di altri meccanismi di sincronizzazione non può essere utilizzato tra processi. La sezione critica è controllata da una variabile di tipo CRITICAL SECTION (CS). Un solo thread per volta può essere in una specifica CS. Per inizializzare e rimuovere una CRITICAL SECTION void InitializeCriticalSection(LPCRITICAL_SECTION lpcriticalsection); void DeleteCriticalSection(LPCRITICAL_SECTION lpcriticalsection); La funzione void EnterCriticalSection(LPCRITICAL_SECTION lpcriticalsection); blocca il thread che la invoca se un altro thread è nella 29

30 sezione. Il thread viene sbloccato quando l altro thread invoca void LeaveCriticalSection(LPCRITICAL_SECTION lpcriticalsection); Se un thread già ha il controllo di una CS può entrare più volte senza essere bloccato. Viene mantenuto un contatore ed il thread deve lasciare la CS tante volte quante è entrato. Invocare la LeaveCriticalSection per una sezione che non si controlla produce risultati impredicibili. Non esiste un meccanismo di timeout per la EnterCriticalSection, tuttavia la funzione: BOOL TryEnterCriticalSection(LPCRITICAL_SECTION lpcriticalsection); permette di tentare di prendere il controllo della CS. 30

31 CRITICAL_SECTION CriticalSection; // Global variable void main() { // Initialize the critical section one time only. if (!InitializeCriticalSectionAndSpinCount(&CriticalSection, 0x ) return;... // Release resources used by the critical section object. DeleteCriticalSection(&CriticalSection) } DWORD WINAPI ThreadProc( LPVOID lpparameter ) {... // Request ownership of the critical section. EnterCriticalSection(&CriticalSection); // Access the shared resource. } // Release ownership of the critical section. LeaveCriticalSection(&CriticalSection);... 31

32 esempio: simplepc.c in chaptr09 32

33 Mutex Un mutex fornisce funzionalità più avanzate delle CRITICAL SECTION possono essere utilizzati anche tra thread appartenenti a processi distinti; sono gestiti tramite handle; permettono di definire un time-out; viene gestita dal sistema la terminazione di un thread che controlla un mutex: la WaitForSingleObject ritorna WAIT ABANDONED 0; come per le CS, è possibile acquisire un mutex più volte ed in questo caso il mutex va rilasciato esplicitamente lo stesso numero di volte; Per creare un mutex: 33

34 HANDLE CreateMutex( LPSECURITY_ATTRIBUTES lpmutexattributes, BOOL binitialowner, LPCTSTR lpname); binitialowner se uguale a TRUE garantisce al thread chiamante l immediato controllo del mutex lpname. lpname fa parte dello stesso name space degli eventi, semafori e file mapping che è distinto da quello del file system ed ha altre caratteristiche. Per accedere un mutex già esistente in un altro processo: HANDLE OpenMutex( DWORD dwdesiredaccess, BOOL binherithandle, LPCTSTR lpname); 34

35 Per ottenere il controllo di un mutex si usa la DWORD WaitForSingleObject( HANDLE hhandle, DWORD dwmilliseconds); o la WaitForMultipleObject. Come al solito, dwmilliseconds uguale a 0 corrisponde a fare polling senza rimanere bloccati Per rilasciare il controllo di un mutex: BOOL ReleaseMutex(HANDLE hmutex); (ovviamente funziona solo se il thread ha effettivamente il controllo) 35

36 Semafori In Win32 esistono semafori che mantengono un contatore. l oggetto semaforo è segnalato quando il contatore è più grande di zero; un thread rimane in attesa quando il contatore ha valore 0. le primitive sono simili a quelle per il mutex: per la creazione HANDLE CreateSemaphore( LPSECURITY_ATTRIBUTES lpsemaphoreattributes, LONG linitialcount, LONG lmaximumcount, LPCTSTR lpname); Il valore del contatore è sempre 0 e lmaximumcount l acquisizione avviene sempre con la WaitForSingleObject. È possibile decrementare il contatore solo di un unità 36

37 con una singola operazione di wait. Il rilascio del semaforo che avviene con la funzione: BOOL ReleaseSemaphore( HANDLE hsemaphore, LONG lreleasecount, LPLONG lppreviouscount); permette invece di incrementare il valore del contatore di un valore qualsiasi fino al massimo consentito dal semaforo. Notare come un valore superiore al massimo consentito provochi un errore senza modificare il valore del contatore. Notare come non è assolutamente necessario che il rilascio di un semaforo sia effettuato dallo stesso thread che invoca la wait sul semaforo anzi... il contatore di un semaforo è spesso utilizzato per rappresentare il numero di risorse di un certo tipo disponibili (ad esempio messaggi); 37

38 il produttore rilascia il semaforo (aumentando il valore del contatore) quando è disponibile una nuova risorsa; il consumatore attende (invocando la wait) che il valore del contatore sia non nullo per acquisire la nuova risorsa e quindi diminuire il valore del contatore; come si può sfruttare un semaforo per evitare di creare thread nello stato suspended? Una seria limitazione dei semafori è l impossibilità di effettuare un operazione di wait multipla in maniera atomica. 38

39 Eventi L ultimo oggetto che permette la sincronizzazione a livello kernel sono gli eventi. Come il nome suggerisce, gli eventi sono utilizzati per segnalare ad altri thread che è avvenuto, appunto, un evento. Una importante caratteristica degli eventi è che più di un thread può essere risvegliato da una wait quando viene segnalato un singolo evento. Gli eventi sono classificati come manual-reset: indica la capacità di segnalare simultaneamente più thread che attendono l evento e può essere resettato auto-reset: segnala un singolo thread the attende l evento e 39

40 l evento è resettato automaticamente. Per creare un evento: HANDLE CreateEvent{ LP_SECURITY_ATTRIBUTES lpsa, BOOL fmanualreset, BOOL finitialstate, LPTCSTR lpszeventname); se fmanualreset è uguale a TRUE l evento è di tipo manual-reset. finitialstate indica se l evento è nello stato segnalato all atto della creazione. Per accedere un evento, eventualmente da un altro processo, si utilizza la OpenEvent Le seguenti tre funzioni: BOOL SetEvent(HANDLE hevent); BOOL ResetEvent(HANDLE hevent); 40

41 BOOL PulseEvent(HANDLE hevent); sono usate per controllare gli eventi. L attesa di un evento, come negli altri casi, è richiesta tramite la WaitForSingleObject. Un thread segnala l evento con la SetEvent. se l evento è di tipo auto-reset, un singolo thread viene risvegliato e l evento ritorna automaticamente (da cui il nome) allo stato di non-segnalato. Se nessun thread è in attesa, l evento rimane nello stato segnalato fino a quando un thread invoca una wait che, in questo caso, ritorna immediatamente. notare come questo è lo stesso comportamento che si avrebbe utilizzando un semaforo con un max count uguale a 1. se l evento è di tipo manual-reset, rimane segnalato fino a quando un thread non invoca la ResetEvent per quell evento. 41

42 In questo intervallo di tempo, l evento rimane nello stato segnalato. PulseEvent rilascia tutti i thread attualmente in attesa su un evento di tipo manual-reset ma l evento ritorna immediatamente allo stato non-segnalato. Attenzione all utilizzo di WaitForMultipleObjects per attendere che un insieme di eventi sia segnalato. Alcuni eventi potrebbero essere resettati prima che altri vengano segnalati mentre la funzione ritorna solo quando tutti gli eventi sono simultaneamente nello stato segnalato. La combinazione di auto- e manual-reset con l utilizzo di SetEvent o PulseEvent mette a disposizione diversi modi di usare gli eventi. un auto-reset è come una porta con una molla che si chiude automaticamente; in un manual-reset la porta, una volta aperta, rimane tale; 42

43 PulseEvent apre la porta e la molla immediatamente; esempio: eventpc.c in chaptr09. Table 1: Tabella Riassuntiva sugli eventi Evento Auto-Reset Evento Manual Reset Set Event Un solo thread viene Tutti i thread in attesa rilasciato. Se nessun sono rilasciati. L evento thread è in attesa, rimane segnalato fino il primo thread che entra a quando non viene in attesa viene rilasciato resettato da un thread. automaticamente. Pulse Event Esattamente un thread Tutti i thread in attesa sono viene rilasciato ma solo rilasciati e l evento viene se è in attesa. resettato. Attenzione la Pulse Event è considerata ora unreliable! 43

44 Altre primitive di sincronizzazione in Win32 Oltre alle funzioni già viste per l incremento atomico, sono utili le seguenti primitive: LONG InterlockedExchange(LPLONG Target, LONG Value); ritorna il valore attuale di *Target e lo pone uguale a Value LONG InterlockedExchangeAdd(PLONG Addend, LONG Increment); aggiunge Increment a *Added ritornando il valore originale di *Addend PVOID InterlockedCompareExchange(PVOID *Destination, PVOID Exchange, PVOID Comparand} esegue in maniera atomica il seguente frammento di codice: Temp=*Destination; if (*Destination == Comparand) *Destination = Exchange; return Temp; questa primitiva permette di implementare il controllo su una critical section. 44

45 Table 2: Tabella delle primitive di sincronizzazione in Win32 CS MUTEX SEMAFORI EVENTI Dotato di nome e No Si Si Si Attributi sicurezza Accesso da processi No Si Si Si Sincronizzazione Enter Wait Wait Wait Rilascio Leave Release Qualsiasi thread Set/Pulse può rilasciarlo Controllo Un thread può Un thread può N/A N/A entrare più invocare wait volte più volte Rilascio Un thread in Un thread può Più thread Uno o più attesa può ottenere il possono thread entrare controllo procedere procedono 45

46 Condition variable in Win32 (1) Utilizzando una combinazione delle primitive mutex ed event vogliamo implementare un meccanismo equivalente alla condition variable delle pthreads. Consideriamo come esempio il caso produttore/consumatore ma la tecnica si può applicare in molti problemi di sincronizzazione: 1. il produttore prende il controllo del mutex, cambia lo stato, segnala l evento (PulseEvent), rilascia il controllo del mutex; notare come l evento deve essere segnalato mentre ancora si controlla il mutex; 2. il consumatore testa il predicato della CV dopo aver preso il controllo del mutex; 46

47 3. se il predicato non è soddisfatto, il consumatore rilascia il mutex prima di andare in wait sull evento; 4. la wait sull evento deve avere un timeout nel caso il produttore segnali l evento nell intervallo tra il rilascio del mutex e la wait (il segnale andrebbe perso in questo caso); 5. il consumatore controlla il predicato dopo la wait; se il predicato non è soddisfatto torna al passo 2; 6. il consumatore ha il controllo del mutex quando lascia il loop. esempio (barriera): include/synchobj.h e chaptr10/thbobject.c Le condition variable dei pthread sono in qualche modo paragonabili agli eventi ma sono sempre usate insieme ad un mutex. 47

48 Condition variable in Win32 (2) Un interessante articolo sull implementazione di cv sotto Windows Recentemente (Windows Vista e Windows Server Longhorn) sono state introdotte nella Win32 API delle reali condition variable. Per inizializzare la condition variable VOID WINAPI InitializeConditionVariable( PCONDITION_VARIABLE ConditionVariable); Esistono due primitive per l attesa sulla cv associate rispettivamente ad un slim read-write lock ed ad una critical section. BOOL WINAPI SleepConditionVariableSRW( PCONDITION_VARIABLE ConditionVariable, PSRWLOCK SRWLock, 48

49 DWORD dwmilliseconds, ULONG Flags); BOOL WINAPI SleepConditionVariableCS( PCONDITION_VARIABLE ConditionVariable, PCRITICAL_SECTION CriticalSection, DWORD dwmilliseconds); il thread va in attesa della condition variable e rilascia il lock o la sezione critica con un operazione atomica. Gli slim read-write lock sono anche essi una recente novità ed offrono funzionalità di lock per i thread appartenenti ad uno stesso processo più veloci dei tradizionali mutex. Per segnalare che la condizione è verificata esistono due funzioni: 49

50 VOID WINAPI WakeConditionVariable( PCONDITION_VARIABLE ConditionVariable); VOID WINAPI WakeAllConditionVariable( PCONDITION_VARIABLE ConditionVariable); Risvegliare un thread è come segnalare un evento di tipo auto-reset con la SetEvent, mentre risvegliare tutti i thread è equivalente ad utilizzare una PulseEvent su un evento di tipo manual reset. 50

51 Deadlock static struct { HANDLE guard; struct List; } ListaA, ListB; DWORD AddSharedElement(void *arg) { WaitForSingleObject(ListA.guard,INFINITE); WaitForSingleObject(ListB.guard,INFINITE); /* Add element... */ ReleaseMutex(ListB.guard); ReleaseMutex(ListA.guard); return 0;} DWORD DelSharedElement(void *arg) { WaitForSingleObject(ListB.guard,INFINITE); WaitForSingleObject(ListA.guard,INFINITE); /* Del element... */ ReleaseMutex(ListB.guard); ReleaseMutex(ListA.guard); return 0;} 51

Laboratorio di Sistemi Operativi

Laboratorio di Sistemi Operativi Laboratorio di Sistemi Operativi LAB5 System call per gestione semafori 2002/2003 Pagani Trentini Slide 1 Agenda Linux strutture pthread_t, sem_t pthread_create, pthread_exit, sem_init, sem_post, sem_wait,

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

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

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

Dettagli

Programmazione di Sistema

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

Dettagli

Libreria Linux Threads. Threads nel S.O. Linux. Primitive per la gestione dei thread. Portabilità: libreria pthreads (Posix).

Libreria Linux Threads. Threads nel S.O. Linux. Primitive per la gestione dei thread. Portabilità: libreria pthreads (Posix). Threads nel S.O. Linux Il thread è un processo leggero che può condividere uno spazio di indirizzi (o parte di esso) con il padre e gli altri processi della gerarchia cui appartiene. Realizzato a livello

Dettagli

Sistemi operativi. Corso di Laurea Triennale in Ingegneria Informatica. Lezione 7 Mutex Condition Esempi di utilizzo

Sistemi operativi. Corso di Laurea Triennale in Ingegneria Informatica. Lezione 7 Mutex Condition Esempi di utilizzo Sistemi operativi ì Corso di Laurea Triennale in Ingegneria Informatica Lezione 7 Mutex Condition Esempi di utilizzo Domande sulle lezioni passate? Sommario ì Sincronizzazione ì Mutex ì Variabili condition

Dettagli

LABORATORIO DI SISTEMI OPERATIVI

LABORATORIO DI SISTEMI OPERATIVI LABORATORIO DI SISTEMI OPERATIVI Corso di Laurea Triennale in Ingegneria Informatica A.A. 2018/2019 Guglielmo Cola Email: g.cola@iet.unipi.it Web: iet.unipi.it/g.cola Thread POSIX nel sistema Linux (parte

Dettagli

Java Virtual Machine. Indipendenza di java dalla macchina ospite. I threads in Java

Java Virtual Machine. Indipendenza di java dalla macchina ospite. I threads in Java programmi sorgente: files.java compilatore Indipendenza di java dalla macchina ospite Programmi java Programmi java Programmi java files.class bytecode linker/loader bytecode bytecode Java API files.class

Dettagli

5 Thread. 5 Thread. 5 Thread. Ad un generico processo, sono associati, in maniera univoca, i seguenti dati e le seguenti informazioni:

5 Thread. 5 Thread. 5 Thread. Ad un generico processo, sono associati, in maniera univoca, i seguenti dati e le seguenti informazioni: 1 Ad un generico processo, sono associati, in maniera univoca, i seguenti dati e le seguenti informazioni: codice del programma in esecuzione un area di memoria contenente le strutture dati dichiarate

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

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. 2017-18 Pietro Frasca Lezione 10 Martedì 7-11-2017 Thread a livello kernel Modello da uno a uno La

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

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

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

Dettagli

Introduzione ai thread

Introduzione ai thread Introduzione ai thread Processi leggeri. Immagine di un processo (codice, variabili locali e globali, stack, descrittore). Risorse possedute: : (file aperti, processi figli, dispositivi di I/O..),. L immagine

Dettagli

Thread thread lightweight process

Thread thread lightweight process Thread Un thread o lightweight process (LWP) è un unità di utilizzo della CPU che consiste di: un program counter, un insieme di registri, uno stack space. Tale unità condivide con gli altri peer thread

Dettagli

Creazione di thread. In Linux si utilizzano le librerie pthread (POSIX thread) per lavorare con i thread:

Creazione di thread. In Linux si utilizzano le librerie pthread (POSIX thread) per lavorare con i thread: Thread Un thread o lightweight process (LWP) è un unità di utilizzo della CPU che consiste di: un program counter, un insieme di registri, uno stack space. Tale unità condivide con gli altri peer thread

Dettagli

LABORATORIO DI SISTEMI OPERATIVI

LABORATORIO DI SISTEMI OPERATIVI LABORATORIO DI SISTEMI OPERATIVI Corso di Laurea Triennale in Ingegneria Informatica A.A. 2018/2019 Guglielmo Cola Email: g.cola@iet.unipi.it Web: iet.unipi.it/g.cola Thread POSIX nel sistema Linux (parte

Dettagli

= PTHREAD_MUTEX_INITIALIZER

= PTHREAD_MUTEX_INITIALIZER MUTEX Prof.ssa Sara Michelangeli Quando si programma in modalità concorrente bisogna gestire le problematiche di accesso alle eventuali sezioni critiche. Una sezione critica è una sequenza di istruzioni

Dettagli

Sincronizzazione di thread POSIX

Sincronizzazione di thread POSIX Sincronizzazione di thread POSIX Sincronizzazione I thread condividono la memoria Rischio di race condition Necessari meccanismi di sincronizzazione mutex (semaforo binario) condition variable I mutex

Dettagli

Modelli di programmazione parallela

Modelli di programmazione parallela Modelli di programmazione parallela Oggi sono comunemente utilizzati diversi modelli di programmazione parallela: Shared Memory Multi Thread Message Passing Data Parallel Tali modelli non sono specifici

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

Sistemi Operativi (M. Cesati)

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

Dettagli

i. Diagramma di GANTT relativo all esecuzione dei quattro processi:

i. Diagramma di GANTT relativo all esecuzione dei quattro processi: 1. (a) Si descriva il meccanismo attraverso cui i programmi richiamano i servizi del Sistema Operativo. Si faccia qualche esempio. (b) Si descriva il funzionanmento di un server web basato su thread multipli.

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

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 21 Martedì 10-01-2017 Sincronizzazione tra thread Per risolvere problemi

Dettagli

Corso di Laboratorio di Sistemi Operativi A.A

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

Dettagli

Spazio di indirizzamento virtuale

Spazio di indirizzamento virtuale Programmazione M-Z Ingegneria e Scienze Informatiche - Cesena A.A. 016-01 Spazio di indirizzamento virtuale Pietro Di Lena - pietro.dilena@unibo.it // The function name says it all int stack_overflow (){

Dettagli

SISTEMI OPERATIVI. Processi in Linux. Giorgio Giacinto Sistemi Operativi

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

Dettagli

Università degli Studi di Cagliari Corso di Laurea Specialistica in Ingegneria Elettronica. SISTEMI OPERATIVI A.A. 2004/2005 Docente: Giorgio Giacinto

Università degli Studi di Cagliari Corso di Laurea Specialistica in Ingegneria Elettronica. SISTEMI OPERATIVI A.A. 2004/2005 Docente: Giorgio Giacinto Università degli Studi di Cagliari Corso di Laurea Specialistica in Ingegneria Elettronica SISTEMI OPERATIVI A.A. 2004/2005 Docente: Giorgio Giacinto fork() & exec() Roberto Perdisci A.A. 2004/2005 1 Dettagli

Dettagli

Sistemi Operativi (M. Cesati)

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

Dettagli

I THREAD O PROCESSI LEGGERI

I THREAD O PROCESSI LEGGERI I THREAD O PROCESSI Processi (pesanti): LEGGERI entità autonome con poche risorse condivise (si prestano poco alla scrittura di applicazioni fortemente cooperanti) Ogni processo può essere visto come Immagine

Dettagli

Funzioni, Stack e Visibilità delle Variabili in C

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

Dettagli

Gestione dinamica della memoria

Gestione dinamica della memoria Programmazione M-Z Ingegneria e Scienze Informatiche - Cesena A.A. 2016-2017 Gestione dinamica della memoria Pietro Di Lena - pietro.dilena@unibo.it A pessimistic programmer sees the array as half empty.

Dettagli

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

Programmazione multi threaded in Python. Linguaggi dinamici A.A. 2010/2011 1

Programmazione multi threaded in Python. Linguaggi dinamici A.A. 2010/2011 1 Programmazione multi threaded in Python 1 Motivazione all'uso dei thread Pro Scrittura di applicazioni con molteplici eventi asincroni (GUI) Riduzione della latenza di servizio mediante l'uso di un pool

Dettagli

Componenti di un sistema operativo

Componenti di un sistema operativo Componenti di un sistema operativo Dipartimento di Informatica Università di Verona, Italy Componenti di un S.O. Gestione dei processi Gestione della memoria primaria Gestione della memoria secondaria

Dettagli

Sistemi Operativi. Lezione 3 Processi e Thread

Sistemi Operativi. Lezione 3 Processi e Thread Lezione 3 Processi e Thread Introduzione Sino ai sistemi batch la CPU di un sistema svolgeva un attività, la portava a termine e solo allora avviava un altra attività Con l avvento della multiprogrammazione

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

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

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 8 Martedì 8-11-2016 1 Algoritmi di scheduling basati sulle priorità Assegnano

Dettagli

Informatica 3. LEZIONE 6: Il controllo dell esecuzione. Modulo 1: La gestione delle eccezioni Modulo 2: Programmazione concorrente

Informatica 3. LEZIONE 6: Il controllo dell esecuzione. Modulo 1: La gestione delle eccezioni Modulo 2: Programmazione concorrente Informatica 3 LEZIONE 6: Il controllo dell esecuzione Modulo 1: La gestione delle eccezioni Modulo 2: Programmazione concorrente Informatica 3 Lezione 6 - Modulo 1 La gestione delle eccezioni Il controllo

Dettagli

Sistemi Operativi (M. Cesati)

Sistemi Operativi (M. Cesati) Sistemi Operativi (M. Cesati) Compito scritto del 17 febbraio 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. 2018-2019 Pietro Frasca Lezione 5 Martedì 16-10-2018 Operazioni sui processi Nella maggior parte dei

Dettagli

Richiami sui Concetti Fondamentali dei Processi

Richiami sui Concetti Fondamentali dei Processi Processi Processi 1 Richiami sui Concetti Fondamentali dei Processi Processi 2 Definizione Nell ambito dei sistemi operativi esistono diverse definizioni di processo, ad es. un programma in esecuzione

Dettagli

1. Che cos è un sistema multiprogrammato? Si può realizzare la multiprogrammazione

1. Che cos è un sistema multiprogrammato? Si può realizzare la multiprogrammazione 1. Che cos è un sistema multiprogrammato? Si può realizzare la multiprogrammazione su un sistema con una sola CPU? 2. Qual è la differenza tra un interruzione e una trap? Si faccia qualche esempio. 1.

Dettagli

Sistemi Operativi GESTIONE DEI PROCESSI. D. Talia - UNICAL. Sistemi Operativi 4.1

Sistemi Operativi GESTIONE DEI PROCESSI. D. Talia - UNICAL. Sistemi Operativi 4.1 GESTIONE DEI PROCESSI 4.1 Processi Concetto di Processo Scheduling di Processi Operazioni su Processi Processi Cooperanti Concetto di Thread Modelli Multithread I thread in diversi S.O. 4.2 Concetto di

Dettagli

Corso di Linguaggi di Programmazione

Corso di Linguaggi di Programmazione Corso di Linguaggi di Programmazione Lezione 13 Alberto Ceselli ceselli@dti.unimi.it Dipartimento di Tecnologie dell Informazione Università degli Studi di Milano 7 Maggio 2007 Outline Java e C# 1 Java

Dettagli

Le Funzioni in C. Fondamenti di Informatica Anno Accademico 2010/2011. Corso di Laurea in Ingegneria Civile Politecnico di Bari Sede di Foggia

Le Funzioni in C. Fondamenti di Informatica Anno Accademico 2010/2011. Corso di Laurea in Ingegneria Civile Politecnico di Bari Sede di Foggia Le Funzioni in C Corso di Laurea in Ingegneria Civile Politecnico di Bari Sede di Foggia Fondamenti di Informatica Anno Accademico 2010/2011 docente: prof. Michele Salvemini 1/24 Sommario Le funzioni Il

Dettagli

Funzioni in C. Funzioni. Strategie di programmazione. Funzioni in C. Come riusare il codice? (2/3) Come riusare il codice? (1/3)

Funzioni in C. Funzioni. Strategie di programmazione. Funzioni in C. Come riusare il codice? (2/3) Come riusare il codice? (1/3) Funzioni Il concetto di funzione Parametri formali e attuali Il valore di ritorno Definizione e chiamata di funzioni Passaggio dei parametri Corpo della funzione 2 Strategie di programmazione Riuso di

Dettagli

Funzioni, Stack e Visibilità delle Variabili in C

Funzioni, Stack e Visibilità delle Variabili in C Funzioni, Stack e Visibilità delle Variabili in C Programmazione I e Laboratorio Corso di Laurea in Informatica A.A. 2016/2017 Calendario delle lezioni Lez. 1 Lez. 2 Lez. 3 Lez. 4 Lez. 5 Lez. 6 Lez. 7

Dettagli

Variabili e Funzioni. Informatica 1 / 19

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

Dettagli

Esercitazione 2: Java Thread

Esercitazione 2: Java Thread Esercitazione 2: Java Thread Thread Un thread è un singolo flusso sequenziale di controllo all interno di un processo Un thread (o processo leggero) è un unità di esecuzione che condivide codice e dati

Dettagli

Esercitazione 2: Java Thread. Java Thread. Java Thread. Un thread:

Esercitazione 2: Java Thread. Java Thread. Java Thread. Un thread: Esercitazione 2: Thread Un thread è un singolo flusso sequenziale di controllo all interno di un processo Un thread (o processo leggero) è un unità di esecuzione che condivide codice e dati con altri thread

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 5 Martedì 25-10-2016 Definizione di processo Esiste una distinzione concettuale

Dettagli

LINUX: struttura generale

LINUX: struttura generale LINUX: struttura generale User Interface The layers of a UNIX system. 1 Processi in LINUX Ogni processo nasce con un solo thread Un processo gira in modalità utente; quando effettua una system call passa

Dettagli

Descrizione generale dell architettura del sistema e dell interazione tra i suoi componenti. Descrizione del sottosistema di sicurezza locale.

Descrizione generale dell architettura del sistema e dell interazione tra i suoi componenti. Descrizione del sottosistema di sicurezza locale. Descrizione generale dell architettura del e dell interazione tra i suoi componenti. Descrizione del di sicurezza locale. Descrizione delle tecniche supportate dal per l organizzazione e la protezione

Dettagli

Sistemi Operativi e Laboratorio, Prova del 6/4/2017 versione A

Sistemi Operativi e Laboratorio, Prova del 6/4/2017 versione A Nome: Cognome: Matricola: corso: fila: posto: Esercizio 1 (5 punti) Si consideri un processore che dispone dei registri speciali PC (program counter) e PS (program status), dello stack pointer SP e dei

Dettagli

Laboratorio Progettazione Web Le funzioni in PHP. Angelica Lo Duca IIT-CNR 2012/2013

Laboratorio Progettazione Web Le funzioni in PHP. Angelica Lo Duca IIT-CNR 2012/2013 Laboratorio Progettazione Web Le funzioni in PHP Angelica Lo Duca IIT-CNR angelica.loduca@iit.cnr.it 2012/2013 Funzioni Una funzione è una sequenza di istruzioni che implementano una specifica funzionalità

Dettagli

Le risorse. Alcune definizioni

Le risorse. Alcune definizioni Le risorse Dicesi risorsa un qualunque oggetto, fisico o logico, di cui un processo necessita per portare a termine la sua evoluzione. Poiché un processo evolve eseguendo istruzioni (procedure), una risorsa

Dettagli

Sistemi Operativi (M. Cesati)

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

Dettagli

Pag. 1. Il Nucleo del sistema operativo (la gestione dei processi)

Pag. 1. Il Nucleo del sistema operativo (la gestione dei processi) shell Programmi utente Modo utente Il Nucleo del sistema operativo (la gestione dei processi) Interfaccia delle chiamate di sistema File system Gestione processi Device driver Gestione memoria HARDWARE

Dettagli

GESTIONE DELLA COMUNICAZIONE LOCALE TRA PROCESSI IN UNIX:

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

Dettagli

I Processi nel Sistema Operativo Unix. Gerarchie di processi Unix. Stati di un processo Unix. Stati di un processo Unix.

I Processi nel Sistema Operativo Unix. Gerarchie di processi Unix. Stati di un processo Unix. Stati di un processo Unix. I Processi nel Sistema Operativo Unix Processi Unix Unix è un sistema operativo multiprogrammato a divisione di tempo: l unità di computazione è il processo. Caratteristiche del processo Unix: processo

Dettagli

Strategie di programmazione

Strategie di programmazione Funzioni Funzioni in C Il concetto di funzione Parametri formali e attuali Il valore di ritorno Definizione e chiamata di funzioni Passaggio dei parametri Corpo della funzione 2 Funzioni in C Strategie

Dettagli

Corso di Laboratorio di Sistemi Operativi A.A

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

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

Modelli di interazione tra processi

Modelli di interazione tra processi Modelli di interazione tra processi Modello a memoria comune (ambiente globale, global environment) Modello a scambio di messaggi (ambiente locale, message passing) 1 Modello a memoria comune Il sistema

Dettagli

Corso di Informatica A.A

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

Dettagli

Monitor [Hoare 74] Costrutto sintattico che associa un insieme di procedure/funzioni (entry) ad una struttura dati comune a più processi.

Monitor [Hoare 74] Costrutto sintattico che associa un insieme di procedure/funzioni (entry) ad una struttura dati comune a più processi. Monitor [Hoare 74] Costrutto sintattico che associa un insieme di procedure/funzioni (entry) ad una struttura dati comune a più processi. Il compilatore può verificare che esse siano le sole operazioni

Dettagli

Monitor [Hoare 74] Uso del monitor

Monitor [Hoare 74] Uso del monitor Monitor [Hoare 74] Costrutto sintattico che associa un insieme di procedure/funzioni (entry) ad una struttura dati comune a più processi. Il compilatore può verificare che esse siano le sole operazioni

Dettagli

Sincronizzazione 1. Sezioni critiche 2. Approcci per la sincronizzazione 3. Spinlock, mutex e semafori 4. Supporti in sistemi UNIX/Windows

Sincronizzazione 1. Sezioni critiche 2. Approcci per la sincronizzazione 3. Spinlock, mutex e semafori 4. Supporti in sistemi UNIX/Windows Sistemi Operativi Laurea in Ingegneria Informatica Universita di Roma Tor Vergata Docente: Francesco Quaglia Sincronizzazione 1. Sezioni critiche 2. Approcci per la sincronizzazione 3. Spinlock, mutex

Dettagli

Operazioni di I/O. Schema di collegamento fra dispositivi periferici e CPU

Operazioni di I/O. Schema di collegamento fra dispositivi periferici e CPU Operazioni di I/O 1 Schema di collegamento fra dispositivi periferici e CPU Memoria CPU buffer interfaccia Registro di controllo Registro Di stato Unità di controllo Dispositivo fisico 2 1 Unità di interfaccia

Dettagli

Introduzione al multithreading

Introduzione al multithreading Introduzione al multithreading Il Multithreading consiste nella possibilità di scomporre le attività di elaborazione di un programma applicativo in più parti, dette Thread, in modo che esse possano essere

Dettagli

LABORATORIO DI SISTEMI OPERATIVI

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

Dettagli

Programmazione lato client. JavaScript. Applicazioni di Rete M. Ribaudo - DISI. JavaScript

Programmazione lato client. JavaScript. Applicazioni di Rete M. Ribaudo - DISI. JavaScript Programmazione lato client Netscape: Microsoft: JScript ECMAScript (ECMA-262) (European Computer Manufactures Association) 1 Linguaggio di script interpretato con alcune caratteristiche Object Oriented

Dettagli

La gestione della memoria dinamica Heap

La gestione della memoria dinamica Heap Laboratorio di Algoritmi e Strutture Dati La gestione della memoria dinamica Heap Prof. Luigi Lamberti 2005 Cenni sui Processi Un Programma è un insieme di Istruzioni memorizzato in un file con le costanti

Dettagli

Sistemi Operativi SISTEMI DI INPUT/OUTPUT. D. Talia - UNICAL. Sistemi Operativi 10.1

Sistemi Operativi SISTEMI DI INPUT/OUTPUT. D. Talia - UNICAL. Sistemi Operativi 10.1 SISTEMI DI INPUT/OUTPUT 10.1 Sistemi I/O Hardware di I/O Interfaccia di I/O per le applicazioni Sottosistema per l I/O del kernel Trasformazione delle richieste di I/O Stream Prestazioni 10.2 I/O Hardware

Dettagli

SISTEMI OPERATIVI. Sincronizzazione in Java (Java object lock e segnali wait-notify-notifyall)

SISTEMI OPERATIVI. Sincronizzazione in Java (Java object lock e segnali wait-notify-notifyall) SISTEMI OPERATIVI (MODULO DI INFORMATICA II) LABORATORIO Sincronizzazione in Java (Java object lock e segnali wait-notify-notifyall) Prof. Luca Gherardi Prof.ssa Patrizia Scandurra (anni precedenti) Università

Dettagli

File binari e file di testo

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

Dettagli

5. I device driver. Device driver - gestori delle periferiche. Struttura interna del sistema operativo Linux. Tipi di periferiche. Tipi di periferiche

5. I device driver. Device driver - gestori delle periferiche. Struttura interna del sistema operativo Linux. Tipi di periferiche. Tipi di periferiche Device driver - gestori delle periferiche Struttura interna del sistema operativo Linux Sono moduli software che realizzano l interfacciamento e la gestione dei dispositivi periferici Interagiscono con

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

Lab 1: Java Multithreading

Lab 1: Java Multithreading Dept. of Computer Science Lab 1: Java Multithreading Matteo Camilli matteo.camilli@unimi.it Laboratorio di Sistemi Operativi a.a. 2015/16 Università degli Studi di Bergamo 1 Outline Programmazione multithreading

Dettagli

Sistemi Operativi (M. Cesati)

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

Dettagli

Concetto di Processo Scheduling dei Processi Operazioni sui Processi Processi cooperanti Comunicazione tra processi

Concetto di Processo Scheduling dei Processi Operazioni sui Processi Processi cooperanti Comunicazione tra processi Concetto di Processo Scheduling dei Processi Operazioni sui Processi Processi cooperanti Comunicazione tra processi 3.3 Silberschatz, Galvin and Gagne 2005 1 Un SO esegue diversi tipi di programmi Sistema

Dettagli

Definizione di classi. Walter Didimo

Definizione di classi. Walter Didimo Definizione di classi Walter Didimo Definizione di classi Fino ad ora abbiamo imparato a: creare oggetti da classi già pronte usare gli oggetti creati, invocando metodi la creazione e l uso di oggetti

Dettagli

Marco Cesati Dipartimento di Ingegneria Civile e Ingegneria Informatica Università degli Studi di Roma Tor Vergata

Marco Cesati Dipartimento di Ingegneria Civile e Ingegneria Informatica Università degli Studi di Roma Tor Vergata Lezione R9 I NPCS Sistemi embedded e real-time 4 dicembre 2012 Dipartimento di Ingegneria Civile e Ingegneria Informatica Università degli Studi di Roma Tor Vergata SERT 13 R9.1 Di cosa parliamo in questa

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. 2017-18 Pietro Frasca Lezione 9 Giovedì 2-11-2017 Comunicazione con pipe Oltre che con la memoria condivisa

Dettagli

JavaScript JavaScript Programmazione lato client JScript JavaScript ECMAScript

JavaScript JavaScript Programmazione lato client JScript JavaScript ECMAScript Programmazione lato client Netscape: Microsoft: JScript ECMAScript (ECMA-262) (European Computer Manufactures Association) Linguaggio di script interpretato con alcune caratteristiche Object Oriented HTTP

Dettagli

Multitheading. Corso di Laurea in Informatica. Sperimentazioni di Linguaggi di Programmazione: Paradigmi di Programmazione. a.a.

Multitheading. Corso di Laurea in Informatica. Sperimentazioni di Linguaggi di Programmazione: Paradigmi di Programmazione. a.a. Multitheading Corso di Laurea in Informatica Sperimentazioni di Linguaggi di Programmazione: Paradigmi di Programmazione a.a. 1999/2000 Matteo Baldoni 1 Thread multipli all interno di un Task thread PC

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. 2017-18 Pietro Frasca Lezione 6 Martedì 24-10-2017 1 Sostituzione del codice Tipicamente, dopo una

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

Struttura dei Sistemi di Calcolo

Struttura dei Sistemi di Calcolo Struttura dei Sistemi di Calcolo Operazioni dei sistemi di calcolo Struttura dell I/O Struttura della memoria Gerarchia delle memorie Protezione hardware Invocazione del Sistema Operativo 1 Architettura

Dettagli

Sistemi Operativi. Sistemi I/O SISTEMI DI INPUT/OUTPUT. Hardware di I/O. Interfaccia di I/O per le applicazioni. Sottosistema per l I/O del kernel

Sistemi Operativi. Sistemi I/O SISTEMI DI INPUT/OUTPUT. Hardware di I/O. Interfaccia di I/O per le applicazioni. Sottosistema per l I/O del kernel SISTEMI DI INPUT/OUTPUT 10.1 Sistemi I/O Hardware di I/O Interfaccia di I/O per le applicazioni Sottosistema per l I/O del kernel Trasformazione delle richieste di I/O Stream Prestazioni 10.2 I/O Hardware

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. 2018-2019 Pietro Frasca Lezione 9 Martedì 6-11-2018 I thread nello standard POSIX: la libreria pthreads

Dettagli

Corso di Informatica

Corso di Informatica Corso di Informatica Modulo T2 1-Concetti fondamentali 1 Prerequisiti Hardware e software Uso pratico elementare di un sistema operativo Software di base e software applicativo 2 1 Introduzione Iniziamo

Dettagli