Escolar Documentos
Profissional Documentos
Cultura Documentos
Linux
Diego Garcia1, Eduardo Menna da Silva2
1
Acadêmico do Curso de Ciência da Computação – Unidade Acadêmica de Ciências,
Engenharias e Tecnologias – Universidade do Extremo Sul Catarinense (UNESC) –
Criciúma, SC - Brasil
2
Professor do Curso de Ciência da Computação – Unidade Acadêmica de Ciências,
Engenharias e Tecnologias – Universidade do Extremo Sul Catarinense (UNESC) –
Criciúma, SC – Brasil
diegogarcia1988@gmail.com, edumenna@gmail.com
3. Memória Virtual
No Linux, o responsável pela manutenção do espaço de endereçamento visível para cada
processo é o sistema de memória virtual. A criação das páginas de memória virtual sob
demanda e a gerência do carregamento dessas páginas para o disco, ou o
descarregamento de volta para o disco, é responsabilidade desse sistema.
Conforme Silberschatz (2000) descreve, o gerente de memória virtual mantém
duas perspectivas do espaço de endereçamento de um processo. A primeira, é a visão
lógica, que descreve as instruções recebidas pelo sistema de memória virtual referentes
ao layout do espaço de endereçamento, que consiste em um conjunto de regiões não-
superpostas, com cada uma representando um subconjunto contínuo e alinhado por
página do espaço de endereçamento e sendo descrita internamente por uma única
estrutura vm_area_struct1, que define as propriedades da região.
A segunda visão é a visão física de cada espaço de endereçamento, armazenada
nas tabelas de páginas do hardware para o processo e é gerenciada por um conjunto de
rotinas. Cada vm_area_struct na descrição do espaço de endereçamento contém um
campo que aponta para uma tabela de funções que implementam as funções básicas de
gerência de página para qualquer região dada da memória virtual.
Existem diferentes tipos de regiões de memória virtual no Linux e as
propriedades que as caracterizam são o tipo de armazenamento secundário associado e
sua reação a escritas. O tipo de armazenamento secundário associado às regiões,
descreve a origem das páginas da região, sendo que a maior parte das regiões possuem
um ou nenhum arquivo de apoio como armazenamento secundário.
Uma região para o espaço de endereçamento de um processo pode ser privada ou
compartilhada. Quando um processo tentar escrever em uma região privada de outro
processo, o paginador efetuará a operação de copy-on-write2, que copia o conteúdo da
região para uma outra região nova e efetua as alterações na região recém-criada,
preservando a região privada. Se a escrita for feita em uma região compartilhada, o
objeto mapeado para tal região é atualizado, de modo que as alterações ficam visíveis de
imediato para todos os processos que estiverem mapeando tal objeto.
A criação de um novo espaço de endereçamento pelo kernel, conforme
Silberschatz (2000) descreve, ocorre em duas situações: na execução, por um processo,
de um novo programa através da chamada ao sistema exec, no qual o processo recebe
um espaço de endereçamento novo, completamente vazio, cabendo às rotinas
carregarem o programa para ocupar esse espaço, ou pela criação de um novo processo
via fork, que implica na criação de uma cópia integral do espaço de endereçamento
virtual do processo existente.
1 Vm_area_struct é uma estrutura de dados utilizada para descrever uma área da memória virtual para um processo.
2 Copy-on-write é a operação onde uma região privada é copiada para uma nova região a fim de preservar essa
região contra escritas a partir de outro processo (SILBERSCHATZ, 2000).
finalizado, o processo descarregado pode então, ser carregado novamente para a
memória principal.
Segundo Silberschatz (2000), quando o escalonador de CPU executar um
processo, ele chama o dispatcher3, que verifica se o próximo processo na fila está na
memória. Se o processo não estiver na memória e não houver região de memória livre, o
dispatcher descarrega um processo que está na memória (swap out) e carrega o processo
desejado em seu lugar (swap in), recarregando, então, os registradores de forma usual e
transferindo o controle para o processo selecionado.
No Linux, o processo de paginação pode ser dividido em duas seções: o
algoritmo de políticas, primeiramente, que decide que páginas são gravadas no disco e
quando esse processo será feito, por meio de uma versão modificada do algoritmo de
relógio, que emprega um relógio de passagens múltiplas.
A segunda seção, é o mecanismo de paginação, que suporta tanto partições e
dispositivos dedicados, quanto arquivos, sendo que no último, o processo pode ser mais
lento devido ao custo adicional provocado pelo sistema de arquivos. O algoritmo
utilizado para a gravação das páginas é o algoritmo next-fit, para tentar gravar páginas
em carreiras contínuas de blocos de disco, visando um melhor desempenho.
4 Considerações Finais
Com o desenvolvimento desse artigo pôde-se compreender melhor o funcionamento do
sistema de gerência de memória dos sistemas operacionais, e sua aplicação prática no
Linux. Foi possível também compreender as técnicas usadas para permitir que o sistema
possa executar diversas tarefas mesmo quando a memória principal não possui
capacidade suficiente para isso, como o processo de swapping que representa um
avanço nos sistemas Linux frente a outros sistemas operacionais, pois este efetua a
movimentação de páginas individuais ao invés de processos inteiros como os sistemas
UNIX mais antigos
Outra melhoria que o Linux possui na técnica de swap é quanto a sua utilização.
Enquanto os sistemas Windows efetuam swapping mesmo quando existe memória
disponível, no Linux, o swapping é feito somente quando necessário, aumentando o
desempenho do sistema, pois reduz a quantidade de operações de I/O de disco.
5 Referências
Silberschatz, Abraham; Galvin, Peter; Gagne, Greg. (2000), Sistemas Operacionais:
Conceitos e Aplicações. Tradução de Adriana Rieche. Rio de Janeiro: Editora
Campus.
Stallings, William. (2004), Operating Systems Internals and Design Principles, Prentice
Hall, 4th edition.
Tanenbaum, Andrew S. (2001), Modern Operating Systems. 2nd edition, Upper Saddle
River, N.J.: Prentice Hall.
3 Dispatcher, também chamado de agendador de curto prazo, conforme Stallings (2004) descreve, decide qual dos
processos na memória, prontos para a execução, será executado pelo processador.