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 (time-slice) 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ário-kernel-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 Hyper-threading (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.
Top Related