Baixe o app para aproveitar ainda mais
Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
Arquitetura de Sistemas Operacionais – Machado/Maia Cap. 6 – Thread * Arquitetura de Sistemas Operacionais Capítulo 6 Thread Arquitetura de Sistemas Operacionais – Machado/Maia Cap. 6 – Thread * Sumário Introdução Ambiente monothread Ambiente multithread Arquitetura e implementação Modelos de programação Arquitetura de Sistemas Operacionais – Machado/Maia Cap. 6 – Thread * Introdução Até o final da década de 1970, S.O. (Tops-10, MVS, UNIX) eram monothread; Em1979, o S.O. Toth introduziu processos lightweight (peso leve), onde o espaço de endereçamento era compartilhado por vários processos; Este conceito, só foi utilizado nos meados 1980, somente como o desenvolvimento do S.O. March ficou claro a separação entre processo e threads; Arquitetura de Sistemas Operacionais – Machado/Maia Cap. 6 – Thread * Introdução Usando multithread pode-se desenvolver aplicações concorrentes de forma mais eficiente; Um processo pode ter partes diferentes do código sendo executada em paralelo, com menos overhead; Como os threads compartilham o mesmo espaço de endereçamento (no mesmo processo), a comunicação é feita de forma eficiente, aumentando o desempenho; Arquitetura de Sistemas Operacionais – Machado/Maia Cap. 6 – Thread * Introdução A presença de paralelismo gera problemas de comunicação e sincronização entre os threads, assim o desenvolvimento de aplicações não é trivial; Existem vários modelos para a implementação de threads no S.O.; Deve-se considerar: Desempenho; Flexibilidade; Custo. Arquitetura de Sistemas Operacionais – Machado/Maia Cap. 6 – Thread * Introdução Multithreads são utilizados em diversos S.O. (Solaris, Windows 2000); A utilização crescente deve-se: Multiprocessadores; Modelo cliente-servidor; Sistemas distribuídos. Arquitetura de Sistemas Operacionais – Machado/Maia Cap. 6 – Thread * Ambiente Monothread Um programa é uma seqüência de instruções; O ambiente monothread suporta apenas um programa no seu espaço de endereçamento; Neste ambiente, aplicações concorrentes são implementadas com o uso de processos e subprocessos; Arquitetura de Sistemas Operacionais – Machado/Maia Cap. 6 – Thread * Ambiente Monothread O uso de processos e subprocessos permite dividir uma aplicação em partes para trabalhar de forma concorrente; Exemplo, um usuário pode ler mails antigos, enquanto envia e recebe mails; Com múltiplos processos, cada atividade esta associada a um processo, aumentado o desempenho; Arquitetura de Sistemas Operacionais – Machado/Maia Cap. 6 – Thread * Ambiente Monothread Concorrência com processos Arquitetura de Sistemas Operacionais – Machado/Maia Cap. 6 – Thread * Ambiente Monothread O problema desta solução é o consumo de recursos; Quando um processo é criado, o S.O. deve alocar recursos para o processo, consumindo tempo de CPU; No término do processo, tempo de CPU é gasto para liberar os recursos; Outro problema é o espaço de endereçamento, pois cada processo possui o seu, tornando a comunicação difícil e lenta, tornando necessária mecanismos para executar a comunicação com segurança; Arquitetura de Sistemas Operacionais – Machado/Maia Cap. 6 – Thread * Ambiente Monothread O compartilhamento de recursos comuns (arquivos abertos, memória) não é simples; Exemplos de S.O. monothread: MS-DOS; Primeiras versões do Windows; Mesmo em S.O. multiprogramavéis e multiusuários: VAX/VMS e Unix; Arquitetura de Sistemas Operacionais – Machado/Maia Cap. 6 – Thread * Ambiente Monothread Ambiente monothread Três threads necessitam de três processos; Arquitetura de Sistemas Operacionais – Machado/Maia Cap. 6 – Thread * Ambiente Multithread Em ambientes multithread, programas são associados à threads e não a processos; O processo tem pelo menos uma thread, mas pode compartilhar o seu espaço de endereçamento com outros threads; Arquitetura de Sistemas Operacionais – Machado/Maia Cap. 6 – Thread * Ambiente Multithread Ambiente multithread 3 threads 1 processo Arquitetura de Sistemas Operacionais – Machado/Maia Cap. 6 – Thread * Ambiente Multithread Simplificando, um thread pode ser definido como uma sub-rotina de um programa, podendo ser executada de forma assíncrona, ou seja paralelamente ao programa chamador; O programador especifica os threads, associando-os às sub-rotinas assíncronas; O ambiente multithread permite a execução concorrente de sub-rotinas dentro de um mesmo programa; Arquitetura de Sistemas Operacionais – Machado/Maia Cap. 6 – Thread * Ambiente Multithread Aplicação multithread Arquitetura de Sistemas Operacionais – Machado/Maia Cap. 6 – Thread * Ambiente Multithread Neste ambiente, cada processo pode responder a várias solicitações concorrentemente ou simultaneamente (multiprocessadores); A grande vantagem é minimizar a alocação de recursos, além de diminuir o overhread na criação, eliminação, comunicação e sincronização de processos; Arquitetura de Sistemas Operacionais – Machado/Maia Cap. 6 – Thread * Ambiente Multithread Threads compartilham o processador da mesma forma que os processos e passam pela mesmas mudanças de estado (execução, espera, pronto); Para a troca de contexto, cada thread possui o seu próprio contexto de hardware; Os threads, dentro do mesmo processo, compartilham o contexto de software e espaço de endereçamento; Arquitetura de Sistemas Operacionais – Machado/Maia Cap. 6 – Thread * Ambiente Multithread Threads são implementadas em uma estrutura de dados chamada de bloco de controle de thread (thread control block – TCB) O TCB armazena, além do contexto de hardware, informações relacionadas exclusivamente ao thread, por exemplo, prioridade, estado de execução, bits de estado, etc. Arquitetura de Sistemas Operacionais – Machado/Maia Cap. 6 – Thread * Ambiente Multithread Em ambientes monothread, o processo é a unidade de alocação de recursos e a unidade de escalonamento, já no ambiente multithread, a unidade de alocação é o processo, e cada thread representa uma unidade de escalonamento independente; Neste caso, o O.S. não seleciona um processo para a execução, mas um de seus threads; Arquitetura de Sistemas Operacionais – Machado/Maia Cap. 6 – Thread * Ambiente Multithread O uso do espaço de endereçamento é a grande diferença entre as aplicações mono e multithread; Processos e subprocessos possuem espaços de endereçamento próprios, individuais e protegidos, enquanto threads compartilham-no; Assim o compartilhamento de dados entre threads, do mesmo processo, é simples e rápido; Arquitetura de Sistemas Operacionais – Machado/Maia Cap. 6 – Thread * Ambiente Multithread Como não existe proteção no acesso à memória quando se usa threads, pode, facilmente, alterar os dados de outros threads, assim é fundamental que se implemente mecanismos de comunicação e sincronismo para garantir a segurança no acesso aos dados; Arquitetura de Sistemas Operacionais – Machado/Maia Cap. 6 – Thread * Ambiente Multithread Benefícios do uso de multithreads: São mais rápidos que programas concorrentes implementados com múltiplos processos; Compartilham facilmente os recursos, como descritores de arquivos, temporizadores, sinais, atributos de segurança, etc. Arquitetura de Sistemas Operacionais – Machado/Maia Cap. 6 – Thread * Ambiente Multithread Arquitetura de Sistemas Operacionais – Machado/Maia Cap. 6 – Thread * Ambiente Multithread A utilização de processador, dos discos, etc. pode ser feita de forma concorrente, usando múltiplos threads, melhorando, assim, a utilização de recursos; Em alguns casos, o uso de thread melhora o desempenho da aplicação, apenas por executar tarefas em backgound enquanto E/S são executadas; Editores de texto, planilhas, aplicativos gráficos, processadores de imagens são especialmente beneficiados quando se utiliza threads; Arquitetura de Sistemas Operacionais – Machado/Maia Cap. 6 – Thread * Ambiente Multithread Aplicação multithread (a) Arquitetura de Sistemas Operacionais – Machado/Maia Cap. 6 – Thread * Ambiente Multithread Em ambientes cliente-servidor são essências para as solicitações de serviços remotos; Em um ambiente monothread, se uma aplicação solicita um serviço remoto, ela tem de esperar indefinidamente até a solicitação ser atendida; Já no multithread, pode-se solicitar um serviço e continuar com outras atividades; Arquitetura de Sistemas Operacionais – Machado/Maia Cap. 6 – Thread * Ambiente Multithread Já para o processo que atende a solicitação, o uso de multithread permite atender diversos pedidos concorrentemente/simultaneamente; O núcleo do S.O., também, pode ser implementado utilizando-se de multithread de forma vantajosa, como na arquitetura microkernel; Arquitetura de Sistemas Operacionais – Machado/Maia Cap. 6 – Thread * Ambiente Multithread Aplicação multithread (b) Arquitetura de Sistemas Operacionais – Machado/Maia Cap. 6 – Thread * Arquitetura e Implementação O pacote de threads é o conjunto de rotinas disponíveis para usar os threads; existem as diferentes abordagens para a sua implementação que influenciará no desempenho, concorrência e na modularidade das aplicações multithreads; Arquitetura de Sistemas Operacionais – Machado/Maia Cap. 6 – Thread * Arquitetura e Implementação Threads podem ser oferecidas por: Bibliotecas de rotinas fora do núcleo do S.O. (modo usuário); Pelo núcleo do S.O (modo kernel); Combinação dos dois acima (modo híbrido); Scheduler Activations. Arquitetura de Sistemas Operacionais – Machado/Maia Cap. 6 – Thread * Arquitetura e Implementação Arquitetura de Sistemas Operacionais – Machado/Maia Cap. 6 – Thread * Arquitetura e Implementação Uma das dificuldades foi a ausência de padrões, porém em 1995 o padrão PSIX P1003.1c foi aprovado e depois atualizado para POSIX 1003.4a, conhecido, também, como Pthreads; A existência do padrão tornou as aplicações comerciais multithreads mais simples e de fácil implementação; Este padrão é largamente utilizado em Unix (Sun Solaris Pthreads e Digital OSF/1); Arquitetura de Sistemas Operacionais – Machado/Maia Cap. 6 – Thread * Modo Usuário Threads em modo usuário (TMU) são implementadas pela aplicação e não pelo S.O.; Para tanto, existe uma biblioteca de rotinas para manipulação de threads (criação, eliminação, troca de mensagens, escalonamento, etc.); O S.O. não sabe a existência dos threads; Arquitetura de Sistemas Operacionais – Machado/Maia Cap. 6 – Thread * Modo Usuário O trabalho de gerenciar os threads é de responsabilidade exclusiva da aplicação; Assim, pode-se implementar threads em S.O. que não possuem suporte a eles (grande vantagem); TMU são rápidos e eficientes por dispensarem acesso ao kernel do S.O., evitando a mudança de modo de acesso (usuário-kernel-usuário); Arquitetura de Sistemas Operacionais – Machado/Maia Cap. 6 – Thread * Modo Usuário A grande limitação dos TMU é que o S.O. gerencia cada processo como só existisse um único threads; Quando um thread chama uma rotina do S.O. que o coloca em estado de espera (rotina bloqueante) todo o processo é colocado em estado de espera, mesmo que existam threads em estado de pronto; Arquitetura de Sistemas Operacionais – Machado/Maia Cap. 6 – Thread * Modo Usuário Para solucionar este problema a biblioteca tem de substituir as rotinas bloqueantes por outras que não causem o bloqueio (não-bloqueantes); Todo este controle é transparente ao usuário e ao S.O.; Um dos maiores problemas é o tratamento individual de sinais; O sistema reconhece apenas o processo, os sinais enviados ao processo devem ser reconhecidos e encaminhados a cada um dos threads para tratamento; Arquitetura de Sistemas Operacionais – Machado/Maia Cap. 6 – Thread * Modo Usuário O sistema reconhece apenas o processo, os sinais enviados ao processo devem ser reconhecidos e encaminhados a cada um dos threads para tratamento; As interrupções de clock esta limitação é crítica, os sinais de temporalização devem ser interceptados para que se possa interromper o thread em execução e executar a troca de contexto; Arquitetura de Sistemas Operacionais – Machado/Maia Cap. 6 – Thread * Modo Usuário Em ambientes multiprocessados, não é possível que threads de um mesmo processo sejam executados em processadores diferentes, reduzindo, drasticamente, o grau de execução paralela da aplicação; Arquitetura de Sistemas Operacionais – Machado/Maia Cap. 6 – Thread * Modo Usuário Threads em modo usuário Arquitetura de Sistemas Operacionais – Machado/Maia Cap. 6 – Thread * Modo kernel Threads em modo kernel (TMK) são implementadas diretamente pelo núcleo do S.O., através de chamadas as rotinas de S.O.; O S.O. sabe da existência de todos os threads, podendo escaloná-los individualmente; Em ambientes multiprocessados os threads de processo podem ser executados simultaneamente (um em cada processador); Arquitetura de Sistemas Operacionais – Machado/Maia Cap. 6 – Thread * Modo kernel O grande problema é o baixo desempenho; No TMU o tratamento é feito sem a ajuda do S.O., já o TMK utilizam chamadas as rotinas do S.O., consequentemente, várias mudanças no modo de acesso (usuário-kernel-usuário); Arquitetura de Sistemas Operacionais – Machado/Maia Cap. 6 – Thread * Modo kernel Arquitetura de Sistemas Operacionais – Machado/Maia Cap. 6 – Thread * Modo kernel Threads em modo kernel Arquitetura de Sistemas Operacionais – Machado/Maia Cap. 6 – Thread * Modo híbrido A arquitetura de threads em modo híbrido combina as vantagens do TMU e TMK; Um processo pode ter vários TMK e um TMK pode ter vários TMU; O núcleo do S.O. reconhece os TMK, podendo assim, escaloná-los; Um TMU pode ser executado em um TMK, e em outro instante em outro TMK; Arquitetura de Sistemas Operacionais – Machado/Maia Cap. 6 – Thread * Modo híbrido O programador desenvolve a aplicação em termos de TMU e especifica quantos TMK serão associados; Os TMU são mapeados nos TMK quando o processo esta sendo executado; O programador utilizar somente TMK, TMU ou uma combinação de ambos; Arquitetura de Sistemas Operacionais – Machado/Maia Cap. 6 – Thread * Modo híbrido O modo híbrido, apesar da maior flexibilidade, apresenta problemas herdados de ambas implementações; Por exemplo, quando um TMK realiza uma chamada bloqueante todos os TMU (associados a esta TMK) são colocados no estado de espera; Um TMU que deseja utilizar vários processadores devem usar diferentes TMK, o que influencia no desempenho; Arquitetura de Sistemas Operacionais – Machado/Maia Cap. 6 – Thread * Modo híbrido Threads em modo híbrido Arquitetura de Sistemas Operacionais – Machado/Maia Cap. 6 – Thread * Scheduler Activations Os problemas do threads no modo híbrido se devem a falta de comunicação entre as threads TMU e TMK; Modelo ideal: facilidades do TMK e desempenho e flexibilidade do TMU; Scheduler Activations, introduzido na década de 1990 pela Universidade de Washington, combina o melhor das duas arquiteturas; Arquitetura de Sistemas Operacionais – Machado/Maia Cap. 6 – Thread * Scheduler Activations Em vez de dividir os threads em TMU e TMK, o núcleo do sistema troca informações com a biblioteca de threads através de uma estrutura chamada de Scheduler Activations; Arquitetura de Sistemas Operacionais – Machado/Maia Cap. 6 – Thread * Scheduler Activations Scheduler Activations Arquitetura de Sistemas Operacionais – Machado/Maia Cap. 6 – Thread * Scheduler Activations A maneira de obter o melhor desempenho é evitar as mudanças de modo de acesso desnecessárias; Caso um thread utilize uma rotina que o coloque no estado de espera, não é necessário ativar o kernel, basta que a própria biblioteca em modo usuário escalone outro thread; Arquitetura de Sistemas Operacionais – Machado/Maia Cap. 6 – Thread * Scheduler Activations Isto é possível porque a biblioteca (em modo usuário) e o kernel se comunicam e trabalham de forma cooperativa; Cada camada implementa seu escalonamento de forma independente, mas trocando informação quando necessário; Arquitetura de Sistemas Operacionais – Machado/Maia Cap. 6 – Thread * Modelos de programação Desenvolver aplicações multithreads não é simples, pois é necessário comunicar e compartilhar recursos e evitar os problemas de concorrência e deadlock; Além das dificuldades do desenvolvimento de aplicações concorrentes, o procedimento de depuração é bastante complexo; Arquitetura de Sistemas Operacionais – Machado/Maia Cap. 6 – Thread * Modelos de programação O número total de threads e a forma que são criados e eliminados são fatores importantes; A criação de um número excessivo de threads pode gerar um overhead, causando uma queda de desempenho; a definição do número de threads pode ser: Dinâmica; Estática; Arquitetura de Sistemas Operacionais – Machado/Maia Cap. 6 – Thread * Modelos de programação Quando é dinâmica os threads são criados/eliminados conforme a demanda da aplicação, oferecendo grande flexibilidade; Já a estática, o número de threads é definido na criação do processo; Para obter os benefícios do uso dos threads, uma aplicação deve permitir que diferentes partes de seu código sejam executados em paralelo; Arquitetura de Sistemas Operacionais – Machado/Maia Cap. 6 – Thread * Modelos de programação Se uma aplicação realiza várias E/S e trata eventos assíncronos, a programação multithread aumenta o desempenho, mesmo em ambientes monoprocessados; Sistemas gerenciadores de banco de dados (SGBDs), servidores de arquivo ou impressão são exemplos onde o uso de multithreads proporciona grandes vantagens e benefícios;
Compartilhar