Sistemas Operacionais Prof. Pedro Luís Antonelli Anhanguera Educacional ARQUITETURA E IMPLEMENTAÇÃO • Pacote de Threads – Conjunto de rotinas disponíveis para que uma aplicação utilize as facilidades dos threads. – Threads em Modo Usuário – Threads em Modo Kernel – Threads em Modo Hibrido Threads em Modo Usuário – Threads em modo usuário são implementas por chamadas a uma biblioteca de rotinas que são linkadas e carregadas em tempo de execução (run-time) no mesmo espaço de endereçamento do processo e executadas em modo usuário. – O sistema operacional não sabe da existência de múltiplos threads, sendo responsabilidade da biblioteca gerenciar e sincronizar os diversos threads existentes. MACHADO, fig.6.8, pag 97 – Threads em modo usuário Threads em Modo Usuário MACHADO, fig.6.8, pag 97 – Threads em modo usuário Threads em Modo Usuário • A primeira vantagem deste modelo é a possibilidade de sistema operacional que não suporta threads, implementar aplicações multithreads. • Utilizando a biblioteca, múltiplos threads poder ser utilizados, compartilhando o mesmo espaço de endereçamento do processo e outros recursos. • Threads em modo usuário são rápidos e eficientes, por dispensar acesso ao kernel do sistema para a criação, eliminação, sincronização e troca de contexto das threads. • A biblioteca oferece todo o suporte necessário em modo usuário, sem a necessidade de chamadas ao sistema (system calls). Threads em Modo Usuário • O sistema operacional desconhece a existência dos threads, sendo responsabilidade da biblioteca particionar o tempo de CPU do processo (timeslice) entre os diversos threads existentes. • Como cada aplicação possui sua cópia da biblioteca, é possível implementar uma política de escalonamento diferente, em função da sua necessidade. • Apesar das vantagens, threads em modo usuários são difíceis de implementar. • Outro problema do pacote em modo usuário está no compartilhamento de variáveis da biblioteca multithread sem a devida sincronização. Threads em Modo Kernel – Threads em modo kernel são implementadas diretamente pelo núcleo do sistema, por chamadas ao sistema (system calls) que oferecem todas as funções de gerenciamento e sincronização . – O sistema operacional (escalonador) sabe da existência de cada thread e pode escalona-los individualmente. – No caso de múltiplos processadores, os threads de um mesmo processo podem ser executados simultaneamente. – Problema é o baixo desempenho. Threads em Modo Kernel MACHADO, fig.6.9, pag 98 – Threads em modo kernel Threads em Modo Kernel • Os problemas apresentados para a implementação de pacotes em modo usuário não são encontrados neste modelo, como compartilhamento de variáveis, tratamento de sinais, chamadas síncronas, escalonamento em múltiplos processadores, etc. • O grande problema para pacotes em modo kernel é o seu desempenho, sendo da ordem de dez vezes mais lento que o modo usuário. • Enquanto que pacotes em modo usuário todo tratamento é feito sem a ajuda do sistema operacional, ou seja, sem a mudança do modo de acesso (usuáriokernel-usuário), pacotes em modo kernel utilizam chamadas ao sistema e conseqüente mudança de modo de acesso. MACHADO, fig.6.9, pag 98 – Threads em modo kernel Threads em Modo Híbrido – Nesta arquitetura existe a idéia de combinar as vantagens de threads implementados em modo usuário e modo kernel. – Para facilitar a explicação deste modelo, chamaremos os threads em modo kernel de TMKs e os de modo usuário de TMUs. – Um processo pode ter vários TMKs e, por sua vez, um TMK pode ter vários TMUs. O núcleo do sistema reconhece os TMKs e pode escalonálos individualmente. Threads em Modo Híbrido – Um TMU pode ser executado em um TMK, em um determinado momento, e no instante seguinte ser executado em outro. – O programador desenvolve a aplicação em termos de TMUs e especifica quantos TMKs estão associados ao processo. – Os TMU são mapeados em TMK enquanto o processo está sendo executado. O programador pode utilizar apenas TMKs, TMUs ou uma combinação de ambos. Threads em Modo Híbrido MACHADO, figs..6.10 e 6.11, pag. 99 – Threads em modo hibrido Threads em Modo Híbrido – O pacote híbrido, apesar da maior flexibilidade, também apresenta problemas herdados de ambas as implementações. – Por exemplo, quando um TMK realiza uma chamada bloqueante, todos os TMUs são colocados no estado de espera. – TMUs que desejam utilizar vários processadores devem utilizar diferentes TMKs, o que influenciará no desempenho. Scheduler Activations – Os problemas apresentados no pacote de threads híbrido existem devido a falta de comunicação entre os threads em modo usuário e modo kernel. – O modelo ideal deveria utilizar as facilidades do pacote em modo kernel com o desempenho e flexibilidade do modo usuário. – Este pacote combina o melhor do dois mundos, mas ao contrário de multiplexar os threads em modo usuário entre os de modo kernel, o núcleo do sistema troca informações com a biblioteca de threads utilizando uma estrutura de dados chamada scheduler activation. Scheduler Activations MACHADO, figs..6.10 e 6.11, pag. 99 –Scheduler activations (abaixo) Scheduler Activations – A maneira de alcançar um melhor desempenho é evitar a mudanças de acessos (usuário-kernel-usuário) desnecessárias. – Caso um thread utilize uma chamada ao sistema que o coloque no estado de espera, não é necessário que o kernel seja ativado. Basta que a própria biblioteca em modo usuário possa escalonar outro thread. – 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, porém trocando informações quando necessário. Pthreads – Uma das grandes dificuldades da utilização de threads em aplicações em geral foi a ausência de um padrão. – Em 1995, o padrão POSIX (Portable Operating System Interface) P1003.1c foi aprovado. – Com este padrão, também conhecido como Pthreads, aplicações comerciais multithread tornaram-se mais comuns. – O padrão Pthreads é largamente encontrado em ambientes Unix, geralmente implementado em aplicações escritas em Linguagem C. APIs definidas pelo padrão POSIX Pthreads - O POSIX pode ser implementado modo usuário, modo kernel ou uma combinação de ambos (híbrido). - O padrão utiliza a abordagem de orientação a objetos para representar suas propriedades, como tamanho de pilha, política de escalonamento e prioridades para os threads. - No padrão POSIX threads são criados e eliminados dinamicamente, conforme a necessidade. Além disto, o padrão oferece mecanismos de sincronização, como semáforos e variáveis condicionais. Pthreads - O tratamento de sinais é muito dependente da implementação do pacote em um determinado sistema operacional. - O POSIX threads exige que todas as bibliotecas e chamadas ao sistema sejam thread-safe, ou seja, se um fabricante deseja oferecer o pacote, deverá reescrever grande parte do sistema para torná-lo compatível Considerações sobre Threads • Multithreading é a capacidade que o sistema operacional possui de executar várias threads simultaneamente sem que uma interfira na outra. Estas threads compartilham os recursos do processo, mas são capazes de ser executadas de forma independente. • Para possuir processamento multithread “real”, os processadores precisam ser capazes de atender duas ou mais threads ao mesmo tempo e não simular este efeito, atendendo-as uma por vez em um curto período de tempo. Considerações sobre Threads • A maior vantagem trazida com a execução multithread é permitir que os computadores com múltiplos núcleos de processamento possam aproveitar todo o seu potencial e operar de forma mais rápida. • Apenas para ilustrar, nos computadores sem este tipo de suporte, quando o processo principal toma muito tempo, a aplicação inteira parece travar. SuperThreading • Esta tecnologia foi desenvolvida a partir da observação de que algumas vezes o processador era deixado ocioso enquanto executava as instruções de uma thread (nem todo processo requisita toda a capacidade do processador). • O objetivo principal era aproveitar este período de ociosidade para a execução de instruções de outra thread. • Na execução SuperThreading o processador pode executar instruções de threads diferentes para cada ciclo de processamento. • Entretanto, quando um destes ciclos não está mais sendo utilizado por determinada thread, é aproveitado para executar outra que esteja pronta. Hyper-threading • Hyper-threading ou Simultaneous multithreading (SMT), basicamente, seria uma espécie de evolução da tecnologia SuperThreading, porém sem a limitação de que todas as instruções executadas em um mesmo ciclo de processamento sejam da mesma thread. • A tencologia de Hyper-thread permite que as threads sejam executadas em paralelo (paralelismo) dentro de cada núcleo de processador existente no computador. • Este tipo de processamento aproveita de forma mais eficiente o uso dos recursos dos processadores e melhora ainda mais a performance multithread dos programas. Hyper-threading • Na imagem abaixo você pode conferir a presença da tecnologia Hyperthreading (HT) nos processadores Pentium 4. Hyper-threading • Para deixar um pouco mais claro, pode-se dizer que um único processador com tecnologia hyper-threading habilitada é tratado pelo sistema operacional como dois processadores ao invés de apenas um. • Assim sendo, um único processador físico poderia ser tratado pelo Sistema Operacional como dois processadores virtuais dividindo tarefas entre eles. Momento Atual Fonte : http://ark.intel.com/pt-br/products/63696/Intel-Core-i7-3960X-Processor-Extreme-Edition- acesso em 28/03/2012 BIBLIOGRAFIA • MACHADO, F. B. & MAIA, L. P., Arquitetura de Sistemas Operacionais, 4 Edição, São Paulo, LTC, 2007. • TANENBAUM, A. S. Sistemas Operacionais Modernos: 2ª edição, São Paulo, editora Prentice Hall, 2003. • SILBERSCHATZ, A. Sistemas Operacionais – Conceitos: São Paulo, editora LTC, 2004.