Kernel Linux

2,184 views

Published on

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,184
On SlideShare
0
From Embeds
0
Number of Embeds
31
Actions
Shares
0
Downloads
0
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide
  • 30s
  • Kernel Linux

    1. 1. Kernel GNU/Linux <ul><ul><li>Apresentando arquitetura e implementações </li></ul></ul><ul><ul><li>internas do kernel open source Linux </li></ul></ul><ul><ul><li>Líus Fontenelle Carneiro </li></ul></ul><ul><ul><li>http://hypercast.info/ </li></ul></ul>
    2. 2. Agenda <ul><li>Localizando </li></ul><ul><li>Um pouco de história </li></ul><ul><li>Arquitetura </li></ul><ul><li>Linux x Unix clássico </li></ul><ul><li>Código Fonte </li></ul><ul><li>Kernel-space e User-space </li></ul><ul><li>Processos e Threads </li></ul><ul><li>Virtual Filesystem </li></ul>
    3. 3. Localizando
    4. 4. Um pouco de história <ul><li>Início em 1991, por Linus Torvalds </li></ul><ul><li>Inspirado no Minix, e não baseado nele </li></ul><ul><li>Implementação dos mais variados recursos, encontrados nas variantes Unix e BSD </li></ul><ul><li>Preocupação com portabilidade e escalabilidade </li></ul>
    5. 5. Linha de Tempo
    6. 6. O tamanho do Linux
    7. 7. Arquiteturas de Kernel
    8. 8. Arquitetura GNU/Linux
    9. 9. Kernel Subsystems
    10. 10. Linux x Unix clássico <ul><li>Carregamento dinâmico de módulos; </li></ul><ul><li>Suporta multiprocessamento; </li></ul><ul><li>Suporta preempção; </li></ul><ul><li>Suporta “processos leves”; </li></ul><ul><li>Modelo de devices sysfs. </li></ul>
    11. 11. Código Fonte <ul><li>Obtendo: http://www.kernel.org/ </li></ul><ul><li>Versionamento </li></ul><ul><li>Explorando diretórios </li></ul><ul><li>Compilação </li></ul>
    12. 12. Código Fonte <ul><li>Obtendo: http://www.kernel.org/ </li></ul><ul><li>Versionamento </li></ul><ul><li>Explorando diretórios </li></ul><ul><li>Compilação </li></ul>
    13. 13. Código Fonte <ul><li>Obtendo: http://www.kernel.org/ </li></ul><ul><li>Versionamento </li></ul><ul><li>Explorando diretórios </li></ul><ul><li>Compilação </li></ul>
    14. 14. Código Fonte <ul><li>Obtendo: http://www.kernel.org/ </li></ul><ul><li>Versionamento </li></ul><ul><li>Explorando diretórios </li></ul><ul><li>Compilação </li></ul>
    15. 15. Código Fonte <ul><li>Obtendo: http://www.kernel.org/ </li></ul><ul><li>Versionamento </li></ul><ul><li>Explorando diretórios </li></ul><ul><li>Compilação </li></ul>
    16. 16. Kernel-space e User-space <ul><li>Detalhes de desenvolvimento no kernel-space: </li></ul><ul><ul><li>Sem acesso à biblioteca C; </li></ul></ul><ul><ul><li>Codificar em C99 e GNU C, não em ANSI; </li></ul></ul><ul><ul><li>Sem proteção para acesso à memória; </li></ul></ul><ul><ul><li>Sem acesso a ponto flutuante; </li></ul></ul><ul><ul><li>Cuidado com sincronia e concorrência; </li></ul></ul><ul><ul><li>Nunca esquecer da portabilidade. </li></ul></ul>
    17. 17. Processos e Threads <ul><li>Implementação de processos a nível de kernel; </li></ul><ul><li>Nível básico da abstração gerenciável de programas em execução; </li></ul><ul><li>Estrutura task_struct ; </li></ul><ul><ul><li>include/linux/sched.h, linha 800 </li></ul></ul><ul><li>Process ID máximo é um short int por default; </li></ul>
    18. 18. Estados dos processos
    19. 19. Criação de Processos <ul><li>Criação em duas etapas: fork() e exec(); </li></ul><ul><li>Otimização de realocação de recursos; </li></ul><ul><li>O Linux faz COW! E rápido! </li></ul>
    20. 20. COW?!
    21. 21. COW: Copy-On-Write <ul><li>Aproveitamento de recursos já alocados; </li></ul><ul><li>Não escreve dados desnecessários ou redundantes; </li></ul><ul><li>Menor overhead em sistemas orientados a processos; </li></ul><ul><li>Estrutura thread_info e o slab allocator; </li></ul><ul><ul><li>include/asm-x86_64/thread_info.h </li></ul></ul><ul><li>Recurso disponibilizado pelo slab allocator. </li></ul>
    22. 22. Threads no Linux <ul><li>Não existem como na forma conceitual; </li></ul><ul><li>O Linux implementa threads como processos comuns; </li></ul><ul><li>LWP – Lightweight Processes; </li></ul><ul><li>Não existem mecanismos de escalonamento especiais ou estruturas de dados específicas; </li></ul><ul><li>Contraste com outros sistemas; </li></ul><ul><li>KISS; </li></ul><ul><li>Assim como um processo, é criada partindo de um fork(), que usa a função clone(): </li></ul><ul><ul><li>kernel/fork.c </li></ul></ul><ul><li>As flags da função clone() estão definidas em: </li></ul><ul><ul><li>include/linux/sched.h </li></ul></ul>
    23. 23. Virtual Filesystem <ul><li>Interface de abstração de sistemas de arquivos; </li></ul><ul><li>Integração de mídias diferentes, com recursos diferentes, a uma forma de acesso comum; </li></ul><ul><li>Integração com SCI; </li></ul><ul><li>Implementação de novos sistemas de arquivos como plug-ins, através de um sistema base, o Linux/Unix Filesystem; </li></ul>
    24. 24. Virtual Filesystem
    25. 25. Virtual Filesystem <ul><li>Suporte a mais sistemas de arquivos através de implementações de caraterísticas de um sistema de arquivos genérico: </li></ul><ul><ul><li>“Isso é o que um diretório representa para mim”; </li></ul></ul><ul><ul><li>“Assim é a forma como eu abro arquivos”. </li></ul></ul><ul><li>Arquitetura Orientada a Objetos, mesmo em C, permite uma solução integrada, limpa e suportável. É um dos cores subsystems mais organizados; </li></ul><ul><li>Disponibiliza recursos gerais para todos os filesystems implementados abaixo dele, como o Buffer Cache; </li></ul>
    26. 26. Virtual Filesystem
    27. 27. Virtual Filesystem <ul><li>Principais objetos: </li></ul><ul><ul><li>superblock object; </li></ul></ul><ul><ul><li>inode object; </li></ul></ul><ul><ul><li>dentry object; </li></ul></ul><ul><ul><li>file object. </li></ul></ul><ul><li>Principais operações: </li></ul><ul><ul><li>super_operations; </li></ul></ul><ul><ul><li>inode_operations; </li></ul></ul><ul><ul><li>dentry_operations; </li></ul></ul><ul><ul><li>Operações em file objects com read() e write(). </li></ul></ul>
    28. 28. E a Engenharia? <ul><li>Vantagens das ferramentas open source em geral; </li></ul><ul><li>Conhecimento aprofundado e reaproveitável; </li></ul><ul><li>Custo e fontes disponíveis; </li></ul><ul><li>Liberdade para escolher; </li></ul><ul><li>Liberdade para contribuir. </li></ul>
    29. 29. Kernel GNU/Linux <ul><ul><li>Fim </li></ul></ul><ul><ul><li>Revisão: Lila Maria Borges Silva </li></ul></ul><ul><ul><li>Contato </li></ul></ul><ul><ul><li>Página pessoal: http://hypercast.info/ </li></ul></ul><ul><ul><li>E-mail: [email_address] </li></ul></ul>

    ×