From: Thadeu Lima de Souza Cascardo Date: Fri, 14 May 2010 02:59:04 +0000 (-0300) Subject: Import course "ementa" as a content index. X-Git-Url: http://git.cascardo.eti.br/?p=cascardo%2Fkernel%2Fnotes%2F.git;a=commitdiff_plain Import course "ementa" as a content index. --- diff --git a/content b/content new file mode 100644 index 0000000..b7eb3b1 --- /dev/null +++ b/content @@ -0,0 +1,501 @@ +Cada tópico e subtópicos tem uma estimativa de horas, descrição e +comentários a respeito. + +0. Revisão + +Estimativa: 2 horas + +Comentários: Revisão curta e rápida. Cada tópico conterá uma +introdução com uma revisão mais profunda de algum conceito quando +necessário. Exemplo: aprofundaremos mais sobre memória virtual quando +falarmos sobre gerenciamento de memória no Linux. + +0.1 Arquiteturas de Computadores + +Estimativa: 30 minutos + +Conceitos sobre arquiteturas de computadores. Hierarquia de memória: +memória cache, memória virtual. Modo supervisor, níveis de +proteção. Interrupções, pilha, etc. + +0.2 Sistemas Operacionais + +Estimativa: 30 minutos + +Conceitos sobre Sistema Operacionais, suas funcionalidades, visão de +máquina extendida e de gerenciador de recursos. Gerenciamento de +processos e concorrência. Gerenciamento de memória. Gerenciamento de +dispositivos. + +0.3 Unix, POSIX, GNU e Linux + +Estimativa: 30 minutos + +Como esses nomes se encaixam: padrões, projetos, software. Um pouco de +história, um pouco da arquitetura de um sistema utilizando GNU e Linux +e outras opções para cada componente, como kernel, biblioteca padrão, +compilador, etc. Também um pouco sobre a interface de programação +POSIX para userspace. + +0.4 Software Livre e GPL + +Estimativa: 30 minutos + +O que é software livre, história, mitos. O que é a licença GPL, +licença utilizada pelo Linux, os mitos, as verdades e as +controvérsias. + +1. Introdução ao Linux Kernel + +Estimativa: 5 horas + +Comentários: Um pouco sobre a história do desenvolvimento do Linux, as +mudanças que ocorreram no código e no processo. O processo de +desenvolvimento atual, os mecanismos para controle de versão, +contribuição. Ferramentas necessárias e utilizadas. Como compilar, +carregar e passagem de parâmetros. A parte de startup foi movida para +outra seção. + +1.1 História do Desenvolvimento + +Estimativa: 15 minutos + +Como o Linux cresceu da versão 1.0 até a versão 2.6, como era o modelo +de desenvolvimento antigo, as ferramentas que foram utilizadas. + +1.2 Modelo de Desenvolvimento + +Estimativa: 15 minutos + +Como o modelo de desenvolvimento funciona hoje em dia. As ferramentas +que são utilizadas, o processo para incluir correções e melhorias no +mainline. + +1.3 Ferramentas básicas + +Estimativa: 30 minutos + +Utilização de ferramentas como diff, patch, quilt e ketchup para +manipulação de patches e download de diferentes versões do Linux. + +1.4 Árvore do diretório do Linux + +Estimativa: 15 minutos + +Onde cada subsistema se encontra. O suporte a arquiteturas e máquinas +diferentes; o núcleo do sistema; o gerenciamento de memória; as +bibliotecas utilitárias utilizadas; os drivers de dispositivos, +barramentos e outros; os sistemas de arquivos; os cabeçalhos; +subsistema de rede e protocolos; algoritmos de criptografia; sistemas +de segurança; ferramentas para compilação e manipulação de código; +software de user space; entre outros. + +1.5 Ferramentas de navegação no código + +Estimativa: 30 minutos + +Ferramentas para navegação no código, utilizando [ce ]tags, cscope, +lxr, vim, emacs, entre outros. + +1.6 Coding Standards + +Estimativa: 15 minutos + +O padrão de codificação para o Linux, incluindo bons e maus +exemplos. Ferramentas para identar e auditar código. + +1.7 Usango git + +Estimativa: 1 hora + +Comentários: É uma rápida introdução, considerando que um curso +completo sobre git poderia tomar umas 8 horas. + +Rápida introdução sobre a utilização da ferramenta. Seu funcionamento, +diversos comandos, técnicas e práticas utilizadas para execução de +certas tarefas. + +1.8 Configurando Linux + +Estimativa: 1 hora + +Comentários: Há um número muito grande de configurações no Linux e não +seria viável ver cada uma em detalhes. Será dada uma visão geral das +configurações, e algumas configurações serão vistas em maiores +detalhes em outros momentos do curso. Como exemplo, veremos opções de +configuração de depuração no tópico sobre depuração. + +Como utilizar o menu de configuração, como ler e buscar configurações +e suas dependências. Os menus e submenus, seu layout e como encontrar +alguns itens. + +Como utilizar configurações padrões. Como configurar para uma outra +arquitetura. Como reaproveitar uma configuração antiga e apenas +responder sobre as novas configurações ao atualizar a versão. + +1.9 Compilando Linux + +Estimativa: 15 minutos + +Comentários: após configurar, os comandos necessários para compilação +são rápidos e pequenos. O processo de compilação em si, pode tomar +bastante tempo. Geralmente, há algumas opções para esse intervalo: +fazer intervalo para almoço ou lanche, aguardar enquanto outros +tópicos são vistos, utilizar uma imagem já pré-compilada. + +Como compilar o Linux após sua configuração, gerando diferentes opções +de imagens, módulos. A instalação e o layout da instalação dos módulos. + +1.10 Iniciando o Linux + +Estimativa: 45 minutos + +Comentários: não serão vistos aqui os internos de como o Linux recebe +e trata os parâmetros, ou como ele inicia seus vários subsistemas, mas +apenas uma visão superficial do trabalho do bootloader e do initrd. + +Comentários: não é viável ver todos os parâmetros. Alguns são +relevantes para subsistemas e serão vistos no tópico apropriado. + +Comentários: será visto como o Linux carrega o initrd em memória RAM, +a descompressão de um initramfs, os dispositivos que ele cria e acessa +e os processos que ele inicia. + +O processo de inicialização, passando pelo bootloader, como os +parâmetros são passados ao Linux, e alguns desses parâmetros. A carga +do initrd, como o Linux executa e inicia o primeiro processo do +sistema e o trabalho feito geralmente pelo initrd para iniciar o +sistema, além da explicação de sua necessidade em diversas situações. + +2. Compilando o Primeiro Módulo + +Estimativa: 1 hora + +Comentários: visão geral de como escrever e compilar um módulo bem +simples. + +Ferramentas de manipulação de módulos, Makefile, cabeçalhos, +macros, printk, init/exit, parâmetros, etc. + +3. Visão Geral de Estruturas de dados do kernel + +Estimativa: 2 horas e meia + +3.1 Contadores de Referência + +Estimativa: 1 hora + +Visão geral de kref/kobject/kset e uso de sua API. + +3.2 Conversões entre tipos + +Estimativa: 15 minutos + +A conversão entre diferentes tipos e estruturas, e como a manipulação de +endereços de structs funciona. Exemplos: container_of, offset_of, etc. + +3.3 Endianness + +Estimativa: 15 minutos + +Funções para conversão de endianness, como be16_to_cpu, cpu_to_be16, +le16_to_cpu, cpu_to_le16, etc. + +3.4 Listas + +Estimativa: 30 minutos + +3.5 Hashs e Árvores + +Estimativa: 30 minutos + +Visão de algumas estruturas de dados utilizadas em códigos no Linux, +como árvores rubro-negras e outras árvores balanceadas, e alguns usos +de estruturas de hash. + +4. Dispositivos de Caractere + +Estimativa: 2 horas e meia + +4.1 VFS e estruturas + +Estimativa: 30 minutos + +Uma visão das estruturas de dados struct inode, struct file e struct +file_operations. + +4.2 Alocação de números de dispositivo + +Estimativa: 30 minutos + +Como alocar e registrar números de dispositivos. Alocação estática e +dinâmica e processo de registro de números. + +4.3 Registro de um dispositivo + +Estimativa: 15 minutos + +Como registrar um dispositivo de caractere e suas operações. + +4.4 Operações em um dispositivo + +Estimativa: uma hora e 15 minutos + +Como implementar as diversas operações em um dispositivo de caractere, +incluindo open, release, read, write, ioctl, etc. + +5. Depuração + +Estimativa: 2 horas + +Visão geral de alguns métodos de depuração. + +5.1 Utilizando printk + +Estimativa: 30 minutos + +Algumas outras opções para depuração, como dev_dbg, pr_debug, etc. +Utilização de opções de configuração para printk dinâmico, entre outros. + +5.2 procfs e seqfile + +Estimativa: 1 hora e 15 minutos + +Utilizando arquivos no /proc, e a biblioteca seqfile para imprimir dados +de forma sequencial. + +5.3 Visão geral de outros mecanismos + +Estimativa: 15 minutos + +Apontar para outras opções de depuração, como tracers, kprobes, kgdb, +suas capacidades, vantagens e desvantagens, onde obter mais informações. + +6. Processos no Linux + +Estimativa: 1 hora + +Uma visão geral sobre o sistema de escalonamento no Linux, os diferentes +contextos: de processo, interrupção, bottom handler, etc. Diferenças +entre sistemas UP e SMP e efeitos da preempção do kernel. + +7. Concorrência + +Estimativa: 5 horas + +7.1 Condições de corrida + +Estimativa: 30 minutos + +O que são condições de corrida, exemplos de como acontecem. Ocasiões em +que interrupções, softIRQs e preempção estão desabilitados e como +fazê-lo. + +7.2 Semáforos e mutexes + +Estimativa: 1 hora + +Como e quando utilizar o mecanismo de semáforos e mutexes, e as suas +diferenças. + +7.3 Spinlocks + +Estimativa: 1 hora + +Como e quando utilizar spinlocks, e as suas diferenças de mutexes e +semáforos. + +7.4 Operações Atômicas + +Estimativa: 30 minutos + +Como utilizar operações atômicas e suas vantagens em relação a outros +mecanismos. + +7.5 Per-CPU Counters + +Estimativa: 30 minutos + +Variáveis por CPU, ocasiões em que podem ser utilizadas, cuidados +necessários, e suas vantagens. + +7.6 RCU + +Estimativa: 1 hora + +Como utilizar o sistema de RCU para tratar concorrências, vantagens de +sua utilização, como utilizá-lo para manipular diferentes estruturas de +dados. + +7.7 Outros mecanismos + +Estimativa: 30 minutos + +Outros mecanismos para lidar com a concorrência, incluindo rwlocks, +seqlocks, entre outros. + +8. Temporização + +Estimativa: 5 horas + +8.1 Jiffies e o escalonador + +Estimativa: 1 hora + +Como o Linux mede o tempo, utilizando temporizadores por hardware, e +como ler esse tempo. Como utilizar a família schedule de comandos para +acionar o escalonador. + +8.2 Busy waiting + +Estimativa: 30 minutos + +Como utilizar busy waiting para aguardar a passagem do tempo, suas +vantagens e desvantagens e quando utilizá-lo. + +8.3 Timers + +Estimativa: 1 hora + +Como utilizar timers, seu contexto, suas vantagens e desvantagens. + +8.4 Tasklets + +Estimativa: 30 minutos + +O que são tasklets, quando devem ser utilizados, como funcionam e como +usá-los. + +8.5 Work queues + +Estimativa: 1 hora + +Como utilizar work queues, suas diferenças para timers e tasklets, sua +API. + +8.6 High Resolution Timers + +Estimativa: 1 hora + +Para certas aplicações, é necessária maior resolução no tempo. Como +hrtimers são utilizados, o que pode ser esperado deles. + +9. Alocação de Memória + +Estimativa: 8 horas + +Memória Física, Paginamento e Zonas de Memória (DMA, NORMAL, HIGHMEM) +Buddy System +vmalloc/vfree, vmap/ioremap/vunmap, kmap/kunmap, kmap_atomic/kunmap_atomic +Slab Allocator e Slob Allocators +kmalloc/kfree +kmem_cache_alloc/kmem_cache_free +kcalloc +kzalloc +Per CPU-Caches e TLB Control +Virtual Process Address Space +Layout de um Processo na Memoria +Copy-On-Write +Copiando dados entre Kernel e User Space +Laboratório + +10. Interrupções + +Estimativa: 2 horas + +Hardware IRQs +Bottom Handlers +SoftIRQs +Wait Queues, Completions +Laboratório + +11. Mapeamento de Memória e DMA + +Estimativa: 4 horas + +Coerência de Memória +DMA controllers +Device DMA memory +Mapping DMA memory +mmap +Laboratório + +12. Modelo de Dispositivos + +Estimativa: 4 horas + +Devices +Device drivers +Bus drivers +Device Classes +Devices Interfaces +kobjects e sybsystems +sysfs filesystem +Laboratório + +13. Comunicação com Hardware + +Estimativa: 4 horas + +Barreiras de Memória +Requisição de recursos +Portable communication: io{read,write}{8,16,32} +Laboratório + +14. Drivers PCI + +Estimativa: 2 horas + +Configuração +API para requisição de recursos +Laboratório + +15. Drivers USB + +Estimativa: 2 horas + +HCD +URB +Laboratório + +16. Dispositivos de Bloco + +Estimativa: 3 horas + +17. Dispositivos de Rede + +Estimativa: 3 horas + +17.1 Utilizando SKBs + +Como funcionam os socket buffers, como são manipulados, sua alocação de +memórias, entre outros. + +17.2 Dispositivos de Rede + +As operações a serem implementadas por dispositivos de rede, o +comportamento dos dispositivos em relação à pilha de rede, entre outros. + +18. Protocolos de Rede + +Estimativa: 2 horas + +Como implementar novas famílias de protocolos de rede, as operações +necessárias, como bind, connect, recv, send, entre outros. + + + + +Referências: + +http://kroah.com/ +http://www.wil.cx/matthew/lca2003/paper.pdf +Embedded Linux Primer +Linux Device Drivers +Understanding the Linux Kernel +Understanding Linux Network Internals +Linux Kernel in a Nutshell +Operating Systems: Design and Implementation +Structured Computer Organization +http://gnu.org/philosophy/ +/usr/src/linux/Documentation/