Linux device drivers — trabalhando com kernel threads
Referencia bibliográfica: Sergio Prado Pedro Ferreira Apariz RA: 1317859
Linux Device Drivers — Trabalhando com Kernel Threads
Categorias: Linguagem C, Linux embarcado Tags: device drivers, Linux embarcado, Mini2440
Já faz um tempo que não escrevo sobre desenvolvimento de device drivers em Linux. Naparte 2 desta série desenvolvemos um device driver completo para acessar os leds do kit FriendlyARM mini2440. Que tal estudar um pouco mais sobre a API do kernel do Linux?
Neste artigo vamos aprender a trabalhar com threads em kernel space, e para exemplificar os conceitos, vamos fazer os leds do kit mini2440 piscarem.
THREADS?
Você já sabe que o Linux é um sistema operacional multi-tarefa, e que ele consegue executar mais de uma tarefa ao mesmo tempo. É claro que em sistemas com apenas 1 núcleo, apenas uma tarefa tem a atenção da CPU em determinado momento, mas temos a impressão de que várias coisas estão acontecendo simultaneamente. Isso ocorre devido ao fato do Linux ser um sistema operacional preemptivo. O escalonador aloca uma fatia do tempo disponível para cada tarefa em execução.
Se você trabalha a um tempo desenvolvendo aplicações para Linux, sabe que é possível ter mais de uma linha de execução em um processo. É o que chamamos de threads. E o conceito é simples: “dividir para conquistar”. Cada thread tem uma responsabilidade específica, e você acaba otimizando o uso dos recursos da máquina, além de estruturar melhor o código e facilitar a manutenção.
O que você talvez não saiba é que em kernel space também podemos ter mais de uma thread de execução.
KERNEL THREADS?
Kernel threads são threads dentro do kernel. Você pode por exemplo ter tarefas executando em background em um device driver, esperando por eventos assíncronos ou executando determinada atividade de tempos em tempos.
É fácil identificar as threads do kernel rodando no seu sistema. Ao