Anda di halaman 1dari 40

Linux Internals:

Linux Visto por Dentro

por

Luiz Paulo Maia


luiz.maia@infnet.edu.br
Luiz Paulo Maia

• Mestre em Informática pelo NCE/UFRJ, pós-


graduado em marketing pela PUC-Rio e graduado
em Informática pela PUC-Rio
• Trabalhou na Elebra, atual HP, Light e ANP, além de
sócio-diretor da Training
• Autor dos livros Arquitetura de Sistemas
Operacionais e Arquitetura (4ed., LTC, 2007) de
Redes de Computadotes (1ed., LTC, 2009)
• Autor do simulador SOsim
• Coordenador da Graduação de Gestão da TI do
Infnet, além das formações em Microsoft e Linux
Sumário

• Histórico
• Características
• Arquitetura do Sistema
• Processos e Threads
• Gerência do Processador
• Gerência de Memória
• Sistema de Arquivos
• Gerência de Entrada/Saída   
Histórico

1969
U N IC S

1971
U N IX V 1

1976
U N IX V 6

1979

1978
U N IX V 7 1BSD
X e n ix
1981

1979
S y s te m I I I 2BSD
U ltr ix
3BSD
1982

1980
S y s te m V
4BSD
1984

1981
SVR2 4 .1 B S D
M in ix
A IX SunO S
C h o ru s
1986

1983
SVR3 4 .2 B S D
S C O U n ix M a ch
1988

1986
SVR4 4 .3 B S D
O SF/ 1
Lin u x Irix
S o la r is
1992

1993
S V R 4 .2 4 .4 B S D

U n ix W a re FreeBSD
O penBSD
Histórico
• From: torvalds@klaava.Helsinki.FI (Linus Benedict Torvalds)
• Newsgroups: comp.os.minix
• Subject: What would you like to see most in minix?
• Summary: small poll for my new operating system
• Message-ID:
• Date: 25 Aug 91 20:57:08 GMT
• Organization: University of Helsinki

• Hello everybody out there using minix -

• I'm doing a (free) operating system (just a hobby, won't be big and
• professional like gnu) for 386(486) AT clones. This has been brewing
• since april, and is starting to get ready. I'd like any feedback on
• things people like/dislike in minix, as my OS resembles it somewhat
• (same physical layout of the file-system (due to practical reasons)
• among other things).

• I've currently ported bash(1.08) and gcc(1.40), and things seem to work.
• This implies that I'll get something practical within a few months, and
• I'd like to know what features most people would want. Any suggestions
• are welcome, but I won't promise I'll implement them :-)
Histórico

• 1991: desenvolvido inicialmente pelo


filandês Linus Torvalds para um PC-386
• 1994: kernel 1.0
• 1996: kernel 2.0 e 2.1
• 1999: kernel 2.2.0 e 2.3.0
• 2001: kernel 2.4.0 e 2.5.0
• 2003: kernel 2.6.0
• 2004: kernel 2.2.26
• 2009: kernel 2.4.37.2 e 2.6.30.1
Características

• Mais de seis milhões de linhas de código


em C e assembly
• Mais de 14.000 arquivos, ocupando mais de
230 MB
• Código fonte disponível sobre a licença
GNU GPL (General Public License)
• Não oferece interface gráfica, utilitários,
compiladores, ferramentas de
gerenciamento
• Diversas distribuições: Red Hat, CentOS,
Fedora, Debian, Slackware, Ubuntu
Características

• Multiprogramação / Multitarefa
• Multiusuário
• Multiprocessamento simétrico
• Suporte a sistemas NUMA
• Kernel reentrante e carga de módulos sob demanda
• Interrupções e exceções
• Semáforos e spin locks
• Processos e threads (lightweight process)
• Memória virtual, memória compartilhada e mapped
files
Arquitetura do Sistema
Processos e Threads

• Processo é “a instância de um programa


em execução”
› Por exemplo, se existem 16 usuários
utilizando o editor vi, existem, pelo
menos, 16 processos, um para cada
usuário, porém os processos podem
compartilhar o mesmo código executável
na memória (reentrância)
• Process descriptor é a estrutura de dados
que materializa o processo dentro do SO e
possui todas as informações necessárias
para a execução do processo
Processos e Threads

• Process descriptor
› Estado
› PID
› Prioridade
› Espaço de
endereçamento
› Terminais
associados
› Arquivos abertos
› Sinais recebidos
› Ponteiros para
outras estruturas
Processos e Threads

