Rumo ao kernel

Discussões superficiais sobre o kernel geralmente se resumem à frases do tipo, "o kernel é como um software, que serve para disponibilizar acesso à dispositivos de hardware". Maiores divagações exigem um alto nível de abstração com base em diversos conhecimentos específicos, o que acaba dispersando os interessados no assunto.
A intersecção entre software e hardware, se dá em uma caixa fechada com um monte de peças sólidas e fluxos de energia elétrica circulando entre elas. Essa interação pode gerar imagens, processar textos, estabelecer conexões de redes e fazer uma infinidade a mais de coisas, como que por magia. Não é o kernel o responsável por essa magia toda, mas o mesmo participa de alguma maneira desses processos. Esse artigo não é um tutorial sobre qualquer coisa que se possa fazer com, ou para o kernel, nem um mapa do kernel, mas talvez um mapa de onde o kernel se localiza, no emaranhado das transformações de informações dentro de um computador.

Para entender esse artigo, são necessárias noções técnicas que somente quem já estudou o assunto conhece, portanto se uma pessoa se interessar pelo assunto, pode utilizar esse mapa como um primeiro guia, de nível superficial. Esse é o artigo que o seu autor gostaria de ter lido enquanto pesquisou sobre o assunto.

Vamos pensar no uso do kernel em dispositivos do tipo máquina de Von Neumann *1, ou seja, computadores de uso doméstico, mainframes, smartphones, que são máquinas com dispositivos de entrada como teclado e mouse, uma unidade de processamento e dispositivos de saída, como impressoras e monitores, além de dispositivos para conexão em redes.

Internamente a arquitetura dessa máquina é composta por memória para armazenamento de instruções e dados, uma unidade de processamento e uma unidade de controle de execução de instruções.

Dados ou instruções executadas ou transmitidas em formato digital, são representados através de números binários. Na transmissão física de dados isso pode significar dois valores determinados como zero volt e 5 milivolt. Na trasmissão ótica, padrões de frequência de onda; no armazenamento volátil, presença ou ausência de elétrons. *2.

O computador possui registradores que são memórias especiais, muito rápidas, utilizadas como repositório transitório de dados e de instruções, para o processamento de informações.

As instruções e dados trafegam em bytes, pacotes de bits, que são recebidos pelo processador do computador, que implementa um conjunto de instruções à serem executadas por outros componentes. O conjunto de instruções (instruction set) determina como deve ser montado um byte para ser enviado ao processador. Por exemplo, uma instrução de oito bits 01011001, pode conter nos seus dois primeiros bits, 01, uma uma operação de carregamento de dados de uma posição da memória RAM determinada pelos dois bits seguintes, 01, e conter nos quatro últimos bits, 1001, o endereço de destino do registrador.
As instruções de dados são determinadas para cada arquitetura de computador, por exemplo, x86, POWER, ARM.

Nos dois parágrafos acima, abordamos de maneira rápida, vários componentes da arquitetura de um computador, e um elemento fundamental, que é a forma como os dados são manipulados, a representação binária. Essa representação binária, também conhecida como linguagem de máquina, é utilizada na trasmissão e armazenamento de dados, na representação numérica e portanto utilizada em calculos no processamento de dados.

Chegamos aqui nos limites internos do kernel, os componentes responsáveis por processar informações enviadas pelo mesmo, e retornamos ao início do texto, onde o diálogo estabelecia que o kernel é como um programa que além de outras coisas, disponibiliza à outros programas, acesso aos dispositivos de hardware, como acesso a memória, processamento, vídeo, redes etc. O kernel é um programa, desenvolvido em uma linguagem de alto nível (hll - high level language), e que compilada ou empacotada (tradução livre para assembled) *3, é convertida em linguagem de máquina. *4
O kernel possui funções básicas que não podem ser acessados indiscriminadamente por um usuário comum, por questões de segurança, então ele opera no chamado modo kernel. Os programas oferecidos ao usuário comum operam no chamado modo usuário. O kernel então, serve como um intermediário para o modo usuário, através das chamadas de sistema (system calls). Esse artigo não vai explorar o outro lado do kernel, o que é utilizado pelos desenvolvedores de programas que atendem ao usuário final, já que ele é muito similar ao que foi explicado até agora. Mas vamos deixar aqui um link *5 para uma experiência muito simples e elucidadora, a tradução de um tutorial de um kernel simples programado em linguagem C.

Da mesma maneira que os computadores estão ficando dedicados para determinados usos, como na indústria automobilística, de equipamentos hospitalares, ou industriais, o padrão da máquina de Von Neumann é disseminado da mesma maneira para diversos usos. Portanto a compreensão desse padrão e a necessidade de desenvolvimento de kernel personalizado para usos específicos deve aumentar consideravelmente em um futuro breve. Enquanto os profissionais investem em conhecimento para aperfeiçoar a ponta do usuário final, com aumento de qualidade na usabilidade dos programas, um gap pode estar se formando no preparo de profissionais especializados em lidar com a implementação de soluções de alta performance no lado da interação hardware/software.


Revisões

Publicado em 05/09/2010 em aprox. 0:30 hr
Escrito em 04-05/09/2010 em aprox. 4:30 hr
Revisado em 09/09/2010 em aprox. 0:25 hr

Referências:

*1.a http://pt.wikipedia.org/wiki/Arquitetura_de_von_Neumann (tradução incompleta) de: http://en.wikipedia.org/wiki/Von_Neumann_architecture
*2 http://www.howstuffworks.com/ram.htm
*3 http://www.numaboa.com/informatica/tutos/assembly
*4 http://www.erg.abdn.ac.uk/users/gorry/eg2068/course/comp.html
*5 http://www.ataliba.eti.br/txts/kernelc.pdf

Popular posts from this blog

Atom - Jupyter / Hydrogen

Design Patterns

Robson Koji Moriya disambiguation name