Gestione dei Processi. I processi Un processo è unistanza di esecuzione di un programma. Consiste...

13
Gestione dei Processi

Transcript of Gestione dei Processi. I processi Un processo è unistanza di esecuzione di un programma. Consiste...

Page 1: Gestione dei Processi. I processi Un processo è unistanza di esecuzione di un programma. Consiste di –Un identificatore univoco (PID) –La handle table.

Gestione dei Processi

Page 2: Gestione dei Processi. I processi Un processo è unistanza di esecuzione di un programma. Consiste di –Un identificatore univoco (PID) –La handle table.

I processi

• Un processo è un’istanza di esecuzione di un programma. Consiste di – Un identificatore univoco (PID)– La handle table del processo

• tabella di riferimenti (HANDLE) a risorse di cui il processo può disporre (file, socket, eventi, …)

– Uno spazio d’indirizzamento privato di 4GB– Almeno un thread d’esecuzione

Page 3: Gestione dei Processi. I processi Un processo è unistanza di esecuzione di un programma. Consiste di –Un identificatore univoco (PID) –La handle table.

PID

• PID = process ID– Identificatore univoco dei processi– (visibile per esempio quando i processi sono

mostrati in task manager)

Page 4: Gestione dei Processi. I processi Un processo è unistanza di esecuzione di un programma. Consiste di –Un identificatore univoco (PID) –La handle table.

Thread

• Un thread rappresenta un contesto di esecuzione– Valori dei registri, stack, codice eseguito, …

• Un processo ha almeno un thread associato e può averne più di uno (esecuzione concorrente)

• Il primo thread viene creato all’avvio di un processo automaticamente dal SO– Il primo thread esegue il codice dell’entry point del

processo (funzione main)

Page 5: Gestione dei Processi. I processi Un processo è unistanza di esecuzione di un programma. Consiste di –Un identificatore univoco (PID) –La handle table.

Creazione di un processo da programma

BOOL CreateProcess(LPCTSTR lpApplicationName,LPTSTR lpCommandLine,LPSECURITY_ATTRIBUTES lpProcessAttributes,LPSECURITY_ATTRIBUTES lpThreadAttributes,BOOL bInheritHandles,DWORD dwCreationFlags,LPVOID lpEnvironment,LPCTSTR lpCurrentDirectory,LPSTARTUPINFO lpStartupInfo,LPPROCESS_INFORMATION lpProcessInformation

);

Page 6: Gestione dei Processi. I processi Un processo è unistanza di esecuzione di un programma. Consiste di –Un identificatore univoco (PID) –La handle table.

Parametri di CreateProcess i/ii• LPCTSTR lpApplicationName

– Nome dell’applicazione (stringa)• LPTSTR lpCommandLine

– Linea di comando con evetuali parametri (stringa)• LPSECURITY_ATTRIBUTES lpProcessAttributes• LPSECURITY_ATTRIBUTES lpThreadAttributes

– Attributi di sicurezza del processo e del suo primo thread• BOOL bInheritHandles

– ereditarietà delgli handle del padre• DWORD dwCreationFlags

– Modalità di creazione del processo• CREATE_SUSPENDED (processo creato nello stato sospeso)• CREATE_NEW_CONSOLE (processo creato in una nuova console)• 0 (nessuna modalità particolare)

Page 7: Gestione dei Processi. I processi Un processo è unistanza di esecuzione di un programma. Consiste di –Un identificatore univoco (PID) –La handle table.

Parametri di CreateProcess ii/ii• LPVOID lpEnvironment

– Trasferisce al processo le variabili d’ambiente– Date sotto forma di tabella di stringhe– Ogni riga è nella forma “nome=valore”– Se il parametro è NULL, il nuovo processo acquisisce una tabella

identica a quella del processo che lo crea• LPCTSTR lpCurrentDirectory

– Directoru di lavoro del nuovo processo• LPSTARTUPINFO lpStartupInfo

– Informazioni per la finestra principale del nuovo processo• LPPROCESS_INFORMATION lpProcessInformation

– È un parametro di ritorno per ricevere informazioni sul processo appena creato

• Handle del processo• Handle del primo thread• PID del nuovo processo

Page 8: Gestione dei Processi. I processi Un processo è unistanza di esecuzione di un programma. Consiste di –Un identificatore univoco (PID) –La handle table.

Struttura PROCESS_INFORMATION

typedef struct _PROCESS_INFORMATION { // pi HANDLE hProcess; HANDLE hThread; DWORD dwProcessId; DWORD dwThreadId;

} PROCESS_INFORMATION;

• hProcess: handle del processo creato• hThread: handle del thread primario del processo creato• dwProcessId: PID del processo creato• dwThreadId: identificatore del thread primario

Page 9: Gestione dei Processi. I processi Un processo è unistanza di esecuzione di un programma. Consiste di –Un identificatore univoco (PID) –La handle table.

Creazione di un thread

HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes,DWORD dwStackSize,LPTHREAD_START_ROUTINE lpStartAddress,LPVOID lpParameter,DWORD dwCreationFlags, LPDWORD lpThreadId);

Page 10: Gestione dei Processi. I processi Un processo è unistanza di esecuzione di un programma. Consiste di –Un identificatore univoco (PID) –La handle table.

Parametri di Create Thread• LPSECURITY_ATTRIBUTES lpThreadAttributes

– Attributi di sicurezza del thread• DWORD dwStackSize

– Dimensione dello stack (0 = default)• LPTHREAD_START_ROUTINE lpStartAddress

– Funzione da eseguire nel thread• LPVOID lpParameter

– Parametri passati alla funzione eseguita• DWORD dwCreationFlags

– Stato del thread al momento della creazione• 0 = running• CREATE_SUSPENDED = sospeso

• LPDWORD lpThreadId– Identificatore del thread restituito come risultato

Page 11: Gestione dei Processi. I processi Un processo è unistanza di esecuzione di un programma. Consiste di –Un identificatore univoco (PID) –La handle table.

Funzioni passate ai thread

• Le funzioni passate ai thread devono essere dichiarate seguendo la seguente sintassi– DWORD WINAPI ThreadFunctionName (LPVOID lpParam);

• DWORD: tipo del valore di ritorno• WINAPI: convenzione di chiamata • ThreadFunctionName: nome della funzione (a piacere)• LPVOID: puntatore a void

– utilizzato come strumento generico per il passaggio dei parametri

– mediante un’operazione di cast è possibile ricostruire il formato corretto dei parametri dentro la funzione

Page 12: Gestione dei Processi. I processi Un processo è unistanza di esecuzione di un programma. Consiste di –Un identificatore univoco (PID) –La handle table.

Funzioni di utilità

• int GetCurrentThreadId()– Restituisce l’Id del thread corrispondente al contesto

di esecuzione corrente

• DWORD WaitForSingleObject(HANDLE hHandle, DWORD dwMillisecs)– Aspetta la terminazione di un thread per il tempo

stabilito – (si può usare il valore INFINITE per aspettare la

terminazione del thread in ogni caso)

Page 13: Gestione dei Processi. I processi Un processo è unistanza di esecuzione di un programma. Consiste di –Un identificatore univoco (PID) –La handle table.

Riferimenti

• Pinardi, Aruanno, Bisiani. “Windows & .NET 2000 in Action” – Capitolo 1