Apresentação sobre o kernel Linux v2.0

29
1 Kernel Linux Apresentando arquitetura e implementações internas do kernel open source Linux v2.0 Líus Fontenelle Carneiro http://hypercast.info/

description

Apresentação sobre o kernel Linux feita na Engenharia de Teleinformática, UFC, Brasil.

Transcript of Apresentação sobre o kernel Linux v2.0

Page 1: Apresentação sobre o kernel Linux v2.0

1

Kernel Linux

Apresentando arquitetura e implementaçõesinternas do kernel open source Linux

v2.0

Líus Fontenelle Carneirohttp://hypercast.info/

Page 2: Apresentação sobre o kernel Linux v2.0

2

Agenda

■ Localizando■ Um pouco de história■ Arquitetura■ Linux x Unix clássico■ Código Fonte■ Kernel-space e User-space■ Processos e Threads■ Escalonador (CFS)

Page 3: Apresentação sobre o kernel Linux v2.0

3

Localizando

Page 4: Apresentação sobre o kernel Linux v2.0

4

Um pouco de história

■ Início em 1991, por Linus Torvalds■ Inspirado no Minix, e não baseado nele■ Implementação dos mais variados recursos,

encontrados nas variantes Unix e BSD■ Preocupação com portabilidade e escalabilidade

Page 5: Apresentação sobre o kernel Linux v2.0

5

Linha de Tempo

Page 6: Apresentação sobre o kernel Linux v2.0

6

O tamanho do Linux

Page 7: Apresentação sobre o kernel Linux v2.0

7

Arquiteturas de Kernel

Page 8: Apresentação sobre o kernel Linux v2.0

8

Arquitetura GNU/Linux

Page 9: Apresentação sobre o kernel Linux v2.0

9

Kernel Subsystems

Page 10: Apresentação sobre o kernel Linux v2.0

10

Linux x Unix clássico

■ Carregamento dinâmico de módulos;■ Suporta multiprocessamento;■ Suporta preempção;■ Suporta “processos leves”;■ Modelo de devices sysfs.

Page 11: Apresentação sobre o kernel Linux v2.0

11

Código Fonte

■ Obtendo: http://www.kernel.org/■ Versionamento■ Explorando diretórios■ Compilação

Page 12: Apresentação sobre o kernel Linux v2.0

12

Código Fonte

■ Obtendo: http://www.kernel.org/■ Versionamento■ Explorando diretórios■ Compilação

Page 13: Apresentação sobre o kernel Linux v2.0

13

Código Fonte

■ Obtendo: http://www.kernel.org/■ Versionamento■ Explorando diretórios■ Compilação

Page 14: Apresentação sobre o kernel Linux v2.0

14

Código Fonte

■ Obtendo: http://www.kernel.org/■ Versionamento■ Explorando diretórios■ Compilação

Page 15: Apresentação sobre o kernel Linux v2.0

15

Código Fonte

■ Obtendo: http://www.kernel.org/■ Versionamento■ Explorando diretórios■ Compilação

Page 16: Apresentação sobre o kernel Linux v2.0

16

Kernel-space e User-space

■ Detalhes de desenvolvimento no kernel-space:

Sem acesso à biblioteca C; Codificar em C99 e GNU C, não em ANSI; Sem proteção para acesso à memória; Sem acesso a ponto flutuante; Cuidado com sincronia e concorrência; Nunca esquecer da portabilidade.

Page 17: Apresentação sobre o kernel Linux v2.0

17

Processos e Threads

■ Implementação de processos a nível de kernel;■ Nível básico da abstração gerenciável de

programas em execução;■ Estrutura task_struct;

include/linux/sched.h, linha 994■ Process ID máximo é um short intshort int por default;

Page 18: Apresentação sobre o kernel Linux v2.0

18

Estados dos processos

Page 19: Apresentação sobre o kernel Linux v2.0

19

Criação de Processos

■ Criação em duas etapas: fork() e exec();■ Otimização de realocação de recursos;■ O Linux faz COW!

Page 20: Apresentação sobre o kernel Linux v2.0

20

