O documento discute a implementação de threads no espaço do usuário ou no núcleo do sistema operacional. Threads implementados no espaço do usuário permitem maior agilidade mas não são preemptíveis, enquanto threads no núcleo permitem maior eficiência e escalonamento mas perdem em portabilidade. O documento também descreve o uso de threads para programação paralela e em servidores.
Escalonamento de processos em sistemas virtualizados
Threads
1. 23/10/2013
Depende!
Agilidade
◦ Se
o
objetivo
é
agilidade,
deve-se
implementá-los no espaço do usuário.
Espaço do usuário:
◦ Refere-se ao conjunto de programas que
rodam com o processador em modo usuário.
Existem certas instruções que não podem ser
colocadas à disposição das aplicações, pois a
sua utilização indevida ocasiona sérios
problemas à integridade do sistema.
O controle de processos
◦ Nesse caso o controle do processo é feito
diretamente pelo sistema operacional,
mas os threads são controlados por
procedimentos em tempo de execução
que serve como interface entre a máquina
virtual (processos) onde rodam os threads.
1
2. 23/10/2013
Neste caso, o S.O. não “enxerga” os threads,
pois eles são implementados no espaço do
usuário, sendo submissos ao processo que os
criou.
Os threads não podem usufruir do sistema de
interrupções do sistema operacionais e
portanto são não-preemptíveis.
Vantagens
◦ Agilidade
◦ O gerenciamento é menos complicado
Desvantagens
◦ Não preempção
◦ Impedidos de utilizar interrupções do
sistema operacional
2
3. 23/10/2013
Eficiência
◦ Se o objetivo é eficiência, então os threads
podem ser implementados no núcleo do
sistema operacional, podendo serem vistos
pelo SO e usufruindo de seu sistema de
interrupções.
◦ Portanto passam a serem preemptíveis.
Nesse sentido os threads passam a ser
tratados como processos, possibilitando o
bloqueio de outros threads e também
eficiência no escalonamento.
Agora não há necessidade de interromper o
processo que o gerou (processo pai), uma vez
que o thread “é um processo”.
3
4. 23/10/2013
Com isso o Sistema Operacional pode
interromper um thread sem interromper o
processo pai, e também outras ramificações
em execução.
O thread também irá competir igualmente
com os processos os ciclos do processador.
Vantagens de implementação no núcleo
◦ Maior autonomia dos threads
Desvantagens
◦ Sistema perde em portabilidade, as
mudanças de contexto dos threads tem
agora a mesma complexidade dos
processos.
4
5. 23/10/2013
Quando terminam sua execução;
Quando o tempo alocado a seu processo pai
foi esgotado
Ou se solicitou algum recurso do sistema.
5
6. 23/10/2013
Programas multithread são programas que
contém várias threads, executando tarefas
distintas,
simultaneamente.
O
browser
HotJava, implementado em Java, é um
exemplo.
O browser poderá fazer um scroll em uma
página enquanto carrega uma imagem ou
executa vários aplicações ao mesmo tempo.
Exemplos:
Programação Reativa: aplicação responde a
eventos de entrada.
Exemplo: interfaces com o usuário, onde
cada evento corresponde a uma ação
Paralelismo físico/ distribuição: para tirar
vantagem de múltiplas CPUs centralizadas
ou distribuídas.
6
7. 23/10/2013
Implementação de processos servidores que
prestam serviços a processos clientes.
O emprego de ramificações na estrutura de
controle
do
servidor,
permite
o
agrupamento dos threads num mesmo
espaço de endereçamento, admitindo
acesso concorrente de vários clientes a um
único servidor.
Há dois tipos de ramificações:
Ramificações Estáticas:
Criadas em tempo de compilação
Exemplo: Servidores de terminais
◦ Servidor cria ramificações
◦ Essas ramificações são locais ao servidor
◦ Ramificações atendem usuários enquanto
estiverem conectados
7
8. 23/10/2013
Como a ramificação fica no sistema enquanto
o usuário estiver conectado, ela ocupa o
espaço de memória mesmo que o cliente não
requisite nenhuma operação do servidor.
Ramificações Dinâmicas:
Criadas e destruídas de acordo com as
necessidades.
Exemplo: Servidores de arquivos
◦ Cada vez que um cliente solicita uma operação, o
servidor cria uma ramificação
que ficará
responsável por determinada tarefa (leitura/escrita)
e terminado sua execução o controle volta
novamente ao processo que a criou.
8
9. 23/10/2013
◦ Ex: se forem feitas várias operações de leitura,
serão geradas várias ramificações do processo
responsável pela operação de leitura.
É importante ressaltar novamente que essas
ramificações (threads) serão executadas
“independentes” uma das outras, e serão
extintas assim que o serviço para qual foram
criadas, também termine.
Conclusão
A utilização do mecanismos de ramificações
permite que a memória seja otimizada e
também reaproveitada assim que essas
terminem sua execução, levando a uma
redução considerável no custo do sistema.
9