Tutorial do Kernel Linux para iniciantes

Tutorial do Kernel Linux para iniciantes

Informações em segundo plano sobre sistemas operacionais

Um sistema operacional, abreviado como OS, é um software que controla os componentes de hardware de um sistema, seja um telefone, laptop ou uma área de trabalho. É responsável pela comunicação entre o software e o hardware. Windows XP, Windows 8, Linux e Mac OS X são todos exemplos de sistemas operacionais. O sistema operacional consiste em:

  • O carregador de inicialização: software responsável pelo processo de inicialização do seu dispositivo.
  • O kernel: o núcleo do sistema e gerencia a CPU, a memória e os dispositivos periféricos.
  • Daemons: serviços de fundo.
  • Networking: Sistemas de comunicação para enviar e recuperar dados entre sistemas.
  • O shell: compreende um processo de comando que permite a manipulação do dispositivo através de comandos inseridos em uma interface de texto.
  • Servidor gráfico: o subsistema que mostra os gráficos na sua tela.
  • Ambiente da área de trabalho: é com isso que os usuários geralmente interagem com.
  • Aplicativos: são programas que executam as tarefas do usuário, como processadores de texto.

Espaço de kernel e espaço de usuários

Espaço do kernel: O kernel é encontrado em um estado elevado do sistema, que inclui um espaço de memória protegido e acesso total ao hardware do dispositivo. Este estado do sistema e espaço de memória são totalmente chamados de espaço do kernel. No espaço do kernel, o acesso principal aos serviços de hardware e sistema é gerenciado e fornecido como um serviço ao restante do sistema.

Espaço do usuário: Os aplicativos do usuário são realizados no espaço do usuário, onde eles podem atingir um subconjunto dos recursos disponíveis da máquina através de chamadas do sistema de kernel. Ao usar os serviços principais, desde que o kernel, um aplicativo de nível de usuário pode ser criado como um software de produtividade de jogo ou de escritório, por exemplo,.

Linux

O Linux ganhou popularidade ao longo dos anos devido a ser de código aberto, com base em um design do Unix, e portado para mais plataformas em comparação com outros sistemas operacionais concorrentes. É um sistema operacional, conforme indicado, que se assemelha a um sistema operacional UNIX-um sistema operacional multi-user estável, e que foi montado como um software gratuito e de código aberto para desenvolvimento e distribuição. O que significa que qualquer indivíduo ou empresa tem permissão para usar, imitar, estudar e alterar o sistema operacional Linux da maneira que desejar.

O kernel Linux

Desde seu primeiro lançamento em 17 de setembro de 1991, o kernel Linux desafiou todas as chances de ser o componente definidor do Linux. Foi lançado pela Linus Torvalds e utiliza o GNU/Linux para descrever o sistema operacional. O Android SO, baseado no kernel do Linux, no Smartphones fez o Linux vencer sua competição como a maior base de sistema operacional instalada de todos os sistemas operacionais de uso geral. A história do kernel Linux pode ser encontrada aqui.

Um kernel pode ser monolítico, microokernel ou híbrido (como o OS X e o Windows 7). O kernel Linux é um kernel de sistema operacional de computador monolítico que se assemelha ao sistema UNIX. A linha Linux de sistemas operacionais comumente referida como distribuições Linux são baseadas neste kernel. O kernel monolítico, diferentemente do microkernel, não apenas abrange a unidade central de processamento, memória e IPC, mas também possui drivers de dispositivo, chamadas de servidor de sistema e gerenciamento de sistema. Eles são melhores em se comunicar com hardware e executar várias tarefas simultaneamente. É por esse motivo que os processos aqui reagem a um ritmo rápido.

No entanto, os poucos contratempos são a enorme instalação e a pegada de memória necessária e a segurança inadequada, pois tudo opera no modo de supervisor. Por outro lado, um microkernel pode reagir lentamente às chamadas de aplicação como serviços de usuário e o kernel são separados. Eles são assim menores em tamanho quando comparados ao kernel monolítico. Os microkernels são facilmente extensíveis, mas é necessário mais código para escrever um microkernel. O kernel Linux está escrito nas linguagens C e de programação de montagem.

A relação Linux Kernel com o hardware

O kernel pode gerenciar o hardware do sistema através do que é chamado de interrupções. Quando o hardware deseja interagir com o sistema, é emitida uma interrupção que interrompe o processador que, por sua vez, faz o mesmo com o kernel. Para fornecer sincronização, o kernel pode desativar interrupções, seja um único ou todos eles. No Linux, no entanto, os manipuladores de interrupção não são executados em um contexto de processo, eles são executados em um contexto de interrupção não associado a nenhum processo.Esse contexto de interrupção em particular existe apenas para deixar um manipulador de interrupção responder rapidamente a uma interrupção individual e depois finalmente sair.