• Processos são criados pela system call fork()


› O processo que executa o fork() é considerado o
processo pai e o processo criado é o processo
filho
› Processo filho herda o código fonte e a área de
dados do processo pai, mas implementando a
técnica de copy-on-write
› Todos os processos são descendentes do
processo init, criado ao término do boot do SO
• Processos são eliminados pela system call exit()
• O programa a ser executado é definido pela system
call exec()
Processos e Threads

• Os processos são
organizados em uma
lista duplamente
encadeada, chamada
task list
Processos e Threads
• Threads permitem que partes de código do mesmo
processo possam ser executadas concorrentemente
e compartilhem o mesmo espaço de endereçamento
› Por exemplo, um editor de texto permite a
digitação do texto, enquanto é feita a correção
ortográfica, o documento é salvo
periodicamente, um outro documento é impresso
etc.
• Threads são semelhantes a idéia de processos e
subprocessos, porém oferecem melhor
desempenho, pois compartilham o mesmo espaço
de endereçamento e outros recursos, como
arquivos
• O Linux utilizada o conceito de lightweight process,
implementado pela biblioteca POSIX pthread, em
modo usuário
• Threads são criados pela system call clone()
Processos e Threads

• Estados e
mudanças de
estados
Gerência do Processador
• Preempção por tempo
› Cada processo possui uma fatia de tempo para executar
› Ao término da fatia de tempo o processo é retirado da
UCP e outro processo é executado
› O processo retirado poderá voltar a executar
posteriormente
› A fatia de tempo é dinâmica e depende da prioridade do
processo
Gerência do Processador
• Preempção por tempo
› Existem duas listas de processos prontos:
• Ativos: processos prontos que não esgotaram suas fatias
de tempo
• Expirados: processos prontos que já esgotaram suas fatias
› Os processos são colocados inicialmente na lista ativa
› Os processos quando sofrem preempção por tempo não
perdem o restante da fatia de tempo e permacem na
lista ativa
› Quando o processo termina a sua fatia de tempo, é
colocado na lista expirada e recalculada a sua fatia de
tempo
› Os processos prontos na lista expirado serão
executados apenas quando todos os outros processos
esgotarem suas fatias de tempo
Gerência do Processador

• Preempção por prioridade


› Se um processo de maior prioridade
ficar pronto, o processo em execução
é interrompido, colocado no estado
de pronto e o processo de maior
prioridade assume o processador
› Processos de mesma prioridade são
tratados no esquema de fila circular
Gerência do Processador

• O algoritmo de escalonamento foi


complementamente alterado da versão do kernel
2.4 para a 2.6
› Na versão 2.6, o número de processos
prontos não implica no tempo do
escalonamento
• Os objetivos principais do escalonador são:
reduzir o tempo de resposta de aplicações
interativas, aumentar o throughtput e evitar
starvation
• O escalonador tenta identificar o tipo do
processo: IO-bound ou CPU-bound, para
beneficiar os processos IO-bound
Gerência do processador

• Níveis de prioridade
› 140 níveis, sendo zero a maior prioridade
e 139 a menor
› Prioridades entre 0 e 99 são chamadas
de tempo real: não existe fatia de tempo,
logo não existe preempção por tempo
apenas por prioridade
› Prioridades entre 100 e 139 existem as
preempções por tempo e prioridade
Gerência do Processador

• Escalonamento dinâmico permite que o sistema


ajuste a prioridade dos processos
• Todo processo tem uma prioridade estática
atribuída quando o processo é criado,
geralmente 120 ou nice(0)
• A prioridade dinâmica é calculada somando ou
diminuindo um valor da prioridade estática
• O valor dependenrá do tempo que o processo
passa no estado de espera
› Quanto mais tempo no estado de espera,
maior o valor a ser subtraído da prioridade
estática
Gerência do Processador
Gerência de Memória

• Memória virtual
• Permite executar programas maiores que a memória
física (MF)
• Permite criar estruturas de dados maiores que a MF
• Apenas partes dos programas precisam estar na MF
• Processos podem compartilhar bibliotecas,
utilitários e programas na MF
• Programas podem ser alocados em qualquer
posição da MF
• Permite carregar um número maior de processos na
MF
Gerência de Memória

• Espaço de endereçamento virtual de 4 GB


(Intel 32 bits), 64 GB com PAE e 256 TB
(Intel 64 bits)
• Tradução de endereços, utilizando tabelas
de páginas
• Páginas de 4 KB (32 bits) ou 8 KB (64 bits)
• Feito em hardware pela MMU (Memory
Management Unit)
• Paginação por demanda
Gerência de Memória

