Import course "ementa" as a content index. master
authorThadeu Lima de Souza Cascardo <cascardo@holoscopio.com>
Fri, 14 May 2010 02:59:04 +0000 (23:59 -0300)
committerThadeu Lima de Souza Cascardo <cascardo@holoscopio.com>
Fri, 14 May 2010 02:59:04 +0000 (23:59 -0300)
content [new file with mode: 0644]

diff --git a/content b/content
new file mode 100644 (file)
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/