Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 

Repository files navigation

ETAPA 1 – Simulação - Impasse do Delivery Em Pelotas, o aplicativo de entregas "Laranjal Foods" opera com uma regra rígida: cada restaurante possui sua própria moto personalizada (adesivada com a marca da lanchonete). Portanto, para realizar uma entrega do Restaurante X, o entregador precisa necessariamente pegar a Comida do Restaurante X e a Moto do Restaurante X.

A frota de entregadores é mista, composta por Veteranos (muito experientes) e Novatos (recém chegados).

O sistema de despacho do aplicativo tem um bug: ele ocasionalmente aloca dois entregadores simultaneamente para o mesmo restaurante quando a demanda está alta (force esse bug e após ocorrer, faça algo para resolver “durante a execução do simulador”).

O problema é que os entregadores possuem "rituais" diferentes de trabalho,o que gera travamentos no sistema:

Comportamento das Threads Tipo 1: O Entregador Veterano Ele prioriza a logística. Ele não quer pegar o peso da comida sem garantir que tem transporte.

  1. Escolhe (ou recebe) um restaurante alvo i.
  2. Bloqueia a Moto i.
  3. Simula o tempo de caminhada até o balcão (sleep).
  4. Tenta pegar o Pedido i.
  5. Se conseguir ambos, faz a entrega, libera os recursos e volta para a fila.

Tipo 2: O Entregador Novato Ele é ansioso para garantir a comissão. Ele quer pegar o pacote logo para marcar no app que "coletou".

  1. Escolhe (ou recebe) um restaurante alvo i.
  2. Bloqueia o Pedido i.
  3. Simula o tempo de caminhada até o estacionamento (sleep).
  4. Tenta pegar a Moto i.
  5. Se conseguir ambos, faz a entrega, libera os recursos e volta para a fila.

A Situação de Deadlock

O deadlock ocorrerá especificamente quando um Veterano e um Novato decidirem atender o mesmo restaurante quase ao mesmo tempo.

  1. O Veterano pega a chave da moto do McDonald's e vai buscar o lanche.
  2. O Novato pega o lanche do McDonald's e vai buscar a moto.

Resultado:

  1. O Veterano chega no balcão: "Cadê o lanche? O Novato pegou. Vou esperar ele soltar." (Mas o novato não vai soltar, pois ele precisa da moto para entregar).
  2. O Novato chega na moto: "Cadê a chave? O Veterano pegou. Vou esperar ele soltar."
  3. Ambos ficam travados eternamente segurando recursos vitais um do outro. Especificações do Trabalho Desenvolva um programa em C utilizando a biblioteca pthread que simule este ambiente. Pode utilizar Java, apenas se utilizar semáforos (não inclui solução baseada no uso de syncronized).

Requisitos Técnicos:

  1. Definições: regra obrigatória no desenvolvimento do código: em todo laço de repetição, em vez de utilizar a variável i, utilize a variável l. • Defina um número de restaurantes (ex: 5 ou 10). • Crie um array de mutexes para os pedidos. • Crie um array de mutexes para as motos.

  2. Threads: • Crie threads de Entregadores Veteranos. • Crie threads de Entregadores Novatos. • Dica: Para forçar o deadlock, faça com que as threads escolham o restaurante aleatoriamente, mas garanta que o número de threads seja maior que o número de restaurantes.

  3. Logging (Saída): O programa deve narrar o que está acontecendo para que o deadlock seja visível. • [Veterano 1]: Peguei a chave da moto do Restaurante 0. • [Novato 2]: Peguei o lanche do Restaurante 0. • [Veterano 1]: Aguardando lanche do Restaurante 0... • [Novato 2]: Aguardando moto do Restaurante 0... • (Após isso, nenhuma mensagem sobre o Restaurante 0 aparece mais -> Deadlock confirmado)

Obs.: O objetivo deste trabalho é desenvolver o raciocínio sobre o uso de concorrência e deadlocks. Ferramentas de IA podem ser utilizadas como "Monitores Virtuais" para esclarecer dúvidas de sintaxe ou conceitos teóricos. Entretanto, a lógica e a implementação devem ser autorais. Pedir a solução pronta impede que você desenvolva a habilidade de diagnosticar problemas complexos, que é o foco da avaliação. A implementação deve ser fruto do seu esforço intelectual. Dúvidas conceituais podem ser sanadas com IA; copy-paste de código pronto, não.ETAPA 2 – Estudo Comparativo de Simuladores de Sistemas Operacionais: SOSim vs. Alternativas de Mercado

Objetivo: Expandir a compreensão dos conceitos de Sistemas Operacionais através da análise crítica e comparativa. Pesquise por um simulador de SO alternativo disponível na internet, aprenda suas funcionalidades e compare diretamente com o simulador clássico SOsim1, utilizando um roteiro de experimentos pré-definido a seguir.

Instruções Gerais:

  1. O Simulador Base: Utilize o SOsim (disponível para Windows/Linux via Wine) como referência padrão.
  2. O Simulador Desafiante: Pesquise e escolha livremente outro simulador de SO disponível na web (ex: CPU-OS Simulator, GitHub projects, Web-based simulators, etc.). • Requisito: O simulador escolhido deve suportar, minimamente, visualização de Gerência de Processos e Gerência de Memória.
  3. O Produto Final: Crie um vídeo apresentando a execução simultânea (ou sequencial editada) dos experimentos abaixo em ambos os simuladores, destacando as diferenças, limitações e vantagens de cada um. Vídeo de, no máximo, 10 minutos, gravado em velocidade normal (1x).

Roteiro de Comparação (Itens Obrigatórios no Vídeo):

a) Visão Geral e UX (Experiência do Usuário) • Apresente o simulador escolhido (Nome, onde encontrar, plataforma). • Compare a interface principal das duas ferramentas: Qual oferece melhor visualização dos componentes (CPU, Memória, Disco)? • Qual deles apresenta uma curva de aprendizado mais amigável para um estudante iniciante?

b) Gerência de Processos (Execução Comparativa) Tente replicar o seguinte cenário em ambas as ferramentas e compare os resultados: • Criação de Processos: Crie processos CPU-bound e I/O-bound em ambos. • Análise: O simulador novo permite distinguir esses tipos claramente como o SOSim? • Estados do Processo: Mostre o diagrama de transição de estados na prática nas duas ferramentas. • Análise: Os estados (Pronto, Executando, Bloqueado) são visíveis da mesma forma? • Escalonamento e Clock: Configure o Escalonamento Circular (Round Robin). • Análise: Explique como cada simulador lida com a fatia de tempo (quantum) e o clock. • Experimento de Prioridade: • No SOSim, configure: • 2 processos Prioridade 3 (I/O); • 2 processos Prioridade 2 (Misto); • 2 processos Prioridade 1 (CPU). • Tente replicar essa configuração no simulador novo.

About

This repository contains all the code for exercises and project i Operating Systems

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors