[Livro] Linux Kernel Development
- por Sergio Prado
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