O que é o kernel do Linux e o que ele faz?

Índice:

O que é o kernel do Linux e o que ele faz?
O que é o kernel do Linux e o que ele faz?

Vídeo: O que é o kernel do Linux e o que ele faz?

Vídeo: O que é o kernel do Linux e o que ele faz?
Vídeo: Usando IA para escrever um trabalho em 1 minuto #dicas #conteúdo #tecnologia #inteligenciaartificial - YouTube 2024, Maio
Anonim
 Com mais de 13 milhões de linhas de código, o kernel do Linux é um dos maiores projetos de código aberto do mundo, mas o que é um kernel e para que é usado?
Com mais de 13 milhões de linhas de código, o kernel do Linux é um dos maiores projetos de código aberto do mundo, mas o que é um kernel e para que é usado?

Então, o que é o kernel?

Um kernel é o nível mais baixo de software facilmente substituível que faz interface com o hardware em seu computador. Ele é responsável por fazer a interface de todos os seus aplicativos que estão sendo executados no “modo de usuário” até o hardware físico e permitir que processos, conhecidos como servidores, obtenham informações uns dos outros usando comunicação entre processos (IPC).

Tipos Diferentes de Kernels

Existem, é claro, maneiras diferentes de construir um kernel e considerações arquitetônicas ao construir uma do zero. Em geral, a maioria dos kernels se enquadra em um dos três tipos: monolítico, microkernel e híbrido. Linux é um kernel monolítico enquanto o OS X (XNU) e o Windows 7 usam kernels híbridos. Vamos fazer um tour rápido pelas três categorias para que possamos entrar em mais detalhes posteriormente.

Image
Image

Imagem por pipoca da cidade alta

Microkernel Um micronúcleo adota a abordagem de apenas gerenciar o que precisa: CPU, memória e IPC. Quase tudo o mais em um computador pode ser visto como um acessório e pode ser tratado no modo de usuário. Os microkernels têm uma vantagem de portabilidade porque não precisam se preocupar se você alterar sua placa de vídeo ou até mesmo seu sistema operacional, desde que o sistema operacional ainda tente acessar o hardware da mesma maneira. Os microkernels também ocupam uma área muito pequena, tanto para memória quanto para espaço de instalação, e tendem a ser mais seguros, pois somente processos específicos são executados no modo de usuário, o qual não tem as permissões altas como modo de supervisor.

Prós

  • Portabilidade
  • Pequena pegada de instalação
  • Pegada de memória pequena
  • Segurança

Contras

  • Hardware é mais abstraído através de drivers
  • O hardware pode reagir mais devagar porque os drivers estão no modo de usuário
  • Processos tem que esperar em uma fila para obter informações
  • Os processos não podem ter acesso a outros processos sem esperar

Kernel monolítico Os kernels monolíticos são o oposto dos microkernels porque englobam não apenas a CPU, a memória e o IPC, mas também incluem recursos como drivers de dispositivos, gerenciamento do sistema de arquivos e chamadas do servidor do sistema. Os kernels monolíticos tendem a ser melhores em acesso a hardware e multitarefa, porque se um programa precisar obter informações da memória ou de outro processo em execução, ele terá uma linha mais direta para acessá-lo e não precisará esperar em uma fila para fazer as coisas. No entanto, isso pode causar problemas, pois quanto mais coisas forem executadas no modo de supervisor, mais coisas poderão derrubar seu sistema se não se comportarem adequadamente.

Prós

  • Acesso mais direto ao hardware para programas
  • Mais fácil para os processos se comunicarem entre si
  • Se o seu dispositivo é suportado, ele deve funcionar sem instalações adicionais
  • Processos reagem mais rápido porque não há uma fila para o tempo do processador

Contras

  • Grande pegada de instalação
  • Grande pegada de memória
  • Menos seguro porque tudo é executado no modo supervisor
 Imagem via schoschie no Flickr
Imagem via schoschie no Flickr

Kernel Híbrido Os kernels híbridos têm a capacidade de escolher o que desejam executar no modo de usuário e o que desejam executar no modo de supervisor. Muitas vezes, coisas como drivers de dispositivos e E / S do sistema de arquivos serão executados no modo de usuário, enquanto as chamadas de IPC e de servidor serão mantidas no modo de supervisor. Isso dá o melhor dos dois mundos, mas muitas vezes exigirá mais trabalho do fabricante do hardware, porque todas as responsabilidades do motorista dependem delas. Também pode ter alguns dos problemas de latência inerentes aos microkernels.

Prós

  • O desenvolvedor pode escolher o que é executado no modo de usuário e o que é executado no modo de supervisor
  • Tamanho de instalação menor que o kernel monolítico
  • Mais flexível que outros modelos

Contras

  • Pode sofrer o mesmo atraso do processo que o microkernel
  • Drivers de dispositivo precisam ser gerenciados pelo usuário (normalmente)

Onde estão os arquivos do kernel do Linux?

Image
Image