O que torna o kernel Linux diferente de outros kernels unsix clássicos?

Existem diferenças significativas entre o kernel Linux e os kernels UNIX clássicos; conforme listado abaixo:

  1. O Linux suporta carregamento dinâmico de módulos do kernel.
  2. O kernel Linux é preventivo.
  3. Linux tem um suporte simétrico de multiprocessador.
  4. Linux é gratuito devido à sua natureza de software aberto.
  5. Linux ignora alguns recursos do Unix padrão que os desenvolvedores do kernel chamam de “mal projetado.”
  6. O Linux fornece um modelo de dispositivo orientado a objetos com classes de dispositivos, eventos quentes e um sistema de dispositivo de espaço de espaço do usuário
  7. O kernel Linux falha em diferenciar os threads e processos normais.

Architechure

Componentes do kernel Linux

Um kernel é simplesmente um gerente de recursos; O recurso que está sendo gerenciado pode ser um processo, memória ou dispositivo de hardware. Ele gerencia e arbitra o acesso ao recurso entre vários usuários concorrentes. O kernel Linux existe no espaço do kernel, abaixo do espaço dos usuários, que é onde os aplicativos do usuário são executados. Para que o espaço do usuário se comunique com o espaço do kernel, é incorporada uma biblioteca GNU C, que fornece um fórum para a interface de chamada do sistema se conectar ao espaço do kernel e permitir a transição de volta ao espaço do usuário.

O kernel Linux pode ser categorizado em três níveis primários:

  1. A interface de chamada do sistema; Este é o mais alto e realiza as ações básicas, como ler e escrever.
  2. O código do kernel; está localizado abaixo da interface de chamada do sistema, é comum a todas as arquiteturas do processador suportadas pelo Linux, às vezes é definido como código do kernel independente da arquitetura.
  3. O código dependente da arquitetura; Ele está sob o código independente da arquitetura, forma o que geralmente é chamado de pacote de suporte à placa (BSP) - contém um pequeno programa chamado The Bootloader que coloca o sistema operacional e os drivers de dispositivo na memória.

A perspectiva arquitetônica do kernel Linux consiste em: interface de chamada do sistema, gerenciamento de processos, sistema de arquivos virtual, gerenciamento de memória, pilha de rede, arquitetura e drivers de dispositivo.

  1. Interface de chamada do sistema; é uma camada fina que é usada para realizar chamadas de função do espaço do usuário para o kernel. Esta interface pode ser dependente da arquitetura
  2. Gerenciamento de processos; está lá principalmente para executar os processos. Estes são chamados de tópico em um kernel e estão representando uma virtualização individual do processador específico
  3. Gerenciamento de memória; A memória é gerenciada no que é conhecido como páginas para eficiência. Linux inclui os métodos para gerenciar a memória disponível e os mecanismos de hardware para mapeamentos físicos e virtuais. O espaço de troca também é fornecido
  4. Sistema de arquivos virtual; Ele fornece uma abstração de interface padrão para os sistemas de arquivos. Ele fornece uma camada de comutação entre a interface de chamada do sistema e os sistemas de arquivos suportados pelo kernel.
  5. Pilha de rede; foi projetado como uma arquitetura em camadas modelada após os protocolos específicos.
  6. Drivers de dispositivo; Uma parte significativa do código -fonte no kernel Linux é encontrada nos drivers de dispositivo que tornam um dispositivo de hardware específico utilizável. Tutorial do driver de dispositivo
  7. Código dependente da arquitetura; Aqueles elementos que dependem da arquitetura em que correm, portanto, devem considerar o projeto arquitetônico para operação e eficiência normais.

Interfaces

Chamadas e interrupções do sistema

Os aplicativos passam informações para o kernel através de chamadas do sistema. Uma biblioteca contém funções com as quais os aplicativos funcionam. As bibliotecas, então, através da interface de chamada do sistema, instruem o kernel a executar uma tarefa que o aplicativo deseja. O que é uma chamada do sistema Linux?

As interrupções oferecem uma maneira pela qual o kernel Linux gerencia o hardware dos sistemas. Se o hardware tiver que se comunicar com um sistema, uma interrupção no processador faz o truque, e isso é passado para o kernel Linux.

Interfaces do kernel Linux

