Este projeto foi desenvolvido como um simulador do sistema de gerenciamento de Memória Virtual utilizando Paginação por Demanda em um único processo. O foco principal é a simulação e comparação do desempenho de quatro políticas distintas de substituição de páginas (FIFO, RAND, LRU e MIN/OPT), contabilizando o número de Page Faults para cada cenário, bem como o tempo decorrido em cada processamento. Desenvolvido como trabalho prático acadêmico, o projeto oferece uma implementação completa com gerador automático de casos de teste e scripts de automação para compilação e execução.
- Sobre
- Tabela de conteúdos
- Funcionalidades
- Políticas de Substituição de Páginas
- Demonstração da aplicação
- Configuração e Execução da Aplicação
- Tecnologias
- Autores
- Licença
- Simulação de memória virtual com paginação por demanda
- Implementação de 4 políticas de substituição de páginas (FIFO, RAND, LRU, MIN/OPT)
- Cálculo automático de parâmetros derivados (tamanho da página, número de frames, tamanho do swap)
- Contabilização de page faults para cada política
- Medição do tempo de execução de cada simulação
- Rastreamento do estado do swap ao final de cada processamento
- Suporte a múltiplas sequências de requisições de páginas
- Gerador automático de casos de teste (pequenos, médios e grandes)
- Scripts de automação para compilação e execução (Windows e Linux/macOS)
O simulador implementa as quatro políticas clássicas de substituição de páginas estudadas em Sistemas Operacionais:
Substitui a página que está na memória há mais tempo, ou seja, a primeira página a entrar é a primeira a sair. É a política mais simples de implementar, utilizando uma fila para controlar a ordem de chegada das páginas.
Substitui um frame escolhido aleatoriamente da memória física. Embora não seja eficiente na prática, serve como baseline para comparação com outras políticas e é útil para análise estatística.
Substitui a página cujo último acesso ocorreu no tempo mais distante. Baseia-se no princípio da localidade temporal: páginas usadas recentemente tendem a ser usadas novamente em breve.
Substitui a página que não será utilizada pelo período mais longo no futuro. É uma política teórica que requer conhecimento prévio de toda a sequência de requisições, servindo como limite inferior para o número de page faults.
O projeto é composto por duas partes principais: o gerador de casos de teste e o simulador de paginação.
Dentro da pasta test-case-generator/ há um tutorial completo (README.md) explicando como executar o gerador de casos de teste. Este script Python permite criar arquivos de entrada com diferentes níveis de complexidade.
⚠️ Pré-requisito: Python 3.x instalado na máquina.
Após gerar os casos de teste, copie os arquivos .txt gerados para a pasta paging-sim/input/.
Abra o terminal e navegue até a pasta do projeto:
cd paging-simExecute o script apropriado para seu sistema operacional:
Linux/macOS:
./run.shWindows:
./run.bat
⚠️ Pré-requisito: Java JDK 21+ instalado na máquina.
Os resultados das simulações serão gerados na pasta paging-sim/output/, com um arquivo de saída correspondente para cada arquivo de entrada processado.
Antes de começar, você precisa ter as seguintes ferramentas instaladas na sua máquina:
- Git - Para clonar o repositório
- Java JDK 21+ - Para compilar e executar o simulador
- Python 3.x - Para executar o gerador de casos de teste
Também é recomendável utilizar um editor de código como o Visual Studio Code.
# Clone este repositório
$ git clone https://github.com/arturbomtempo-dev/virtual-memory-page-replacement-simulator.git
# Acesse a pasta do projeto
$ cd virtual-memory-page-replacement-simulator
# Gerar casos de teste (opcional - já existem exemplos na pasta input)
$ cd test-case-generator
$ python3 main.py -s 5 --min_req 50 --max_req 100 -p 32 > small.txt
# Voltar e executar o simulador
$ cd ../paging-sim
# Linux/macOS
$ ./run.sh
# Windows
$ ./run.bat
# Os resultados estarão disponíveis na pasta output/virtual-memory-page-replacement-simulator/
├── paging-sim/ # Simulador principal
│ ├── src/ # Código-fonte Java
│ │ ├── app/ # Aplicação principal
│ │ ├── model/ # Modelos de dados
│ │ ├── parser/ # Parser de entrada
│ │ ├── policy/ # Políticas de substituição
│ │ ├── validation/ # Validação de entrada
│ │ └── exception/ # Exceções personalizadas
│ ├── bin/ # Classes compiladas
│ ├── input/ # Arquivos de entrada
│ ├── output/ # Arquivos de saída
│ ├── run.sh # Script de execução (Linux/macOS)
│ └── run.bat # Script de execução (Windows)
│
└── test-case-generator/ # Gerador de casos de teste
├── main.py # Script principal
├── README.md # Documentação do gerador
├── small.txt # Exemplo de saída pequena
├── medium.txt # Exemplo de saída média
└── large.txt # Exemplo de saída grande
As seguintes ferramentas e linguagens foram utilizadas no desenvolvimento deste projeto:
- Java: Linguagem principal utilizada para implementar o simulador de memória virtual, incluindo as políticas de substituição de páginas, estruturas de dados e lógica de simulação.
- Python: Linguagem utilizada para desenvolver o gerador automático de casos de teste, permitindo criar entradas de diferentes tamanhos e complexidades.
- Shell Script (Bash): Script de automação para compilação e execução do projeto em sistemas Linux e macOS.
- Batch Script (CMD): Script de automação para compilação e execução do projeto em sistemas Windows.
Artur Bomtempo |
Eduarda Vieira |
|---|
Desenvolvido por Artur Bomtempo e Eduarda Vieira 👋🏻. Entre em contato:
Copyright (c) 2025 Artur Bomtempo Colen
Por meio deste, é concedida permissão, gratuitamente, a qualquer pessoa que obtenha uma cópia deste software e dos arquivos de documentação associados (o "Software"), para tratar no Software sem restrição, incluindo, sem limitação, os direitos de usar, copiar, modificar, mesclar, publicar, distribuir, sublicenciar e/ou vender cópias do Software, e permitir que pessoas a quem o Software seja fornecido o façam, sujeito às seguintes condições:
O aviso de copyright acima e este aviso de permissão devem ser incluídos em todas as cópias ou porções substanciais do Software.
O SOFTWARE É FORNECIDO "COMO ESTÁ", SEM GARANTIA DE QUALQUER NATUREZA, EXPRESSA OU IMPLÍCITA, INCLUINDO, MAS NÃO SE LIMITANDO ÀS GARANTIAS DE COMERCIALIZAÇÃO, ADEQUAÇÃO A UM FIM ESPECÍFICO E NÃO INFRAÇÃO. EM NENHUM CASO OS AUTORES OU TITULARES DOS DIREITOS AUTORAIS SERÃO RESPONSÁVEIS POR QUALQUER RECLAMAÇÃO, DANOS OU OUTRAS RESPONSABILIDADES, SEJA EM UMA AÇÃO DE CONTRATO, AGRAVO OU DE OUTRA FORMA, DECORRENTES DE, OU EM CONEXÃO COM O SOFTWARE OU O USO OU OUTRAS NEGOCIAÇÕES NO SOFTWARE.