Kernel Linux

O kernel é carregado e iniciado pelo bootloader, assim que este foi inicializado ele desempenha o papel de iniciar o processador, as memórias e os barramentos de comunicação. Ou seja, o bootloader é responsável por carregar o kernel e este, por sua vez, é responsável por carregar o sistema propriamente dito.

Após a inicialização destes periféricos, o kernel configura a memória virtual do sistema, no caso do kernel Linux esta memoria virual é a memória swap. Em resumo, esta memória virtual é uma área reservada no disco rigido que o sistema utiliza como uma extensão da memória RAM. Desta forma, existe um mapeamento da memória virtual para a RAM e da memória virtual para o disco rígido.

Em seguida, após a configuração e mapeamento da memória virtual, o kernel inicializa todos os drivers para os dispositivos de hardware presentes no sistema, é neste momento que o kernel carrega todos os módulos e drivers do sistema, inclusivel os módulos presentes na nossa aplicação.

Por conseguinte inicializa o escalonador de tarefas. Que é responsável por administrar a ordem de execução dos programas do sistema. Ele cria uma ordem de prioridades e tempos que cada processo tem direito em relação à CPU, e faz esse gerenciamento.

Então, inicializa as threads do kernel, que são processos que auxilliam o kernel no gerenciamento do sistema, algumas dessas threads podem ser vistas rodando no nosso sistema, através do monitoramento de processos do Linux.

Por fim, é montado o sistema de arquivos principal (rootfs), que é a partição onde o sistema está instalado e chama o processo init. Que é um script de programas que deseja-se inicilizar logo em seguida ao kernel.

Inicialização básica:

  • Processador;

  • Memórias;

  • Barramentos de comunicação;

  • Memória virtual (caso o processador tenha MMU);

  • Device Drivers;

  • Escalonador;

  • Threads do kernel;

  • RootFS;

  • init.

Além da inicialização básica do sistema, o kernel possui outras característica. Ele é responsável por gerenciar todos os processos do sistema operacional, desde processos internos do Linux até processos relacionados à aplicação. Esta tarefa é desempenhada pelo escalonador de processos. Ele também controla o acesso à RAM do sistema e também quaisquer I/O (entrada/saida) do sistema. Em resumo, tudo passa ou deve passar pelo kernel.

Não obstante, no Linux existe também o conceito de Kspace e Uspace. Por exemplo, a memória de swap - memória virtual - é divida entre ks e us.

O KS é protegido das aplicações do usuário, ou seja, é uma região de memória que não pode ser acessada através da aplicação. Esta região armazena o próprio código do kernel e uma estrutura que descreve toda a memória física. Ao passo que o US é separado pra rodar as aplicações do usuário. Qualquer programa executado pelo usuário, é armazenado no US.

A interface entre o usuário e qualquer dispositivo/componente que seja gerenciado pelo kernel, é realizado através das System Calls, portanto devem ser engatilhadas por uma entidade interna do kernel. Por exemplo se a aplicação do usuário precisa acessar um hardware, ela faz uma system call, então o kernel acessa aquele hardware e envia a resposta para a aplicação do usuário. O KERNEL SPACE é totalmente protegido e isto faz total sentido!

Neste ponto, devemos entender como são representados os periféricos e quaisquer outras entidades no sisitema Linux. Em geral, todas essas entidade de harware, como GPIOS, LEDS, periféricos de comunicação serial e etc que possuem um driver, são representados através de um arquivo no sistema, desta forma, para realizar a interação com um desses componentes é necessário realizar uma interação com um desses arquivos, e isto pode ser realizado através de chamadas de sistema. Além disso, o kernel consegue prover também, um gerenciamento dinâmico dos módulos do sistema.

Características:

  • Gerenciamento de processos;

  • Gerenciamento da RAM e I/O;

  • Kernel Space vs. User Space;

  • System Calls;

  • Arquivos de dispositivos;

  • Gerenciamento dinâmico de módulos.

Last updated