O Sistema Operacional Ping-Pong, ou PPOS (Ping-Pong Operating System), é um projeto acadêmico que visa construir um sistema operacional didático (toy operating system) em linguagem C.

Esta página descreve a versão 2 do PPOS. A versão 1 pode ser encontrada nesta página.

Ao contrário de projetos similares, o PPOS executa inteiramente dentro de um processo do Linux. A maior vantagem em executar um SO dentro de um processo em modo usuário é a possibilidade de usar ferramentas padrão de depuração, como o Valgrind e o GDB no modo default, o que reduz a curva de aprendizado do aluno.

A versão atual do PPOS suporta múltiplas tarefas com preempção por tempo, escalonador baseado em prioridades, semáforos, filas de mensagens, alocador de memória heap e acesso a disco e sistema de arquivos. Devido à característica de executar em um processo Linux, o PPOS não suporta memória virtual, separação usuário/kernel e chamadas de sistema por traps.

O PPOS segue a estrutura típica de um RTOS (Real-Time Operating System), um sistema operacional com espaço de memória único, no qual o núcleo e as aplicações são compilados juntos, formando um único código binário.

O desenvolvimento do PPOS está organizado em projetos incrementais relativamente simples, que visam implementar cada uma das funcionalidades do sistema, em sequência. Cada projeto geralmente depende das funcionalidades implementadas nos projetos anteriores.

Os projetos atualmente definidos são:

Projetos em estruturação:

O código-fonte do PPOS versão 2 tem a seguinte estrutura:

ppos/
    hardware/        : emulação do hardware
        disk*        : disco rígido
        cpu.*        : operações da CPU/chipset
        serial.*     : porta serial (console) 
        makefile
    kernel/          : núcleo do PPOS
        ppos.*       : núcleo (arquivo principal)
        macros.h     : macros de uso geral
        ctx.*        : trocas de contexto (assembly e C)
        tcb.h        : task control block
        task.*       : gestão básica de tarefas
        dispatcher.* : despachante de tarefas
        scheduler.*  : escalonador de tarefas
        time.*       : gestão do tempo
        semaphore.*  : spinlocks e semáforos
        mqueue.*     : filas de mensagens
        memory.*     : gestão de memória heap
        block.*      : acesso aos blocos do disco
        makefile
    lib/
        queue.*      : biblioteca de filas genéricas
        libc.*       : mini-biblioteca C padrão
        makefile
    test/
        pingpong-*.c   : programas de teste dos projetos
        pingpong-*.txt : saídas esperadas dos testes
        makefile
    makefile
Alguns arquivos (sobretudo os headers, os arquivos no diretório hardware, a mini-biblioteca C e os makefiles) estão prontos e não devem ser alterados (essa restrição está claramente indicada no início de cada arquivo). Esses arquivos serão sobrescritos pelos originais durante a avaliação de cada projeto.

Os demais arquivos devem ser escritos pelo aluno para implementar as funcionalidades solicitadas em cada projeto.

  • ppos-v2/start.txt
  • Última modificação: 2026/01/26 15:26
  • por maziero