24
Processos, Threads e Sincronização em Windows NT Alisson Felipe Coelho Garcia Lucas Mateus Malaquias Rogerio Junio Leachenski

Processos, Threads e Sincronização em Windows NT Alisson Felipe Coelho Garcia Lucas Mateus Malaquias Rogerio Junio Leachenski

Embed Size (px)

Citation preview

Page 1: Processos, Threads e Sincronização em Windows NT Alisson Felipe Coelho Garcia Lucas Mateus Malaquias Rogerio Junio Leachenski

Processos, Threads e Sincronização em Windows NT

Alisson Felipe Coelho GarciaLucas Mateus Malaquias

Rogerio Junio Leachenski

Page 2: Processos, Threads e Sincronização em Windows NT Alisson Felipe Coelho Garcia Lucas Mateus Malaquias Rogerio Junio Leachenski

Criando um processo

• BOOL CreateProcess (LPCSTR IpszName, LPCSTR lpszComLine, LPSECURITY_ATTRIBUTES lpProcAttr, LPSECURITY_ATTRIBUTES lpThreadAttr, BOOL InheritAttr, DWORD How, LPVOID lpEnv, LPSTR lpszDir, LPSTARTUPINFO lpStartInfo, LPPROCESS_INFORMATION lpPInfo);

Page 3: Processos, Threads e Sincronização em Windows NT Alisson Felipe Coelho Garcia Lucas Mateus Malaquias Rogerio Junio Leachenski

Criando um processo

Parâmetros do CreateProcess():• lpszName• lpszComLine• lpProcAttr e IpThreadAttr• InheritAttr• How• IpEnv• IpszDir

Page 4: Processos, Threads e Sincronização em Windows NT Alisson Felipe Coelho Garcia Lucas Mateus Malaquias Rogerio Junio Leachenski

Criando um processo

• IpStartInfotypedef struct _STARTUPINFO {

DWORD cb; //tamanho de STARTUPINFOLPTSTR lpReserved;LPTSTR lpDesktop; //nome da área de trabalhoLPTSTR lpTitle; //título do console (apenas para consoles)DWORD dwX; //canto superior esquerdo (x)DWORD dwY; //canto superior esquerdo (y)DWORD dwXSize; //tamanho da nova janela (x)DWORD dwYSize; //tamanho da nova janela (y)DWORD dwXCountChars; //tamanho do buffer do console (x)DWORD dwYCountChars; //tamanho do buffer do console (y)DWORD dwFillAttribute; //cor inicial do textoDWORD dwFlags; //determina quais campos estão ativosWORD dwShowWindow; //como a janela é mostradaWORD cbReserved2;LPBYTE lpReserved2;HANDLE hStdInput; //handles padrõesHANDLE hStdOutput;HANDLE hStdError;

} STARTUPINFO;

Page 5: Processos, Threads e Sincronização em Windows NT Alisson Felipe Coelho Garcia Lucas Mateus Malaquias Rogerio Junio Leachenski

Criando um processo

Valores para dwFlags:

• STARTF_USEHOWWINDOW -> Ativa dwShowWindow

• STARTF_USESIZE -> Ativa dwXSize e dwYSize• STARTF_USEPOSITION -> Ativa dwX e dwY• STARTF_USECOUNTCHARS -> Ativa dwXCountChars

e dwYCountChars• STARTF_FILLATTRIBUTE -> Ativa dwFillAttribute

Page 6: Processos, Threads e Sincronização em Windows NT Alisson Felipe Coelho Garcia Lucas Mateus Malaquias Rogerio Junio Leachenski

Criando um processo

• lpPInfo

typedef struct _PROCESS_INFORMATION {HANDLE hProcess; //handle do novo processoHANDLE hThread; //handle do thread principalDWORD dwProcessId; //ID do novo processoDWORD dwThreadId; //ID da nova thread

} PROCESS_INFORMATION;

