08-Processos e threads (cont.)

Propaganda
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.
Download