O kernel Linux oferece várias interfaces para os aplicativos de espaço do usuário que executam uma variedade de tarefas e têm propriedades diferentes. Existe duas interface de programação de aplicativos distintos (API); o Espaço do usuário do kernel e a kernel interno. A API Linux é a Kernel-Userspace API; Ele fornece acesso a programas no espaço do usuário nos recursos e serviços do sistema do kernel. É composto pela interface de chamada do sistema e pelas sub -rotinas da biblioteca GNU C.

Linux Abi

Isso se refere ao espaço do usuário do kernel ABI (interface binária do aplicativo). Isso é explicado como a interface que existe entre os módulos do programa. Ao comparar a API e a ABI, a diferença é que os ABIs são usados ​​para acessar códigos externos que já estão compilados enquanto a API são estruturas para gerenciar o software. Definir um ABI importante é principalmente o trabalho de distribuições Linux do que para o kernel Linux. Um ABI específico deve ser definido para cada conjunto de instruções, por exemplo, x86-64. Os usuários finais de produtos Linux estão interessados ​​no ABIS e não na API.

Interface de chamada do sistema

Como discutido anteriormente, isso desempenha um papel mais proeminente no kernel. É uma denominação de toda a parte de todas as chamadas do sistema existente.

A biblioteca padrão C

Todas as chamadas do sistema do kernel estão dentro da biblioteca GNU C, enquanto a API Linux é composta pela interface de chamada do sistema e pela biblioteca GNU C, também chamada de glibc.

Interface do sistema operacional portátil (POSIX)

Posix é um termo coletivo de padrões para manter a compatibilidade entre os sistemas operacionais. Ele declara a API juntamente com interfaces de utilidade e shells da linha de comando. A API Linux, não apenas os recursos utilizáveis ​​definidos pelo POSIX, mas também possui recursos adicionais em seu kernel:

  1. CGROUPS subsistema.
  2. O sistema do gerente de renderização direta chama.
  3. A Leia adiante recurso.
  4. Getrandom Ligue para que esteja presente em V 3.17.
  5. Chamadas de sistema como Futex, Epoll, emenda, dnotify, fanotify e inotificar.

Mais informações sobre o Posix Standard está aqui.

O kernel modular

As versões anteriores do kernel Linux eram de tal maneira que todas as suas partes foram estaticamente fixadas em uma, monolítica. No entanto, os núcleos Linux modernos têm a maior parte de sua funcionalidade contida em módulos que são colocados no kernel dinamicamente. Isso em contraste com os tipos monolíticos, é referido como kernels modulares. Essa configuração permite que um usuário carregue ou substitua os módulos em um kernel em execução sem a necessidade de reiniciar.

O módulo de kernel carregável Linux (LKM)

A maneira básica de adicionar código no kernel Linux é através da introdução de arquivos de origem na árvore de origem do kernel. No entanto, você pode querer adicionar um código enquanto o kernel está executando. O código adicionado dessa maneira é referido como um módulo de kernel carregado. Esses módulos específicos executam várias tarefas, mas são especificados em três: drivers de dispositivo, drivers de sistema de arquivos e chamadas de sistema.

O módulo de kernel carregado pode ser comparado às extensões do kernel em outros sistemas operacionais. Você pode colocar um módulo no kernel carregando -o como um LKM ou ligando -o ao kernel da base.

Os benefícios dos LKMs sobre a ligação ao kernel base:

  • A reconstrução do seu kernel geralmente não é necessária, economizando tempo e evita erros.
  • Eles ajudam a descobrir problemas do sistema, como bugs.
  • Lkms economizam seu espaço como você só os carrega quando precisar usá -los.
  • Dê um tempo de manutenção e depuração muito mais rápido.

Usos de LKMs

  1. Drivers de dispositivo; O kernel troca informações com hardware através disso. Um kernel deve ter o driver de um dispositivo antes de usá -lo.
  2. Drivers de sistema de arquivos; Isso traduz o conteúdo de um sistema de arquivos
  3. Chamadas de sistema; Os programas no espaço do usuário utilizam chamadas de sistema para adquirir serviços do kernel.
  4. Drivers de rede; Interpreta um protocolo de rede
  5. Intérpretes executáveis; carrega e gerencia um executável.

Compilando o kernel Linux