O arquivo do kernel, no Ubuntu, é armazenado em sua pasta / boot e é chamado de vmlinuz-versão. O nome vmlinuz vem do mundo unix onde eles costumavam chamar seus kernels simplesmente de "unix" nos anos 60, então o Linux começou a chamar seu kernel de "linux" quando foi desenvolvido pela primeira vez nos anos 90.

Quando a memória virtual foi desenvolvida para facilitar as habilidades de multitarefa, “vm” foi colocado na frente do arquivo para mostrar que o kernel suporta memória virtual. Por um tempo, o kernel do Linux foi chamado vmlinux, mas o kernel ficou muito grande para caber na memória de inicialização disponível, então a imagem do kernel foi compactada e o x final foi alterado para z para mostrar que foi compactado com compactação zlib. Essa mesma compactação nem sempre é usada, muitas vezes substituída por LZMA ou BZIP2, e alguns kernels são chamados simplesmente de zImage.

A numeração da versão estará no formato A.B.C.D onde A.B provavelmente será 2.6, C será sua versão e D indica seus patches ou correções.

Na pasta / boot também haverá outros arquivos muito importantes chamados initrd.img-version, system.map-version e config-version. O arquivo initrd é usado como um pequeno disco RAM que extrai e executa o arquivo real do kernel.O arquivo system.map é usado para gerenciamento de memória antes que o kernel seja totalmente carregado, e o arquivo de configuração informa ao kernel quais opções e módulos carregar na imagem do kernel quando ela estiver sendo compilada.
Na pasta / boot também haverá outros arquivos muito importantes chamados initrd.img-version, system.map-version e config-version. O arquivo initrd é usado como um pequeno disco RAM que extrai e executa o arquivo real do kernel.O arquivo system.map é usado para gerenciamento de memória antes que o kernel seja totalmente carregado, e o arquivo de configuração informa ao kernel quais opções e módulos carregar na imagem do kernel quando ela estiver sendo compilada.

Arquitetura do Kernel Linux

Como o kernel do Linux é monolítico, tem a maior pegada e a maior complexidade em relação aos outros tipos de kernels. Este foi um recurso de design que estava bastante debatido nos primórdios do Linux e ainda carrega algumas das mesmas falhas de design que os kernels monolíticos são inerentes.

Uma coisa que os desenvolvedores do kernel Linux fizeram para contornar essas falhas foi criar módulos do kernel que pudessem ser carregados e descarregados em tempo de execução, o que significa que você pode adicionar ou remover recursos de seu kernel em tempo real. Isso pode ir além da simples adição de funcionalidade de hardware ao kernel, incluindo módulos que executam processos do servidor, como virtualização de baixo nível, mas também permite que o kernel inteiro seja substituído sem a necessidade de reinicializar o computador em algumas instâncias.

Imagine se você pudesse atualizar para um service pack do Windows sem precisar reinicializar…

Módulos do Kernel

E se o Windows tivesse todos os drivers disponíveis já instalados e você tivesse que ligar os drivers necessários? Isso é essencialmente o que os módulos do kernel fazem para o Linux. Módulos de kernel, também conhecidos como módulos de kernel carregáveis (LKM), são essenciais para manter o kernel funcionando com todo o seu hardware sem consumir toda a sua memória disponível.
E se o Windows tivesse todos os drivers disponíveis já instalados e você tivesse que ligar os drivers necessários? Isso é essencialmente o que os módulos do kernel fazem para o Linux. Módulos de kernel, também conhecidos como módulos de kernel carregáveis (LKM), são essenciais para manter o kernel funcionando com todo o seu hardware sem consumir toda a sua memória disponível.

Um módulo normalmente adiciona funcionalidade ao kernel base para coisas como dispositivos, sistemas de arquivos e chamadas do sistema. Os LKMs possuem a extensão de arquivo.ko e são tipicamente armazenados no diretório / lib / modules. Devido à sua natureza modular, você pode personalizar facilmente seu kernel configurando módulos para carregar ou não, durante a inicialização com o comando menuconfig ou editando seu arquivo / boot / config, ou pode carregar e descarregar módulos rapidamente com o modprobe comando.

Módulos de código fechado e de terceiros estão disponíveis em algumas distribuições, como o Ubuntu, e podem não ser instalados por padrão porque o código-fonte dos módulos não está disponível. O desenvolvedor do software (por exemplo, nVidia, ATI, entre outros) não fornece o código-fonte, mas constrói seus próprios módulos e compila os arquivos.ko necessários para distribuição. Embora esses módulos sejam gratuitos como na cerveja, eles não são gratuitos como na fala e, portanto, não são incluídos em algumas distribuições, porque os mantenedores sentem que “contamina” o kernel fornecendo software não-livre.

Um kernel não é mágico, mas é completamente essencial para qualquer computador que esteja funcionando corretamente. O kernel do Linux é diferente do OS X e do Windows porque inclui drivers no nível do kernel e faz com que muitas coisas sejam suportadas “fora da caixa”. Espero que você saiba um pouco mais sobre como o seu software e hardware trabalham juntos e quais arquivos você precisa para inicializar o seu computador.

Kernel.org Imagem por Ingridtaylar

Recomendado: