Sunteți pe pagina 1din 44

Manipulao de Kernel Linux

David Jourdain - jourdain@pti.org.br

Contedo da apresentao

Kernel 3.X.XX

2a. Parte Manipulao da Kernel

Diretrios e Arquivos

Requisitos de Manipulao

Arquitetura Monoltica

Manipulao da Kernel

Estrutura da Kernel Linux

Gerenciamento de Tarefas

Modelos de Interrupo
Estados de Tarefas
Gerenciamento de Memria

Paginao
Gerenciamento de Entrada e Sada

O qu tem l dentro?

Compilar Kernel e gerar Pacotes

menuconfig

Arquivo initrd

Instalao da Kernel

Mapa da Kernel Linux

Referncias

Kernel 3.X - Diretrios e Arquivos

A Kernel usada como base a Kernel 3.X.XX, do


repositrio do Github
O diretrio padro para manipulao da Kernel o
/usr/src. Neste diretrio, descompactamos o pacote do
cdigo fonte da Kernel
Nosso foco ser no diretrio usr/src/linux-source-3.X.XX/,
de onde partiremos para analisar diversos outros
diretrios, como o acpi/ e o staging/

Kernel 3.X - Diretrios e Arquivos

No caso do diretrio acpi/, temos os arquivos para uso do


Advanced Configuration and Power Interface

Arquivos: ac.c (gerencia o uso compartilhado da energia),


battery.c (gerencia o consumo da bateria) e o fan.c (gerencia o
cooler do notebook), entre outros

O Advanced Configuration and Power Interface tem como


objetivo consolidar e melhorar a alimentao de energia
existentes e os padres de configurao para os
dispositivos de hardware.

Kernel 3.X - Diretrios e Arquivos

No caso do diretrio staging/, temos um diretrio para


testes de novas funcionalidades

Arquivos: diversos, divididos em sub-diretrios.

O Staging Driver tem como objetivo unir em um nico


diretrio, para permitir que patchs para hardwares ainda
em fase de testes, possam ser avaliados, testados,
corrigidos e compilados, como mdulo interno ou externo
da Kernel.

Kernel 3.X - Diretrios e Arquivos

Citamos at o momento o diretrio de manipulao da


Kernel. Contudo, este diretrio /usr/src faz parte de um
contexto maior, mais amplo, onde temos a organizao de
toda uma gama de diretrios e arquivos, acessveis ao
usurio com nvel pleno, ou normalmente chamado como
'usurio com poderes de root'.
Esta estrutura de diretrios e arquivos segue a Filesystem
Hierarchy Standard (FHS), padro de organizao de
diretrios recomendado para sistemas clones-unix, como
o Linux.

Kernel 3.X - Diretrios e Arquivos


Esta
organizao
para
diretrios
e
arquivos,
utilizada no Linux, segue o
padro
proposto
pelo
Filesystem
Hierarchy
Standard (FHS).
Algumas
distribuies
Linux
agregam
outros
diretrios a esta estrutura
padro. Outros, alteram a
estrutura padro, e no
seguem a FHS.
Debian GNU/Linux uma
das distribuies Linux que
segue a FHS.

Kernel 3.X Arquitetura Monoltica

No Linux, todos os servios centrais residem em uma


kernel central, que o ncleo do sistema operacional.
Esta kernel mantm todos os componentes bsicos juntos
e elimina a espera por mudanas de operao e/ou
contexto.
Apesar de ter arquitetura monoltica, a estrutura da Kernel
Linux integralmente modular, permitindo adicionar ou
remover
componentes
(ou
mdulos)
conforme
necessidade e/ou demanda.

Kernel 3.X Estrutura da Kernel Linux


Camada do Usurio
Camada de Aplicativos

Espao
Do Usurio

Interface para Chamadas do Sistema

Kernel

VFS

REDE

Energia

Inicializao

EXT2

EXT3

NTFS

Agendamento
De I/O

Timekeeping

CPUSET

EXT4

iso9660

TMPFS

criptografia

Agendamento multicore

ASLR

btrfs

PROC

SYS

SOM

Agendamento singlecore

Paginao Nivel 2 e 3

V4L

Gerenciamento
de Tarefas

Gerenciamento
de Memria

Sistema de Arquivos