Page 7: Processos, Threads e Sincronização em Windows NT Alisson Felipe Coelho Garcia Lucas Mateus Malaquias Rogerio Junio Leachenski

Encerramento de um processo filho

BOOL TerminateProcess(HANDLE hProcess, UINT status);

Page 8: Processos, Threads e Sincronização em Windows NT Alisson Felipe Coelho Garcia Lucas Mateus Malaquias Rogerio Junio Leachenski

Threads

• Windows NT• Processos Pesados• Processos Leves(Threads)

Page 9: Processos, Threads e Sincronização em Windows NT Alisson Felipe Coelho Garcia Lucas Mateus Malaquias Rogerio Junio Leachenski

Criando uma Thread

HANDLE CreateThread ( NULL, /* nenhum atributo de segurança */ 0, /* use o tamanho default do stack */ (LPTHREAD_START_ROUTINE) ThreadFunc, /* o procedimento a ser lançado */ &dwThrdParam, /* argumento da função */ 0, /* usar flags default de criação */ &dwThreadId); /* devole o id da thread */

Page 10: Processos, Threads e Sincronização em Windows NT Alisson Felipe Coelho Garcia Lucas Mateus Malaquias Rogerio Junio Leachenski

ThreadCada thread possui sua própria pilha de execução, seu próprio contexto (registradores da CPU) e prioridade.

Uma tabela de threads deve então ser mantida também. Os itens por thread são normalmente:

• o contador de programa.• o endereço da pilha.• o conjunto de registradores associados.• endereços das threads filhas.• estado.

Page 11: Processos, Threads e Sincronização em Windows NT Alisson Felipe Coelho Garcia Lucas Mateus Malaquias Rogerio Junio Leachenski

Tipos de threads

Threads síncronas• Executam até que elas mesmas decidam

terminar a execução.

Threads assíncronas• Podem executar juntamente com outros

threads (não bloqueados).

Page 12: Processos, Threads e Sincronização em Windows NT Alisson Felipe Coelho Garcia Lucas Mateus Malaquias Rogerio Junio Leachenski

Single-Thread vs Multithreads

Execução mais eficiente

Page 13: Processos, Threads e Sincronização em Windows NT Alisson Felipe Coelho Garcia Lucas Mateus Malaquias Rogerio Junio Leachenski

Estados assumidos por uma Thread

Page 14: Processos, Threads e Sincronização em Windows NT Alisson Felipe Coelho Garcia Lucas Mateus Malaquias Rogerio Junio Leachenski

Escalonamento de ThreadsEscalonador utiliza múltiplas filas, processos interativos (I/O bound) possuem prioridade sobre os CPU bound.

Classe Tempo Real• Possuem prioridade fixa de 16

a 31.

Classe Variável(Normal)• Possuem prioridade de 0 a 15.

Zero Thread• Zera as paginas livres no

sistema.

Idle• Mais baixa prioridade.

Page 15: Processos, Threads e Sincronização em Windows NT Alisson Felipe Coelho Garcia Lucas Mateus Malaquias Rogerio Junio Leachenski

Processamento Preemptivo

Cooperativo• Os processos esperam que o

processo em execução libere o processador voluntariamente.

• Uma aplicação mal desenvolvida pode monopolizar o processador.

Preemptivo(Prioridade)• Implica em uma sobre carga

devido ao chaveamento de contexto frequente.

Chaveamento Involuntário• Sleep, Bloqueio e preempção.

Page 16: Processos, Threads e Sincronização em Windows NT Alisson Felipe Coelho Garcia Lucas Mateus Malaquias Rogerio Junio Leachenski

Escalonamento em máquinas SMP• Durante a instalação do Kernel, se é detectada a

presença de mais de um processador, é carregado o suporte para o multiprocessamento.

• Independente do número de processadores existira apenas uma fila de processos aptos.

• Porém, a existência de multiprocessadores irá permitir o paralelismo físico na execução das threads.

