0% acharam este documento útil (0 voto)
320 visualizações8 páginas

Linux Kernel PDF

Linux Kernel PDF

Enviado por

nuubilol
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
320 visualizações8 páginas

Linux Kernel PDF

Linux Kernel PDF

Enviado por

nuubilol
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 8

Anatomia do Kernel Linux

Histrico e Decomposio Arquitetural

M. Tim Jones 06/Jun/2007


Consultant Engineer
Emulex Corp.

O kernel Linux o ncleo de um sistema operacional complexo e grande e, apesar do tamanho, bem
organizado em termos de subsistemas e camadas. Neste artigo, explore a estrutura geral do kernel Linux
e conhea seus principais subsistemas e interfaces centrais. Sempre que possvel, haver links para outros
artigos da IBM que o ajudaro a se aprofundar no assunto.

Como o objetivo deste artigo apresent-lo o kernel Linux e explorar sua arquitetura e componentes
principais, vamos comear por um breve tour pelo histrico do kernel Linux, em seguida, observaremos sua
arquitetura e, finalmente, examinaremos seus principais subsistemas. O kernel Linux formado por mais
de seis milhes de linhas de cdigo, portanto, esta introduo no completa. Para informaes adicionais,
utilize os ponteiros.

Um Breve Tour pelo Histrico do Linux


Linux ou GNU/Linux?
Provavelmente foi notado que o Linux, como sistema operacional, s vezes referido como "Linux"
e, outras vezes, como "GNU/Linux." O motivo que o Linux o kernel de um sistema operacional.
A ampla diversidade de aplicativos que tornam um sistema operacional til forma o software
GNU. Por exemplo, o sistema com janelas, o compilador, a variedade de shells, as ferramentas de
desenvolvimento, os editores, os utilitrios e outros aplicativos existem externamente ao kernel,
muitos dos quais so softwares GNU. Por isso, muitos consideram "GNU/Linux" um nome mais
apropriado para o sistema operacional, enquanto "Linux" adequado para se referir somente ao kernel.

Embora o Linux seja possivelmente o sistema operacional de software livre mais popular, seu histrico
, na verdade, bastante breve, considerando a cronologia dos sistemas operacionais. Nos primrdios da
computao, os programadores desenvolviam diretamente sobre o hardware, na linguagem dele. A ausncia
de um sistema operacional significava que apenas um aplicativo (e um usurio) por vez poderia utilizar
o dispositivo grande e dispendioso. Os primeiros sistemas operacionais foram desenvolvidos nos anos
1950, para fornecer uma experincia mais simples de desenvolvimento. Como exemplos temos o Sistema
Operacional da General Motors (GMOS), desenvolvido para o IBM 701, e o FORTRAN Monitor System
(FMS) desenvolvido pela North American Aviation para o IBM 709.

Copyright IBM Corporation 2007. Todos os direitos reservados. Marcas Registradas


Anatomia do Kernel Linux Pgina 1 de 8
developerWorks ibm.com/developerWorks/br/

Nos anos 1960, o Instituto de Tecnologia de Massachusetts (MIT) e um grupo de empresas desenvolveram
um sistema operacional experimental chamado Multics (ou Multiplexed Information and Computing
Service) para o GE-645. Um dos desenvolvedores desse sistema operacional, o AT&T, retirou-se da Multics
e desenvolveu seu prprio sistema operacional em 1970, chamado Unics. Junto a esse sistema operacional
havia a linguagem C, para a qual C foi desenvolvido e, em seguida, reformulado para tornar porttil o
desenvolvimento do sistema operacional.

Vinte anos depois, Andrew Tanenbaum criou uma verso de microkernel do UNIX, chamada MINIX (ou
minimal UNIX ), que era executada em computadores pessoais. Esse sistema operacional de software livre
inspirou o desenvolvimento inicial de Linus Torvalds da Linux no comeo dos anos 1990 (consulte a Figura
1).

Figura 1. Breve Histrico dos Principais Releases do Kernel Linux

O Linux evoluiu rapidamente de um projeto de uma s pessoa para um projeto mundial de desenvolvimento
envolvendo milhares de desenvolvedores. Uma das mais importantes decises para o Linux foi adotar a
GNU General Public License (GPL). Sob a GPL, o kernel Linux ficava protegido da explorao comercial
e tambm se beneficiava do desenvolvimento do espao de usurio do projeto GNU (de Richard Stallman,
cujo cdigo de origem impede o do kernel Linux). Isso possibilitou aplicativos teis, como o GNU Compiler
Collection (GCC), e vrios suportes de shell.

Introduo ao Kernel Linux


Agora passemos a uma viso mais ampla da arquitetura do sistema operacional GNU/Linux. possvel
imaginar um sistema operacional a partir de dois nveis, conforme mostra a Figura 2.

Anatomia do Kernel Linux Pgina 2 de 8


ibm.com/developerWorks/br/ developerWorks

Figura 2. A Arquitetura Fundamental do Sistema Operacional GNU/Linux

Mtodos para a Interface de Chamada do Sistema (SCI)


Na verdade, a arquitetura no to clara quanto mostrada na Figura 2. Por exemplo, o mecanismo pelo
qual as chamadas do sistema so manipuladas (mudando do espao de usurio ao espao do kernel)
pode ter uma diferena de arquitetura. As Unidades de Processamento Centrais (CPUs) x86 mais
novas que oferecem suporte para instrues de virtualizao so mais eficazes neste processo do que
os processadores x86 mais antigos, que usam o mtodo tradicional int 80h.

Na parte superior, temos o espao de usurio ou do aplicativo. Este o espao no qual os aplicativos de
usurio so executados. Abaixo do espao de usurio est o espao do kernel. Aqui, o kernel Linux existe.

H tambm a GNU C Library (glibc). Ela fornece a interface de chamada do sistema que se conecta ao
kernel e fornece o mecanismo para transio entre o aplicativo de espao de usurio e o kernel. Isso
importante, pois o kernel e o aplicativo do usurio ocupam espaos de endereos diferentes e protegidos. E
embora cada processo de espao de usurio ocupe seu prprio espao de endereo virtual, o kernel ocupa um
nico espao de endereo. Para obter informaes adicionais, consulte os links na seo Recursos.

O kernel Linux pode ainda ser dividido em trs nveis completos. Na parte superior, a interface de chamada
do sistema, que implementa as funes bsicas, como read e write. Abaixo da interface de chamada do sistema
est o cdigo do kernel, que pode ser mais precisamente definido como o cdigo do kernel independente da
arquitetura. Esse cdigo comum a todas as arquiteturas do processador s quais o Linux oferece suporte.
Abaixo, est o cdigo dependente da arquitetura, que forma o que mais comumente chamado de BSP
(Board Support Package). Este cdigo atua como o processador e o cdigo especfico da plataforma para a
arquitetura em questo.

Propriedades do Kernel Linux


Ao discutir a arquitetura de um sistema amplo e complexo, possvel visualizar o sistema sob vrias
perspectivas. Um objetivo de uma decomposio de arquitetura fornecer um modo de compreender melhor
a origem, e isso que faremos aqui.

O kernel Linux implementa vrios atributos importantes de arquitetura. Em um nvel avanado e em nveis
mais baixos, o kernel dividido em camadas em diversos subsistemas distintos. O Linux pode tambm
ser considerado monoltico porque agrupa todos os servios bsicos dentro do kernel. Isso o diferencia
da arquitetura de microkernel, na qual o kernel fornece servios bsicos, como comunicao, E/S e

Anatomia do Kernel Linux Pgina 3 de 8


developerWorks ibm.com/developerWorks/br/

gerenciamento de memria e processo, e servios mais especficos so plugados na camada do microkernel.


Cada um tem suas prprias vantagens, mas vou me afastar desse debate.

Com o tempo, o kernel Linux tornou-se eficaz tanto em termos de memria quanto de uso da CPU, alm
de ser extremamente estvel. Contudo, o aspecto mais interessante do Linux, considerando seu tamanho
e sua complexidade, sua portabilidade. Ele pode ser compilado para executar uma grande quantidade
de processadores e plataformas com diferentes limitaes e necessidades de arquitetura. Um exemplo a
capacidade do Linux em executar em um processo com uma Memory Management Unit (MMU), bem como
em processos que no fornecem MMU. A porta uClinux do kernel Linux fornecida para suporte a no-
MMU. Consulte a seo Recursos para obter mais detalhes.

Principais Subsistemas do Kernel Linux


Vejamos agora alguns dos principais componentes do kernel Linux utilizando a perspectiva mostrada na
Figura 3 como guia.

Figura 3. Uma Perspectiva de Arquitetura do Kernel Linux

Interface de Chamada do Sistema


A SCI uma camada fina que fornece meios para efetuar as chamadas de funes a partir do espao de
usurio no kernel. Conforme discutido anteriormente, essa interface pode ser dependente da arquitetura,
mesmo dentro da mesma famlia de processadores. A SCI , na verdade, um interessante servio de
multiplexao e desmultiplexao de chamada de funes. possvel encontrar a implementao da SCI
em ./linux/kernel, bem como as partes dependentes da arquitetura em ./linux/arch. Mais detalhes desse
componente esto disponveis na seo Recursos.

Gerenciamento de Processos
O que um Kernel?
Como mostrado na Figura 3, um kernel, na verdade, no nada mais do que um gerenciador de
recursos. Se o recurso que est sendo gerenciado for um processo, uma memria ou um dispositivo de
hardware, o kernel gerencia e intermedeia o acesso ao recurso entre os vrios usurios concorrentes
(no kernel e no espao do usurio).

