Apresentação sobre o kernel Linux v2.0

  • Published on
    21-Jun-2015

  • View
    1.828

  • Download
    0

DESCRIPTION

1. Kernel LinuxApresentando arquitetura e implementaçõesinternas do kernel open source Linux v2.0Líus Fontenelle Carneirohttp://hypercast.info/1 2. Agenda ■ Localizando…

Transcript

1. Kernel LinuxApresentando arquitetura e implementaçõesinternas do kernel open source Linux v2.0Líus Fontenelle Carneirohttp://hypercast.info/1 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)2 3. Localizando 3 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 escalabilidade4 5. Linha de Tempo5 6. O tamanho do Linux6 7. Arquiteturas de Kernel7 8. Arquitetura GNU/Linux 8 9. Kernel Subsystems 9 10. Linux x Unix clássico ■ Carregamento dinâmico de módulos; ■ Suporta multiprocessamento; ■ Suporta preempção; ■ Suporta “processos leves”; ■ Modelo de devices sysfs. 10 11. Código Fonte ■ Obtendo: http://www.kernel.org/ ■ Versionamento ■ Explorando diretórios ■ Compilação11 12. Código Fonte ■ Obtendo: http://www.kernel.org/ ■ Versionamento ■ Explorando diretórios ■ Compilação12 13. Código Fonte ■ Obtendo: http://www.kernel.org/ ■ Versionamento ■ Explorando diretórios ■ Compilação13 14. Código Fonte ■ Obtendo: http://www.kernel.org/ ■ Versionamento ■ Explorando diretórios ■ Compilação14 15. Código Fonte ■ Obtendo: http://www.kernel.org/ ■ Versionamento ■ Explorando diretórios ■ Compilação15 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.16 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 int por default; 17 18. Estados dos processos 18 19. Criação de Processos ■ Criação em duas etapas: fork() e exec(); ■ Otimização de realocação de recursos; ■ O Linux faz COW!19 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.20 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.h21 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.22 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; 23 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:  quot;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.quot; 24 25. CFS ■ Como funciona?  quot;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_ns25 26. CFS ■ O CFS está implementado em:  kernel/sched_fair.c ■ Modificações na task_struct:  - struct prio_array *array;  + struct sched_entity se; 26 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. 27 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.28 29. Kernel LinuxFimContato Página pessoal: http://hypercast.info/E-mail: liusfc@gmail.com29