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