• Mapeamento em dois
níveis para reduzir o
tamanho das tabelas
de mapeamento
• Control register 3 (cr3)
aponta para o início da
tabela diretório (TD)
• A TD permite chegar na
tabela de páginas (TP)
• A TP permite chegar no
endereço na página
real (page frame)
Gerência de Memória

• Processadores Intel de
64 bits exigem quatro
níveis de mapeamento
Gerência de Memória

• O SO controla cada frame na MP utilizando um vetor


(mem_map)
• Cada elemento do vetor é chamado de page descriptor
(page) de 32 bytes
• Cada page descriptor possui diversas informações
sobre uma página específica na MP
Gerência de Memória

• Page descriptor
› Campo _count é um contador
• Se o valor é -1 o frame está livre
• Se o campo for maior ou igual a zero o frame
está em uso
› Flag PG_locked indica que o frame está
bloqueado
› Flag PG_reference indica que o frame foi
referenciado recentemente
› Flag PG_dirty indica se a página foi
modificada
Gerência de Memória

• Page Frame Reclaiming Algorithm (PFRA)


› Responsável por manter um número mínimo de
páginas livres para o SO continuar funcionando
adequadamente
› O PFRA seleciona a página a ser liberada
conforme o seu conteúdo
• Por exemplo, é melhor liberar páginas não
modificadas do que as modificadas
› Páginas modificadas devem ser gravadas em
disco (page out) antes de liberadas
› O PFRA seleciona a página que tem a menor
chance de ser referenciada novamente,
utilizando o algoritmo LRU (Least Recently Used)
Gerência de Memória

• Least Recently Used (LRU)


› O sistema mantem duas listas de
páginas
• Páginas ativas: contem páginas acessadas
recentemente
• Páginas inativas: contem páginas não
acessadas recentemente
› As páginas trocam de listas em função
do tempo e se foram referenciadas (flag
PG_reference)
› Periodicamente, as páginas da lista de
inativas são liberadas
Gerência de Memória

• Page Frame Reclaiming Algorithm (PFRA)


› Se a quantidade de memória livre
continuar baixa é acionado o Out Off
Memory Killer (OOMK)
› OOMK irá selecionar um processo
(vítima) e eliminá-lo, para liberar todas as
suas páginas na MP
Gerência de Memória

• Swapping
› Antes das páginas na memória serem liberadas,
as páginas devem gravadas em disco (page out)
› Geralmente páginas modificadas
› Quando a página é novamente referenciada
ocorre a leitura da página em disco para a
memória (page in)
› A área de swapping pode ser uma partição
inteira ou um arquivo em uma partição
› Podem exitir ao mesmo tempo várias áreas de
swap
› Pode ser desativado
Sistema de Arquivos

• Existem diversos sistemas de arquivos


para o Linux, sendo os mais utilizados o
Ext2 (Second Extended Filesystem) e Ext3
• Os dois sistemas de arquivos são
compatíveis, sendo a grande diferença o
esquema de journaling oferecido pelo Ext3
› Journaling permite recuperar mais
rapidamente um filesystem após alguma
interrupção no sistema, como uma falta
de energia
Sistema de Arquivos

• Características do Ext2
› Permite definir o tamanho do bloco (1 KB
a 4 KB). Blocos pequenos reduzem a
fragmentação, porém blocos grandes
reduzem o número de transferências
› Permite definir o número de inodes na
partição
› Permite reduzir o tempo de busca de
arquivos
› Realiza a pré-alocação de blocos para
evitar a fragmentação dos arquivos
Sistema de Arquivos

• Formato de um filesystem Ext2


Sistema de Arquivos
Gerência de E/S
Referências: Livros e Papers

• Linux Kernel Development, 2 ed., Robert


Love, Sams Publishing, 2005
• Understanding the Linux Kernel, 3 ed.,
Daniel Bovet, Marco Cesati, O´Relly, 2005
• Professional Linux Kernel Architecture,
Wolfgang Mauerer, Wrox, 2008
• Understanding the Linux 2.6.8.1 CPU
Scheduler, Josh Aas, SGI, 2005
Referências: Sites

• www.levenez.com/unix/
• www.kernel.org
• www.gnu.org
• www.distrowatch.com
www.infnet.edu.br
cursos@infnet.edu.br
2122-8800

Esta palestra está disponível em:

Ministrada por

E-mail:

Anda mungkin juga menyukai