SUMÁRIO 1 INTRODUÇÃO 21 1.1 O QUE É O SISTEMA OPERACIONAL? 23 1.1.1 O sistema operacional como uma máquina estendida 23 1.1.2 O sistema operacional como gerenciador de recursos 24 1.2 HISTÓRIA DOS SISTEMAS OPERACIONAIS 25 1.2.1 A primeira geração (1945 1955): válvulas e painéis de conectores 26 1.2.2 A segunda geração (1955 1965): transistores e sistemas de lote 26 1.2.3 A terceira geração (1965 1980): CIs e multiprogramação 28 1.2.4 A quarta geração (1980 hoje): computadores pessoais 32 1.2.5 A história do MINIX 3 34 1.3 CONCEITOS DE SISTEMA OPERACIONAL 37 1.3.1 Processos 37 1.3.2 Arquivos 39 1.3.3 O shell 42 1.4 CHAMADAS DE SISTEMA 43 1.4.1 Chamadas de sistema para gerenciamento de processos 44 1.4.2 Chamadas de sistema para sinais 48 1.4.3 Chamadas de sistema para gerenciamento de arquivos 50 1.4.4 Chamadas de sistema para gerenciamento de diretórios 54 1.4.5 Chamadas de sistema para proteção 56 1.4.6 Chamadas de sistema para gerenciamento de tempo 57 1.5 ARQUITETURA DE SISTEMAS OPERACIONAIS 58 1.5.1 Sistemas monolíticos 58 1.5.2 Sistemas em camadas 60 1.5.3 Máquinas virtuais 61 1.5.4 Exonúcleos 64 1.5.5 Modelo cliente-servidor 64
14 SUMÁRIO 1.6 VISÃO GERAL DO RESTANTE DESTE LIVRO 65 1.7 RESUMO 66 2 PROCESSOS 69 2.1 INTRODUÇÃO 69 2.1.1 O modelo de processo 69 2.1.2 Criação de processos 71 2.1.3 Término de processos 72 2.1.4 Hierarquia de processos 73 2.1.5 Estados de um processo 74 2.1.6 Implementação de processos 76 2.1.7 Threads 78 2.2 COMUNICAÇÃO ENTRE PROCESSOS 80 2.2.1 Condições de corrida 81 2.2.2 Seções críticas 82 2.2.3 Exclusão mútua com espera ativa 83 2.2.4 Sleep e Wakeup 87 2.2.5 Semáforos 89 2.2.6 Mutex 92 2.2.7 Monitores 92 2.2.8 Passagem de mensagens 96 2.3 PROBLEMAS CLÁSSICOS DE COMUNICAÇÃO ENTRE PROCESSOS 98 2.3.1 O problema da janta dos filósofos 98 2.3.2 O problema dos leitores e escritores 100 2.4 ESCALONAMENTO 103 2.4.1 Introdução ao escalonamento 103 2.4.2 Escalonamento em sistemas de lote 108 2.4.3 Escalonamento em sistemas interativos 111 2.4.4 Escalonamento em sistemas de tempo real 116 2.4.5 Política versus mecanismo 117 2.4.6 Escalonamento de threads 118 2.5 VISÃO GERAL DOS PROCESSOS NO MINIX 3 119 2.5.1 A estrutura interna do MINIX 3 120 2.5.2 Gerenciamento de processos no MINIX 3 123 2.5.3 Comunicação entre processos no MINIX 3 127 2.5.4 Escalonamento de processos no MINIX 3 129 2.6 IMPLEMENTAÇÃO DE PROCESSOS NO MINIX 3 131 2.6.1 Organização do código-fonte do MINIX 3 131 2.6.2 Compilando e executando o MINIX 3 134 2.6.3 Os arquivos de cabeçalho comuns 136
SUMÁRIO 15 2.6.4 Arquivo de cabeçalho do MINIX 3 142 2.6.5 Estruturas de dados de processo e arquivos de cabeçalho 150 2.6.6 Inicialização do MINIX 3 159 2.6.7 Inicialização do sistema 162 2.6.8 Tratamento de interrupção no MINIX 168 2.6.9 Comunicação entre processos no MINIX 3 178 2.6.10 Escalonamento no MINIX 3 181 2.6.11 Suporte do núcleo dependente de hardware 184 2.6.12 Utilitários e a biblioteca do núcleo 188 2.7 A TAREFA DE SISTEMA NO MINIX 3 190 2.7.1 Visão geral da tarefa de sistema 192 2.7.2 Implementação da tarefa de sistema 195 2.7.3 Implementação da biblioteca de sistema 198 2.8 A TAREFA DE RELÓGIO NO MINIX 3 201 2.8.1 Hardware de relógio 201 2.8.2 Software de relógio 202 2.8.3 Visão geral do driver de relógio no MINIX 3 205 2.8.4 Implementação do driver de relógio no MINIX 3 209 2.9 RESUMO 210 3 ENTRADA/SAÍDA 216 3.1 PRINCÍPIOS DO HARDWARE DE E/S 216 3.1.1 Dispositivos de E/S 217 3.1.2 Controladoras de dispositivo 217 3.1.3 E/S mapeada em memória 219 3.1.4 Interrupções 221 3.1.5 Acesso direto à memória 221 3.2 PRINCÍPIOS DO SOFTWARE DE E/S 223 3.2.1 Objetivos do software de E/S 223 3.2.2 Rotinas de tratamento de interrupção 225 3.2.3 Drivers de dispositivo 225 3.2.4 Software de E/S independente de dispositivo 227 3.2.5 Software de E/S em espaço de usuário 229 3.3 IMPASSES 231 3.3.1 Recursos 231 3.3.2 Princípios do impasse 232 3.3.3 O algoritmo do avestruz 236 3.3.4 Detecção e recuperação 237 3.3.5 Prevenção de impasses 237 3.3.6 Evitação de impasses 239
16 SUMÁRIO 3.4 VISÃO GERAL DA E/S NO MINIX 3 243 3.4.1 Rotinas de tratamento de interrupção e acesso de E/S no MINIX 3 244 3.4.2 Drivers de dispositivo no MINIX 3 247 3.4.3 Software de E/S independente de dispositivo no MINIX 3 251 3.4.4 Software de E/S em nível de usuário no MINIX 3 251 3.4.5 Tratamento de impasses no MINIX 3 251 3.5 DISPOSITIVOS DE BLOCO NO MINIX 3 252 3.5.1 Visão geral dos drivers de dispositivos de bloco no MINIX 3 252 3.5.2 Software comum de driver de dispositivo de bloco 255 3.5.3 A biblioteca de drivers 258 3.6 DISCOS EM RAM 260 3.6.1 Hardware e software de disco em RAM 261 3.6.2 Visão geral do driver de disco em RAM no MINIX 3 262 3.6.3 Implementação do driver de disco em RAM no MINIX 3 263 3.7 DISCOS 266 3.7.1 Hardware de disco 266 3.7.2 RAID 268 3.7.3 Software de disco 269 3.7.4 Visão geral do driver de disco rígido no MINIX 3 274 3.7.5 Implementação do driver de disco rígido no MINIX 3 278 3.7.6 Tratamento de disquetes 286 3.8 TERMINAIS 288 3.8.1 Hardware de terminal 289 3.8.2 Software de terminal 293 3.8.3 Visão geral do driver de terminal no MINIX 3 300 3.8.4 Implementação do driver de terminal independente de dispositivo 313 3.8.5 Implementação do driver de teclado 329 3.8.6 Implementação do driver de vídeo 336 3.9 RESUMO 343 4 GERENCIAMENTO DE MEMÓRIA 349 4.1 GERENCIAMENTO BÁSICO DE MEMÓRIA 350 4.1.1 Monoprogramação sem swapping ou paginação 350 4.1.2 Multiprogramação com partições fixas 351 4.1.3 Realocação e proteção 352 4.2 SWAPPING 353 4.2.1 Gerenciamento de memória com mapas de bits 355 4.2.2 Gerenciamento de memória com listas encadeadas 356
SUMÁRIO 17 4.3 MEMÓRIA VIRTUAL 358 4.3.1 Paginação 359 4.3.2 Tabelas de página 361 4.3.3 Translation Lookaside Buffers (TLB) 366 4.3.4 Tabela de páginas invertida 368 4.4 ALGORITMOS DE SUBSTITUIÇÃO DE PÁGINA 370 4.4.1 O algoritmo de substituição de página ótimo 370 4.4.2 O algoritmo de substituição de página não usada recentemente 371 4.4.3 O algoritmo de substituição de página FIFO (primeira a entrar, primeira a sair) 372 4.4.4 O algoritmo de substituição de página segunda chance 372 4.4.5 O algoritmo do relógio para substituição de página 373 4.4.6 O algoritmo de substituição de página LRU (menos recentemente utilizada) 374 4.4.7 Simulando o algoritmo LRU em software 374 4.5 QUESTÕES DE PROJETO PARA SISTEMAS DE PAGINAÇÃO 376 4.5.1 O modelo do conjunto de trabalho 377 4.5.2 Políticas de alocação local versus global 379 4.5.3 Tamanho de página 381 4.5.4 Interface de memória virtual 382 4.6 SEGMENTAÇÃO 383 4.6.1 Implementação da segmentação pura 386 4.6.2 Segmentação com paginação: o Pentium Intel 387 4.7 VISÃO GERAL DO GERENCIADOR DE PROCESSOS DO MINIX 3 391 4.7.1 Layout da memória 393 4.7.2 Tratamento de mensagens 396 4.7.3 Estruturas de dados e algoritmos do gerenciador de processos 398 4.7.4 As chamadas de sistema FORK, EXIT e WAIT 402 4.7.5 A chamada de sistema EXEC 403 4.7.6 A chamada de sistema BRK 406 4.7.7 Tratamento de sinais 407 4.7.8 Outras chamadas de sistema 415 4.8 IMPLEMENTAÇÃO DO GERENCIADOR DE PROCESSOS DO MINIX 3 415 4.8.1 Os arquivos de cabeçalho e as estruturas de dados 415 4.8.2 O programa principal 418 4.8.3 Implementação de FORK, EXIT e WAIT 423 4.8.4 Implementação de EXEC 424 4.8.5 Implementação de BRK 428 4.8.6 Implementação do tratamento de sinais 429 4.8.7 Implementação de outras chamadas de sistema 436 4.8.8 Utilitários de gerenciamento de memória 438 4.9 RESUMO 440
18 SUMÁRIO 5 SISTEMA DE ARQUIVOS 445 5.1 ARQUIVOS 446 5.1.1 Atribuição de nomes de arquivo 446 5.1.2 Estrutura do arquivo 448 5.1.3 Tipos de arquivo 449 5.1.4 Acesso a arquivo 451 5.1.5 Atributos de arquivo 451 5.1.6 Operações sobre arquivos 453 5.2 DIRETÓRIOS 454 5.2.1 Diretórios simples 454 5.2.2 Sistemas de diretório hierárquicos 455 5.2.3 Nomes de caminho 456 5.2.4 Operações sobre diretórios 458 5.3 IMPLEMENTAÇÃO DO SISTEMA DE ARQUIVOS 459 5.3.1 Layout do sistema de arquivos 459 5.3.2 Implementando arquivos 461 5.3.3 Implementando diretórios 464 5.3.4 Gerenciamento do espaço em disco 469 5.3.5 Confiabilidade do sistema de arquivos 472 5.3.6 Desempenho do sistema de arquivos 479 5.3.7 Sistemas de arquivos estruturados em log 483 5.4 SEGURANÇA 485 5.4.1 O ambiente de segurança 485 5.4.2 Ataques genéricos contra a segurança 489 5.4.3 Princípios de projeto voltados à segurança 490 5.4.4 Autenticação de usuário 491 5.5 MECANISMOS DE PROTEÇÃO 494 5.5.1 Domínios de proteção 494 5.5.2 Listas de controle de acesso 496 5.5.3 Capacidades 499 5.5.4 Canais secretos 501 5.6 VISÃO GERAL DO SISTEMA DE ARQUIVOS DO MINIX 3 504 5.6.1 Mensagens 504 5.6.2 Layout do sistema de arquivos 506 5.6.3 Mapas de bits 508 5.6.4 I-nodes 510 5.6.5 A cache de blocos 512 5.6.6 Diretórios e caminhos 514 5.6.7 Descritores de arquivo 516 5.6.8 Travamento de arquivos 517 5.6.9 Pipes e arquivos especiais 517 5.6.10 Um exemplo: a chamada de sistema READ 519
SUMÁRIO 19 5.7 IMPLEMENTAÇÃO DO SISTEMA DE ARQUIVOS DO MINIX 3 520 5.7.1 Arquivos de cabeçalho e estruturas de dados globais 520 5.7.2 Gerenciamento de tabelas 523 5.7.3 O programa principal 531 5.7.4 Operações sobre arquivos individuais 534 5.7.5 Diretórios e caminhos 542 5.7.6 Outras chamadas de sistema 545 5.7.7 A interface de dispositivo de E/S 547 5.7.8 Suporte adicional para chamadas de sistema 552 5.7.9 Utilitários do sistema de arquivos 554 5.7.10 Outros componentes do MINIX 3 554 5.8 RESUMO 555 6 LEITURAS RECOMENDADAS E BIBLIOGRAFIA 559 6.1 SUGESTÕES PARA LEITURAS COMPLEMENTARES 559 6.1.1 Introdução e funcionamentos gerais 559 6.1.2 Processos 561 6.1.3 Entrada/saída 562 6.1.4 Gerenciamento de memória 562 6.1.5 Sistemas de arquivos 563 6.2 BIBLIOGRAFIA EM ORDEM ALFABÉTICA 564 APÊNDICES A INSTALANDO O MINIX 3 575 B O CÓDIGO-FONTE DO MINIX 583 C ÍNDICE PARA OS ARQUIVOS 979 ÍNDICE 981