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.