Introdução: Como outros sistemas operacionais interativos conhecidos, Linux simula o efeito de execução simultânea de múltiplos processos trocando a execução de um processo para outro em um curtíssimo intervalo de tempo. É nesse contexto que se insere seu escalonador de processos - responsável direto pela escolha de que processo será executado e quando - e seu esquema de agendamento. Este é o objeto de estudo desse trabalho. Agendamento: Para projetar um algoritmo de agendamento, é necessário ter alguma idéia do que um bom algoritmo deveria fazer. Dentre os principais objetivos, é importante destacar: - Alta taxa de término de processos em "background"; - Garantir que todos os processos tenham a chance de serem executados; Conciliar as necessidades de processos de baixa e alta prioridade. Rapidez de resposta ao usuário. A partir do exposto acima, vemos que esses objetivos são conflitantes, o que torna o projeto do algoritmo de agendamento especialmente difícil. O conjunto de regras usadas para determinar quando e como um processo será selecionado para execução é chamado de Política de Agendamento. O algoritmo de agendamento do Linux é preemptivo, isto é, ele seleciona um processo e o executa por um intervalo máximo de tempo. Se o processo ainda estiver executando ao fim deste período, ele é suspenso e o algoritmo seleciona outro processo para ser executado. O intervalo de tempo supracitado é chamado quantum. É válido lembrar que um processador só pode executar um único processo em um dado instante. A duração do quantum é um fator crítico para a performance do sistema. Ela não deveria ser muito longa ou muito curta. Se a duração do quantum for muito curta, o atraso provocado pela troca constante de processos se torna excessivamente grande. Suponhamos, por exemplo, que uma troca de processos leva 10 ms. Se a duração do quantum é também 10 ms, então pelo menos 50% do uso do processador será desperdiçado com troca de processos. Se, por outro lado, a duração do quantum for muito longa, o efeito de processamento concorrente irá desaparecer. O quantum adotado pelo algoritmo de agendamento do UML é de aproximadamente, XXX, o que parece ser um valor adequado às restrições expostas. A política de agendamento também é baseada na classificação de processos de acordo com sua prioridade, isto é, cada processo é associado a um valor que denota o quão apropriado a ser executado ele é. Em Linux, essa prioridade é dinâmica. O escalonador acompanha o que os processos estão fazendo e ajusta suas prioridades periodicamente. Assim sendo, se um processo entra no estado "TASK_RUNNING", o kernel checa se sua prioridade é maior do que a do processo sendo atualmente executado. Se for, a execução do processo atual é interrompida e o escalonador é invocado para selecionar outro processo para ser executado (geralmente, este será o processo que acabou de se tornar executável). Faremos agora uma breve descrição de alguns conceitos importantes para a compreensão do algoritmo de agendamento do kernel do UML. Posteriormente, descreveremos como alterar a política de agendamento deste algoritmo, de forma a favorecer um usuário específico.