UM ESTUDO SOBRE O ESCALONAMENTO DE PROCESSOS NO KERNEL LINUX Luiz Antonio Carraro (IC Voluntária/UNICENTRO), Diego Gadens dos Santos (IC Voluntária/UNICENTRO), Gisane Aparecida Michelon(Orientadora), e-mail: [email protected]. Universidade Estadual do Centro-Oeste/Setor de Ciências Exatas e Tecnologia Palavras-chave: escalonamento, algoritmo, kernel, linux. Resumo O escalonamento de recursos computacionais é uma tarefa extremamente importante em um sistema operacional. Seu objetivo é fornecer agilidade na execução de tarefas com maiores prioridades, organização de filas de execução, e total transparência para o usuário. Este trabalho apresenta um estudo sobre o funcionamento do escalonador presente no Kernel Linux em suas versões mais atuais. Introdução O Kernel é considerado o núcleo do sistema operacional que além de gerenciar os recursos disponíveis no sistema, é responsável também em abstrair a interface do hardware afim de permitir que programas (processos) utilizem recursos concorrentemente com segurança e padronização. Dentre todas as atividades que envolvem o funcionamento básico de um Kernel, uma que pode ser considerada muito importante é a tarefa de escalonamento. Para que a CPU não permaneça ociosa por um grande período de tempo e para permitir uma maior interatividade do usuário com o sistema, o escalonador utiliza técnicas para que os processos alternem sua execução no processador de forma eficiente [Silberschatz, 2005]. O Kernel Linux foi inicialmente desenvolvido por Linus Torvalds e hoje é mantido por diversos programadores voluntários espalhados pelo mundo inteiro. As responsabilidades do Kernel Linux são muitas, porém neste trabalho será abordada uma das atividade mais importantes: o escalonamento de processos. Materiais e Métodos O objetivo deste trabalho é desenvolver um estudo sobre as atuais técnicas de escalonamento presentes nas últimas versões do Kernel Linux. Para a obtenção dos dados, uma pesquisa investigativa foi realizada em busca de informações para um maior entendimento de como está organizada a Anais da SIEPE – Semana de Integração Ensino, Pesquisa e Extensão 26 a 30 de outubro de 2009 gerência de processos no Kernel Linux, mais especificamente nas versões 2.6. Funcionamento básico de um escalonador Escalonador é o programa encarregado de agendar as tarefas que serão executadas pelo sistema operacional. A figura 1 demonstra o funcionamento básico de um escalonador através de um diagrama de estados. O escalonador deverá, baseado nas suas implementação, selecionar um processo no estado “pronto” para passar para o estado “Executando”, que no caso, implica na utilização do recurso processador [Silberschatz, 2003]. Figura 1 – Diagrama de estados demonstrando a funcionalidade básica de um escalonador [Sistemas Operacionais, 2009] O escalonador do Kernel Linux Em dezembro do ano de 2003, a versão 2.6 do Kernel Linux tornou-se publicamente disponível, e a sua característica mais marcante era um algoritmo de escalonamento totalmente novo. Esta nova versão do Kernel contém um escalonador com uma mudança significativa em sua estrutura, cujo objetivo é melhorar a sua interatividade [Love, 2004]. O algoritmo resultante desta mudança se assemelha a uma fila de prioridades, porém o seu tratamento é mais complexo que o modelo normal. Dessa forma, o algoritmo sofreu também uma vasta quantidade de otimizações afim de tratar situações especiais com segurança, causando um aumento na sua complexidade final. Alguns contribuintes identificaram alguns objetivos principais deste novo escalonador [Love, 2003] [Kolivas, 2003]: • • • • Complexidade linear na escolha do próximo processo a executar. Uma resposta imediata a processos interativos, mesmo com uma carga considerável no sistema. Melhoria na prevenção de inanição (espera indefinida) e competição pelos recursos. Escalonamento para multiprocessamento simétrico (SMP) Anais da SIEPE – Semana de Integração Ensino, Pesquisa e Extensão 26 a 30 de outubro de 2009 • Manutenção do bom desempenho no caso comum de 1-2 processos. A estrutura central do escalonador é uma fila de execução, que contém todos os processos que estão prontos para executar. Os processos são divididos em dois vetores que os classificam em ativos ou expirados. Basicamente, quando um processo no vetor ativo utiliza a sua fatia de tempo, ele ficará no vetor de expirados até que todos os outros processos ativos tenham feito o mesmo. Após isso, os dois vetores serão invertidos e o vetor de expirados tornar-se-á o vetor ativo [Love, 2004]. Um processo é executado por um bloco de tempo denominado fatia de tempo. O escalonador atribui fatias de tempo baseado em prioridade estática (prioridades que não são alteradas em tempo de execução), dando a processos de alta prioridade fatias maiores, e fatias menores a tarefas de baixa prioridade. Um processo não deveria utilizar toda a sua fatia de tempo uma só vez, já que poderia ser bloqueada ou ser selecionada antes dela terminar, mas eventualmente ela consome todo o montante. Quando isso acontece, o processo é geralmente colocado no vetor de expirados com uma nova fatia de tempo e prioridade recalculada [Love, 2003]. Vários casos especiais mudam um processo para tarefa interativa. Uma tarefa interativa recebe ao mesmo tempo fatia como outros na mesma prioridade estática, mas a fatia é dividida em pequenos pedaços. Quando termina uma fatia, a tarefa entrará em disputa pelo recurso com outras de mesmo nível prioritário. Desta forma serão executados com maior freqüência tarefas interativas de mesma prioridade. Além disso, uma tarefa interativa que termina toda a sua fatia de tempo ainda não expira. Ela recebe uma nova fatia tempo e permanece no vetor ativo, a menos que o escalonador tenha detectado que o vetor de expirados está em inanição ou contém uma tarefa com prioridade mais elevada do que a atual [Love, 2003] [Kolivas, 2003]. Nos escalonados Kernel Linux 2.6, a interatividade é classificada de forma booleana. Cada tarefa precisa ter uma prioridade bônus dinâmica para ser qualificada como interativa, dessa forma, é difícil para processos de baixa prioridade ser qualificados como interativos, bem como para os processos de alta prioridade não o serem [Love, 2004] . Resultados e Discussão Com este trabalho, foi possível identificar através de pesquisas, características que demonstram que o Kernel Linux sofreu diversas modificações em suas versões mais recentes. As suas modificações foram feitas em virtude de deficiências previamente identificadas por colaboradores e contribuintes da comunidade. Em versões anteriores à 2.6, o escalonador do Kernel Linux executava uma busca linear em uma lista global de processos para definir qual processo seria executado. A partir do Kernel 2.6, essa política foi Anais da SIEPE – Semana de Integração Ensino, Pesquisa e Extensão 26 a 30 de outubro de 2009 modificada, e um algoritmo de complexidade constante (O(1)) foi adotado. Como resultado das modificações obteve-se maior qualidade no tratamento de tarefas interativas, bem como melhor tempo de resposta. Conclusões Neste trabalho foi apresentada uma descrição sobre o funcionamento geral do escalonador de processos presente no Kernel Linux em versões a partir de 2.6. Foram evidenciados quais eram alguns dos objetivos principais envolvendo as alterações no algoritmo de escalonamento das versões anteriores para a versão 2.6. Dentre os objetivos das alterações, esperavase uma melhor atuação do escalonador frente a processos interativos. Através das pesquisas realizadas foi possível identificar que tal objetivo foi atingido com uma mudança na estrutura do algoritmo, que o atribuiu uma semelhança a uma fila de prioridades. É importante citar que com este trabalho um dos objetivos deste projeto de pesquisa foi atingido. Foram desenvolvidas pesquisas sobre o funcionamento do escalonador no núcleo do sistema operacional Linux, e os conhecimentos sobre os assuntos que o envolvem foram aprofundados. Agradecimentos Agradecemos a toda a comunidade Linux e também a de Software Livre, pois graças a tais pessoas é que foi possível reunir materiais para o desenvolvimento do presente trabalho. Agradecemos também a Universidade Estadual do Centro-Oeste pela oportunidade de participar da Semana de Integração Ensino, Pesquisa e Extensão. Referências Silberschatz, Avi; Galvin, Peter B.; Gagne, Greg. Operating system concepts. 7.ed. Hoboken: Wiley. 2005. Kolivas, C., Interactivity in the Linux 2.6 Scheduler. Disponível em <kerneltrap.org/node/view/780>. Acessado em 25 de maio de 2009. Love, R. M. Linux Kernel Development, Sams Publishing, 2004. Silberschatz, Avi; Galvin, Peter B; Gagne, Greg. Operating System Concepts, 7 ed., John Wiley & Sons, 2003. Love, R. M. Introducing the 2.6 kernel. Linux Journal, pages 52–57, 2003. Sistemas Operativos; Disponível em <www15.brinkster.com/sharkdj/sistemasoperativos/Detalhe_E.html>. Acessado em 22 de agosto de 2009. Anais da SIEPE – Semana de Integração Ensino, Pesquisa e Extensão 26 a 30 de outubro de 2009