Skip to content

Latest commit

 

History

12 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Simulador de Gerenciamento de Memória Virtual

Trabalho II da disciplina de Sistemas Operacionais. Simula os algoritmos de substituição de página Ótimo e FIFO, calculando o número de faltas de página (page faults) para uma sequência de acessos a memória, dada uma memória física de tamanho limitado.

Requisitos

  • Python 3.8 ou superior
  • Biblioteca zstandard — necessária apenas para arquivos .zst:
pip install zstandard

Como executar

python3 main.py <arquivo_de_entrada> <tamanho_memoria> [--pagina TAMANHO_BYTES]

Argumentos:

  • arquivo_de_entrada: arquivo com a sequência de acessos a memória (um endereço hexadecimal por linha, ex: 0x60a1c35d8209). Aceita .txt (texto simples) ou .zst (comprimido com Zstandard, lido em streaming — sem extração em disco).
  • tamanho_memoria: tamanho da memória física simulada. Aceita sufixos KB, MB, GB (ex: 8MB, 1GB, 32KB, 8KB)
  • --pagina (opcional): tamanho da página em bytes (padrão: 4096 = 4KB)

Exemplos

# Arquivo comprimido pequeno (demo)
python3 main.py entradas_txt/acessos-Demo0.txt.zst 8MB

# Arquivo comprimido grande (leitura em streaming, sem extrair para disco)
python3 main.py entradas_txt/acessos-A0.txt.zst 8MB

# Arquivo de texto simples com tamanho de página personalizado
python3 main.py entradas_txt/teste_grande.txt 1MB --pagina 8192

Saída esperada:

RELATÓRIO:
A memória física comporta 2048 páginas.
Há 10 acessos no arquivo.
Há 3 páginas distintas no arquivo.
Estimativa do tamanho da tabela de páginas (1 nível): ... bytes (... KB).
Com o algoritmo ÓTIMO ocorrem N faltas de página.
Com o algoritmo FIFO ocorrem M faltas de página,
Desempenho do FIFO em relação ao ÓTIMO: X.XX%

Deseja listar o número de carregamentos (s/n)?

Ao responder s, é exibida uma tabela com o número de carregamentos de cada página para os dois algoritmos.

Arquivos de entrada disponíveis

Os arquivos de entrada ficam no diretório entradas_txt/:

Arquivo Formato Descrição
acessos-Demo0.txt.zst .zst Arquivo de demonstração pequeno
acessos-A0.txt.zst .zst Conjunto de acessos A0
teste_grande.txt .txt Arquivo de texto simples para testes

Nota: arquivos .zst não precisam ser extraídos — o simulador os lê em streaming diretamente.

Sobre os algoritmos implementados

  • Ótimo: a cada falta de página, remove a página que será usada mais tarde no futuro entre as que estão na memória (ou que nunca mais será usada). É o algoritmo ideal teórico — impossível de implementar em um sistema real, pois exigiria conhecer o futuro, mas serve como referência de comparação. Implementado com pré-processamento de ocorrências futuras e seleção via max() sobre um dicionário de próximos usos.
  • FIFO (First-In, First-Out): a cada falta de página, remove a página que está há mais tempo na memória.

Requisitos extras implementados

  1. Listagem de carregamentos por página: mostra quantas vezes cada página precisou ser carregada na memória, para cada algoritmo.
  2. Estimativa do tamanho da tabela de páginas (1 nível): calcula o tamanho que uma tabela de páginas de 1 nível ocuparia, considerando um espaço de endereçamento de 48 bits e 8 bytes por entrada da tabela (valores ajustáveis em main.py, constantes BITS_ENDERECO_PADRAO e TAMANHO_ENTRADA_TABELA).

Estrutura do projeto

.
├── main.py              # ponto de entrada (CLI), orquestra a simulação e o relatório
├── parser.py            # leitura do arquivo de entrada (.txt ou .zst) e conversão de endereços em páginas
├── simulator.py         # implementação dos algoritmos Ótimo e FIFO
├── utils.py             # parsing de tamanhos (8MB, 1GB...) e formatação de saída
└── entradas_txt/        # arquivos de entrada (.txt e .zst)
    ├── acessos-Demo0.txt.zst
    ├── acessos-A0.txt.zst
    └── teste_grande.txt

Notas de implementação

  • Cada endereço de memória é convertido em número de página através da divisão inteira endereco // tamanho_da_pagina.
  • O algoritmo Ótimo usa pré-processamento (índice de ocorrências futuras de cada página) e seleciona a vítima com max() sobre um dicionário (prox_uso_memoria) que rastreia o próximo uso de cada página presente na memória.
  • Os arquivos .zst são lidos via zstandard.ZstdDecompressor.stream_reader com max_window_size=2 GB, permitindo a leitura de streams grandes sem extrair o conteúdo para o disco.

About

Simulador de Gerenciamento de Memória Virtual que analisa e compara o desempenho dos algoritmos de substituição de páginas Ótimo e FIFO, processando grandes volumes de dados via streaming comprimido (Zstandard). Trabalho desenvolvido para disciplina de Sistemas Operacionais.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Contributors

Languages