O Kernel Linux
O artigo refere-se à estrutura e funcionamento do Kernel Linux, com algumas sugestões de configurações.
Parte 2: Kernel Linux
A Organização Kernel Linux (Linux Kernel Organization) é uma Corporação de Benefício Público do Estado da Califórnia dos Estados Unidos da América, criada em 2002 para distribuir o Kernel do Linux e outros softwares de código aberto para o público, sem custos. É reconhecida pela IRS (Receita Federal Americana) como uma fundação privada operacional 501(c)3.
A Organização Kernel Linux é gerida pela Fundação Linux que oferece total apoio técnico, financeiro e pessoal para a execução e manutenção da infra-estrutura do kernel.org.
Os servidores estão localizados em Corvallis, Oregon, EUA; Palo Alto e San Francisco, Califórnia, EUA; Amsterdã, Holanda, e Umeå, na Suécia. O uso com violação de quaisquer leis, é proibido.
Linux é uma marca registrada de Linus Torvalds. Todas as marcas registradas são de propriedade de seus respectivos proprietários.
Ele atende às normas POSIX (Portable Operating System Interface), que pode ser traduzida como "Interface Portável entre Sistemas Operacionais" e está em conformidade com a especificação Single UNIX.
O Linux tem todas as características que se espera de um moderno e pleno sistema Unix, incluindo operações de multitarefa, memória virtual, bibliotecas compartilhadas, carregamento de demanda, executáveis compartilhados copy-on-write, gerenciamento de memória próprio e rede multistack, incluindo IPv4 e IPv6.
Embora originalmente desenvolvido em primeiro lugar para PCs 32 bits x86 (386 e acima), hoje o Linux também funciona em uma variedade de arquiteturas de outros processadores, como em todos os 32 bits e 64 bits.
Se você é novo no GNU/Linux e não quer baixar o kernel, que é apenas um componente do sistema Linux, mas você quer uma distribuição completa do Linux, existem inúmeras distribuições disponíveis para download na Internet, bem como para a compra de vários fornecedores.
Alguns são de uso geral e alguns são otimizados para usos específicos. Atualmente, existem espelhos de várias distribuições disponíveis em:
Note que, no entanto, a maioria das distribuições tem vários gigabytes e a menos que você tenha um link de Internet rápido, você pode poupar aborrecimentos e comprar um CD-ROM e/ou DVD com uma distribuição.
Texto adaptado de: https://www.kernel.org/linux.html
O Kernel Linux é lançado sob a licença GNU GPL versão 2 e, portanto, é Software Livre como definido pela Free Software Foundation. Você pode ler a cópia integral da licença no arquivo COPYING distribuído com cada versão do kernel do Linux.
A base de um sistema operacional é o kernel. O articulado e elegante sistema Linux, iniciado em 1991 pelo Finlandês Linus Torvalds, é formado basicamente pelo kernel, a biblioteca C, o compilador, a cadeia de ferramentas e os utilitários básicos do sistema, como o processo de conexão e o shell.
Um sistema Linux também inclui uma implementação X Windows System moderna, inclusive um ambiente da área de trabalho cheio de recursos, como o GNOME ou o KDE.
Todo o código fonte do kernel Linux está disponível na Internet em Kernel.org. O Kernel Linux é um software gratuito e open source, sendo que você está livre para alterar o código fonte e fazer qualquer modificação que quiser (se você souber como), mas, para serem efetivadas como parte oficial do Kernel Linux, estas modificações tem que obrigatoriamente resolver um problema real e específico, ter uma construção sadia e uma implementação clara. Esta é a política.
Nos sistemas modernos com unidades de gerenciamento de memória protegida, o kernel geralmente reside em um nível "mais alto" do sistema quando comparado com as aplicações normais do usuário.
Isto inclui um espaço da memória e um acesso completo para o hardware (geralmente através dos drivers). Esse estado do sistema e o espaço da memória são chamados coletivamente de "espaço do kernel" (Kernel Space).
Em oposição, as aplicações do usuário são executadas no "espaço do usuário" (User Space). Ao executar o kernel, o sistema está no espaço do kernel em oposição à execução normal do usuário no espaço do usuário.
As aplicações executadas no sistema se comunicam com o kernel através da "chamada do sistema" (Figura 1). Uma aplicação em geral chama as funções de uma biblioteca - por exemplo, a biblioteca C - que por sua vez conta com a interface de chamada do sistema para instruir o kernel a executar as tarefas em seu nome. Fonte: LOVE, Robert. Desenvolvimento do Kernel do Linux, 2004.
Algumas chamadas da biblioteca fornecem muitos recursos não encontrados na chamada do sistema. Quando uma aplicação executa uma chamada do sistema, é dito que o kernel está sendo executado em nome da aplicação. E mais, é dito que a aplicação está executando uma chamada do sistema no espaço do kernel e o kernel está sendo executado no contexto do processo.
Um programa em si não é um processo, um processo é um programa ativo com seus recursos afins. Dois ou mais processos podem existir executando o mesmo programa e compartilhando diversos recursos.
Um processo inicia sua vida através de uma chamada do sistema que cria um novo processo duplicando um já existente. Outro nome para processo, é tarefa. Porém, a denominação de um programa em execução no kernel é tida como uma tarefa e a denominação de um programa do espaço do usuário é tida como um processo.
O Linux transfere a execução do espaço do usuário para o espaço do kernel sempre que a aplicação fizer uma chamada ao sistema ou a aplicação for suspensa por uma interrupção de hardware. Num driver, algumas funções são executadas usando chamadas ao sistema e outras fazem interrupções.
Os kernels também gerenciam o hardware do sistema. Praticamente todas as arquiteturas fornecem o conceito de "interrupções". Quando o hardware deseja se comunicar com o sistema, ele emite uma interrupção que interrompe de modo assíncrono o kernel.
As interrupções, geralmente, estão associadas a um número. O kernel usa o número para executar uma "sub-rotina de interrupção" determinada para processar e responder à interrupção.
Por exemplo, quando você digita, o controlador do teclado emite uma interrupção para permitir que o sistema saiba que há dados no buffer do teclado. O kernel anota o número da interrupção sendo emitida e executa a sub-rotina de interrupção correta.
A sub-rotina de interrupção processa os dados do teclado e permite que o controlador do teclado saiba que está pronto para mais dados. Para fornecer a sincronização, o kernel pode desativar as interrupções - todas as interrupções ou apenas um número específico de interrupções.
As interrupções, as IRQs (Interrupt Request Line), podem ser vistas no Setup do CMOS da placa-mãe. O Setup do CMOS é chamado erroneamente de BIOS, pois BIOS é todo o sistema básico de entrada e saída (Basic Input/Output System), ou seja, é o sistema que vem instalado de fábrica no CMOS (Complementary Metal-Oxide-Semiconductor), que é um chip de circuitos integrados.
As IRQs são a forma pela qual os componentes de hardware requisitam um tempo computacional do sistema para a CPU. Uma IRQ é a sinalização de um pedido de interrupção de hardware.
Os computadores modernos compatíveis com o IBM PC, possuem 16 designações de IRQ (0-15), cada uma delas representando uma peça física (ou virtual) de hardware. Por exemplo, a IRQ0 é reservada para o temporizador do sistema, enquanto a IRQ1 é reservada para o teclado. Quanto menor for o número da IRQ, mais prioridade ela terá para ser processada.
No Linux, o ambiente gráfico (GNOME, KDE, etc), os programas e aplicativos (BrOffice; aMSN; iptables; BIND; navegadores como Firefox, Iceweasel, etc), grosso modo, estão instalados no sistema, mas as funções que estão habilitadas no kernel só serão carregadas para a memória quando o programa for usado.
Fazendo um comparativo, o Windows quando inicializa já carrega em memória a maioria das suas funções e processos, comumente chamados de drivers; o Linux só carrega o necessário para o kernel trabalhar. Por essa razão é que o Linux ocupa pouca memória.
O "monstruoso" Windows, com suas mais de 100 milhões de linhas de código auditadas (Windows 7 e Windows 8), é o que se chama de arquitetura fechada, ou seja, é um "pacote" fechado, onde você só pode instalar e desinstalar programas adicionais, mas não pode mudar o que vem com ele, pois seu código fonte não é aberto. O kernel do Windows tem em torno de 35 milhões de linhas.
O kernel do Linux, na versão 2.6.27 ultrapassou 10 milhões de linhas de código, incluindo espaços, comentários e documentação. São mais de dez milhões de linhas ocupando o mesmo espaço na memória.
2. Tem suporte do multiprocessador simétrico (SMP).
3. O Kernel Linux é antecipado (preemptive). É capaz de antecipar uma tarefa, caso ela esteja sendo executada no kernel.
4. O Kernel Linux não tem drivers no user space, e sim Kernel Loadable Modules que rodam no Kernel.
5. O Kernel Linux não pode utilizar aritmética de ponto flutuante.
6. A memória do Kernel Linux não é paginável. Cada byte de memória consumido é um byte a menos na memória física, portanto, seja seletivo e cauteloso ao compilar módulos como built-in no kernel.
7. O Kernel Linux executa operações em segundo plano através das threads - processos-padrões que existem unicamente no kernel space e não trocam de contexto no user space, porém, são programáveis e são preemptive (antecipados) como processos normais.
Uma thread do kernel pode ser criada apenas por outra thread do kernel. O Linux não diferencia o que é threads do que é processo normal (threads significa linha de execução e é uma forma de um processo dividir a si mesmo em duas ou mais tarefas que podem ser executadas concorrentemente).
Para o Kernel Linux todos os processos são iguais e apenas compartilham recursos. Mais claramente: para o Kernel Linux não há conceito de threads. Uma thread no Linux é meramente um processo que compartilha certos recursos, diferentemente de outros sistemas operacionais, como o Microsoft Windows e o Oracle Solaris, que tem um suporte explícito para threads.
8. Quando um processo ou uma tarefa termina, o Kernel Linux libera os recursos e notifica os outros processos e tarefas que estavam associados a eles.
9. O Kernel Linux é gratuito, em todos os sentidos da palavra.
A Organização Kernel Linux é gerida pela Fundação Linux que oferece total apoio técnico, financeiro e pessoal para a execução e manutenção da infra-estrutura do kernel.org.
Os servidores estão localizados em Corvallis, Oregon, EUA; Palo Alto e San Francisco, Califórnia, EUA; Amsterdã, Holanda, e Umeå, na Suécia. O uso com violação de quaisquer leis, é proibido.
Linux é uma marca registrada de Linus Torvalds. Todas as marcas registradas são de propriedade de seus respectivos proprietários.
O que é o Linux?
Linux é um clone do sistema operacional Unix, mas não é um Unix, uma vez que não tem mais nenhum código do Unix original, e seu kernel foi escrito a partir do zero, por Linus Benedict Torvalds, com a assistência de uma equipe de hackers da Net.Ele atende às normas POSIX (Portable Operating System Interface), que pode ser traduzida como "Interface Portável entre Sistemas Operacionais" e está em conformidade com a especificação Single UNIX.
O Linux tem todas as características que se espera de um moderno e pleno sistema Unix, incluindo operações de multitarefa, memória virtual, bibliotecas compartilhadas, carregamento de demanda, executáveis compartilhados copy-on-write, gerenciamento de memória próprio e rede multistack, incluindo IPv4 e IPv6.
Embora originalmente desenvolvido em primeiro lugar para PCs 32 bits x86 (386 e acima), hoje o Linux também funciona em uma variedade de arquiteturas de outros processadores, como em todos os 32 bits e 64 bits.
Se você é novo no GNU/Linux e não quer baixar o kernel, que é apenas um componente do sistema Linux, mas você quer uma distribuição completa do Linux, existem inúmeras distribuições disponíveis para download na Internet, bem como para a compra de vários fornecedores.
Alguns são de uso geral e alguns são otimizados para usos específicos. Atualmente, existem espelhos de várias distribuições disponíveis em:
Note que, no entanto, a maioria das distribuições tem vários gigabytes e a menos que você tenha um link de Internet rápido, você pode poupar aborrecimentos e comprar um CD-ROM e/ou DVD com uma distribuição.
Texto adaptado de: https://www.kernel.org/linux.html
O Kernel Linux é lançado sob a licença GNU GPL versão 2 e, portanto, é Software Livre como definido pela Free Software Foundation. Você pode ler a cópia integral da licença no arquivo COPYING distribuído com cada versão do kernel do Linux.
A base de um sistema operacional é o kernel. O articulado e elegante sistema Linux, iniciado em 1991 pelo Finlandês Linus Torvalds, é formado basicamente pelo kernel, a biblioteca C, o compilador, a cadeia de ferramentas e os utilitários básicos do sistema, como o processo de conexão e o shell.
Um sistema Linux também inclui uma implementação X Windows System moderna, inclusive um ambiente da área de trabalho cheio de recursos, como o GNOME ou o KDE.
Todo o código fonte do kernel Linux está disponível na Internet em Kernel.org. O Kernel Linux é um software gratuito e open source, sendo que você está livre para alterar o código fonte e fazer qualquer modificação que quiser (se você souber como), mas, para serem efetivadas como parte oficial do Kernel Linux, estas modificações tem que obrigatoriamente resolver um problema real e específico, ter uma construção sadia e uma implementação clara. Esta é a política.
Nos sistemas modernos com unidades de gerenciamento de memória protegida, o kernel geralmente reside em um nível "mais alto" do sistema quando comparado com as aplicações normais do usuário.
Isto inclui um espaço da memória e um acesso completo para o hardware (geralmente através dos drivers). Esse estado do sistema e o espaço da memória são chamados coletivamente de "espaço do kernel" (Kernel Space).
Em oposição, as aplicações do usuário são executadas no "espaço do usuário" (User Space). Ao executar o kernel, o sistema está no espaço do kernel em oposição à execução normal do usuário no espaço do usuário.
As aplicações executadas no sistema se comunicam com o kernel através da "chamada do sistema" (Figura 1). Uma aplicação em geral chama as funções de uma biblioteca - por exemplo, a biblioteca C - que por sua vez conta com a interface de chamada do sistema para instruir o kernel a executar as tarefas em seu nome. Fonte: LOVE, Robert. Desenvolvimento do Kernel do Linux, 2004.
Algumas chamadas da biblioteca fornecem muitos recursos não encontrados na chamada do sistema. Quando uma aplicação executa uma chamada do sistema, é dito que o kernel está sendo executado em nome da aplicação. E mais, é dito que a aplicação está executando uma chamada do sistema no espaço do kernel e o kernel está sendo executado no contexto do processo.
Um programa em si não é um processo, um processo é um programa ativo com seus recursos afins. Dois ou mais processos podem existir executando o mesmo programa e compartilhando diversos recursos.
Um processo inicia sua vida através de uma chamada do sistema que cria um novo processo duplicando um já existente. Outro nome para processo, é tarefa. Porém, a denominação de um programa em execução no kernel é tida como uma tarefa e a denominação de um programa do espaço do usuário é tida como um processo.
O Linux transfere a execução do espaço do usuário para o espaço do kernel sempre que a aplicação fizer uma chamada ao sistema ou a aplicação for suspensa por uma interrupção de hardware. Num driver, algumas funções são executadas usando chamadas ao sistema e outras fazem interrupções.
Os kernels também gerenciam o hardware do sistema. Praticamente todas as arquiteturas fornecem o conceito de "interrupções". Quando o hardware deseja se comunicar com o sistema, ele emite uma interrupção que interrompe de modo assíncrono o kernel.
As interrupções, geralmente, estão associadas a um número. O kernel usa o número para executar uma "sub-rotina de interrupção" determinada para processar e responder à interrupção.
Por exemplo, quando você digita, o controlador do teclado emite uma interrupção para permitir que o sistema saiba que há dados no buffer do teclado. O kernel anota o número da interrupção sendo emitida e executa a sub-rotina de interrupção correta.
A sub-rotina de interrupção processa os dados do teclado e permite que o controlador do teclado saiba que está pronto para mais dados. Para fornecer a sincronização, o kernel pode desativar as interrupções - todas as interrupções ou apenas um número específico de interrupções.
As interrupções, as IRQs (Interrupt Request Line), podem ser vistas no Setup do CMOS da placa-mãe. O Setup do CMOS é chamado erroneamente de BIOS, pois BIOS é todo o sistema básico de entrada e saída (Basic Input/Output System), ou seja, é o sistema que vem instalado de fábrica no CMOS (Complementary Metal-Oxide-Semiconductor), que é um chip de circuitos integrados.
As IRQs são a forma pela qual os componentes de hardware requisitam um tempo computacional do sistema para a CPU. Uma IRQ é a sinalização de um pedido de interrupção de hardware.
Os computadores modernos compatíveis com o IBM PC, possuem 16 designações de IRQ (0-15), cada uma delas representando uma peça física (ou virtual) de hardware. Por exemplo, a IRQ0 é reservada para o temporizador do sistema, enquanto a IRQ1 é reservada para o teclado. Quanto menor for o número da IRQ, mais prioridade ela terá para ser processada.
No Linux, o ambiente gráfico (GNOME, KDE, etc), os programas e aplicativos (BrOffice; aMSN; iptables; BIND; navegadores como Firefox, Iceweasel, etc), grosso modo, estão instalados no sistema, mas as funções que estão habilitadas no kernel só serão carregadas para a memória quando o programa for usado.
Fazendo um comparativo, o Windows quando inicializa já carrega em memória a maioria das suas funções e processos, comumente chamados de drivers; o Linux só carrega o necessário para o kernel trabalhar. Por essa razão é que o Linux ocupa pouca memória.
O "monstruoso" Windows, com suas mais de 100 milhões de linhas de código auditadas (Windows 7 e Windows 8), é o que se chama de arquitetura fechada, ou seja, é um "pacote" fechado, onde você só pode instalar e desinstalar programas adicionais, mas não pode mudar o que vem com ele, pois seu código fonte não é aberto. O kernel do Windows tem em torno de 35 milhões de linhas.
O kernel do Linux, na versão 2.6.27 ultrapassou 10 milhões de linhas de código, incluindo espaços, comentários e documentação. São mais de dez milhões de linhas ocupando o mesmo espaço na memória.
Características do kernel Linux
1. Suporta o carregamento dinâmico dos módulos do kernel. Embora o kernel do Linux seja monolítico, é capaz de carregar e descarregar dinamicamente o código do kernel segundo a demanda.2. Tem suporte do multiprocessador simétrico (SMP).
3. O Kernel Linux é antecipado (preemptive). É capaz de antecipar uma tarefa, caso ela esteja sendo executada no kernel.
4. O Kernel Linux não tem drivers no user space, e sim Kernel Loadable Modules que rodam no Kernel.
5. O Kernel Linux não pode utilizar aritmética de ponto flutuante.
6. A memória do Kernel Linux não é paginável. Cada byte de memória consumido é um byte a menos na memória física, portanto, seja seletivo e cauteloso ao compilar módulos como built-in no kernel.
7. O Kernel Linux executa operações em segundo plano através das threads - processos-padrões que existem unicamente no kernel space e não trocam de contexto no user space, porém, são programáveis e são preemptive (antecipados) como processos normais.
Uma thread do kernel pode ser criada apenas por outra thread do kernel. O Linux não diferencia o que é threads do que é processo normal (threads significa linha de execução e é uma forma de um processo dividir a si mesmo em duas ou mais tarefas que podem ser executadas concorrentemente).
Para o Kernel Linux todos os processos são iguais e apenas compartilham recursos. Mais claramente: para o Kernel Linux não há conceito de threads. Uma thread no Linux é meramente um processo que compartilha certos recursos, diferentemente de outros sistemas operacionais, como o Microsoft Windows e o Oracle Solaris, que tem um suporte explícito para threads.
8. Quando um processo ou uma tarefa termina, o Kernel Linux libera os recursos e notifica os outros processos e tarefas que estavam associados a eles.
9. O Kernel Linux é gratuito, em todos os sentidos da palavra.