Gerenciamento de Entrada e Sada


PCI

IDE

I2C

USB

SCSI

BLOCK

CHAR

SLAB

SWAP
Buddysystem

...

DEP

...

Driver de Dispositivos

Kernel

Camada da BIOS

Hardware

Monitoria dos Sinais de Identificao de Hardware

Gerenciamento de Tarefas

responsvel pelo processamento simultneo de vrios


programas (multitarefa), pela compatibilidade com
mltiplos ncleos (processadores) e pelo agendamento de
servios.
Agendamento de servios o gerenciamento de qual
tarefa executada e quanto tempo em cada ncleo. O
agendamento de servios dividido em duas etapas:

Gerenciamento de Tarefas

Agendamento de servios:

Etapa 1: O agendador de mltiplos ncleos agrupa


processadores individuais ou os ncleos de uma mquina
multicore. Nestes grupos, as tarefas so designadas para as
CPUs.
Etapa 2: Cada processador gerencia as tarefas que sero
executadas por ele, conforme agendamento de servios. O Stack
Pointer de cada ncleo fornece o endereamento da cada bloco
de dados a ser analisado.

Gerenciamento de Tarefas

Modelo de Interrupo

A Kernel Linux distingue em 4 nveis distintos para processar cdigo.


Usurios est restritos ao nvel do usurio e ao nvel dos aplicativos; Em
computadores com mltiplos ncleos, as funes podem executar
mltiplas tarefas em paralelo.
Chamadas de sistema e threads da Kernel: tem prioridade similares e
ficam no 'espao da Kernel'. Podem trabalhar com modo de preempo
(interrupes bloqueadas).
O nvel mais inferior ocupado pelas rotinas de interrupo de servios,
que podem interromper toda e qualquer operao nas camadas
superiores. onde temos os 'as monitorias dos sinais de identificao de
hardware'.

Gerenciamento de Tarefas

Modelo de Interrupo

Instncia de driver
Processo da Kernel
Fila de Tabalho

Arquivo 01

Arquivo 02

Aplicativo

Aplicativo

Kernel
Funo da Kernel

Soft IRQ
Tasklet
Timer
ISR

Espao
Do Usurio

Funo da Kernel

Soft IRQ

Hard IRQ
SA_SHIRQ

Hard IRQ

Kernel
Hardware

Obs.: Programadores de Kernel precisam conhecer o modelo de interrupo para identificar reas
crticas e desenvolver cdigo de forma a proteg-las corretamente.

Gerenciamento de Tarefas

Modelo de Interrupo

Chamadas de sistema e threads da Kernel (Tarefas):

Executvel
Fork ()
Clone ()

Executando

Acordando
Dormir

Ocioso

Wait ()

Dormir

Agendador

Dormir

Hibernao

Traar

SIGSTOP

Atual

N/Interropvel
Interrompvel
Wakekill
Traado
Parado
Estados de Repouso

Ativo

Acordar

Acordar, Sinal

Acordar, Sinal

SIGCONT

SIGCONT

Aplicativos e threads da
Kernel passam por diversos
estados.
Compreender os diversos
estados dos servios da
Kernel permite saber 'como'
e 'porqu' fazer um patch
para a Kernel, bem como
permite ter a compreenso
sobre o funcionamento da
Kernel.

Gerenciamento de Tarefas

Modelo de Interrupo

Estados de Tarefas: 'Tarefas' podem ter diversos estados (grfico


anterior). Uma nova tarefa sempre criada por uma chamada de
sistema clone() como uma cpia exata de seu processo-me. A
nova tarefa tem o estado TASK_RUNING. O agendador escolhe a
prxima tarefa a ser processada, considerando as tarefas
disponveis. Uma mudana de contexto ativa a 'tarefa', que
muda o estado para ativo.

Gerenciamento de Memria

o segundo maior componente da Kernel.

Responsvel por implementar o endereamento e a paginao.

Garante que todo e qualquer conjunto de cdigo tenha acesso a memria


