Documente Academic
Documente Profesional
Documente Cultură
Autores
Eduardo Miranda Peloso da Silva
Franklin Rodriguez Tellez
Henrique Carvalho de Almeida Soares
Jos Luiz Machado Morais
William Wallace de Siqueira Ribeiro
Wilson Francisco Moreira de Souza Seron
Roteiro
O Kernel
Tipos de ncleo
Kernel do Linux
Sistemas de arquivo
Processos no kernel
Gerenciamento de Processos
o Prioridades
o Scheduler
Preemptividade
Gerenciamento de memria
Multiprocessamento
GRUB
Compilao e instalao do Kernel
Criao de uma System Call
Mdulos
Device drivers
Tempo Real
Consideraes Finais
Referncias
Definio de Kernel
O kernel o componente central, isto , o ncleo
da maioria dos sistemas operacionais
a ligao entre as aplicaes e o
processamento efetivo dos dados no nvel de
hardware
O desenvolvimento de um kernel considerado
uma das atividades mais complexas na rea de
programao
4
Definio de Kernel
Responsabilidades do Kernel
Gerenciar recursos de sistema
o Escalonamento de processos
o Gerenciamento de memria (paginao,
memria virtual)
o Gerenciamento de dispositivos (principalmente
drivers de perifricos, e E/S)
o Encapsular todo o acesso ao hardware
Tipos de Kernel
Existem vrios tipos de kernel:
o
o
o
o
o
Monoltico
Microkernel
Hbridos
Nanokernels
Entre outros
Kernel Monoltico
Kernel Monoltico
Projetados para ter todo o seu cdigo no mesmo
espao de endereos
Define uma interface de alto nvel sobre o
hardware
Grupo de System Calls primitivas que
implementam todos os servios do sistema
operacional
10
Kernel Monoltico
Todos os servios do sistema rodam junto
thread principal do kernel
Isto prov um acesso rico e poderoso ao
hardware
11
Kernel Monoltico
Entretanto, h uma forte dependncia entre
componentes do sistema
o Um bug num driver de dispositivo, por exemplo, pode derrubar o
sistema inteiro
12
Microkernel
Diagrama de um microkernel
13
Microkernel
Consiste em definir uma abstrao simples do
hardware
Foco em desenvolvimento minimalista, resultando
em kernels menores
Devido a isto, normalmente implementam
somente as funes mais bsicas, separando-as
em mdulos
Alguns outros servios, como networking, so
implementados em espao de usurio
14
Microkernel
Permite, portanto, que o restante do kernel seja
implementado como uma aplicao comum, em
linguagem de alto nvel
Mais fceis de manter que os monolticos
O alto nmero de System Calls e de trocas de
contexto fazem com que o sistema seja mais
lento, pois geram grande overhead
15
Kernel Hbrido
uma combinao entre o monoltico e o
microkernel
Roda servios como o networking e o sistema de
arquivos no espao de kernel
Apenas mdulos menores, como drivers de
dispositivos, so rodados como servers
16
O Kernel do Linux
Em 03/Dez/2009, verso 2.6.32:
o
o
o
o
Site: www.kernel.org
17
O Kernel do Linux
Unix-like
Monoltico modularizado (possui suporte a
mdulos)
Threading (clone() system call)
Preemptivo
o O kernel define o tempo de processamento de cada processo e
pode alterar essa estratgia a fim de maximizar o desempenho
do sistema
18
O Kernel do Linux
No permite acesso direto ao hardware
Dois modos de execuo
o User e Kernel Mode
Sistema multiusurio
Suporte a multiprocessamento
19
Gratuito
Customizvel
Roda em mquinas antigas
Estvel
Eficiente, mesmo em mquinas robustas
Alta compatibilidade:
o Alpha, arm, i386, mips etc
o HTC, iPhone etc
20
Mapa do Kernel
21
Sistema de Arquivos
22
Journaling
23
JFS e XFS
JFS
o Sistema rpido com suporte a journaling e
redimensionamento de parties
o
XFS
o Sistema rpido na gravao, otimizado para escalabilidade
e que faz uso de journaling
o
24
Ext2 - Prs
25
Ext2 - Contras
26
Ext3 - Prs
27
Ext3 - Contras
28
ReiserFS - Prs
29
ReiserFS - Contras
30
Quadro Comparativo
Prs
Contras
ReiserFS
- Journaling
- Utiliza rvores balanceadas
- Blocos de tamanhos
variveis
- Recuperao da consistncia
- Suporte para arquivos
maiores que 2GB
Ext2
- Rapidez
- Pr alocao de blocos
- No possui journaling
- Fragmentao de disco
Ext3
JFS
- Journaling
- Parties redimensionveis
XFS
- Journaling
- Escalabilidade
31
32
Processos no Kernel
33
Estados de um Processo
TASK_RUNNING
Em execuo
TASK_INTERRUPTIBLE
Suspenso at que uma condio se torne verdadeira
TASK_UNINTERRUPTIBLE
Como o estado anterior, exceto pelo fato de que o seu estado
no ser modificado quando receber um sinal. importante para
os processos que necessitam executar determinada tarefa sem
serem interrompidos
34
Estados de um Processo
TASK_STOPPED
Execuo do processo foi parada
TASK_ZOMBIE
O processo est terminado, mas o processo pai ainda no
executou uma chamada de sistema para retornar informaes
sobre o processo morto - "wait'', as informaes no so
descartadas pois ainda podem ser utilizadas
35
Gerenciamento de Processos
36
Gerenciamento de Processos
37
Gerenciamento de Processos
Gerenciamento de Processos
Gerenciamento de Processos
Gerenciamento de Processos
Gerenciamento de Processos
42
Gerenciamento de Processos
Gerenciamento de Processos
renice ## -p PID
modifica a prioridade do processo que tem id PID
para o valor ##
44
Gerenciamento de Processos
Gerenciamento de Processos
Controle de execuo de acordo com a prioridade tarefa
do kernel, especificamente do Scheduler (Escalonador)
No Linux, esse Escalonador preemptivo, ou seja, destina
pequenas fatias de tempo para cada processo, trocandoos de acordo com as prioridades definidas pelo usurio
'dono'
O algoritmo atual de escalonamento passou a ser utilizado
apenas a partir da verso 2.6
o executada em tempo O(1), antiga implementao tinha
tempo O(n) em relao ao nmero de processos
o cada processador ou core tem uma fila independente de
processos
46
Gerenciamento de Processos
Gerenciamento de Processos
Gerenciamento de Processos
Observaes:
o apenas processos de usurio, no do kernel, so
preemptivos
complexidade de implementao, evita problemas de
sincronizao no uso de estruturas de dados do
Kernel
o Kernel no diferencia de fato processo interativos
e batch, mas sim os que utilizam mais E/S ou mais CPU
algoritmos de escalonamento favorecem
implicitamente os de E/S - melhor tempo de resposta
de processos interativos
apenas processos de tempo-real so reconhecidos
como tal, tendo prioridade fixa na escala de 1 a 99 e
no tem execuo interrompida por escalonamento
49
Gerenciamento de Processos
Observaes (cont.):
o o tamanho do quantum um fator crtico para o
desempenho do sistema
se o quantum muito pequeno, o overhead de troca de
processos pode tomar grande parte do tempo de
processamento
do contrrio a responsividade comprometida
o a funo que implementa de fato o escalonador a
schedule(), que pode ser invocada de dois modos
direto: quando recurso que o processo precisa est
indisponvel, ele deve ser bloqueado
lazy: o valor do campo need_resched do processo foi
alterado para 1, em algum momento o kernel verifica
50
esse campo e escalona o processo
Gerenciamento de memria
O Linux realiza o gerenciamento de memria a partir da
utilizao de memria virtual. Funciona como uma camada
de abstrao onde os endereos reais em hardware no
correspondem diretamente aos endereos vistos pelas
aplicaes de usurio
A utilizao de memria virtual permite:
o Relocao: cada aplicao tem seu prprio espao de
endereamento
o Proteo e Compartilhamento: impede que um processo
utilize um endereo de memria que no lhe pertence
o Transparncia: no necessrio que uma aplicao
tenha informaes sobre o tamanho da memria, j que
ela no precisa limitar-se memria fsica disponvel 51
Gerenciamento de memria
Segmentao
A memria dividida em partes de tamanho varivel e com
diferentes tipos de permisso. O endereo correspondente a
cada parte calculado a partir de uma base e um limite
No Linux, a utilizao ocorre de forma limitada, permitindo
maior simplificao e portabilidade
So utilizados 6 segmentos, os quais definem proteo em
nvel de hardware para as determinadas reas:
cdigo do kernel
dados do kernel
cdigo de usurio
dados de usurio
52
TSS (segmento de estado da tarefa)
LDT (descritores locais)
Gerenciamento de memria
Paginao
A memria fsica dividida em blocos de tamanho fixo,
(frames). Divide-se a memria lgica em blocos do mesmo
tamanho, chamados pginas (pages). Os frames livres so
registrados. Existe uma tabela de pginas onde feita a
converso dos endereos lgicos em endereos fsicos
As pginas pouco utilizadas so movidas para o disco,
permitindo a utilizao de mais memria do que a disponvel
fisicamente
As pginas so divididas em tabelas hierrquicas, onde
podem ser acessadas a partir do page number (ndice na
tabela que corresponde ao endereo base na memria
fsica) e do offset
53
Gerenciamento de memria
O Linux utiliza quatro nveis de tabelas hierrquicas: Page
Global Directory, Page Upper Directory, Page Middle
Directory e Page Table Entry
Dependendo da arquitetura, alguns dos nveis intermedirios
so eliminados para obter maior eficincia
Cada processo possui suas prprias tabelas de pginas, as
quais contm apenas os endereos que o processo pode
utilizar
54
Gerenciamento de memria
O Linux utiliza tamanhos de pginas de acordo com a
arquitetura. Os processadores x86 utilizam pginas de 4
KiB (padro), 2 MiB (caso seja utilizado o recurso de PAE
Page Address Extension da Intel) ou de 4 MiB. Nas
arquiteturas RISC o tamanho padro de 8 KiB, mas no
o nico
O uso de 32 bits permite o endereamento de at 4GB,
sendo que o kernel divide esse espao virtual em espao
de usurio e espao de kernel (usualmente 3GB e 1GB,
respectivamente)
55
Multiprocessamento
56
Multiprocessamento
Tipos de Sistemas Operacionais:
57
Multiprocessamento
Objetivos no Linux:
o
58
Multiprocessamento
Multiprocessamento
o
60
Grub
GRand Unified Bootloader
um multi-carregador de Sistemas
Operacionais (multi boot boot-loader)
o Boot Loader: o primeiro software executado quando um
computador iniciado
61
Processo de Boot
1.BIOS (Basic Input/Output System)
o Executa uma srie de testes para localizar os dispositivos
presentes e verificar seu correto funcionamento
o Inicializa os dispositivos de hardware
o Busca um sistema operacional para dar o boot
Em geral no primeiro setor do HD ou drive de CD/DVD
o Copia o contedo do primeiro setor para a RAM e executa o
cdigo carregado
62
Processo de Boot
2. Boot Loader Grub
Estgio 1: Cerca de 512 bytes, presente no
Master Boot Record (MBR)
o Apenas carrega o estgio 1.5 ou 2
63
Grub
Instalao
oEm geral instalado automaticamente
oCaso no esteja presente:
sudo apt-get install grub
Configurao Padro
o update-grub
o Cria o arquivo menu.lst (em alguns sistemas menu.grub ou
menu.conf)
64
Grub
Exemplo de arquivo menu.lst:
default 1
timeout 10
title Microsoft Windows XP Professional
root (hd0,1)
savedefault
makeactive
chainloader +1
title Ubuntu, kernel 2.6.17-10-generic
root (hd0,4)
kernel /boot/vmlinuz-2.6.17-10-generic root=/dev/sda5 ro quiet splash
initrd /boot/initrd.img-2.6.17-10-generic
quiet
savedefault
boot
65
Grub - Opes
default n: Sistema padro (0 o primeiro)
timeout t: tempo dado ao usurio para
escolher o sistema operacional. Aps
esse tempo, o sistema default escolhido
title: nome mostrado no menu
root: local aonde o sistema est instalado
kernel e initrd: indica o kernel e possveis
parmetros
66
67
68
$ uname -r
72
73
74
75
76
77
78
80
82
Mdulos
Linux permite adicionar ou remover
funcionalidades enquanto o sistema est
rodando
Cada trecho de cdigo que pode ser
adicionado ou removido chamado mdulo
Os mdulos podem ser ligados dinamicamente
ao kernel via comando insmod
Podem ser desligados via comando rmmod
84
85
Mdulos: Makefile
Para Compilar:
omake
Para instalar:
osudo insmod hello.ko
Para desinstalar:
osudo rmmod hello.ko
86
Passagem de Parmetros
Parmetros podem ser passados para os
mdulos no momento do carregamento:
Trecho adicionado ao mdulo:
88
89
Header necessrio:
o #include <linux/module.h>
90
Log:
o #include <linux/kernel.h>
o int printk(const char *fmt, );
Mesmos parmetros do printf, exceto ponto
flutuante
91
Device Drivers
Permitem a interao do Kernel com
dispositivos de entrada e sada
Consistem de estruturas de dados de
funes que controlam um ou mais
dispositivos
o Discos rgidos, teclados, mouses, monitores,
interfaces de rede
93
Device Drivers
Cada driver interage com o kernel e com
outros drivers atravs de uma interface
especfica:
o Cdigo especfico a um dispositivo pode ser encapsulado em
um mdulo especfico
o Novos dispositivos no precisam conhecer o cdigo fonte do
kernel, apenas as interfaces
o O kernel acessa todos os dispositivos atravs da mesma
interface
o possvel escrever um driver como um mdulo
dinamicamente carregvel
94
Device Drivers
Conjunto de rotinas que fazem um
dispositivo de hardware responder
interface de programao definida pelas
operaes cannicas:
o open, read, lseek, ioctl etc.
95
Device Drivers
Dispositivos podem ser conectados a
portas de Entrada/Sada ou terem suas
portas mapeadas em memria
Portas de E/S:
o Kernel disponibiliza funes para acesso
inb(), inw(), inl()
outb(), outw(), outl()
o Funes request_resource(), allocate_resource()
e release_resource()
Garantem acesso s portas do dispositivo
96
Device Drivers
E/S mapeado em memria
o Dispositivos so mapeados em endereos fsicos
de 32 bits
o necessrio traduzir o endereo fsico para um
endereo linear
Funes: ioremap() e ioremap_nocache()
o Acesso: readb(), readw(), readl(), writeb(),
writew(), writel(), memcpy_fromio(),
memcpy_toio()
97
98
99
100
101
102
104
Tempo Real
105
Tempo Real
Sistema:
o
106
Tempo Real
Tempo Real
Vantagem e desvantagem:
o
Tempo Real
109
Tempo Real
Utilizao da Hora:
o
110
Tempo Real
111
Tempo Real
Exemplo de utilizao da funo time():
112
Tempo Real
113
Tempo Real
Biblioteca sys/timeb.h
114
Tempo Real
Exemplo de utilizao da funo ftime():
115
Tempo Real
Tempo Real
Biblioteca sys/time.h
117
Tempo Real
Exemplo de utilizao da funo gettimeofday():
118
Consideraes Finais
119
Consideraes Finais
120
Consideraes Finais
121
Referncias
BOVET, Daniel; CESATI, Marco. Understading the Linux
Kernel. 3. ed. 2006. OReilly.
MELLO, Alan Godoy S. Arquitetura do Kernel Linux. 7 mai.
2009. Instituto de Computao UNICAMP. Disponvel em:
http://www.ic.unicamp.br/~islene/mc514/Kernel_Linux.pdf.
Acesso em 06 dez. 2009.
Implementing a System Call on Linux 2.6 for i386.
Disponvel em:
http://www.linux.org/docs/ldp/howto/Implement-Sys-CallLinux-2.6-i386/index.html. Acesso em 05 dez. 2009.
122
Referncias
Linux Man Pages. Disponvel
em: http://www.linuxmanpages.com
O gerenciador de boot GRUB. Disponvel em:
http://www.infowester.com/lingrub.php
GNU GRUB Manual 0.97. Disponvel em:
http://www.gnu.org/software/grub/manual/grub.html
GRUB. Disponvel em: http://wiki.ubuntu-br.org/Grub
CORBET, Jonathan; RUBINI, Alessandro; KROAHHARTMAN, Greg. Linux Device Drivers. 3. ed. OReilly.
123