Linux 101 - Kernel
15/04/2019Estava planejando escrever alguns posts sobre análise de desempenho de sistemas, mas não sabia por onde começar. E como é necessário entender o funcionamento do Linux antes de prosseguir, resolvi preparar uma série de posts sobre o assunto. Este é o primeiro de alguns ;)
O Kernel fornece uma camada de software para gerenciar os recursos limitados de um computador. Neste post veremos um pouco sobre as características do Kernel Linux.
Agendamento de processos
Nos computadores atuais existem uma ou mais unidades centrais de processamento (CPUs), que executam as instruções dos programas. Assim como em outros sistemas UNIX, o Linux é um sistema operacional de multitarefa preemptiva, multitarefa significa que vários processos podem residir de forma simultânea na memória e cada um pode fazer uso da(s) CPU(s). E preempção significa que as regras que dizem quais processos devem fazer uso da CPU e por quanto tempo são determinadas pelo agendador de processo do kernel.
Gerenciamento de memória
A memória RAM é um recurso limitado que o kernel compartilha entre os processos de forma eficiente. Assim como na maioria dos sistemas operacionais modernos, o Linux faz uso do gerenciamento de memória virtual, uma técnica que possui duas vantagens principais:
-
Os processos são isolados uns dos outros e do kernel, de modo que um processo não pode ler ou modificar o espaço de memória de outro processo ou do kernel.
-
Apenas parte de um processo é mantido em memória, isso diminui os requisitos de memória de cada processo e permite que mais processos sejam mantidos na RAM simultaneamente.
Sistema de arquivos
O kernel fornece um sistema de arquivos no disco, que permite que arquivos sejam criados, excluídos, recuperados, atualizados e assim por diante.
Gestão de processos
Ao carregar um novo programa em memória, o kernel fornece todos os recursos que ele precisa para ser executado (CPU, memória, acesso a arquivos), a instância de um programa em execução é chamada de processo. Uma vez que o processo tenha concluído a execução, o kernel garante que os recursos utilizados sejam liberados para outros programas.
Acesso a dispositivos
O kernel fornece programas com uma interface que padroniza e simplifica o acesso a dispositivos (mouse, teclado, disco, etc) e ao mesmo tempo, controla o acesso de vários processos a cada dispositivo.
Network
O kernel transmite e recebe mensagens de rede, ou seja pacotes, em nome dos processos do usuário. Esta tarefa inclui o roteamento de pacotes de rede para o sistema de destino.
System Call API
Os processos podem solicitar ao kernel que execute tarefas por meio de entry points, conhecidos como system calls, essas tarefas incluem, por exemplo, criar um novo processo, executar operações de I/O ou criar um canal de comunicação entre processos.
Modo kernel e Modo de usuário
Os processadores modernos geralmente operam em pelo menos dois modos diferentes: modo de usuário e modo de kernel, onde as instruções de hardware permitem alternar de um modo para o outro e simultaneamente áreas de memória virtual podem ser marcadas como sendo parte do espaço do usuário ou do kernel.
Ao executar no modo de usuário, a CPU pode acessar apenas a memória marcada no espaço do usuário, tentativas de acessar memória no espaço do kernel resultam em uma exceção de hardware.
Já no modo kernel, a CPU pode acessar o espaço de memória do usuário e do kernel, bem como acesso irrestrito ao hardware. Esses dois modos não são apenas rótulos e são reforçados pelo hardware da CPU.
Conclusão
Além das características listadas, sistemas operacionais multiusuário, como o Linux, fornecem aos usuários a abstração de uma máquina virtual privada, ou seja, cada usuário pode logar no sistema e operar de forma independente de outros usuários.
Por exemplo, cada usuário possui seu próprio espaço em disco (diretório home). Além disso, os usuários podem executar programas e esses programas podem acessar dispositivos e transferir informações independentemente por meio da rede.
Durante o funcionamento do sistema operacional, o kernel resolve potenciais conflitos no acesso a recursos de hardware, de modo oculto para usuários e processos.