Buscar

Aula_06 - Thread

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;

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Continue navegando