1 processi e thread job:insieme di processi che condividono quote e limiti. processo: contenitore di...

20
1 Processi e Thread sieme di processi che condividono quote e limiti. ontenitore di risorse (una lista di thread, una lis e e un access token). ita schedulate dal kernel, possono accedere a tutti del processo, possiedono uno stato, due stack, un c are i propri registri e un’area privata per le vari ad leggero gestito solo nello spazio utente.

Upload: marta-guerrini

Post on 01-May-2015

214 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 1 Processi e Thread Job:Insieme di processi che condividono quote e limiti. Processo: Contenitore di risorse (una lista di thread, una lista di handle

1

Processi e Thread

Job: Insieme di processi che condividono quote e limiti.

Processo: Contenitore di risorse (una lista di thread, una lista di handle e un access token).

Thread: entita schedulate dal kernel, possono accedere a tutti gli oggetti del processo, possiedono uno stato, due stack, un contesto dove salvare i propri registri e un’area privata per le variabili locali.

Fiber: thread leggero gestito solo nello spazio utente.

Page 2: 1 Processi e Thread Job:Insieme di processi che condividono quote e limiti. Processo: Contenitore di risorse (una lista di thread, una lista di handle

2

Cos’e’ un Processo

• Programma eseguibile, composto da codice e dati

• Ha uno spazio di indirizzamento privato

• Ha accesso a un insieme di risorse (porte, semafori, ecc)

• Ha almeno un thread di esecuzione (porzione di processo che il kernel tratta atomicamente per l’esecuzione)

Page 3: 1 Processi e Thread Job:Insieme di processi che condividono quote e limiti. Processo: Contenitore di risorse (una lista di thread, una lista di handle

3

Cos’e’ un Thread

• unita’ di esecuzione indipendente all’interno di un processo

• utilizza lo spazio di indirizzamento del processo

• ha un identificatore unico

• ha un contesto, composto da registri, due stack e un’area di memorizzazione privata

• lo scheduler di Windows 2000 tratta threads, non processi

• Può vedere tutte le variabili del processo che lo ha creato.

Page 4: 1 Processi e Thread Job:Insieme di processi che condividono quote e limiti. Processo: Contenitore di risorse (una lista di thread, una lista di handle

4

Caratteristiche del Processo

• Ogni processo ha uno spazio di indirizzamento in memoria virtuale di al massimo 4GB

• Ogni processo ha a disposizione diverse risorse, tra cui– un Access Token

– un insieme di strutture, create dal Virtual Memory manager, che mantengono traccia degli indirizzi virtuali degli oggetti che il processo sta usando

– una Object Table, che contiene gli handle ai threads, ai file aperti, a porzioni di memoria condivisa, e ad ogni altro oggetto in uso.

Page 5: 1 Processi e Thread Job:Insieme di processi che condividono quote e limiti. Processo: Contenitore di risorse (una lista di thread, una lista di handle

5

Gestione dei processi e threadIl sistema operativo deve gestire:

1. Creazione dei processi e thread

2. Sincronizzazione fra thread (cosa accade quando più thread tentano di accedere alla stessa risorsa ?)

3. Comunicazione fra processi (ci può essere necessità di scambio di dati fra processi, anche su computer diversi)

4. Scheduling dei thread (se più thread devono essere eseguiti, quale sarà il primo ad essere eseguito ?)

Page 6: 1 Processi e Thread Job:Insieme di processi che condividono quote e limiti. Processo: Contenitore di risorse (una lista di thread, una lista di handle

6

API gestione Job, Process, Thread & Fiber.

Alcune Win32 API per processi, thread e fibre

Page 7: 1 Processi e Thread Job:Insieme di processi che condividono quote e limiti. Processo: Contenitore di risorse (una lista di thread, una lista di handle

7

API gestione Job, Process, Thread & Fiber.

Studieremo solo alcune delle API (sono migliaia).

Tutte le informazioni sulle API (sintassi e argomenti li potete trovare al sito: http://msdn.microsoft.com/library/default.aspCliccando su Win32 API e poi sull’argomento specifico.

Oppure trovate altre informazioni con esempihttp://phoenix.liunet.edu/~mdevi/index.html

In inglese, purtroppo.

Page 8: 1 Processi e Thread Job:Insieme di processi che condividono quote e limiti. Processo: Contenitore di risorse (una lista di thread, una lista di handle

8

Creazione processi, thread & fiberSi usano le API: CreateProcess, CreateThread, CreateFiber, ExitProcess, ExitThread, ExitFiber, Sleep.

CreateProcess richiede 10 parametri (fra cui il nome dell’eseguibile).CreateThread (6 parametri, come segue).

hThread=CreateThread (NULL, // sicurezza di default 1000, // dimensione dello stack in byte (0 = default) (LPTHREAD_START_ROUTINE)provaThread, // routine che il thread eseguirà NULL, // parametro definito dall'utente 0, // stato iniziale del thread &ThreadID // identificativo del thread );

Page 9: 1 Processi e Thread Job:Insieme di processi che condividono quote e limiti. Processo: Contenitore di risorse (una lista di thread, una lista di handle

9

La sincronizzazione

• Un thread si sincronizza con un altro mettendosi in stato di Wait (attesa) e attendendo un evento (la variazione di flag, il termine di un thread, la disponibilità di Input, il passaggio di stato di un oggetto.

• L’evento viene avvertito dal Kernel, che risveglia il thread in attesa

Page 10: 1 Processi e Thread Job:Insieme di processi che condividono quote e limiti. Processo: Contenitore di risorse (una lista di thread, una lista di handle

10

• Esempi di meccanismi per l’attesa (OGGETTI DISPATCHER)

– mutex: forniscono l’accesso in mutua esclusione alla risorsa che controllano

– semafori: forniscono l’accesso ad un numero massimo di thread alla risorsa che controllano

– eventi: consentono la segnalazione del raggiungimento di una condizione

– timer: consente l’accesso alla risorsa quando e’ passato un delta di tempo.

– Thread: un thread puo’ attendere che un secondo thread sia terminato prima di riprendere l’elaborazione

Page 11: 1 Processi e Thread Job:Insieme di processi che condividono quote e limiti. Processo: Contenitore di risorse (una lista di thread, una lista di handle

11

Sincronizzazione tramite Dispatcher Objects

• Utilizzati per sincronizzare thread su eventi oltre che sull’accesso a dato condivisi

• Un thread si mette in attesa su un Dispatcher O. tramite una delle seguenti chiamate:– WaitForSingleObject(HANDLE hObject, DWORD dwTimeout);

(INFINITE sta per timeout infinito.

– WaitForMultipleObject(……………);

• Assumono sempre uno dei due stati: Segnalato e Non Segnalato. Si esce dalla wait quando l’oggetto diventa segnalato.

Page 12: 1 Processi e Thread Job:Insieme di processi che condividono quote e limiti. Processo: Contenitore di risorse (una lista di thread, una lista di handle

12

Mutex• Utilizzati per sincronizzare, garantendo accesso esclusivo

alle risorse, thread di processi diversi che debbano utilizzare gli stessi dati.

• E’ l’unico oggetto di sincronizzazione che puo’ appartenere al thread che l’ha creato

• Oltre agli stati Segnalato e Non Segnalato, un Mutex puo’ essere in stato Abbandonato

• Chiamata di creazione :

CreateMutex(NULL, false, NULL);

• Chiamata di rilascio:

ReleaseMutex(hmutex);

Page 13: 1 Processi e Thread Job:Insieme di processi che condividono quote e limiti. Processo: Contenitore di risorse (una lista di thread, una lista di handle

13

Semafori• Utilizzati per il conteggio delle risorse disponibili (Es.:

Utilizzo di porte seriali)

• Un semaforo e’ in stato segnalato quando il numero delle risorse disponibili e’ maggiore di 0.

• Chiamata di creazione Semaforo:

CreateSemaphore (NULL,2,5,NULL );Param: Sicurezza, ConteggioIniz., ConteggioFin., Nome

• Chiamata di rilascio:

ReleaseSemaphore(hSem,1,NULL);

Al posto di NULL si può ritornare il conteggio prec.

Page 14: 1 Processi e Thread Job:Insieme di processi che condividono quote e limiti. Processo: Contenitore di risorse (una lista di thread, una lista di handle

14

Eventi• Utilizzati per segnalare uno stato (termine di un task: p.es.

completamento della procedura di inizializzazione)

• Possono essere Auto-Reset (segnalazione automatica) o Manual-Reset (segnalazione tramite ResetEvent)

• Chiamata di creazione Evento:

CreateEvent(………);

• Chiamata di settaggio Evento:

SetEvent(………);

Page 15: 1 Processi e Thread Job:Insieme di processi che condividono quote e limiti. Processo: Contenitore di risorse (una lista di thread, una lista di handle

15

Waitable Timer• Oggetti che passano in stato segnalato a certe ore o a

intervalli regolari

• Possono essere Auto-Reset o Manual-Reset

• Chiamata di creazione Timer:

CreateWaitableTimer(…..);

• Chiamata di IMPOSTAZIONE Timer:

SetWaitableTimer(…….);

Page 16: 1 Processi e Thread Job:Insieme di processi che condividono quote e limiti. Processo: Contenitore di risorse (una lista di thread, una lista di handle

16

Comunicazione fra processi

Un processo può comunicare con un altro processo in 5 modi:

1) File condivisi

2) Pipe

3) Mailslot

4) Socket

5) RPC (Remote Procedure Call

Page 17: 1 Processi e Thread Job:Insieme di processi che condividono quote e limiti. Processo: Contenitore di risorse (una lista di thread, una lista di handle

17

Pipe

La pipe è un canale di comunicazione fra due processi.Uno scrive sulla pipe e l’altro legge dalla pipe.In genere si usano per processi sulla stessa macchina.Usano le API:• CreatePipe (….) ritorna due handle, uno per leggere e

l’altro per scrivere.• WriteFile(..) e ReadFile(…) sono bloccanti se la pipe è

piena (per la write) o vuota (per la read).

Le pipe con nome, diversamente da quelle anonime, permettono comunicazioni fra processi su macchine differenti.

Page 18: 1 Processi e Thread Job:Insieme di processi che condividono quote e limiti. Processo: Contenitore di risorse (una lista di thread, una lista di handle

18

Socket Funzionano come le pipe, ma sono più pesanti.

Si usano per connettere processi su computer differenti.

I messaggi arrivano sempre a destinazione.

Page 19: 1 Processi e Thread Job:Insieme di processi che condividono quote e limiti. Processo: Contenitore di risorse (una lista di thread, una lista di handle

19

Mailslot Un processo A crea l’oggetto Mailslot.

Un altro processo, B, anche su un altro computer può mandare un messaggio alla MailSlot del processo A.

Si può mandare lo stesso messaggio in broadcast a una serie di MailSlot.

Non è detto che i messaggi arrivino a destinazione.

Page 20: 1 Processi e Thread Job:Insieme di processi che condividono quote e limiti. Processo: Contenitore di risorse (una lista di thread, una lista di handle

20

Remote Procedure Call Un processo A chiede al processo B di chiamare una procedura

nel suo spazio di memoria (quello di B), con i parametri passati da A.

B esegue la funzione e restituisce il risultato ad A.

In pratica, A mette in un messaggio i parametri e li invia a B. B riceve il messaggio, chiama la procedura e inserisce il

risultato in un messaggio che invierà ad A.