[Livro] Linux Kernel Development

- por Sergio Prado

Categorias: Linux, Livros Tags: ,

Já tenho o livro Linux Kernel Development do Robert Love há algum tempo, mas só agora terminei minha leitura da primeira à última página.

É um livro ao mesmo tempo denso e didático. Bastante teoria, e muito código do kernel. Sei que ainda irei ler e reler muitas partes do livro, conforme avanço meus estudos e trabalho com projetos em Linux embarcado, mas seu conteúdo me ajudou a entender uma série de conceitos, e a identificar o porquê de certas decisões na implementação do kernel, incluindo:

  • como o Linux gerencia internamente os processos, e que dentro do kernel processos e threads são a mesma coisa – a diferença esta no compartilhamento de recursos, e como o Linux implementa tudo isso através da chamada de sistema clone().
  • a modularidade do escalonador de tarefas do Linux, podendo ter diferentes classes de escalonadores de tarefas, com diferentes algoritmos, rodando ao mesmo tempo para diferentes classes de processos!
  • como o escalonador de tarefas padrão do Linux (CFS – Completely Fair Scheduler) calcula por quanto tempo cada processo deve rodar, usando o nice do processo para definir um peso proporcional ao total de processos disponíveis para execução.
  • como a implementação das chamadas de sistema são feitas no nível do hardware.
  • como implementar um manipulador de interrupção (interrupt handler).
  • a diferença entre os dois contextos de execução do kernel do Linux: contexto de processo e contexto de interrupção, explicando porque você não pode usar uma função que pode dormir (i.e. que gera mudança de contexto) dentro de uma interrução.
  • quando e como usar softirqs, tasklets e work queues para deferir trabalho no tratamento de interrupção e em módulos do kernel (no caso de work queues).
  • como usar mecanismos de sincronização e proteger o acesso à recursos compartilhados com operações atômicas usando o tipo atomic_t, spinlocks, semáforos, mutexes e variáveis completion.
  • que o significado de BogoMIPS (aquela mensagem que a gente sempre vê no início do boot do kernel) é uma medida de quão rápido é o processador em não fazer nada!
  • como funciona o gerenciador de memória virtual e a camada slab.
  • como funciona a implementação de cache de disco (page cache) e qual o algoritmo usado para propagar as alterações (page writeback).
  • etc!

Tudo isso exemplificado com muito código! Às vezes me pego pensando porque um recurso tão valioso e disponível gratuitamente como o kernel do Linux não é usado como ferramenta de ensino de sistemas operacionais em instituições de ensino Brasil afora.

É realmente um livro que todo aquele que pretende trabalhar no kernel do Linux (seja profissionalmente ou por hobby) deveria ter.

CONTRIBUINDO

Aproveitando que estamos falando sobre o kernel, recentemente assisti um vídeo do Greg Kroah-Hartman sobre como “Escrever e submeter seu primeiro patch do kernel”.

Para quem não conhece, Greg é o mantenedor oficial da árvore estável do kernel e de alguns sub-sistemas, incluindo a árvore staging de drivers. Suas palestras são sempre didáticas e bem humoradas. Ele fala não só apenas sobre como submeter um patch, mas dá o caminho das pedras para quem quer se aventurar no desenvolvimento do kernel do Linux.

À propósito, o Greg é também o autor do livro Linux Kernel in a Nutshell, disponível gratuitamente no blog dele.

Recursos para estudo temos de sobra. Informações acessíveis sobre tudo. Software open-source e hardware open-source. De uma coisa tenho certeza. O futuro também será open-source. Me parece uma evolução natural. E você? Vai fazer parte deste futuro?

Um abraço,

Sergio Prado

Faça um Comentário

Navegue
Creative Commons Este trabalho de Sergio Prado é licenciado pelo
Creative Commons BY-NC-SA 3.0.