Please enable JavaScript.
Coggle requires JavaScript to display documents.
Sistemas Operacionais A - Cap.6 - Thread Cezar Augusto Crummenauer (Thread…
Sistemas Operacionais A - Cap.6 - Thread
Cezar Augusto Crummenauer
Thread é mais eficiente que processos e subprocessos
Compartilha memória facilitando a comunicação
Comunicação entre processos e subprocessos é lenta e difícil
Uso de pipes, sinais, semáforos, memória ou troca de mensagens
Compartilhamento de recursos não é simples ao usar processos e subprocessos
Ambiente multithread
Não existe a ideia de programas associados a processos, mas, sim, a threads
O processo nesse ambiente tem ao menos um thread em execução
Mas pode compartilhar o seu espaço de armazenamento com inúmeros outros threads
De forma simplificada, um thread pode ser definido como uma subrotina de um programa que pode ser executada de forma assíncrona
O programador deve especificar os threads
A grande vantagem é a possibilidade de minimizar a alocação de recursos, além de diminuir o overhead na criação, troca e eliminação de processos
Compartilham o processador da mesma maneira que processos
Possuem mudanças de estado (execução, espera e pronto)
Para permitir a troca de contexto entre threads, cada um tem seu contexto de hardware (registradores PC, SP e registradores gerais)
Threads são implementados internamente por TCB (Bloco de Controle do Thread)
Que armazena, além do contexto de hardware, mais algumas informações como prioridade, estado de execução e bits de estado
Threads de um mesmo espaço de armazenamento podem alterar informações entre eles, uma vez que não existe separação de espaço, não existe proteção no acesso a memória
Presente na arquitetura microkernel
O escalonamento dos threads é feito pelo sistema operacional
Desenvolvimento usando threads não é simples
Exige que a comunicação e compartilhamento de recursos entre diversos threads sejam feitos de forma sincronizada para evitar problemas de inconsistências e deadlocks
Procedimento de depuração é bastante complexo
Criação/eliminação dinâmica ou estática de threads
Dinâmica: Threads são criados e eliminados de acordo com a necessidade da aplicação
Estática: Número fixo de threads
Arquitetura e Implementação
TMU - Biblioteca de rotinas (modo usuário)
Implementadas pela aplicação e não pelo sistema operacional
Responsabilidade exclusiva da aplicação para controlar o uso de threads
Vantagem de implementar threads mesmo em sistemas operacionais que não suportam threads
Dispensam o kernel evitando mudanças de estado entre modo kernel e modo usuário
Desvantagem: O SO gerencia cada processo como se houvesse apenas uma thread em cada um. No momento que uma thread chama uma rotina de sistema (o que a coloca em estado de espera), todo processo é colocado em modo de espera, mesmo havendo outros threads prontos para a execução
Pode ser contornado com funções da biblioteca que evitam bloqueios de threads (rotinas não-bloqueantes)
Outros problemas: Tratamento individual de sinais e uso em sistemas com múltiplos processadores
TMK - Núcleo do sistema operacional (modo kernel)
Threads são implementados diretamente no núcleo do sistema operacional
O SO pode escalona-los individualmente
Threads podem ser executados simultaneamente em múltiplos processadores
Baixo desempenho, tendo em vista que o SO gerencia isso (mudanças no modo de acesso - usuário-kernel-usuário)
Combinação dos dois (modo híbrido)
Combina as vantagens de TMU e TMK
Um processo pode ter vários TMKs e, por sua vez, um TMK pode possuir vários TMUs
O programador define as combinações
O modo híbrido, apesar da maior flexibilidade, apresenta problemas herdados de ambas as implementações
Scheduler activations - 1990 - Universidade de Washington
O problema do modo hibrido é a falta de comunicação entre o modo híbrido e o modo kernel
O modelo ideal deveria utilizar as facilidades do pacote em modo kernel com o desempenho e a flexibilidade do modo usuário
Este pacote combina o melhor das duas arquiteturas, mas ao contrário de dividir os threads em modo usuário e modo kernel o núcleo do sistema troca informações com a biblioteca de threads usando uma estrutura chamada de scheduler activations
Evitar as mudanças de acesso desnecessárias (usuário-kernel-usuário) para aumentar o desempenho
Ausência de padrão para a utilização de threads foi uma grande dificuldade
Padrão POSIX - Pthreads