Go backward to Mach: Princípios
Go up to Multithreading em Mach
Mach: Continuações
Problema:
- Cada thread tem pilha com pelo menos 4KB: overhead.
- Unix usa modelo de processos: cada thread tem uma pilha
e pode bloquear sem salvar a sua pilha
- Modelo de interrupts: uma única pilha do kernel, e o processo
interrompido tem que salvar o seu estado.
- Primeiro modelo é melhor quando processo tem muito estado. Se
tiver pouco estado, segundo é o melhor.
Mach usa continuações, uma função a executar quando o thread
bloqueia:
- Thread primeiro guarda algumas variáveis e devolve a sua pilha.
- Quando é reexecutado, usa variáveis e a continuação para
recuperar estado.
- Exige conhecimento da rotina que bloqueia e da continuação.
- Uteis quando há pouco estado (exemplo, no fim de page fault
handling enquanto espera pelo resultado de um read.
- Se kernel novo e antigo têm continuações kernel pode
transferir pilha directamente: evita TLB e cache misses.
- Se cliente chama mach_msg() e tem um servidor à
espera, cliente pode passar-lhe a pilha e bloquear com
mach_msg_continue(), que execute aimediatamente, e
depois devolve a pilha.
- Ideal para hot-spots (típicos em interface pequena, como num
micro-kernel).
vitor@cos.ufrj.br