COW: Copy-On-Write

■ Aproveitamento de recursos já alocados;■ Não escreve dados desnecessários ou

redundantes;■ Menor overhead em sistemas orientados a

processos;■ Estrutura thread_info e o slab allocator;

include/asm-x86_64/thread_info.h■ Recurso disponibilizado pelo slab allocator.

Page 21: Apresentação sobre o kernel Linux v2.0

21

Threads no Linux

■ Não existem como na forma conceitual;■ O Linux implementa threads como processos

comuns;■ LWP – Lightweight Processes;■ Não existem mecanismos de escalonamento

especiais ou estruturas de dados específicas;■ Contraste com outros sistemas;■ KISS;■ Assim como um processo, é criada partindo de

um fork(), que usa a função clone(): kernel/fork.c

■ As flags da função clone() estão definidas em: include/linux/sched.h

Page 22: Apresentação sobre o kernel Linux v2.0

22

CFS

■ “Completely Fair Schedule” ou Escalonador Completamente Justo;

■ Foi implementado por Ingo Molnar e está na árvore oficial desde a versão 2.6.23;

■ Foco em melhorar tempo de resposta das tarefas interativas e dar flexibilidade no gerenciamento do escalonamento em geral;

■ Não se baseia mais em runqueues ou timeslices;■ Não requer mais análises heurísticas para definir

o grau de interatividade de uma tarefa;■ Armazenamento de informações sobre os

processos em Red Black Trees.

Page 23: Apresentação sobre o kernel Linux v2.0

23

RBT

■ O “Red Black Tree” é um algoritmo de armazenamento e busca de informações utilizando árvores;

■ Funcionamento parecido com B-Trees convencionais, mas sendo alto-balanceadas e mantendo a simetria;

Page 24: Apresentação sobre o kernel Linux v2.0

24

CFS

■ A implementação do novo algoritmo de escalonamento veio com uma reimplementação completa do escalonador: Agora é modular (em termos de código); O novo “escalonador” na verdade é um novo algoritmo

de escalonamento é um módulo do escalonador, que também é novo!

■ Qual é a idéia? Pelo próprio Ingo Molnar: "This project is a complete rewrite of the Linux task

scheduler. My goal is to address various feature requests and to fix deficiencies in the vanilla scheduler that were suggested/found in the past few years, both for desktop scheduling and for server scheduling workloads."

Page 25: Apresentação sobre o kernel Linux v2.0

25

CFS

■ Como funciona? "CFS's design is quite radical: it does not use

runqueues, it uses a time-ordered rbtree to build a 'timeline' of future task execution, and thus has no 'array switch' artifacts (by which both the vanilla scheduler and RSDL/SD are affected). CFS uses nanosecond granularity accounting and does not rely on any jiffies or other HZ detail. Thus the CFS scheduler has no notion of 'timeslices' and has no heuristics whatsoever.”

■ Essa granularidade pode ser checada em: /proc/sys/kernel/sched_min_granularity_ns

Page 26: Apresentação sobre o kernel Linux v2.0

26

CFS

■ O CFS está implementado em: kernel/sched_fair.c

■ Modificações na task_struct: - struct prio_array *array; + struct sched_entity se;

Page 27: Apresentação sobre o kernel Linux v2.0

27

CFS

■ CFS Group Scheduling Redução do escopo do CFS para garantir e justiça de

distribuição de processamento entre processos de um grupo;

Administração no user-space baseada em arquivos e diretórios de um sistema de arquivos virtual;

Ainda sem suporte na versão estável do kernel para gerenciamento de mais de um nível de grupo, como no caso de usar grupos dentro de grupos.

Page 28: Apresentação sobre o kernel Linux v2.0

28

E a Engenharia?

■ Vantagens das ferramentas open source em geral;

■ Conhecimento aprofundado e reaproveitável;■ Custo e fontes disponíveis;■ Liberdade para escolher;■ Liberdade para contribuir.

Page 29: Apresentação sobre o kernel Linux v2.0

29

Kernel Linux

Fim

ContatoPágina pessoal: http://hypercast.info/

E-mail: [email protected]