Ciências da computação dia 268
sistemas operacionais --- Threads e processos
Threads
- fluxo de controle dentro de um processo (linha de execução)
- possui um inicio e um fim, como um programa em sequência
- permite paralelismo → permite utilizar vários cores
- permite que o programa seja responsivo → faz com que outras tarefas continuem em execução
- Pode ajudar a simplificar o código, dividindo-o em partes menores e independentes
- pode usar memória compartilhada para trocada de informações e etc
- pode haver conexão inter-threads (usando memória compartilhada e mecanismos de sincronia)
- representa a execução de um programa também
- menor unidade agendavel de um processo
- todos os threads dentro de um processo compartilham dos mesmo recursos do processo
- executado a partir de um processo
- mais leve e eficiente que processos, já que compartilha recursos ao invés de pedir novos
- contexto é menor, já que utiliza apenas parte do contexto do processo em si
- Troca de contexto é mais rápida e eficiente
- criação é mais rápida
- contexto é composto por → conjunto de registradores, pilha, PC, ponteiro para tabela de processos, ponteiro para arquivos, etc. Apenas o especifico para cada tarefa de cada thread
Estados de um thread
- new → criado, mas não iniciado
- runnable → pronto para ser executado
- running → está em execução
- waiting → aguardando recurso externo
- terminated → acabou a execução
Transições de estados de um thread
- execução para aguardando
- aguardando para pronto
- execução para terminated
- execução para pronto → foi interrompido
Tipos de threads
Modo user
- implementado na zona do user
- usa libs locais
- virtualiza as threads usando código
- não interage com o kernel
- Ao usar I/O o processo inteiro é bloqueado
- escalonador só toma conta do processo (não sabe que há threads a serem executadas)
- cada processo tem sua tabela de threads
- cada processo usa seu algoritmo para escalonar threads
- menor overhead do kernel
- não usa os multi-cores com as threads
- melhor para processos CPU bound
Modo Kernel
- threads são geridas pelo SO
- troca de contexto é mais lenta
- apenas uma thread é bloqueada ao usar I/O
- aproveita os multi-cores
- mais portável
- mais escalável
- mais complexo de implementar
- melhor para processos I/O bound
Processo
- cada um tem sua memória virtual endereçável
- possui contexto maior → PC, pilha, tabela de paginas, etc.
- um processo único possui no mínimo uma thread (uma linha de execução)
- usa IPC ou RPC para se comunicarem entre si
- melhores para isolar tarefas
- mais seguros por terem um espaço de memória diferente para cada um (são mais isolados entre si)