O gerenciamento de processo tem foco na execuo de processos. No kernel, eles so chamados de


encadeamentos e representam uma virtualizao individual do processador (cdigo de encadeamento,
dados, pilha e registros de CPU). No espao do usurio, o termo processo geralmente utilizado, embora

Anatomia do Kernel Linux Pgina 4 de 8


ibm.com/developerWorks/br/ developerWorks

a implementao do Linux no separe os dois conceitos (processos e encadeamentos). O kernel fornece


uma Interface de Programao de Aplicativo (API) atravs da SCI para criar um novo processo (funes
fork, exec, ou Portable Operating System Interface [POSIX]), parar um processo (kill, exit) e executar a
comunicao e sincronizao entre eles (mecanismos signal ou POSIX).

Alm disso, no gerenciamento de processo h a necessidade de compartilhar a CPU entre os encadeamentos


ativos. O kernel implementa um novo algoritmo de planejamento que opera em tempo constante,
independentemente do nmero de encadeamentos competindo pela CPU. Isso chamado de planejador
O(1), denotando que se leva a mesma quantidade de tempo para planejar um encadeamento ou muitos. O
planejador O(1) tambm oferece suporte a vrios processadores (chamado Symmetric MultiProcessing,
ou SMP). possvel encontrar as origens do gerenciamento de processo em ./linux/kernel e as origens
dependentes de arquitetura em ./linux/arch). possvel saber mais sobre esse algoritmo na seo Recursos.

Gerenciamento de Memria
Outro importante recurso gerenciado pelo kernel a memria. Em termos de eficincia, dada a forma como
o hardware gerencia a memria virtual, a memria gerenciada no que so chamadas pginas (de 4KB na
maioria das arquiteturas). O Linux inclui os meios para gerenciar a memria disponvel, assim como os
mecanismos de hardware para mapeamento fsico e virtual.

Mas o gerenciamento de memria muito mais do que gerenciar buffers de 4KB. O Linux fornece
abstraes acima de buffers de 4KB, como o alocador slab. Esse esquema de gerenciamento de memria
utiliza buffers de 4KB como base, mas, em seguida, aloca estruturas internamente, rastreando quais
pginas esto completas, parcialmente usadas e vazias. Isso permite que o esquema aumente e diminua
dinamicamente, com base nas necessidades do sistema geral.

Ao oferecer suporte de memria a vrios usurios, h ocasies em que a memria disponvel pode
esgotar-se. Por isso, as pginas podem ser movidas da memria para o disco. Esse processo chamado de
troca porque as pginas so trocadas da memria para o disco rgido. possvel encontrar as origens de
gerenciamento de memria em ./linux/mm.

Sistema de Arquivo Virtual


O Sistema de Arquivo Virtual (VFS) um aspecto interessante do kernel Linux, porque fornece uma
abstrao de interface aos sistemas de arquivos. O VFS fornece uma camada de troca entre a SCI e os
sistemas de arquivos aos quais o kernel oferece suporte (consulte a Figura 4).

Anatomia do Kernel Linux Pgina 5 de 8


developerWorks ibm.com/developerWorks/br/

Figura 4. O VFS Fornece uma Malha de Comutao Entre Usurios e Sistemas de


Arquivos

No topo do VFS h uma abstrao comum de funes da API como open, close, read e write. Na parte
inferior do VFS encontram-se as abstraes do sistema de arquivo que definem como as funes da camada
superior so implementadas. Elas so plug-ins para o sistema de arquivos fornecido (existem mais de 50
deles). possvel encontrar as origens do sistema de arquivos em ./linux/fs.

Abaixo da camada do sistema de arquivos est o cache do buffer, que fornece um conjunto comum de
funes camada do sistema de arquivos (independente de qualquer sistema de arquivos especfico). Essa
camada de armazenamento em cache otimiza o acesso aos dispositivos fsicos mantendo os dados por perto
durante um breve perodo (ou especulativamente j lidos, para que fiquem disponveis quando necessrios).
Abaixo do cache do buffer esto os drivers de dispositivo, que implementam a interface para o dispositivo
fsico especfico.

Pilha de Redes
A pilha de redes, pela estrutura, segue uma arquitetura em camadas modelada aps os prprios protocolos.
Lembre-se de que o Protocolo de Internet (IP) o protocolo principal de camadas de rede situado abaixo do
protocolo de transporte (mais comumente o Protocolo de Controle de Transmisses ou TCP). Acima do TCP
est a camada de soquetes, que chamada pelo SCI.

