Skip to content

Objetivos do projeto

Manoel E. S. S. edited this page Sep 1, 2026 · 1 revision

CPU Reader

Objetivo do projeto

O CPU Reader é um projeto desenvolvido em C99 com o objetivo de estudar e implementar, de forma direta, a leitura de informações do processador em sistemas Linux/Unix.

A proposta principal é criar uma biblioteca simples e de baixo nível capaz de consultar informações da CPU utilizando interfaces disponibilizadas pelo próprio sistema operacional, principalmente o /proc e o sysfs.

O projeto também possui um monitor executado diretamente no terminal, utilizando ncurses, permitindo visualizar algumas dessas informações em tempo real.

O que o CPU Reader faz?

O CPU Reader permite consultar diferentes características e métricas do processador, incluindo:

  • modelo da CPU;
  • frequência do processador;
  • flags disponíveis;
  • quantidade de processadores lógicos;
  • threads online;
  • utilização agregada da CPU;
  • processos ativos;
  • temperatura da CPU, quando disponível;
  • velocidade atual do clock.

Essas informações são obtidas diretamente das interfaces expostas pelo Linux. A biblioteca não mantém arquivos permanentemente abertos: os dados são consultados novamente a cada chamada da API.

Por que este projeto existe?

O objetivo não é apenas criar mais uma ferramenta de monitoramento.

O CPU Reader também funciona como um projeto de estudo de programação de sistemas, permitindo compreender como uma aplicação em C pode interagir diretamente com informações fornecidas pelo kernel Linux.

Durante o desenvolvimento são abordados conceitos como:

  • programação em C99;
  • gerenciamento manual de memória;
  • leitura e parsing de arquivos;
  • interfaces do sistema Linux;
  • /proc;
  • sysfs;
  • cálculo de utilização da CPU;
  • tratamento de erros;
  • estruturas de dados;
  • modularização;
  • compilação com GNU Make;
  • testes;
  • assembly inline;
  • portabilidade entre arquiteturas;
  • desenvolvimento de ferramentas de linha de comando.

Dessa forma, o projeto serve simultaneamente como uma pequena biblioteca utilitária e como laboratório prático de programação de baixo nível e engenharia de software.

Como funciona em termos gerais?

O funcionamento pode ser simplificado da seguinte maneira:

                 SISTEMA LINUX
                      │
          ┌───────────┴───────────┐
          │                       │
       /proc                   sysfs
          │                       │
          ├── cpuinfo             ├── clock
          ├── stat                └── temperatura
          └── loadavg
          │                       │
          └───────────┬───────────┘
                      ↓
                CPU Reader
                      │
             ┌────────┴────────┐
             │                 │
        Biblioteca C99     CPU Monitor
             │                 │
             ↓                 ↓
       Aplicações C       Terminal ncurses

A biblioteca funciona como uma camada intermediária entre as informações fornecidas pelo sistema operacional e a aplicação que deseja consumi-las.

Biblioteca

A parte principal do projeto é a biblioteca libcpu.a.

Sua API pública está definida em:

include/cpu.h

A aplicação pode utilizar funções como:

cpu_get_info();
cpu_get_usage();
cpu_get_temperature();
cpu_get_clock_speed();
cpu_get_active_processes();

Também existem funções para gerenciamento do ciclo de vida, memória, contexto de utilização e tratamento de erros.

Monitor de terminal

Além da biblioteca, o projeto fornece uma aplicação de monitoramento baseada em ncurses.

Ela permite utilizar a biblioteca de maneira prática e visualizar os dados da CPU diretamente no terminal:

./build/cpu-monitor

O monitor é uma aplicação de exemplo do uso da biblioteca e também serve como ferramenta simples para observar o comportamento das métricas em tempo real.

Filosofia do projeto

O CPU Reader procura manter uma implementação pequena, explícita e próxima das interfaces do sistema.

Em vez de esconder completamente o funcionamento por trás de abstrações complexas, o projeto busca deixar evidente o caminho:

Kernel Linux
     ↓
/proc / sysfs
     ↓
leitura dos dados
     ↓
parsing
     ↓
processamento
     ↓
API C
     ↓
aplicação

Isso torna o projeto particularmente adequado para estudo de programação de sistemas, pois cada camada pode ser analisada separadamente.

Arquitetura básica

O código está dividido em componentes com responsabilidades específicas:

include/
└── cpu.h
    API pública

src/
├── cpu.c
│   Interface principal e ciclo de vida
│
├── cpu_info.c
│   Informações gerais da CPU
│
└── cpu_usage.c
    Leitura e cálculo de utilização

examples/
└── monitor.c
    Monitor de terminal

tests/
└── test_cpu.c
    Testes da API

doc/
└── documentação técnica

A estrutura atual do repositório segue essa organização modular.

Uso educacional

O projeto pode ser utilizado como uma base para estudar a relação entre software e hardware.

A partir dele é possível investigar questões como:

  • De onde o Linux obtém as informações da CPU?
  • Como /proc/stat representa o tempo de CPU?
  • Como calcular utilização a partir de contadores?
  • Como o clock dinâmico do processador pode ser consultado?
  • Como sensores de temperatura são expostos pelo Linux?
  • Como uma aplicação C transforma dados textuais do sistema em estruturas tipadas?
  • Como controlar memória manualmente?
  • Como projetar uma API C simples?
  • Como separar interface pública de implementação?
  • Como testar código que depende de informações do sistema?

Portanto, o CPU Reader não deve ser entendido apenas como um “leitor de CPU”, mas como um projeto experimental de programação de sistemas em C.

Escopo atual

O foco atual está na leitura e disponibilização de informações básicas da CPU em ambientes Linux.

O projeto não pretende substituir ferramentas completas de monitoramento de sistema. Seu objetivo é oferecer uma implementação pequena, compreensível e extensível que permita estudar a coleta dessas informações e disponibilizá-las através de uma API C.

Direção futura

A arquitetura permite que novas funcionalidades sejam adicionadas posteriormente sem modificar necessariamente toda a API existente.

Possíveis extensões incluem:

  • informações por núcleo;
  • histórico de utilização;
  • gráficos no terminal;
  • monitoramento de frequência;
  • identificação de sensores;
  • suporte adicional a arquiteturas;
  • melhorias de portabilidade;
  • métricas adicionais do sistema;
  • documentação da API;
  • expansão da suíte de testes.

Essas extensões devem preservar a ideia central do projeto: uma biblioteca C pequena, transparente e próxima das interfaces fornecidas pelo sistema operacional.

Resumo

Em termos simples:

CPU Reader é uma biblioteca C99 para Linux criada para ler, interpretar e disponibilizar informações da CPU através de uma API simples, servindo tanto como ferramenta utilitária quanto como projeto de estudo de programação de sistemas.

O projeto atualmente utiliza /proc, sysfs, C99, GNU Make e ncurses, mantendo uma separação entre a biblioteca, o monitor, os testes e a documentação.

Clone this wiki locally