Desenvolvimento de um Simulador de Gerenciamento de Memória Ricardo Mendes do Nascimento. Ciência da Computação Universidade Regional Integrada do Alto Uruguai e das Missões (URI) Santo Ângelo RS Brasil ricna.net@hotmail.com Resumo. Este artigo discute o projeto e implementação de simulador um gerente de memória na forma de trabalho para a disciplina de Sistemas Operacionais I. 1. Introdução Dentre as tarefas atribuídas aos sistemas operacionais (SO), o gerenciamento de memória pode ser visto como uma das mais importantes, uma vez que esta tarefa tem relação direta com o desempenho do sistema e a execução das demais tarefas do SO. Neste trabalho é realizado o desenvolvimento de um simulador de gerenciamento de memória, ele está organizado da maneira como segue; a seção 2 explica conceitos sobre a memória virtual, a seção 3 trata das exigências do trabalho, na seção 4 é descrita a implementação do simulador, conclusões são expostas na seção 5 e as referências são encontradas na seção 6. 2. Memória virtual A implementação de memória virtual oferece benefícios e facilidades para os usuários do sistema operacional, dentre elas destacam-se a disponibilidade aumentada de memória e facilitação no uso de memória por processos em tempo de execução e compilação. Pode-se dizer que a memória virtual é uma abstração dos dispositivos de memória concedida pelo SO para os processos através da aplicação de um conceito chamado paginação, a paginação (divisão do espaço de memória em páginas). Para atingir seus objetivos, a memória virtual faz uso de uma tabela de páginas de processos, estas tabelas são usadas para fornecer uma visão de que o processo tem toda a área de memória disponível somente para ele, estas tabelas são associadas a endereços ta tabela de memória virtual, que por sua vez mapeiam endereços na memória física da maquina. Esta associação entre os endereços mapeados pela tabela de páginas de processos e endereços da memória física se dá por meio de relocação (soma de endereços base + deslocamento).
Para aumentar o espaço de armazenamento da memória, foi desenvolvido um mecanismo conhecido como SWAP, ele consiste no uso de mais uma tabela de páginas, entretanto o endereço mapeado na área de SWAP faz referência a uma unidade de armazenamento de grande capacidade, onde são guardados os dados do processo (área de SWAP). Através do mapeamento de páginas, a memória virtual pode referenciar tanto dados armazenados na memória física (volátil) quanto nas unidades de armazenamento, isto possibilita que os dados dos processos que não estão sendo utilizados em um determinado momento sejam guardados em unidades de armazenamento, disponibilizando mais memória disponível para outros processos, otimizando o uso da memória pelo SO. 3. O trabalho O trabalho solicitado consistia em um simulador de gerenciamento de memória, este sistema deveria permitir a adição (inclusão), remoção (exclusão) e execução de processos em uma memória composta por tabela de páginas de processos, tabela de páginas de memória virtual e uma área de SWAP. O tamanho da memória virtual era de 16 páginas de 4 bytes cada totalizando 64 bytes, a memória física deveria ser de 32 bytes (8 páginas de 4 bytes). 4. Implementação O software foi implementado utilizando orientação a objeto e foi estruturado com as seguintes classes apresentadas no diagrama abaixo. Figura 1. Diagrama de classes.
4.1 Classe Página A classe Pagina simplesmente é o modelo para a criação de páginas dentro da memória física e swap. Possui um vetor de caracteres que simboliza cada byte da página. Figura 2. Classe Página 4.2. Classe Swap A área de swap é representada por um objeto da classe Swap. Esta possui um vetor de páginas do tamanho especificado na constante NR_PAGINAS. Figura 3. Classe Swap. 4.3. Classe Fisica Assim como a Swap, a classe Física possui simplesmente um vetor de páginas, que neste caso é a metade do tamanho do objeto swap. O método temespaco é consultado pelo gerenciador, quando for incluído um processo novo. Figura 4. Classe Fisica.
4.4. Classe Virtual Esta classe simboliza a tabela de páginas utilizada pelo gerente de memória. Possui um vetor endfisico que armazena o endereço da página para qual está apontando. Cada índice do vetor simboliza o endereço desta página virtual. Da mesma forma os vetores booleanos valido e ocupado, indicam o estado do endereço virtual. Figura 5. Classe Virtual. 4.5. Classe Processo Os processos são simbolizados por objetos desta classe. Cada objeto possui um tamanho em bytes, um identificador ( id ), um nome e um vetor (endvirtual)com o endereço das páginas que este esta utilizando na tabela de paginas. Também possui atributo info do tipo char, que simboliza a informação que este manipula e grava na memória. Figura 6. Classe Processo.
4.6. Classe Gerenciador Esta é a principal classe do software, nela estão contidos os objetos swap (simbolizando a área de swap), virtual (tabela de páginas), física (memória RAM) e um vetor dinâmico de objetos da classe Processo. O método incluirprocesso recebe como parâmetro um objeto do tipo Processo. Se o tamanho deste não for maior que o tamanho da memória física, se ainda existir espaço suficiente na tabela de páginas, não existir nenhum outro processo com o mesmo identificador, então este será cadastrado na tabela de páginas através dão método cadastrarprocesso. Neste método são alocadas as páginas necessárias na área de swap para este processo, e estas são mapeadas na tabela de páginas. As tabelas serão colocadas no estado ocupado no objeto virtual do gerenciador. O endereço destas páginas serão colocados no vetor endvirtual do objeto processo. Com isso o processo foi incluído com sucesso. Figura 7. Classe Gerenciador.
Para colocar o processo em execução, é utilizado o método rodarprocesso. Este método recebe o identificador do processo que se quer executar. O gerenciador irá verificar se este processo já possui algumas páginas validas, indicando que estas já estão na memória física. As páginas do processo, mapeadas na swap, que não estiverem na física, serão colocadas no primeiro endereço disponível (que não possui nenhum mapeamento válido). Se não existirem páginas disponíveis o suficiente, então o gerenciador irá retirar o mapeamento válido de algum outro processo para que este novo possa ser executado. Ao final do procedimento, todos os endereços virtuais estarão mapeando um endereço físico e as informações do processo serão copiadas da swap para o memória física. A exclusão do processo é simples também. O gerenciador recebe o identificador do processo a ser excluído, libera todas as páginas que estavam sendo referenciadas por este tanto na swap como na memória física, e libera espaço na tabela de páginas (virtual). Feito isso o processo é então excluído do vetor de processo do gerenciador. 4.7. Classe Interface Classe utilizada para interação com o usuário. Nesta é executada o método main que inicia o software, instanciando um objeto gerenciador e desencadeando a instância de todos os objetos necessários. O objeto interface somente mostra para o usuário os atributos de todos os objetos, a cada evento de inclusão, execução ou exclusão de processo. Figura 8. Classe Interface. 5. Conclusões O uso de paginação permite a redução de fragmentação interna e externa da memória, isto quer dizer que o desperdício de memória é reduzido a um nível aceitável. A combinação de uso de paginação e SWAP em ambientes multiprogramados possibilita o uso máximo dos recursos de memória disponíveis para a manipulação pelo SO, aumentando significativamente as possibilidades de uso de diversos processos ao mesmo tempo.
6. Referências Tanembaum, Andrew S. Sistemas operacionais modernos / Andrew S. Tanembaum; tradução Ronaldo A.L. Gonçalves, Lu s A. Consularo; revisão técnica Regina Borges de Araújo. 2 ed. São Paulo : Prentice Hall, 2003. Notas de aulas de Sistemas Operacionais I Prof. Dr. Bráulio Adriano Mello.