5Aug
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 o qual é usado?
Então, o que é o Kernel?
Um kernel é o nível mais baixo de software facilmente substituível que interage com o hardware em seu computador.É responsável pela interface de todos os seus aplicativos que estão sendo executados no "modo usuário" até o hardware físico e permitindo que os processos, conhecidos como servidores, obtenham informações entre si usando a comunicação entre processos( IPC).
Diferentes tipos de kernels
Existem, obviamente, diferentes maneiras de construir um kernel e considerações arquitetônicas ao criar um do zero. Em geral, a maioria dos grãos se enquadra em um dos três tipos: monolítico, microkernel e híbrido. O Linux é um kernel monolítico, enquanto o OS X( XNU) eo Windows 7 usam kernels híbridos. Vamos dar um rápido passeio pelas três categorias para que possamos entrar em mais detalhes mais tarde.
Imagem por palhaço da popa
Microkernel
Um microkernel assume a abordagem de apenas gerenciar o que tem para: CPU, memória e IPC.Praticamente tudo o resto em um computador pode ser visto como um acessório e pode ser manipulado 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 possuem um espaço muito pequeno, tanto para a memória quanto para o espaço de instalação, e eles tendem a ser mais seguros porque somente os processos específicos são executados no modo de usuário, que não possui as permissões elevadas como modo supervisor.
Prós
- Portabilidade
- Pequena pegada de instalação
- Pegada de memória pequena
- Segurança
Contras
- O hardware é mais abstraído através de drivers
- O hardware pode reagir mais devagar porque os drivers estão no modo de usuário
- Os processos precisam esperar em uma fila para obter informações
- Processos não podemObtenha acesso a outros processos sem aguardar
Monolithic Kernel
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 coisas como drivers de dispositivo, gerenciamento de sistema de arquivos e chamadas de servidor do sistema. Os núcleos monolíticos tendem a ser melhores no acesso ao hardware e na multitarefa, porque se um programa precisa obter informações da memória ou outro processo executado, ele possui uma linha mais direta para acessá-lo e não precisa esperar em uma fila para fazer as coisas. Isso, no entanto, pode causar problemas porque quanto mais coisas funcionam no modo supervisor, mais coisas podem reduzir seu sistema se não se comportar corretamente.
Prós
- Acesso mais direto ao hardware para programas
- Mais fácil para que os processos se comuniquem entre o
- Se o seu dispositivo é suportado, ele deve funcionar sem instalações adicionais
- Processos reagem mais rápido porque não há uma fila para tempo de processador
Contras
- Grandeinstalar a pegada
- Pegada de memória grande
- Menos seguro porque tudo é executado no modo supervisor
Imagem via schoschie no Flickr
Hybrid Kernel
Os kernels híbridos têm a capacidade de escolher e escolher o que eles querem executar no modo de usuário e o que eles querem executar no supervisormodo. Muitas vezes, as coisas como drivers de dispositivo e E / S de sistema de arquivos serão executadas no modo de usuário enquanto as chamadas de IPC e servidor serão mantidas no modo supervisor. Isso dá o melhor dos dois mundos, mas muitas vezes exigirá mais trabalho do fabricante do hardware, porque toda a responsabilidade do motorista depende deles. Também pode ter alguns dos problemas de latência inerentes aos microkernels.
Prós
- O desenvolvedor pode escolher o que corre no modo de usuário e o que corre no modo supervisor
- Pegada de instalação menor que o kernel monolítico
- Mais flexível que outros modelos
Contras
- Pode sofrer o mesmo atraso do processo como o microkernel
- Os drivers do dispositivo precisam ser gerenciados pelo usuário( normalmente)
Onde estão os arquivos do Kernel do Linux?
O arquivo kernel, no Ubuntu, está armazenado em sua pasta / boot e é chamado vmlinuz- versão .O nome vmlinuz vem do mundo do Unix, onde eles costumavam chamar seus kernels simplesmente "unix" nos anos 60, então o Linux começou a chamar seu kernel "linux" quando foi desenvolvido pela primeira vez na década de 90.
Quando a memória virtual foi desenvolvida para habilidades de multitarefa mais fáceis, "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 de vmlinux, mas o kernel ficou muito grande para caber na memória de inicialização disponível, de modo que a imagem do kernel foi compactada e o final x foi alterado para um z para mostrar que foi comprimido com compressão zlib. Esta mesma compressão nem sempre é usada, muitas vezes substituída por LZMA ou BZIP2, e alguns kernels são simplesmente chamados de zImage.
A numeração da versão será 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 kernel real. O arquivo system.map é usado para gerenciamento de memória antes que o kernel seja totalmente carregado, e o arquivo de configuração informa o kernel sobre as opções e módulos a serem carregados na imagem do kernel quando ele está sendo compilado.
Arquitetura de kernel do Linux
Como o kernel do Linux é monolítico, possui a maior pegada e a maior complexidade em relação aos outros tipos de kernels. Esta era uma característica de design que estava debaixo de um pouco de debate nos primeiros dias do Linux e ainda traz algumas das mesmas falhas de design que os kernels monolíticos são inerentes a ter.
Uma coisa que os desenvolvedores do kernel do Linux fizeram para contornar essas falhas era fazer módulos do kernel que pudessem ser carregados e descarregados no tempo de execução, o que significa que você pode adicionar ou remover recursos do seu kernel sobre a marcha. Isso pode ir além de adicionar funcionalidade de hardware ao kernel, incluindo módulos que executam processos do servidor, como a virtualização de baixo nível, mas também pode permitir que o kernel inteiro seja substituído sem precisar reiniciar seu computador em alguns casos.
Imagine se você poderia atualizar para um service pack do Windows sem precisar reiniciar. ..
Kernel Modules
E se o Windows tivesse todos os drivers disponíveis já instalados e você precisava ativar os drivers que você precisava? Isso é essencialmente o que os módulos do kernel fazem para o Linux. Os módulos Kernel, também conhecidos como módulo de kernel carregável( LKM), são essenciais para manter o kernel em funcionamento com todo o seu hardware sem consumir toda a sua memória disponível.
Um módulo geralmente adiciona funcionalidade ao kernel básico para coisas como dispositivos, sistemas de arquivos e chamadas de sistema. Os LKMs têm a extensão de arquivo. ko e normalmente são armazenados no diretório de módulos /lib/.Devido à sua natureza modular, você pode personalizar facilmente seu kernel configurando módulos para carregar ou não carregar durante a inicialização com o comando menuconfig ou editando seu arquivo de configuração /boot/, ou você pode carregar e descarregar módulos on-line com o comando modprobe.
Os módulos de terceiros e de fonte fechada 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( ou seja, nVidia, ATI, entre outros) não fornece o código fonte, mas sim constrói seus próprios módulos e compila os arquivos. ko necessários para distribuição. Embora estes módulos sejam gratuitos, como na cerveja, eles não são gratuitos, como na fala e, portanto, não estão incluídos em algumas distribuições porque os mantenedores sentem que "mancha" 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, pois 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 seu software e hardware funcionam juntos e quais arquivos você precisa para inicializar seu computador.
Kernel.org
Imagem por ingridtaylar