A camada de soquetes a API padro para o subsistema de rede e fornece uma interface com o usurio para
vrios protocolos de rede. Desde o acesso a quadros brutos s unidades de dados de protocolo IP (PDUs)
e at o TCP e o User Datagram Protocol (UDP), a camada de soquetes fornece um modo padronizado de
gerenciar conexes e mover dados entre terminais. possvel encontrar as origens de rede no kernel em ./
linux/net.

Drivers de Dispositivo
A maioria dos cdigos-fonte no kernel Linux existe nos drivers de dispositivo que tornam utilizvel um
determinado dispositivo de hardware. A rvore de cdigos-fonte do Linux fornece um subdiretrio de
drivers que posteriormente dividido pelos vrios dispositivos suportados, como Bluetooth, I2C, serial, etc.
possvel encontrar as origens do driver de dispositivo em ./linux/drivers.

Anatomia do Kernel Linux Pgina 6 de 8


ibm.com/developerWorks/br/ developerWorks

Cdigo Dependente de Arquitetura


Embora grande parte do Linux seja independente da arquitetura na qual ele executado, existem
elementos que devem considerar a arquitetura para o funcionamento normal e por questes de eficcia. O
subdiretrio ./linux/arch define a parte dependente da arquitetura da origem do kernel contido em diversos
subdiretrios especficos a esta arquitetura (formando coletivamente o BSP). Em um desktop tpico,
utilizado o diretrio i386. Cada subdiretrio de arquitetura contm diversos outros subdiretrios que se
concentram em um aspecto particular do kernel, como boot, kernel, gerenciamento de memria e outros.
possvel encontrar o cdigo dependente da arquitetura em ./linux/arch.

Recursos Interessantes do Kernel Linux


Se a portabilidade e a eficcia do kernel Linux no bastarem, ele fornece outros recursos que no puderam
ser classificados na decomposio anterior.

Sendo o Linux um sistema operacional em produo e um software livre, ele um grande teste para novos
protocolos e aprimoramentos desses protocolos. O Linux oferece suporte a um grande nmero de protocolos
de rede, inclusive o tpico TCP/IP, e tambm uma extenso para rede de alta velocidade (acima de 1
Gigabit Ethernet [GbE] e 10 GbE). O Linux tambm oferece suporte a protocolos como o Stream Control
Transmission Protocol (SCTP), que fornece vrios recursos avanados, acima do TCP (como o protocolo de
nvel de transporte de substituio).

O Linux tambm um kernel dinmico, oferecendo suporte incluso e remoo de componentes de


software durante a execuo. Eles so chamados mdulos de kernel dinamicamente carregveis, e podem
ser inseridos durante a inicializao quando necessrios (quando um determinado dispositivo encontrado,
solicitando o mdulo) ou a qualquer momento pelo usurio.

Um avano recente no Linux seu uso como sistema operacional para outros sistemas operacionais
(chamado de hypervisor). Recentemente, foi feita uma modificao no kernel, chamada Kernel-based Virtual
Machine (KVM). Essa modificao permitiu uma nova interface para o espao do usurio, possibilitando
que outros sistemas operacionais fossem executados no kernel ativado pelo KVM. Alm de executar
outra instncia do Linux, o Microsoft Windows tambm pode ser virtualizado. A nica restrio
que o processador subjacente deve oferecer suporte s novas instrues de virtualizao. Consulte a seo
Recursos para obter informaes adicionais.

Indo Alm
Este artigo apenas pincelou a superfcie da arquitetura do kernel Linux, bem como suas caractersticas e
recursos. possvel verificar o diretrio de Documentao fornecido em cada distribuio Linux para obter
informaes detalhadas sobre o contedo do kernel. Certifique-se de verificar a seo Recursos no final
deste artigo para obter informaes mais detalhadas sobre muitos dos tpicos discutidos aqui.

Anatomia do Kernel Linux Pgina 7 de 8


developerWorks ibm.com/developerWorks/br/

Sobre o autor
M. Tim Jones

M. Tim Jones um arquiteto de firmwares embarcados e autor de Inteligncia Artificial:


Sistemas de Abordagem, GNU/Linux, Programao de Aplicativos AI (atualmente em sua
segunda edio), Programao de Aplicativos AI (em sua segunda edio) e BSD Sockets
Programming from a Multilanguage Perspective. Sua formao em engenharia vai desde o
desenvolvimento de kernels para nave espacial geossincrnica at a arquitetura de sistema
embarcado e o desenvolvimento de protocolos de interligao de redes. Tim um Engenheiro
Consultor para a Emulex Corp. em Longmont, Colorado.

Copyright IBM Corporation 2007. Todos os direitos reservados.


(www.ibm.com/legal/copytrade.shtml)
Marcas Registradas
(www.ibm.com/developerworks/br/ibm/trademarks/)

Anatomia do Kernel Linux Pgina 8 de 8

Você também pode gostar