Skip to content

arturbomtempo-dev/virtual-memory-page-replacement-simulator

Repository files navigation

Simulador de Substituição de Páginas de Memória Virtual

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.

Virtual Memory Paging Simulator



📋 Tabela de conteúdos

📝 Funcionalidades

  • 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)

🔄 Políticas de Substituição de Páginas

O simulador implementa as quatro políticas clássicas de substituição de páginas estudadas em Sistemas Operacionais:

FIFO (First-In, First-Out)

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.

RAND (Aleatório)

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.

LRU (Least Recently Used)

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.

MIN/OPT (Ótima de Belady)

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.

📲 Demonstração da aplicação

O projeto é composto por duas partes principais: o gerador de casos de teste e o simulador de paginação.

Passo 1: Gerar casos de teste

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.

Passo 2: Preparar os arquivos de entrada

Após gerar os casos de teste, copie os arquivos .txt gerados para a pasta paging-sim/input/.

Passo 3: Executar o simulador

Abra o terminal e navegue até a pasta do projeto:

cd paging-sim

Execute o script apropriado para seu sistema operacional:

Linux/macOS:

./run.sh

Windows:

./run.bat

⚠️ Pré-requisito: Java JDK 21+ instalado na máquina.

Passo 4: Visualizar os resultados

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.

📁 Configuração e Execução da Aplicação

⚙️ Pré-requisitos

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.

🚀 Como Rodar a Aplicação Localmente

# 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/

📂 Estrutura do Projeto

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

💻 Tecnologias

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.

👨🏻‍💻 Autores



Artur Bomtempo

Eduarda Vieira

Desenvolvido por Artur Bomtempo e Eduarda Vieira 👋🏻. Entre em contato:

Artur Bomtempo:
Gmail Badge LinkedIn Badge Instagram Badge

Eduarda Vieira:
Gmail Badge LinkedIn Badge Instagram Badge

📜 Licença

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.

About

A virtual memory simulator implementing demand paging and four page replacement policies (FIFO, LRU, RAND, OPT). It processes input configurations and request sequences, outputting execution time, page faults, and swap usage.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors