Apresentação sobre o kernel Linux v2.0

Post on 21-Jun-2015

1.847 views 2 download

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

1

Kernel Linux

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

v2.0

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

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)

3

Localizando

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

5

Linha de Tempo

6

O tamanho do Linux

7

Arquiteturas de Kernel

8

Arquitetura GNU/Linux

9

Kernel Subsystems

10

Linux x Unix clássico

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

11

Código Fonte

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

12

Código Fonte

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

13

Código Fonte

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

14

Código Fonte

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

15

Código Fonte

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

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.

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;

18

Estados dos processos

19

Criação de Processos

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

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.

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

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.

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;

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."

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

26

CFS

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

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

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.

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.

29

Kernel Linux

Fim

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

E-mail: liusfc@gmail.com