Escalonamento
O VMS usa
o Escalonamento de Prioridades, isto é, o Sistema Operacional escalona para
execução o processo residente com prioridade mais alta.
Veja mais sobre Processos.
Inicialmente, o
VMS dá a processo uma dentre 32 prioridades possíveis, ou seja, a prioridade
base, que é armazenada no PCB (Bloco de Controle de Processo). À medida que o
processo executa, eventos podem fazer com que sua prioridade mude. Sua
prioridade corrente fica também armazenada no PCB. Normalmente, o VMS não
permite que a prioridade corrente diminua da prioridade
base.
A
estrutura de dados na figura acima mostra como o VMS escalona por prioridade.
Ele mantém um vetor de cabeçalhos, sendo um cabeçalho para cada prioridade
Cada cabeçalho aponta para o primeiro elemento de uma lista de PCBs. A
prioridade corrente de um processo determina a lista na qual seu PCB reside.
Isto é, se um processo tem uma prioridade corrente p, seu PCB está na lista
ligada começando no p-ésimo cabeçalho. Quando um processo muda a prioridade, o
VMS move seu PCB para uma lista diferente.
O Escalonamento é simples.
O VMS examina cada lista, começando pela mais alta prioridade, até encontrar
uma que não esteja vazia. Ele então escolhe o processo cujo PCB esteja no
início da lista. O processo começa então a ser executado. Ele é executado até
fazer uma solicitação pela qual deva esperar ou até sofrer uma preempção. De
qualquer modo, processo é escolhido a partir da lista não-vazia de prioridade
mais alta.
As razões para a preempção dependem do tipo de processo. O VMS define dois
tipos: processos com prioridade entre 16 e 31, que são processos em tempo
real, e processos com prioridade abaixo de 16 que são processos normais.
Processos em tempo real devem responder a eventos de tempo real,
conseqüentemente, devem ter uma alta prioridade. Processos normais incluem
processos de tempo compartilhados e processos em lote, pequenos atrasos não
são perigosos.
Um processo em tempo real
sofre preempção somente quando outro processo com uma prioridade mais alta
volta a entrar no estado pronto. Um processo em tempo real nunca deve esperar
por outro com uma prioridade mais baixa.
Um processo normal sofre
preempção pela mesma razão. No entanto, ele também executa em um modo de tempo
compartilhado, e é interrompido se seu quantum de tempo se acaba. Se não
houver processos em tempo real, aqueles com prioridade mais alta serão
executados em revezamento. Um processo executa somente quando não há outro com
prioridade mais alta.
Há outra diferença
importante entre processos normais e processos tempo real. As prioridades dos
processos em tempo real não mudam: sua prioridade corrente e sempre igual a
sua priororidade base.
A prioridade corrente para
um processo normal muda com o tempo.
Eventos como os listados a
seguir fazem com que a prioridade aumente ou diminua:
O quantum se acaba. A prioridade é diminuída em 1, e o PCB é colocado no
fim da próxima lista mais baixa.
Término de E/S. A prioridade é aumentada em 2.
Um recurso requisitado torna-se disponível. A prioridade é aumentada em
2.
Saída do terminal está completa. A prioridade é aumentada em
4.
Entrada do terminal está completa. A prioridade é aumentada em
6.
Processo é criado. A prioridade é aumentada em 6.
No entanto, a prioridade
nunca pode cair abaixo da prioridade, base nem exceder 15. (Esse último caso
transformaria um processo normal em um processo em tempo real).
Em virtude desses eventos,
processos altamente interativos obtêm as prioridades mais altas, enquanto os
processos com uso intensivo da CPU obtêm as prioridades mais baixas. O sistema é
sensível a mudanças no comportamento do processo. Processos com uso intensivo da
CPU que começam a apresentar mais operações de E/S aumentam em prioridade.
Processos com uso intensivo de E/S que começam a apresentar computações
intensivas decrescem em prioridade.