Gestione dei Processi. I processi Un processo è unistanza di esecuzione di un programma. Consiste...
-
Upload
calvino-pippi -
Category
Documents
-
view
213 -
download
0
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.](https://reader036.fdocumenti.com/reader036/viewer/2022082807/5542eb4c497959361e8ba437/html5/thumbnails/1.jpg)
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.](https://reader036.fdocumenti.com/reader036/viewer/2022082807/5542eb4c497959361e8ba437/html5/thumbnails/2.jpg)
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.](https://reader036.fdocumenti.com/reader036/viewer/2022082807/5542eb4c497959361e8ba437/html5/thumbnails/3.jpg)
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.](https://reader036.fdocumenti.com/reader036/viewer/2022082807/5542eb4c497959361e8ba437/html5/thumbnails/4.jpg)
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.](https://reader036.fdocumenti.com/reader036/viewer/2022082807/5542eb4c497959361e8ba437/html5/thumbnails/5.jpg)
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.](https://reader036.fdocumenti.com/reader036/viewer/2022082807/5542eb4c497959361e8ba437/html5/thumbnails/6.jpg)
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.](https://reader036.fdocumenti.com/reader036/viewer/2022082807/5542eb4c497959361e8ba437/html5/thumbnails/7.jpg)
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.](https://reader036.fdocumenti.com/reader036/viewer/2022082807/5542eb4c497959361e8ba437/html5/thumbnails/8.jpg)
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.](https://reader036.fdocumenti.com/reader036/viewer/2022082807/5542eb4c497959361e8ba437/html5/thumbnails/9.jpg)
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.](https://reader036.fdocumenti.com/reader036/viewer/2022082807/5542eb4c497959361e8ba437/html5/thumbnails/10.jpg)
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.](https://reader036.fdocumenti.com/reader036/viewer/2022082807/5542eb4c497959361e8ba437/html5/thumbnails/11.jpg)
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.](https://reader036.fdocumenti.com/reader036/viewer/2022082807/5542eb4c497959361e8ba437/html5/thumbnails/12.jpg)
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.](https://reader036.fdocumenti.com/reader036/viewer/2022082807/5542eb4c497959361e8ba437/html5/thumbnails/13.jpg)
Riferimenti
• Pinardi, Aruanno, Bisiani. “Windows & .NET 2000 in Action” – Capitolo 1