Repository navigation
Objetivos 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 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.
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.
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.
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.
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-monitorO 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.
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.
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.
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/statrepresenta 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.
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.
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.
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.