Ao contrário do que a maioria das pessoas diz, compilar o kernel Linux é uma tarefa simples. A seguir, é apresentada uma ilustração passo a passo do processo usando uma das distribuições Linux: Fedora 13 KDE. (É aconselhável fazer backup de seus dados e grub.confia apenas no caso de algo dar errado)

  1. De http: // kernel.Org site, faça o download da fonte.
  2. Enquanto estiver no seu diretório de downloads, extraia a fonte do kernel do arquivo, inserindo o seguinte comando no terminal:
    TAR XVJF Linux-2.6.37.alcatrão.BZ2
  3. Use o comando Faça do MrProper para limpar a área de construção antes de qualquer compilação.
  4. Use uma configuração, digamos Xconfig, essas configurações são projetadas para facilitar a execução de qualquer programa no Linux.
  5. Especifique os módulos e os recursos que você deseja que seu kernel conter.
  6. Depois de adquirir o .Config arquivo, o próximo passo é ir para Makefile
  7. Execute o comando make e aguarde a compilação passar.
  8. Instale os módulos usando o comando Make Modules_install
  9. Copie seu kernel e o mapa do sistema para /inicial.
  10. Execute o novo kernel-pkg para construir a lista de dependências de módulos e coisas como grub.conf

Atualizando o kernel

É possível atualizar um kernel Linux de uma versão mais antiga para um mais recente, mantendo todas as opções de configuração da versão anterior. Para conseguir isso, é preciso primeiro fazer backup do .Config arquivo no diretório de origem do kernel; Isso é caso algo dê errado ao tentar atualizar seu kernel. As etapas são:

  1. Obtenha o código fonte mais recente do kernel principal.Site da Org
  2. Aplique as variações na árvore de origem antiga para trazê -la à versão mais recente.
  3. Reconfigure o kernel com base no arquivo de configuração do kernel anterior que você fez backup.
  4. Construa o novo kernel.
  5. Agora você pode instalar o novo Build the kernel.

Baixando a nova fonte; Os desenvolvedores do kernel Linux entendem que alguns usuários podem não querer baixar o código -fonte completo para as atualizações do kernel, pois isso perderia tempo e largura de banda. Portanto, um patch é disponibilizado que pode atualizar uma liberação mais antiga do kernel. Os usuários só precisam saber qual patch se aplica a uma versão específica, pois um arquivo de patch do kernel atualizará apenas o código -fonte de uma versão específica. Os diferentes arquivos de patch podem ser aplicados pelas seguintes maneiras;

  1. Remendos estáveis ​​de kernel que se aplicam à versão do kernel base.
  2. Patches de liberação do kernel base se aplicam apenas à versão anterior do kernel
  3. Atualização incremental de patches de uma versão específica para a próxima versão. Isso permite que os desenvolvedores evitem a agitação de rebaixar e depois atualizar o kernel. Em vez disso, eles podem mudar de sua versão estável atual para a próxima versão estável.

Aqui estão as etapas mais detalhadas para o processo atualizar seu kernel da fonte no Debian, e de binários pré-construídos no CentOS e Ubuntu.

Conclusão

O kernel Linux atua principalmente como gerente de recursos atuando como uma camada abstrata para os aplicativos. Os aplicativos têm uma conexão com o kernel que, por sua vez, interage com o hardware e atende os aplicativos. Linux é um sistema multitarefa, permitindo que vários processos executem simultaneamente. O kernel Linux é popular devido à sua natureza de código aberto que permite aos usuários alterar o kernel para o que é adequado para eles e seu hardware. Portanto, pode ser usado em uma variedade de dispositivos, diferentemente de outros sistemas operacionais.

A característica modular do kernel Linux acrescenta mais emoção a seus usuários. Isso ocorre devido à grande variedade de modificações que podem ser feitas aqui sem reiniciar o sistema. A flexibilidade dá a seus usuários uma grande sala para atualizar suas imaginações.

Além disso, a natureza monolítica do kernel é uma grande vantagem, pois possui uma alta capacidade de processamento do que o microokernel. O principal revés com o tipo de kernel Linux é que, se algum de seus serviços falhar, todo o sistema descerá com ele. As versões mais recentes foram projetadas de uma maneira que, se um novo serviço for adicionado, não há necessidade de modificar todo o sistema operacional. Esta é uma melhoria quando comparada às versões anteriores.

Fontes

  1. Wikipedia Linux Kernel
  2. Interfaces do kernel Linux da Wikipedia
  3. Módulo de kernel carregável Linux como
  4. Linux.com guia para iniciantes
  5. https: // www.Quora.com/o que é-bom-tutorials-to-learn-linux-kernel
  6. https: // unix.Stackexchange.com/questões/1003/linux-kernel-beginners-tutorial
  7. https: // www.Howtogeek.COM/HOWTO/31632 // O QUE IIS-LINUX-KERNEL-A-WHAT-DOES-TO/