Tutorial de programação avançada {Desenvolvimento} do Linux <br /> Parte 1 Linux Kernel Parte 2 Guia de programação do módulo Linux Kernel Parte 3 Guia do programador Linux Parte 4 Conceito do kernel Linux Estrutura do sistema Parte 5 Estrutura específica do sistema Linux Kernel
Índice Introdução ao Raymond Prefácio
"Anúncio" do Grupo de Engenharia de Documentação Linux
Prefácio do Tradutor Parte Um Prefácio do Kernel Linux
Capítulo 1 Noções básicas de hardware e software 6
1.1 Noções básicas de hardware 6
1.1.1 CPU 7
1.1.2 Memória 8
1.1.3 Barramento 8
1.1.4 Controladores e Periféricos 8
1.1.5 Espaço de endereço 9
1.1.6 Relógio 9
1.2 Fundamentos do Software 9
1.2.1 Linguagem de Computador 9
1.2.2 O que é um sistema operacional 11
1.2.3 Estrutura de dados do kernel 13
Capítulo 2 Gerenciamento de Memória 15
2.1 Modelo abstrato de memória virtual 15
2.1.1 Solicitação página 17
2.1.2 Troca 17
2.1.3 Memória virtual compartilhada 18
2.1.4 Modo de endereçamento físico e modo de endereçamento virtual 18
2.1.5 Controle de acesso 18
2.2 Cache 19
2.3 Tabela de páginas Linux 20
2.4 Alocação e reciclagem de páginas 21
2.4.1 Alocação de Página 22
2.4.2 Reciclagem de páginas 22
2.5 Mapeamento de memória 22
2.6 Solicitação página 23
2.7 Cache de página Linux 24
2.8 Troca e eliminação de páginas 25
2.8.1 Reduzindo tamanhos de buffer e cache de página 25
2.8.2 Trocando páginas de memória compartilhada do System V 26
2.8.3 Troca e retirada de páginas 27
2.9 Cache de Troca 27
2.10 mudança de página 28
Capítulo 3 Processo 29
3.1 Processos Linux 29
3.2 Identificadores 31
3.3 Agendamento 32
3.4 Documentação 34
3.5 Memória Virtual 35
3.6 Criando um processo 36
3.7 Tempo e Temporizadores 37
3.8 Executando o programa 38
3.8.1 ELFO 39
3.8.2 Arquivos de script 40
Capítulo 4 Mecanismo de comunicação entre processos 41
4.1 Mecanismo de sinalização 41
4.2 Tubos 42
4.3 Soquetes 44
4.3.1 Mecanismo de comunicação entre processos do System V 44
4.3.2 Fila de Mensagens 44
4.3.3 Semáforo 45
4.3.4 Armazenamento compartilhado 47
Capítulo 5 PCI 49
5.1 Espaço de endereço PCI 49
5.2 Cabeçalho de configuração PCI 50
5.3 E/S PCI e espaço de endereço de armazenamento 51
5.4 Ponte PCI-ISA 51
5.5 Ponte PCI-PCI 51
5.5.1 Ponte PCI-PCI: E/S PCI e endereços de armazenamento
Janela para o espaço 51
5.5.2 Ponte PCI-PCI: Ciclo de Configuração PCI e PCI
Ônibus número 52
5.6 Inicialização Linux PCI 53
5.6.1 Estrutura de dados PCI do kernel Linux 53
5.6.2 Driver de dispositivo PCI 53
5.6.3 Funções do BIOS PCI 56
5.6.4 Processo de correção PCI 57
Capítulo 6 Tratamento de interrupções e drivers de dispositivos 60
6.1 Interrupções e tratamento de interrupções 60
6.1.1 Controlador de interrupção programável 61
6.1.2 Inicializar estrutura de dados de processamento de interrupção 61
6.1.3 Tratamento de interrupções 62
6.2 Drivers de Dispositivo 63
6.2.1 Teste e Interrupção 64
6.2.2 Acesso Direto à Memória (DMA) 65
6.2.3 Memória 66
6.2.4 Interface entre driver de dispositivo e kernel 66
6.2.5 Disco rígido 69
6.2.6 Equipamento de rede 74
Capítulo 7 Sistemas de Arquivos 77
7.1 O segundo sistema de arquivos estendido EXT2 78
7.1.1 Nó Inode do sistema EXT2 79
7.1.2 Superbloco no sistema EXT2 80
7.1.3 Descritores de grupo para sistemas EXT2 80
7.1.4 Diretório do sistema EXT2 81
7.1.5 Encontrando arquivos no sistema de arquivos EXT2 81
7.1.6 Alterando arquivos no sistema de arquivos EXT2
Tamanho 82
7.2 Sistema de Arquivos Virtuais 83
7.2.1 Super bloco do sistema de arquivos VFS 84
7.2.2 Nó Inode do sistema de arquivos VFS 84
7.2.3 Registrando o sistema de arquivos 85
7.2.4 Montando o sistema de arquivos 85
7.2.5 Localizando arquivos em um sistema de arquivos virtual 87
7.2.6 Desmontando o sistema de arquivos 87
7.2.7 Cache Inode do sistema de arquivos VFS 87
7.2.8 Cache de Diretório 88
7.3 Cache de buffer 88
7.3.1 daemon do kernel bdflush 90
7.3.2 processo de atualização 90
7.4 /proc sistema de arquivos 91
7.5 Arquivos de dispositivos especiais 91
Capítulo 8 Rede 92
8.1 Visão Geral da Rede TCP/IP 92
8.2 Hierarquia de rede TCP/IP no Linux 95
8.3 Interface de soquete BSD 96
8.4 Camada de soquete 97 do INET
8.4.1 Criando um soquete BSD 98
8.4.2 Endereço de ligação para INET BSD Socket 99
8.4.3 Estabelecendo conexão com soquete INET BSD 99
8.4.4 Escuta de soquete INET BSD 100
8.4.5 Aceitando solicitações de conexão 100
8.5 Camada IP 100
8.5.1 Buffer de Soquete 100
8.5.2 Recebendo mensagens IP 101
8.5.3 Envio de pacotes IP 102
8.5.4 Fragmentação de Dados 102
8.6 Protocolo de Resolução de Endereço 103
8.7 Roteamento IP 104
Capítulo 9 Mecanismos e Módulos do Kernel 107
9.1 Mecanismo do Kernel 107
9.1.1 Meio Controle Inferior 107
9.1.2 Fila de Tarefas 108
9.1.3 Temporizadores 109
9.1.4 Fila de espera 110
9.1.5 Bloqueio de rotação 110
9.1.6 Semáforo 110
9.2 Módulos 111
9.2.1 Carregamento do módulo 112
9.2.2 Desinstalação do módulo 113
Capítulo 10 Processadores 115
10,1X86 115
10.2 BRAÇO 115
10.3 Processador Alfa AXP 115
Capítulo 11 Código-fonte do kernel Linux 117
11.1 Como obter o código-fonte do kernel Linux 117
11.2 Organização do código-fonte do kernel 117
11.3 Por onde começar 118
Capítulo 12 Estruturas de Dados Linux 120
Apêndice A Sites úteis da Web e FTP 138
Apêndice B Glossário 139
Parte 2 Guia de Programação do Módulo Kernel Linux Agradecimentos Prefácio Capítulo 1 Olá, Mundo 145
1.1 Makefiles do módulo do kernel 146
1.2 Módulo de kernel multi-arquivo 147
Capítulo 2 Arquivos de dispositivos de caracteres 149
Capítulo 3 /proc Sistema de arquivos 158
Capítulo 4 Usando /proc para entrada 162
Capítulo 5 Usando arquivos de dispositivo para entrada 170
Capítulo 6 Parâmetros de inicialização 182
Capítulo 7 Chamadas do Sistema 185
Capítulo 8 Tratamento de Bloqueio 190
Capítulo 9 Substituindo printk 199
Capítulo 10 Agendamento de Tarefas 202
Capítulo 11 Manipuladores de interrupção 207
Capítulo 12 Multiprocessamento Simétrico 211
Capítulo 13 Erros Comuns 212
Apêndice A Diferenças entre 2.0 e 2.2 213
Apêndice B Outros Recursos 214
Apêndice C Dê sua avaliação 215
Parte 3 Guia do Programador Linux Capítulo 1 Sistema Operacional Linux 219
Capítulo 2 Kernel Linux 220
Capítulo 3 Pacote Linux libc 221
Capítulo 4 Chamadas do Sistema 222
Capítulo 5 “Canivete Suíço”: ioctl 223
Capítulo 6 Comunicação entre processos Linux 224
6.1 Introdução 224
6.2 Tubos Unix half-duplex 224
6.2.1 Conceitos básicos 224
6.2.2 Criando pipelines em linguagem C 225
6.2.3 Método simples 229
6.2.4 Operações atômicas em tubos 233
6.2.5 Várias coisas a serem observadas sobre tubos half-duplex
Edição 233
6.3 Tubos Nomeados 234
6.3.1 Conceitos básicos 234
6.3.2 Criando FIFO 234
6.3.3 Operação FIFO 235
6.3.4 Ação de bloqueio no FIFO 236
6.3.5 Sinal SIGPIPE 237
6.4 Sistema V IPC 237
6.4.1 Conceitos básicos 237
6.4.2 Fila de Mensagens 239
6.4.3 Semáforo 251
6.4.4 semtool: operações interativas de semáforo
Programa 260
6.4.5 Memória compartilhada 267
Capítulo 7 Programação de Som 274
7.1 Programação do alto-falante interno 274
7.2 Programação da placa de som 274
Capítulo 8 Gráficos de Unidades de Caracteres 276
8.1 Funções de E/S na libc 277
8.1.1 Saída formatada 277
8.1.2 Entrada formatada 278
8.2 biblioteca termcap 278
8.2.1 Prefácio 278
8.2.2 Obtenção da descrição do terminal 279
8.2.3 Ver descrição do terminal 279
8.2.4 capacidades termcap 280
8.3 Introdução ao Ncurses 280
8.4 Inicialização 282
8.5 Janelas 283
8.6 Saída 284
8.6.1 Saída formatada 285
8.6.2 Inserindo caracteres/linha 286
8.6.3 Excluir caracteres/linhas 286
8.6.4 Caixas e Linhas 287
8.6.5 Personagens de fundo 287
8.7 Entrada 288
8.8 Opções 289
8.8.1 Opções de saída 289
8.8.2 Opções de entrada 290
8.8.3 Propriedades do terminal 291
8.8.4 Usando opções 291
8.9 Atualizar terminal 292
8.10 Propriedades e cores do vídeo 293
8.11 Cursor e coordenadas da tela 294
8.12 Rolando 294
8.13 Teclado 295
8.14 Etiquetas flexíveis 295
8.15 Diversos 295
8.16 Acesso de baixo nível 296
8.17 Despejo de Tela 296
8.18 Simulação Termcap 296
8.19 Função Terminfo 296
8.20 Funções de depuração 297
8.21 Capacidades do Terminfo 297
8.21.1 Capacidades booleanas 297
8.21.2 Capacidades numéricas 298
8.21.3 Capacidades de string 299
8.22 Visão geral da função [N]Curses 306
Capítulo 9 Programação da porta de E/S 307
9.1 Programação do Mouse 307
9.2 Programação do Modem 308
9.3 Programação da Impressora 308
9.4 Programação do Joystick 308
Capítulo 10 Portando Aplicativos para Linux 309
10.1 Introdução 309
10.2 Processamento de sinal 309
10.2.1 Em SVR4, BSD e POSIX.1
Sinal 310
10.2.2 Opções de sinal Linux 310
10.2.3 Sinais no Linux 310
10.2.4 Sinais suportados pelo Linux 311
10.3 Terminal E/S 311
10.4 Processar informações e controle 311
10.4.1 processo kvm 312
10.4.2 Sistema de arquivos ptrace e /proc 312
10.4.3 Controle de processo no Linux 312
10.5 Compilação condicional portátil 313
10.6 Instruções complementares 314
Apêndice Chamadas do Sistema Alfabético 315
Parte 4 Resumo da Estrutura do Sistema Conceito do Kernel Linux 323
Prefácio 324
Capítulo 1 Estrutura do Sistema 325
1.1 Visão Geral do Sistema 325
1.2 Objetivos do kernel 325
1.3 Visão geral da estrutura do kernel 325
1.4 Suporte a vários desenvolvedores 327
1.5 Estrutura de dados do sistema 328
1.5.1 Lista de Tarefas 328
1.5.2 Mapeamento de memória 328
1.5.3 Nós de índice 328
1.5.4 Conexão de dados 329
Capítulo 2 Estrutura do Sistema de Subsistemas 330
2.1 Estrutura do sistema do agendador de processos 330
2.1.1 Metas 330
2.1.2 Módulo 330
2.1.3 Expressão de dados 331
2.1.4 Dependências, fluxo de dados e fluxo de controle 331
2.2 Estrutura do sistema gerenciador de memória 331
2.2.1 Metas 331
2.2.2 Módulos 331
2.2.3 Representação de dados 331
2.2.4 Fluxo de dados, fluxo de controle e dependências 332
2.3 Estrutura do sistema de arquivos virtuais 333
2.3.1 Metas 333
2.3.2 Módulos 333
2.3.3 Representação de dados 333
2.3.4 Fluxo de dados, fluxo de controle e dependências 334
2.4 Estrutura do sistema de interface de rede 334
2.4.1 Metas 334
2.4.2 Módulos 334
2.4.3 Representação de dados 335
2.4.4 Fluxo de dados, fluxo de controle e dependências 335
2.5 Estrutura do sistema de comunicação entre processos 335
Capítulo 3 Conclusão 336
Apêndice A Definição dos Termos 337
Referências do Apêndice B 338
Parte 5 Resumo da estrutura específica do sistema do kernel Linux 341
Capítulo 1 Prefácio 342
1.1 Metas 342
1.2 Introdução ao Linux 342
1.3 Conhecimento prévio da estrutura do sistema de software 342
1.4 Métodos e abordagens 343
1.5 Leitores aos quais este livro se destina 344
1.6 Disposição dos capítulos desta parte 344
Capítulo 2 Estrutura do Sistema 345
Capítulo 3 Estrutura do Subsistema 346
3.1 Agendador de Processo 346
3.1.1 Metas 346
3.1.2 Interface externa 346
3.1.3 Descrição do subsistema 346
3.1.4 Estrutura de dados 347
3.1.5 Estrutura do subsistema 348
3.1.6 Dependências do subsistema 348
3.2 Gerenciador de Memória 348
3.2.1 Metas 348
3.2.2 Interface externa 349
3.2.3 Descrição do subsistema 349
3.2.4 Estrutura de dados 350
3.2.5 Estrutura do subsistema 350
3.2.6 Dependências do subsistema 351
3.3 Sistema de arquivos virtuais 352
3.3.1 Metas 352
3.3.2 Interface externa 352
3.3.3 Descrição do subsistema 353
3.3.4 Drivers de Dispositivo 353
3.3.5 Sistema de arquivos lógico 354
3.3.6 Módulos 354
3.3.7 Estrutura de dados 355
3.3.8 Estrutura do subsistema 355
3.3.9 Dependências do subsistema 355
3.4 Comunicação entre processos 355
3.4.1 Metas 355
3.4.2 Interface externa 357
3.4.3 Descrição do subsistema 357
3.4.4 Estrutura de dados 358
3.4.5 Estrutura do subsistema 359
3.4.6 Dependências do subsistema 359
3.5 Interface de rede 360
3.5.1 Metas 360
3.5.2 Interface externa 361
3.5.3 Descrição do subsistema 361
3.5.4 Estrutura de dados 362
3.5.5 Estrutura do subsistema 363
3.5.6 Dependências do subsistema 363
Capítulo 4 Conclusão 365
Apêndice A Definição dos Termos 366
Referências do Apêndice B 368
Parte Seis Apêndice Apêndice A Licença de Cópia do Projeto de Documento Linux 372
Apêndice B Licença Pública Geral GNU 374
Expandir