AULA Nº 08 SISTEMAS OPERACIONAIS Threads
Contextualizando Na aula passada Sincronização de Processos Aula de hoje Threads
O Modelo de Processo 1) Utilizado para agrupar recursos 2) Um espaço de endereço (0 até algum endereço máximo do processo) e uma única linha de execução (Thread) 3) Agrupamento de recursos (espaço de endereço com texto e dados do programa; arquivos abertos, processos filhos, tratadores de sinais, alarmes pendentes etc)
Modelo da Thread 1) Um espaço de endereço e múltiplas linhas de controle 2) Conjunto de threads compõe as linhas de execuções de um processo 3) Threads compartilham um mesmo espaço de endereço (sendo menos independentes que processos) 4) Possuem recursos particulares (PC, registradores, pilha)
Threads (Vantagens) 1) Em muitas aplicações há múltiplas atividades ao mesmo tempo 2) Podemos decompô-las em atividades paralelas 3) Algumas tarefas precisam do compartilhamento do espaço de endereçamento 4) CPU-bound e I/O-bound podem se sobrepor, acelerando a aplicação (fica a dica ao programador)
Threads (Vantagens) 1) São mais rápidas de criar e destruir que processos 2) Algumas vezes até 100 vezes mais rápidas 3) Úteis em sistemas com múltiplas CPUs -> paralelismo real
Threads (Exemplos) 1) Processador de texto 2) Processos separados não funcionam - o documento tem que estar compartilhado 3) Threads para: Identação, fonte, correção, mudança de linha, etc.
Threads (Exemplo: Servidor Web) 1) O despachante (i) lê as requisições de trabalho que chegam, (ii) escolhe uma thread operário ociosa e (iii) entrega a requisição. A thread operário (iv) lê a cache, caso não encontre a informação, (v) inicializa uma leitura de disco
Processos vs. Threads 3 Processos com uma thread cada 1 Processo Com três threads
Processos vs. Threads Cada thread tem sua própria pilha de execução (pois chamam rotinas diferentes), embora compartilhe o espaço de endereçamento e todos seus dados
Problemas com as Threads 1) Como cada thread pode ter acesso a qualquer endereço de memória dentro do espaço de endereçamento do processo; a) uma thread pode ler, escrever ou apagar a pilha ou as variáveis globais de outra thread b) Exemplo: a = b + c; x = a + y; 2) Necessidade de sincronizar a execução
Estados de Threads
Threads Implementação com Pacote PTreads do POSIX
Threads Implementação com Pacote PTread do POSIX
Threads Implementação em Java Estendendo a class Thread Criar thread: Instanciar classe que herda da classe `Thread class Thread possui todo o código para criar e executar threads
Threads Implementação em Java Joining a Thread 1) Permite a uma thread esperar que outra termine 2) A thread principal esperará thread2 morrer
Threads Implementação em Java Sleeping a Thread 1) A thread atual fica bloqueada por um número de milisegundos 2) Precisa capturar InterruptedException
Tipos de Threads 1) No Modo Usuário 2) No Modo Núcleo 3) Híbrido
Threads no Modo Usuário 1) Implementadas totalmente no espaço do usuário 2) Por meio de uma biblioteca (criação, exclusão, execução etc, não necessariamente gerenciamento) 3) Criação e escalonamento são realizados sem o conhecimento do kernel 4) Para o kernel, é como se rodasse um programa monothread 5) Gerenciadas como processos no Kernel
Threads no Modo Usuário 1) Cada processo possui sua própria tabela de threads 2) Como uma tabela de processos, gerenciada pelo runtime 3) Controla apenas as propriedades da thread (PC, ponteiro da pilha, registradores, estado etc)
Escalonamento-Thread Usuário 1) O núcleo escolhe um processo e passa o controle a ele que escolhe uma thread 2) A gerência da thread fica no espaço do usuário e o núcleo só escalona em nível de processo
Modelo N:1
Threads no Modo Núcleo 1) Suportadas diretamente pelo SO 2) Criação, escalonamento e gerenciamento são feitos pelo kernel 3) O núcleo possui tabela de threads (com todas as threads do sistema) e tabela de processos separadas 4) As tabelas de threads possuem as mesmas só que agora estão implementadas no kernel 5) Os algoritmos mais usados são Round Robin e Prioridade
Threads no Modo Núcleo 1) Agora, as tabelas de threads estão no núcleo 2) Gerenciar threads em modo kernel é mais caro devido à alternância entre modo usuário e modo kernel 3) Mudança de contexto pode ser envolvido na mudança de threads 4) Criar e destruir threads no núcleo é mais caro 5) Exemplo: Linux, Família Windows, OS/2, Solaris 9 (mapeia 1 thread usuário para 1 de kernel, i.e. 1:1)
Escalonamento Threads Núcleo 1) O núcleo escolhe a thread diretamente 2) A thread é quem recebe o quantum, sendo suspensa se excedê-lo 3) Thread bloqueada por E/S não bloqueia o processo 4) Permite múltiplas threads em paralelo
Threads Híbridas 1) Seguem o modelo N para M: 2) N threads de usuário são mapeadas em M <= N threads de núcleo 3) Ex.: Solaris até versão 8, HP-UX, Tru64 Unix
Concluindo Foram abordados nesta aula: Threads Concluímos o Capítulo 2 de Sistemas Operacionais Modernos; Tanenbaum, A. S. 4ª Edição