Threads e Escalonamento

Threads

Como mencionado anteriormente, uma thread pertence a um único processo, entretanto, um processo pode conter várias threads. Dessa forma, um processo é uma entidade passiva até que contenha, ao menos, uma thread.

Todas as threads de um processo compartilham seu espaço de endereçamento e os recursos a esse alocados. Mas elas podem também ter recursos privados. Um desses recursos é uma porta de comunicação chamada "thread port", que é análoga à porta de processo, pois serve como ponto de acesso da thread às funções do sistema.

Quem gerencia as threads é o kernel do Mach, portanto estruturas especiais de controle devem estar contidas dentro do mesmo. Em um sistema com uma única CPU, a execução das threads é "timeshared", entretanto, em sistemas multiprocessados, várias threads podem estar executando ao mesmo tempo. Assim, o sistema deve prover mecanismos de sincronização e exclusão mutua necessários em sistemas com essas características.

Escalonamento

O sistema de escalonamento do Mach foi bastante influenciado pela sua característica de rodar em sistemas multiprocessados. Assim, pode-se assumir um sistema uniprocessado como um caso especial desse último, onde o numero de CPUs é igual a 1.

As CPUs em um multiprocessador podem ser associadas a um "conjunto de processadores" por software. Assim, cada CPU pertence a um único conjunto. Da mesma forma, threads também podem ser associadas a grupos de processadores por software.

Assim, cada conjunto de processadores possui um conjunto de CPUs e outro de threads necessitando processamento. Logo, o trabalho do escalonador é atribuir threads a CPUs de uma maneira eficiente. Essa estrutura também dá grande poder aos processos, que podem atribuir threads às CPUs de forma a distribuir o trabalho entre todos os processadores.

O escalonamento de threads no Mach é baseado em prioridades que são valores inteiros e variam de 0 a 31 ou 127, com 0 sendo a mais alta prioridade. Existem três prioridades associadas a cada thread:

• base priority: que é a prioridade que a thread pode ajustar por si só dentro de certos limites.

• lowest priority: que é a menor prioridade que a thread pode assumir.

• current priority: é usada (e ajustada pelo escalonador) em função do tempo de execução da thread e é usada para definir o escalonamento da thread.


Nenhum comentário:

Postar um comentário