Customize Consent Preferences

We use cookies to help you navigate efficiently and perform certain functions. You will find detailed information about all cookies under each consent category below.

The cookies that are categorized as "Necessary" are stored on your browser as they are essential for enabling the basic functionalities of the site. ... 

Always Active

Necessary cookies are required to enable the basic features of this site, such as providing secure log-in or adjusting your consent preferences. These cookies do not store any personally identifiable data.

No cookies to display.

Functional cookies help perform certain functionalities like sharing the content of the website on social media platforms, collecting feedback, and other third-party features.

No cookies to display.

Analytical cookies are used to understand how visitors interact with the website. These cookies help provide information on metrics such as the number of visitors, bounce rate, traffic source, etc.

No cookies to display.

Performance cookies are used to understand and analyze the key performance indexes of the website which helps in delivering a better user experience for the visitors.

No cookies to display.

Advertisement cookies are used to provide visitors with customized advertisements based on the pages you visited previously and to analyze the effectiveness of the ad campaigns.

No cookies to display.

Você sabe a diferença entre Kernel Space e User Space em sistemas Linux? Em tempos a onde Docker, containers e aplicações servless baseadas em Linux estão em alta, é muito importante entender essa diferença.

O conteúdo desse artigo também está no formato de vídeo no nosso canal do YouTube:

Distro Linux Roda em Cima de um Kernel Linux 😱

A grosso modo uma distribuição Linux é uma coleção de programas utilitários, geralmente incluído nestes um gerenciador de pacotes, que rodam em cima de um Kernel Linux.  É o Kernel Linux que é responsável pelo gerenciamento de memória, gerenciamento de processos, tempo de processador, gerenciamentos de I/O e etc. O kernel é o cara que tem acesso ao hardware.

Analisando rapidamente essa descrição já conseguimos dividir uma distribuição Linux em duas partes: os programas utilitários e o Kernel Linux. Essa divisão é definida na literatura técnica com algumas nomes, User Space, ou User Mode, para o isolamento onde rodam os programas utilitários e Kernel Space, ou Kernel Mode, para o modo de execução e isolamento privilegiado do Kernel Linux.

Kernel Space e User Space

É o Kernel, e somente o Kernel, que tem acesso e sabe conversar com o hardware por modos de execução privilegiada. Processadores modernos tem modos de execução que ajudam a isolar o Kernel Space do User Space, não vou me aprofundar nisso agora, talvez seja assunto para outro artigo.

O que precisamo saber é que as aplicações utilitárias rodam isoladas em modo não privilegiado e quando precisam de recursos de hardware, e isso geralmente fica transparente com o uso de bibliotecas, conversam com o Kernel através de syscalls para realizar suas tarefas.

Rodando Diferentes “User Spaces” com o Mesmo Kernel

Vamos agora testar essa diferença na prática com um Raspberry Pi 3B. Eu tenho um SDCard onde originalmente gravei um Raspbian :

Mas como podemos ver na tela acima criei outra partição, além das partições boot e rootfs padrão do Raspbian, onde eu adicionei o rootfs da última versão do Ubuntu 19.10.

Com esse SDCard podemos utilizar o Raspbian ou o Ubuntu. Por padrão o Raspberry Pi durante o boot espera ter a partição rootfs e vai inicializar o Raspbian normalmente, mesmo tendo uma outra partição com o Ubuntu:

Isso está definido no arquivo cmdline.txt da partição boot:

dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
view raw cmdline.txt hosted with ❤ by GitHub

Esse cmdline.txt tem os argumentos de inicialização que o bootloader passa pro Kernel Linux. Entre esses argumentos está o partição do rootfs que o Kernel deve montar e usar para iniciar o init do User space. O argumento:

root=/dev/mmcblk0p2
view raw rootCmdline.txt hosted with ❤ by GitHub

Então se modificarmos esse argumento root= dentro do cmdline.txt para a partição do Ubuntu:

root=/dev/mmcblk0p3

e reinicializarmos a Raspberry Pi. Agora o bootloader vai passar a partição do Ubuntu para o Kernel montar e inicializar o User space, lembre-se o mesmo Kernel da imagem do Raspbian. E pronto temos o Ubuntu rodando com o mesmo Kernel do Raspbian sem problemas:

Eu não vou entrar nos detalhes do processo de boot da Raspberry Pi porque eu já expliquei bem detalhado aqui nesse vídeo:


Conclusão

Uma distro Linux é o conjunto de Kernel Space e User Space. Então quando vamos rodar um Ubuntu, Debian, Manjaro, Deepin, Red Hat ou qualquer outra distro Linux a maior diferença está em como o User space é projetado: quais serviços rodam, ambiente gráfico, versões das bibliotecas, gerenciador de pacotes e etc. O Kernel Linux geralmente é o mesmo. Ok, talvez uma ou outra distro utilize versões diferentes do Kernel. Mas geralmente o Kernel Linux mantem uma compatibilidade muito boa entre versões e você consegue rodar todas essas distros com um mesmo Kernel stable sem maiores problemas.