principal.
O registro do endereamento utilizado pelos conjuntos de cdigos
(aplicativos, libs, mdulos, a prpria kernel, etc...) SEMPRE aleatrio,
considerando os registros heap, stack e as bibliotecas compartilhadas. Este
processo de endereamento aleatrio de instrues de cdigo chamado
de Address Space Layout Randomization, ou ASLR e um dos fatores que
garante a segurana de acesso exclusivo da Kernel, bem como determina o
processo hierrquico de acesso aos cdigos em processamento.

Gerenciamento de Memria

Ciclo de vida dos objetos da Kernel na memria (via 'Paginao')

Este 'ciclo' impede ataques maliciosos, vindos de fora da Kernel

Pgina
(Blocos de Conjunto de Cdigo)

Alocar Memria

Memria Livre

Sistema Parceiro

Pr-inicializar CC

Finalizar CC

Alocador 'SLAB'

Reservar CC

Liberar CC

Objeto (CC)

Usar Conjunto de Cdigo CC


Paginao

A Kernel depende destes CC's tipificados e se


beneficia da reciclagem destes CC's graas ao
alocador SLAB. A Kernel fornece diversos CC's
pr-inicializados.
Essa abordagem tem benefcios para o
desempenho: A inicializao simultnea de
diversos CC's otimiza o uso do cache do
processador.

Aplicativo/
Componente
da Kernel

Podemos visualizar este tipo de dados com o


comando cat /proc/slabinfo

Gerenciamento de Memria

Paginao

O gerenciamento de memria converte os endereos lgicos


usados pelos aplicativos para manipulao de dados em
endereos fsicos. O mtodo utilizado para isso conhecido
como 'paginao'. A paginao divide a memria principal em
'pginas' do mesmo tamanho. Neste contexto, uma 'pagina'
tipicamente tem 4KB. Em outras palavras, 4GB de RAM so
divididos em um milho de pginas de memria.

Gerenciamento de Memria

Paginao

Tabelas de pgina fornecem o mapeamento de endereos virtuais para endereos fsicos


Processo A

Processo B
Espao de
Endereo
Virtual

Paginao (Tabela de Pginas)

Arquivo 'SWAP' / Partio


Paginao no disco
(HD, PenDrive)

Espao de
Endereo Fsico

O mapeamento da memria virtual para


a memria fsica ocorre por meio de
tabelas de pgina, implementadas no
hardware subjacente.
O hardware fornece o mapeamento,
mas a kernel que gerencia as tabelas e
sua configurao. Um processo pode ter
um grande espao de endereo, mas
esparso, ou seja, pequenas regies
(pginas) do espao se referem
memria fsica atravs das tabelas de
pgina.
Isso permite que um processo tenha um
enorme espao de endereo que
definido apenas para as pginas
necessrias em um dado momento.

Gerenciamento de Memria

Paginao
A troca permite melhor uso do espao da memria fsica. ao migrar pginas
pouco usadas para armazenamento mais lento e menos necessrias
Memria
Virtual

Mapeamento
de Pginas

Paginao (Tabela de Pginas)

Memria
Fsica
SWAPPER / Permutador
Pginas em Disco
Garantidas/Protegidas

Arquivo SWAP / Partio

Disco

A capacidade de definir memria para


processos de forma esparsa significa que a
memria fsica subjacente pode ser
confirmada em excesso.
Por meio de um processo chamado
paginao, pginas pouco usadas so
movidas dinamicamente para um dispositivo
de armazenamento mais lento (por exemplo,
um disco) para acomodar outras pginas que
precisam ser acessadas. Isso permite que a
memria fsica do computador fornea
pginas
que
um
aplicativo
precisa
imediatamente, e migre pginas menos
necessrias para o disco para melhor uso da
memria fsica.
Observe que algumas pginas podem se
referir a arquivos, outras a binrios
executveis.

Gerenciamento de Memria