• Se existirem N processadores, o escalonador garante que as N threads de mais alta prioridade estejam em execução nesses processadores.

Page 17: Processos, Threads e Sincronização em Windows NT Alisson Felipe Coelho Garcia Lucas Mateus Malaquias Rogerio Junio Leachenski

Escalonamento em máquinas SMP

O Windows 2000 implementa o conceito de afinidade, que define em qual processador a thread deve executar. A afinidade pode ser:

• Hard – Dependência que obriga a thread a executar sempre no mesmo processador.

• Soft – O sistema tenta executar a thread no processador que ela havia executado anteriormente, para aproveitamento de dados da execução anterio.

Page 18: Processos, Threads e Sincronização em Windows NT Alisson Felipe Coelho Garcia Lucas Mateus Malaquias Rogerio Junio Leachenski

Finalizando uma Thread

BOOL TerminateThread(HANDLE hThread, DWORD dwStatus)

if(TerminateThread(hThread, dwStatus) == 0){ printf("Erro ao Finalizar a Thread\n"); }else{ printf("Thread Finalizada!\n"); }

Page 19: Processos, Threads e Sincronização em Windows NT Alisson Felipe Coelho Garcia Lucas Mateus Malaquias Rogerio Junio Leachenski

Sincronização

CRIANDO UM SEMÁFORO• HANDLE

CreateSemaphore(LPSECURITY_ATRIBUTES lpAttr, LONG InitialCount, LONG MaxCount, LPSTR lpszName);

• lpAttr: Ponteiro para os atributos de segurança, NULL;

Page 20: Processos, Threads e Sincronização em Windows NT Alisson Felipe Coelho Garcia Lucas Mateus Malaquias Rogerio Junio Leachenski

Sincronização

• InitialCount: Contador;• MaxCount: Número de tarefas que podem

acessar um recurso, 1 = Mutex;• lpszName: Nome do semáforo, objeto global;• Retorna um HANDLE para o semáforo, NULL =

erro;• DWORD WaitForSingleObject(HANDLE

hObject, DWORD dwHowLong);

Page 21: Processos, Threads e Sincronização em Windows NT Alisson Felipe Coelho Garcia Lucas Mateus Malaquias Rogerio Junio Leachenski

Sincronização

• hObject: HANDLE do semáforo;• dwHowLong: Tempo de espera em

milissegundos;• Retorna WAIT_TIMEOUT ou 0(decrementa

contador);• BOOL ReleaseSemaphore(HANLDE hSema,

LONG Count, LPLONG lpPrevCount);• hSema: HANDLE do semáforo;

Page 22: Processos, Threads e Sincronização em Windows NT Alisson Felipe Coelho Garcia Lucas Mateus Malaquias Rogerio Junio Leachenski

Sincronização

• Count: Valor a ser acrescentado ao contador;• lpPrevCount: Contador do semáforo anterior,

NULL;CRIANDO UM OBJETO DE EVENTO

• HANDLE CreateEvent(LPSECURITY_ATTRIBUTES lpAttr, BOOL Manual, BOOL Inicial, LPSTR lpszName);

Page 23: Processos, Threads e Sincronização em Windows NT Alisson Felipe Coelho Garcia Lucas Mateus Malaquias Rogerio Junio Leachenski

Sincronização

• lpAttr: Ponteiro para os atributos de segurança, NULL;

• Manual: Comportamento após o evento;• Inicial: Estado inicial do objeto• lpszName: Nome do objeto de evento, objeto

global;• Retorna um HANDLE para o objeto de evento,

NULL = erro;

Page 24: Processos, Threads e Sincronização em Windows NT Alisson Felipe Coelho Garcia Lucas Mateus Malaquias Rogerio Junio Leachenski

Sincronização

• BOOL SetEvent(HANDLE hEventObject);• hEventObject: HANDLE de um objeto de

evento;