Sistemas Operacionais Threads Prof. Diovani Milhorim Threads Lembrando… Escalonamentos preemptivos Um processo pode ter sua execução interrompida e voltar para a fila dos prontos. Exemplos: Round-Robin (fatia de tempo/quantum). Com prioridades para desempatar… Prioridades / múltiplas filas com realimentação. Com Round-Robin para desempatar. Threads Lembrando… Um processo = uma imagem dinâmica de um processo em execução. Um processo = um conjunto de recursos de HW alocados pelo Sis. Op. = uma unidade a escalonar. A imagem do processo na memória é constituída de vários segmentos. Threads Bloco Descritor de Processo A estrutura de dados que representa o processo no Sis. Op. É chamada “Process Control Block” (PCB) Contém as informações necessárias: Registradores, memória, disco (arquivos) Prioridade Estado Histórico (contabilidade) Ponteiro para um outro PCB (lista encadeada) O Sis. Op. deve manter listas de processos Listas encadeadas; A estrutura PCB é usada para tal; Mantém-se um ponteiro sobre o primeiro e/ou o último PCB. Threads Imagem do processo Threads A imagem do processo Texto: contém as instruções binárias do código executável do processo (imagem). Dados: espaço para as variáveis do processo, declaradas como globais no programa. Heap: memória para alocação sob-demanda durante a execução Alocação dinâmica Pilha: memória para alocação: De variáveis locais a sub-rotinas Do endereço de retorno de uma sub-rotina. Área do usuário vs. área do sistema. Threads O processo é… Um programa em execução Uma unidade de escalonamento Um fluxo de execução Um conjunto de recursos (contexto) gerenciados pelo Sis. Op. Registradores Memória Descritores de arquivos Etc… A troca de contexto é uma operação pesada Deve acontecer cada vez que há decisão de escalonamento Threads Threads é uma forma de um processo dividir a si mesmo em duas ou mais tarefas que podem ser executadas simultaneamente. Idéia simples: associar mais de um fluxo de execução a um processo: Compartilhamento de recursos do PCB O PCB deve incluir uma lista de threads! Threads Em uma máquina multiprocessada ou em um cluster de computadores, podemos ter vários processos (inclusive de uma mesma aplicação) rodando ao mesmo tempo (vale salientar que em máquinas monoprocessadas o que ocorre é um pseudoparalelismo). Entretanto, na prática, precisamos de uma granularidade ainda menor, isto é, precisamos de paralelismo dentro de um mesmo processo. Esse paralelismo interno ao processo é obtido com o uso de Threads. Threads Threads Na realidade, uma thread é análoga a um processo tendo em vista que ambos são uma execução seqüencial de um conjunto de instruções. Contudo, uma thread é considerada leve pelo fato de rodar dentro do contexto do processo, aproveitando-se do compartilhamento dos recursos alocados para o ambiente do programa. Threads Portanto, uma thread é um subconjunto das informações pertinentes a um processo e as threads de um mesmo processo compartilham recursos entre si: Itens por processo Itens por threads Espaço de endereçamento Variáveis globais Arquivos abertos Processos filhos Alarmes pendentes Sinais e tratadores de sinais Uso de recursos Contador de Programa Registradores Pilha Estado Threads Cada thread tem sua própria pilha de execução. Threads são bem mais fáceis de criar e destruir, o que implica em um ganho de performance considerável. Threads Há dois tipos de threads: de usuário e de sistema (núcleo). Threads de usuário: O sistema (núcleo) não sabe da existência de threads Núcleo gerencia processos monothread Cada processo tem sua própria tabela de threads Um sistema supervisor, dentro do processo, gerencia os threads Salva estado Faz escalonamento Melhor desempenho Threads devem se comportar educadamente -> Ceder a vez quando não puderem continuar. Threads Threads de usuário: Threads Threads de sistema: O núcleo conhece as threads e as gerencia Núcleo tem tabela de threads e tabela de processos Bloqueio de threads = chamadas ao sistema Núcleo escolhe outro thread do mesmo processo ou um thread de outro processo Threads Threads de sistema: Threads Grande parte das aplicações existentes usam o conceito de multitarefa (multithread). Por exemplo, quando estamos usando um navegador WEB (Internet Explorer, Netscape, ...), ao mesmo tempo em que estamos lendo um texto, também podemos estar efetuando o download de arquivos e ouvindo música. Para cada uma dessas atividades, o navegador cria threads que executarão em (pseudo)paralelamente. Threads Grande parte das aplicações existentes usam o conceito de multitarefa (multithread). Por exemplo, quando estamos usando um navegador WEB (Internet Explorer, Netscape, ...), ao mesmo tempo em que estamos lendo um texto, também podemos estar efetuando o download de arquivos e ouvindo música. Para cada uma dessas atividades, o navegador cria threads que executarão em (pseudo)paralelamente.