título do resumo - Eventos da Unicentro

Propaganda
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
Download