Processos e Threads Sistemas Operacionais (SOPBCC) De: Andrew S. Tanenbaum Tradução: Ronaldo A.L. Gonçalves Luís A. Consulado
Responsável pela disciplina: Prof. Dr. Maurício Aronne Pillon Curso de Ciência da Computação
1 Pearson Education Sistemas Operacionais Modernos – 2ª Edição
Threads (conceitos) • Mais de um fluxo de controle em um mesmo espaço de endereçamento (compartilhado); • Agrupamento de recursos e execução. – Recursos (código, dados do programa, etc) compartilhados; – Execução com mais de um contador de programa - controle de qual instrução será executada a seguir (pilha e variáveis atuais);
15 Pearson Education Sistemas Operacionais Modernos – 2ª Edição
Threads (conceito) • Processos X Threads – Processos usados para agrupar recursos; – Threads são as entidades escalonadas para execução sobre a CPU.
• Permite múltiplas execuções no mesmo ambiente do processo com um grande grau de independência uma da outra. 16 Pearson Education Sistemas Operacionais Modernos – 2ª Edição
Threads
O Modelo de Thread (1)
(a) Três processos cada um com um thread (b) Um processo com três threads 17 Pearson Education Sistemas Operacionais Modernos – 2ª Edição
O Modelo de Thread (2)
• Itens compartilhados por todos os threads em um processo • Itens privativos de cada thread 18 Pearson Education Sistemas Operacionais Modernos – 2ª Edição
O Modelo de Thread (3)
Cada thread tem sua própria pilha 19 Pearson Education Sistemas Operacionais Modernos – 2ª Edição
Uso de Thread (1)
Um processador de texto com três threads 20 Pearson Education Sistemas Operacionais Modernos – 2ª Edição
Uso de Thread (2)
Um servidor web com múltiplos threads 21
Pearson Education Sistemas Operacionais Modernos – 2ª Edição
Uso de Thread (3)
•
Código simplificado do slide anterior (a) Thread despachante (b) Thread operário 22
Pearson Education Sistemas Operacionais Modernos – 2ª Edição
Uso de Thread (4)
Três maneiras de construir um servidor 23 Pearson Education Sistemas Operacionais Modernos – 2ª Edição
Implementação de Threads de Usuário
Um pacote de threads de usuário
24
Pearson Education Sistemas Operacionais Modernos – 2ª Edição
Implementação de Threads de Usuário
• Vantagens
– Não necessita de privilégios especiais;
• Desvantagens – Não explora o paralelismo em máquinas multiprocessadas; – Dificuldade de gerência preemptiva do processador – Se um thread estiver bloqueado em E/S todo o processo pára. Pearson Education Sistemas Operacionais Modernos – 2ª Edição
Implementação de Threads de Núcleo
Um pacote de threads gerenciado pelo núcleo 26 Pearson Education Sistemas Operacionais Modernos – 2ª Edição
Implementação de Threads de Núcleo • Vantagens – Facilita o recobrimento de E/S – Explora o paralelismo SMP
• Desvantagens – Implementação mais “pesada” • “Reciclagem” de threads
Pearson Education Sistemas Operacionais Modernos – 2ª Edição
Implementações Híbridas
Multiplexação de threads de usuário sobre threads de núcleo 28 Pearson Education Sistemas Operacionais Modernos – 2ª Edição
Implementações Híbridas • Características: – Dispões de dois níveis de escalonamento – Multiplexação dos threads de núcleo • Vantagens – Recobrimento das E/S • Desvantagens – Difícil parametrização da multiplexação.
Pearson Education Sistemas Operacionais Modernos – 2ª Edição
Ativações do Escalonador • Objetivo – imitar a funcionalidade dos threads de núcleo – ganha desempenho de threads de usuário
• Evita transições usuário/núcleo desnecessárias • Núcleo atribui processadores virtuais para cada processo – deixa o sistema supervisor alocar threads para processadores
• Problema: Baseiase fundamentalmente nos upcalls o núcleo (camada inferior) chamando procedimentos no espaço do usuário (camada superior)
30 Pearson Education Sistemas Operacionais Modernos – 2ª Edição
Threads PopUp
• Criação de um novo thread quando chega uma mensagem (a) antes da mensagem chegar (b) depois da mensagem chegar
31
Pearson Education Sistemas Operacionais Modernos – 2ª Edição
Convertendo Código Monothread em Código Multithread (1) • Conflito no uso de variáveis globais; – Proibir o uso de variáveis globais – Atribuir variáveis globais privadas (a cada thread) • create_global(“bufptr”); • set_global(“bufprt”,&buf) • Bufptr = read_global(“bufptr”);
• Bibliotecas não reentrantes; • Tratamento de sinais; • Gerenciamento de pilhas
32
Pearson Education Sistemas Operacionais Modernos – 2ª Edição
Convertendo Código Monothread em Código Multithread (2)
• Conflitos entre threads sobre o uso de uma variável global • Código de erro de th1 é sobre escrito pelo da th2. 33
Pearson Education Sistemas Operacionais Modernos – 2ª Edição
Convertendo Código Monothread em Código Multithread (3)
Threads podem ter variáveis globais privadas
34
Pearson Education Sistemas Operacionais Modernos – 2ª Edição