Paginao (API's da Kernel para Manipulao de Memria)

Manipulao de memria do usurio. Esta seo cobre a interface


da Kernel e do espao do usurio. As funes de acesso
memria do espao do usurio esto listadas no prximo slide.
Estas API's especficas (ou Interface de Programao de Aplicativo)
so instrues da Kernel, que asseguram que toda e qualquer
manipulao da memria sejam tratadas corretamente.
Com isso, podemos avaliar os mtodos de movimentao de
dados entre a Kernel e o espao do usurio (com a Kernel
iniciando a operao e gerenciando todo o processo).

Gerenciamento de Memria

Paginao (Funes de Manipulao de Memria do Usurio)

a implementao dessas
funes
depende
da
arquitetura. Em arquiteturas
x86, possvel achar essas
funes
e
smbolos
definidos em:
./linux-source-3.X.XX/arch/x86/include/asm/uaccess.h, com origem em
./linux-source-3.X.XX/arch/x86/lib/usercopy_32.c e usercopy_64.c.

Gerenciamento de Entrada e Sada

responsvel pelo acesso a arquivos e dispositivos perifricos. O


ponto de distribuio central o Virtual Filesystem Switch (VFS),
que distribui o acesso e repassa as chamadas de disco para o
agendador. Ele responsvel por organizar e otimizar as chamadas,
para que a cabea de leitura (no caso dos discos rgidos) faa o
menor nmero possvel de movimentos.
O gerenciamento da cabea de leitura irrelevante para SSD's
(memrias flash). Por isso, a Kernel passa os dados diretamente
para o disco, se estiver configurada para este tipo de ao.

Gerenciamento de Entrada e Sada

O VFS tambm utiliza o mesmo modelo hierrquico que a Kernel


usa para gravar ou ler dados de um disco. Este modelo registra os
meta-dados de cada arquivo. So estes os meta-dados: tamanho
do arquivo, data de criao, ltimo acesso, provilgios de acesso,
propriedade, aplicativo que podem manipular o arquivo, etc... Este
registro do meta-dado associado a um inode (n de ndice de
registro, que um nmero identificador de cada arquivo e de seus
meta-dados).
Podemos listas os inodes e as demais informaes associadas a ele
e ao arquivos, a partir do comando ls -lai.

Gerenciamento de Entrada e Sada

Exemplo de execuo e resultado do 'ls -lai'

brlix@brlix$ ls -lai
1321328

drwxr-xr-x

brlix brlix

4096 Dez 17 21:11 .

1319023

drwxr-xr-x

59

brlix brlix

4096 Dez 18 11:28 ..

1311518

-rw-rr--

brlix brlix

61996 Dez 8 13:46

CV-en.odt

1332258

-rw-------

brlix brlix

56 Set 24 14:48

.directory

1853167

drwxr-xr-x

brlix brlix

4096 Set 19 10:29

Epidemus

1349300

drwxr-xr-x

brlix brlix

4096 Dez 6 16:31

impressos

1321712

-rw-r--r--

brlix brlix

1337519

-rw-rr--

brlix brlix

280 Set 27 15:17

1341827

-rw-rr--

brlix brlix

2801 Set 20 13:31

1339328

-rwxr-xr-x

brlix brlix

191 Set 25 20:10

36889 Dez 17 21:11 notes.txt


patrocinio-latinoware.txt
sources.list-model
wireless-lan-up

Gerenciamento de Entrada e Sada

Ainda sobre o VFS, ele possui um conjunto de interfaces padro


para aplicativos, que se destina a reconhecer e executar E/S de
arquivo, por meio de um conjunto de sistemas de arquivos que
estiverem disponveis na Kernel e combina isso com o suporte a
um ou mais dispositivos.
Os sistemas de arquivos no so estticos. Estes sistemas de
arquivos podem ir e vir conforme a natureza transitria dos
dispositivos de armazenamento.

Gerenciamento de Entrada e Sada

Um desktop Linux tem suporte ao sistema de arquivos ext3 no disco rgido e ao


sistema de arquivos ISO 9660, em um CD-ROM/DVD-ROM, com o CDFS. Conforme
mdias so inseridas e removidas, a Kernel Linux se adapta a esses novos sistemas de
arquivos com diferentes contedos e estrutura. Um sistema de arquivo remoto
acessado atravs do Network File System (NFS). Ao mesmo tempo, o Linux 'monta'
uma partio NT File System (NTFS) com Windows e a utiliza para leituras e
gravaes.
Paralelamente, uma USB flash drive (UFD) removvel conectada, fornecendo outro
sistema de arquivos, bem como o mesmo conjunto de interfaces de E/S de arquivo
pode ser usado por todo esses dispositivos, permitindo que o sistema de arquivos
subjacente e o dispositivo fsico sejam removidos pelo usurio.
O VFS cria uma 'camada de abstrao uniforme', que permite a interao
transparente entre as camadas manipulveis pelo usurio ('aplicativos' e 'usurio') e
a camada da BIOS e os dispositivos (hardware).

Gerenciamento de Entrada e Sada


Camada do Usurio
Espao
do Usurio

Camada de Aplicativos
VFS

REDE

ISO 9660

EXT3

NTFS

Agendamento
De I/O

EXT4

CDFS

NFS

criptografia

btrfs

PROC

USBFS

SOM

Sistema de Arquivos

Kernel

V4L

Camada de Abstrao
Camada de Blocos / Controladores de Dispositivos

Kernel

Camada da BIOS

Hardware

Monitoria dos Sinais de Identificao de Hardware

A 'Camada de Abstrao' oferece


uma interface uniforme, por
meio de distintos sistemas de
arquivos, para estabelecer o
vnculo entre os arquivos
manipulados pelo usurio e os
locais de armazenamento.
Este processo considerado
para a primeira gravao ou
para simplesmente 'salvar' o
arquivo, atualizando os dados,
onde ele j se encontrava.

2 . Parte Manipulao da Kernel

A partir deste ponto, iniciamos o processo de instalao dos


pacotes mnimos necessrios para manipulao da Kernel, que
pode ser feita diretamente, arquivo por arquivo, ou atravs de
configuradores que integrem todos os mdulos da Kernel em uma
nica interface de configurao, permitindo visualizao de todos
os itens disponveis para uso.
Um dos fatores indispensveis para a manipulao da Kernel
conhecer os dispositivos do computador utilizado. Para isso,
usamos os comandos lspci, lsusb e lshw.

Requisitos para Manipulao

LIBNCURSES5-DEV

Conjunto de bibliotecas de funes da famlia ncurses (new curses), que


gerenciam programas, extenses, lib's e manuais para programao, sob
GNU/GPL. Oferece um mtodo independente para atualizar caracteres na tela.

MAKE

O MAKE pode ser usado para descrever qualquer tarefa em que alguns arquivos
possam ser atualizados automaticamente com os outros, sempre que os outros
mudarem. Para usar o MAKE, necessrio escrever um arquivo chamado
"makefile", que descreve as relaes entre os arquivos em seu programa, e o
estado dos comandos para atualizar cada arquivo.

Requisitos para Manipulao

GCC

O GCC o compilador padro para C, C++, Objective-C, Objective-C++, Ada,


Fortran 95, e Java em todas as arquiteturas. O pacote do GCC tambm prov
libgcc1, libgcc2 (m68k) e libgcc4 (hppa) que contm as GCC intrinsics e libstdc+
+6.

KERNEL-PACKAGE

Um pacote Debian de utilitrios para construir uma Kernel Linux. Possui arquivos
.config pr-configurados para diversas arquiteturas. O comando para
compilao e empacotamento make-kpkg est dentro deste pacote.

Requisitos para Manipulao

BUILD-ESSENTIAL

efetuar

INITRAMFS-TOOLS

Referencia
todos
os
pacotes
essenciais
para
construo/manipulao/edio de pacotes para Debian's-Like

Pacote de scripts que facilita a criao de arquivos initrd. O initrd um arquivo


que responsvel pelo processo de inicializao da Kernel, usado para preparar
as tarefas a serem inicializadas antes de execuo do sistema de arquivos

GIT (para usarmos a kernel do Ubuntu)

Git um sistema de controle de verso distribudo com nfase em velocidade. O


Git foi inicialmente projetado e desenvolvido por Linus Torvalds para o
desenvolvimento do kernel Linux.

Requisitos para Manipulao

KERNEL SOURCE

Cdigo fonte da kernel a ser utilizada no processo de manipulao

Podemos utilizar um Linux Source de qualquer origem, desde que o source


possua os mdulos que sejam compatveis com o ambiente em uso. Exemplo:
- Ambiente Debian-Like
- Podemos usar Linux Source da kernel.org
- Podemos usar Linux Source do Ubuntu, via 'git'
# git clone git://kernel.ubuntu.com/ubuntu/ubuntu-precise.git source
- Podemos usar Linux Source do Debian
- Entre outras fontes... (procure fontes confiveis!!)

Manipulao da Kernel

Via make menuconfig, podemos manipular a partir de


uma ferramenta, a habilitao e/ou desabilitao de
mdulos para suporte a hardware e sistemas de arquivos
Alm do menuconfig, temos o xconfig e o gconfig,
que so ferramentas grficas que tambm permitem a
manipulao do configurador para a Kernel
Outro caminho (mais complexo) a manipulao do
arquivo .config, utilizado para determinar quais mdulos
sero compilados e se sero internos ou externos

Manipulao da Kernel - menuconfig

O qu tem l dentro?

Bom,.... s usando o menuconfig para descobrir!

Vamos executar

~$ cd /usr/src/linux-source-3.X.XX/

~$ sudo su

~# make menuconfig

Compilar Kernel e gerar Pacotes

Aps todo o processo de edio, podemos executar o


comando abaixo, para compilar e gerar pacotes de
instalao do fonte editado (linux-source), da imagem
(linux-image) da Kernel e dos cabealhos (linux-headers)
de interao com a Kernel.

# make-kpkg kernel_image kernel_source kernel_headers

Arquivo initrd

O arquivo initrd um bloco de dispositivos somente de leitura. Tambm


uma memria RAM virtual que inicializada pelo gerenciador de boot (grub
ou lilo) antes que a kernel seja inicializada. A kernel ento pode usar o
contedo do initrd para iniciar o sistema em duas etapas.
Na primeira etapa da inicializao, a kernel inicia-se e monta um sistema de
arquivos raiz inicial, a partir do contedo do initrd. Na segunda etapa, os
drivers adicionais e outros mdulos so carregados. Depois de carregar os
mdulos adicionais, um novo sistema de arquivos root disponibilizado.

Instalao da Kernel

Com os arquivos gerados, podemos instalar a imagem da kernel e os


cabealhos, com o seguinte comando:

# dpkg -i kernel*.deb

Criar o arquivo initrd (caso no seja criado na compilao)

# mkinitramfs -o /boot/initrd.img-3.X.XX /lib/modules/3.X.XX

Atualizar o gerenciador de boot (no caso, o grub)

# update-grub

Instalao da Kernel

Aps atualizar, podemos verificar o arquivo de gerenciamento de boot do


grub, para verificar todas as kernels disponveis.

# nano /boot/grub/grub.cfg (para grub 2)

Obs.: devemos verificar a presena das linhas de inicializao da kernel, bem


como a linha de inicializao do initrd correspondente a cada kernel.

Mapa da Kernel Linux

Referncias

Kernel GitHub

Thorsten Leemhuis Kernel Log Coming in 3.1 Articles

http://www.h-online.com/open/features/Kernel-Log-Coming-in-3-1-Part-1-Networking-1323463.html?page=1

http://www.h-online.com/open/features/Kernel-Log-Coming-in-3-1-Part-2-Storage-and-filesystems-1338160.html

http://www.h-online.com/open/features/Kernel-Log-Coming-in-3-1-Part-3-Architecture-infrastructure-virtualisation-1345178.html

http://www.h-online.com/open/features/Kernel-Log-Coming-in-3-1-Part-4-Drivers-1346605.html

Microsoft contributes a lot of changes to Linux kernel 3.0

https://github.com/torvalds/linux

http://www.h-online.com/open/news/item/Microsoft-contributes-a-lot-of-changes-to-Linux-kernel-3-0-1280528.html

Security breach at kernel.org

http://www.h-online.com/open/news/item/Security-breach-at-kernel-org-1334642.html

Referncias

Advanced Configuration and Power Interface - ACPI

Virtual Filesystem Switch (VFS)

http://packages.ubuntu.com/precise/linux-source-3.2.0

Linux Kernel Map

http://packages.qa.debian.org/l/linux-2.6.html

Ubuntu Packages Search System - Kernel 3.X.XX

http://www.ibm.com/developerworks/linux/library/l-virtual-filesystem-switch/

Debian Package Tracking System - Kernel 3.X.XX

http://en.wikipedia.org/wiki/Advanced_Configuration_and_Power_Interface

http://www.makelinux.net/kernel_map/

Demais referncias: Arquivos PDF disponveis no mini-curso

S-ar putea să vă placă și