O kernel Unix incluiu tradicionalmente alguns código da linguagem assembly. Eu não olhei para o código fonte recentemente, mas suspeito que isso ainda seja verdade.
Veja Como um driver realmente se comunica com um dispositivo de hardware? para uma visão geral desse tópico. As respostas para essa questão discutem dois tipos de arquitetura de computadores. Em um sistema que usa E / S mapeada por porta (PMIO), o kernel deve ser escrito parcialmente em linguagem assembly - embora você consiga conviver com algumas rotinas muito curtas. Em um sistema que usa E / S mapeada por memória (MMIO), Até drivers de dispositivo podem ser escritos inteiramente em C. Tudo o que eles precisam fazer é declarar um ponteiro, defina como igual ao endereço virtual do dispositivo, e depois usá-lo para manipular o dispositivo como se estivesse acessando a memória.