Skip to content

Este projeto implementa uma solução para o clássico problema de sincronização de threads conhecido como Problema dos Leitores e Escritores.

Notifications You must be signed in to change notification settings

mercuryVM/EP-SO

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

EP - Sistemas Operacionais

Problema dos Leitores e Escritores

Descrição do Problema

Este projeto implementa uma solução para o clássico problema de sincronização de threads conhecido como Problema dos Leitores e Escritores. O problema envolve controlar o acesso concorrente a um recurso compartilhado (neste caso, uma lista de palavras) por múltiplas threads que podem ser leitores ou escritores.

Regras de Sincronização:

  • Múltiplos leitores podem acessar o recurso simultaneamente
  • Apenas um escritor pode acessar o recurso por vez
  • Leitores e escritores não podem acessar o recurso ao mesmo tempo

Estrutura do Projeto

EP-SO/
├── Main.java                    # Classe principal com execução dos testes
├── bd.txt                       # Base de dados de palavras
├── Elements/
│   ├── Element.java            # Classe abstrata base
│   ├── Reader.java             # Implementação de leitores
│   └── Writer.java             # Implementação de escritores
├── Structure/
│   └── Words.java              # Estrutura compartilhada com sincronização
└── Outputs/
    ├── runSimultaneo.txt       # Resultados com leitura simultânea
    ├── runExclusivo.txt        # Resultados com acesso exclusivo
    └── plots.py                # Script para visualização dos resultados

Implementações

O projeto compara duas abordagens:

1. Modo Simultâneo (runSimultaneo)

Permite que múltiplos leitores acessem o recurso ao mesmo tempo:

  • Leitores incrementam um contador (readerCount)
  • Primeiro leitor bloqueia escritores
  • Último leitor libera escritores
  • Escritores têm acesso exclusivo

2. Modo Exclusivo (runExclusivo)

Todos os acessos (leitura e escrita) são exclusivos:

  • Apenas uma thread acessa por vez
  • Simula mutex tradicional
  • Usado como baseline para comparação

Características da Implementação

  • 100 threads em cada teste (proporção variável entre leitores/escritores)
  • 100 acessos por thread
  • 50 repetições para cada proporção (média dos tempos)
  • Sleep de 1ms após operações para simular processamento
  • Semáforos (java.util.concurrent.Semaphore) para sincronização

Como Executar

Pré-requisitos

  • Java JDK 8 ou superior

Compilação

javac Main.java

Execução

java Main

O programa executará automaticamente ambos os modos (simultâneo e exclusivo) em threads separadas.

Resultados

Os resultados são salvos em arquivos CSV no formato:

leitores,escritores,tempo_medio

Onde:

  • leitores: número de threads leitoras (0-100)
  • escritores: número de threads escritoras (0-100)
  • tempo_medio: tempo médio de execução em milissegundos

Análise de Desempenho

Para visualizar os resultados:

cd Outputs
python plots.py

O script gerará gráficos comparando o desempenho das duas abordagens sob diferentes proporções de leitores/escritores.

Conceitos de Sistemas Operacionais Aplicados

  • Threads e Concorrência: Criação e sincronização de múltiplas threads
  • Semáforos: Primitivas de sincronização para controle de acesso
  • Exclusão Mútua: Garantia de acesso exclusivo ao recurso crítico
  • Race Conditions: Prevenção de condições de corrida
  • Starvation: Considerações sobre inanição de threads
  • Deadlock: Prevenção através de ordem correta de aquisição de locks

Observações

  • O arquivo bd.txt contém o texto base usado como recurso compartilhado
  • A variável DIFFERENCE em Main.java controla o incremento nas proporções testadas (padrão: 1)
  • Cada teste embaralha as threads aleatoriamente antes da execução para evitar viés

Autores

Projeto desenvolvido como Exercício Programa da disciplina de Sistemas Operacionais.

About

Este projeto implementa uma solução para o clássico problema de sincronização de threads conhecido como Problema dos Leitores e Escritores.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 5