O sistema operativo é um conjunto de programas que constituem o núcleo de qualquer sistema informático, criando as abstracções necessárias para o desenvolvimento, execução e gestão eficientes das aplicações. Como tal, compreender o funcionamento dos sistemas operativos é essencial de forma a permitir que as aplicações tirem o máximo partido da plataforma onde se executam e perceber as condicionantes que existem nesta camada que virtualiza o hardware. Este livro aborda o funcionamento dos sistemas operativos apresentando duas visões complementares: o modelo computacional do sistema operativo, que permite aos programadores o desenvolvimento das aplicações, e as soluções arquitecturais encontradas para cada um dos subsistemas que compõem o sistema operativo. No livro são detalhados estes dois aspectos dos principais módulos. Para cada um dos temas abordados no livro é apresentada a sua materialização em dois casos de estudo correspondentes aos sistemas operativos mais utilizados actualmente: o Unix, Linux e o Windows.
| Principais Tópicos | Topo |
Ao longo do livro são abordados, entre outros, os seguintes temas:
| Público-Alvo | Topo |
| O(s) Autor(es) | Topo |
José Alves Marques
Professor Catedrático do Departamento de Engenharia de Informática do Instituto
Superior Técnico, de que é docente desde 1981. Foi um dos criadores da
Licenciatura de Engenharia Informática e Computadores e fundador do Departamento
de Engenharia Informática, de que foi o primeiro presidente. Lecciona as
cadeiras de Sistemas Operativos, Sistemas Distribuídos e Sistemas Empresariais
Integrados.
Paulo Ferreira
Professor Associado do Departamento de Engenharia de Informática do Instituto
Superior Técnico, onde lecciona desde 1990. Actualmente, é Pró-Reitor da UTL,
coordenador do Mestrado em Engenharia Informática e Computadores no IST
(Alameda) e lidera o Grupo de Sistemas Distribuídos no INESC ID. Lecciona, entre
outras, as disciplinas de Sistemas Operativos, Plataformas para Aplicações
Distribuídas na Internet e Computação Móvel.
Carlos Ribeiro
Professor Auxiliar do Departamento de Engenharia Informática do Instituto
Superior Técnico, onde lecciona desde 1993 nas áreas de Arquitectura de
Computadores e de Sistemas Operativos. É actualmente regente das cadeiras da
área de Segurança.
Luís Veiga
Professor Auxiliar do Departamento de Engenharia Informática do Instituto
Superior Técnico, onde é docente desde 2001. Leccionou as cadeiras de Sistemas
Operativos e Arquitectura de Computadores. É regente das cadeiras de Plataformas
para Aplicações Distribuídas na Internet e Ambientes Virtuais de Execução.
Rodrigo Rodrigues
Investigador no Max Planck Institute for Software Systems, em Saarbrücken,
Alemanha, onde lidera o grupo de sistemas fiáveis, e lecciona a cadeira de
Sistemas Operativos na Universidade de Saarland. Entre 2005 e 2007 foi Professor
Auxiliar no Instituto Superior Técnico.
| Índice | Topo |
| 1 - Introdução | |||
| 1.1 | Função dos Sistemas Operativos | ||
| 1.1.1 | Gestor de Recursos | ||
| 1.1.2 | Interface | ||
| 1.1.3 | Máquina Virtual | ||
| 1.2 | Critérios de Qualidade do Sistema Operativo | ||
| 1.3 | Evolução Histórica | ||
| 1.3.1 | Monitor de Controlo | ||
| 1.3.2 | Tratamento em Lotes (Batch) | ||
| 1.3.3 | Multiprogramação | ||
| 1.3.4 | Sistemas Interactivos | ||
| 1.3.5 | Memória Virtual | ||
| 1.3.6 | Computadores Pessoais | ||
| 1.3.7 | Sistemas Distribuídos | ||
| 1.4 | Classificações de Sistemas Operativos | ||
| 1.4.1 | Sistemas de Tempo Virtual e Tempo Real | ||
| 1.4.2 | Sistemas Embebidos | ||
| 1.4.3 | Sistemas Proprietários e Sistemas Abertos | ||
| 2 - Organização do Sistema Operativo | |||
| 2.1 | Organização do Sistema Operativo | ||
| 2.2 | Núcleo | ||
| 2.2.1 | Suporte Hardware à Execução do Núcleo | ||
| 2.3 | Chamadas Sistema | ||
| 2.4 | Processos Sistema | ||
| 2.5 | Evolução da Organização do Núcleo do Sistema Operativo | ||
| 2.5.1 | Núcleos Monolíticos | ||
| 2.5.2 | Núcleos em Camadas | ||
| 2.5.3 | Micronúcleos | ||
| 2.5.4 | Máquinas Virtuais | ||
| 2.6 | Sistemas de Referência | ||
| 2.6.1 | Unix | ||
| 2.6.2 | Windows | ||
| 3 - Processos: Modelo Computacional | |||
| 3.1 | Multiprogramação | ||
| 3.2 | Conceito de Processo | ||
| 3.2.1 | Espaço de Endereçamento | ||
| 3.2.2 | Reportório de Operações | ||
| 3.2.3 | Estado do Processo | ||
| 3.2.4 | Modelo de Segurança | ||
| 3.2.5 | Hierarquias de Processos | ||
| 3.2.6 | Recursos Associados ao Processo | ||
| 3.3 | Objecto Processo | ||
| 3.3.1 | Atributos do Processo | ||
| 3.3.2 | Operações do Processo | ||
| 3.4 | Rotinas Assíncronas | ||
| 3.4.1 | Acontecimentos Assíncronos | ||
| 3.4.2 | Tratamento dos Acontecimentos Assíncronos | ||
| 3.5 | Modelo Multitarefa | ||
| 3.5.1 | Objectivos | ||
| 3.5.2 | Conceito de Tarefa | ||
| 3.5.3 | Objecto Tarefa | ||
| 3.6 | Processos em Unix | ||
| 3.6.1 | Modelo Computacional | ||
| 3.6.2 | Operações sobre Processos | ||
| 3.6.3 | Signals | ||
| 3.6.4 | Tarefas - Interface POSIX | ||
| 3.7 | Processos no Windows | ||
| 3.7.1 | Modelo Computacional | ||
| 3.7.2 | Operações sobre Processos | ||
| 3.7.3 | Tarefas | ||
| 3.7.4 | Excepções e Acontecimentos Assíncronos | ||
| 4 - Gestor de Processos | |||
| 4.1 | Arquitectura do Gestor de Processos | ||
| 4.2 | Representação dos Processos | ||
| 4.2.1 | Estados de Execução | ||
| 4.2.2 | Contexto dos Processos | ||
| 4.3 | Comutação dos Processos | ||
| 4.3.1 | Despacho | ||
| 4.3.2 | Escalonamento | ||
| 4.3.3 | Chamadas Sistema Relacionadas com os Processos | ||
| 4.4 | Gestor de Processos em Unix | ||
| 4.4.1 | Representação dos Processos | ||
| 4.4.2 | Representação dos Processos em Linux | ||
| 4.4.3 | Modo Utilizador e Modo Núcleo | ||
| 4.4.1 | Diagrama de Estados | ||
| 4.4.2 | Execução das Chamadas Sistema | ||
| 4.4.3 | Escalonamento | ||
| 4.4.4 | Implementação dos Signals | ||
| 4.5 | Gestor de Processos em Windows | ||
| 4.5.1 | Representação dos Processos e Tarefas | ||
| 4.5.2 | Diagrama de Estados das Tarefas | ||
| 4.5.3 | Criação de Processos e Tarefas | ||
| 4.5.4 | Escalonamento | ||
| 4.5.5 | Tratamento Diferido de Interrupções | ||
| 4.5.6 | Tratamento de Excepções | ||
| 4.5.7 | Gestor de Objectos | ||
| 4.5.8 | Registo | ||
| 5 - Sincronização: Secções Críticas | |||
| 5.1 | Necessidade das Secções Críticas | ||
| 5.2 | Requisitos de uma Secção Crítica | ||
| 5.3 | Exclusão Mútua Algorítmica | ||
| 5.3.1 | Algoritmos de Dekker e de Peterson | ||
| 5.3.2 | Algoritmo de Lamport | ||
| 5.3.3 | Avaliação das Soluções Algorítmicas | ||
| 5.4 | Exclusão Mútua Baseada no Hardware | ||
| 5.4.1 | Inibição de Interrupções | ||
| 5.4.2 | Instruções Especiais de Teste e Atribuição | ||
| 5.4.3 | Exclusão Mútua em Multiprocessadores | ||
| 5.5 | Exclusão Mútua com Objectos do Sistema Operativo | ||
| 5.5.1 | Objecto Mutex | ||
| 5.5.2 | Mutex POSIX | ||
| 5.5.3 | Secções Críticas em Windows | ||
| 5.6 | Sincronização no Núcleo | ||
| 5.6.1 | Funções de Sincronização do Núcleo | ||
| 5.6.2 | Secções Críticas no Código do Núcleo | ||
| Cap. 6 – Programação Concorrente | |||
| 6.1 | Cooperação entre Processos | ||
| 6.2 | Sincronização no Modelo Computacional | ||
| 6.2.1 | Sincronização Directa | ||
| 6.2.2 | Sincronização Indirecta | ||
| 6.3 | Exemplos de Programação Concorrente | ||
| 6.3.1 | Sincronizar com um Acontecimento | ||
| 6.3.2 | Sincronizar a Gestão de Recursos | ||
| 6.3.3 | Sincronizar Clientes e Servidores (Problema do Barbeiro) | ||
| 6.3.4 | Sincronizar Produtores e Consumidores de Informação | ||
| 6.3.5 | Sincronizar Leitores e Escritores de uma Estrutura de Dados | ||
| 6.4 | Interblocagem | ||
| 6.4.1 | Situações de Interblocagem | ||
| 6.4.2 | Métodos para Prevenir a Interblocagem | ||
| 6.4.3 | Tratamento da Interblocagem | ||
| 6.5 | Tipos de Objectos de Sincronização | ||
| 6.5.1 | Semáforos de Contagem | ||
| 6.5.2 | Semáforos Binários | ||
| 6.5.3 | Filas de Sincronização | ||
| 6.5.4 | Eventos de Sincronização | ||
| 6.5.5 | Barreiras de Sincronização | ||
| 6.6 | Objectos de Sincronização nos Sistemas de Referência | ||
| 6.6.1 | POSIX - Semáforos | ||
| 6.6.2 | Windows - Semáforos | ||
| 6.6.3 | Windows - Eventos | ||
| 6.6.4 | Semáforos Unix | ||
| 6.7 | Monitores | ||
| 6.7.1 | Visão Axiomática da Sincronização | ||
| 6.7.2 | Estrutura do Monitor | ||
| 6.7.3 | Sincronização Explícita nos Monitores | ||
| 6.7.4 | Monitores em Java e .NET | ||
| 7 - Mecanismos de Gestão de Memória | |||
| 7.1 | Espaço de Endereçamento de um Processo | ||
| 7.2 | Modelo Computacional | ||
| 7.3 | Hierarquia de Memória | ||
| 7.4 | Endereços Reais e Virtuais | ||
| 7.5 | Endereçamento Real | ||
| 7.5.1 | Sistemas Monoprogramados | ||
| 7.5.2 | Sistemas Multiprogramados com Partições Fixas | ||
| 7.5.3 | Sistemas Multiprogramados com Partições Variáveis | ||
| 7.6 | Endereçamento Virtual | ||
| 7.7 | Segmentação | ||
| 7.7.1 | Objectivos | ||
| 7.7.2 | Mecanismo de Tradução de Endereços | ||
| 7.7.3 | Fragmentação | ||
| 7.7.4 | Protecção | ||
| 7.7.5 | Partilha de Memória entre Processos | ||
| 7.8 | Paginação | ||
| 7.8.1 | Objectivos | ||
| 7.8.2 | Espaço de Endereçamento | ||
| 7.8.3 | Fragmentação | ||
| 7.8.4 | Protecção | ||
| 7.8.5 | Partilha de Memória entre Processos | ||
| 7.8.6 | Dimensão das Páginas e Tabela de Páginas | ||
| 7.9 | Memória Segmentada/Paginada | ||
| 7.1 | Linux | ||
| 7.1.1 | Espaço de Endereçamento de um Processo | ||
| 7.1.2 | Espaço de Endereçamento do Núcleo | ||
| 7.1.3 | Tabelas de Páginas | ||
| 7.2 | Windows | ||
| 7.2.1 | Espaço de Endereçamento de um Processo | ||
| 7.2.2 | Tabelas de Páginas | ||
| 8 - Algoritmos de Gestão de Memória | |||
| 8.1 | Introdução | ||
| 8.2 | Principais Operações de Gestão de Memória Virtual | ||
| 8.2.1 | Alocação de Memória | ||
| 8.2.2 | Transferência de Blocos | ||
| 8.2.3 | Substituição de Blocos | ||
| 8.3 | Gestão em Memória Segmentada | ||
| 8.3.1 | Alocação de Segmentos | ||
| 8.3.2 | Transferência de Segmentos (swapping) | ||
| 8.3.3 | Substituição de Segmentos | ||
| 8.4 | Gestão em Memória Paginada | ||
| 8.4.1 | Alocação de Páginas | ||
| 8.4.2 | Transferência de Páginas | ||
| 8.4.3 | Substituição de Páginas | ||
| 8.4.4 | Diagrama de Estados das Páginas | ||
| 8.5 | Análise Comparativa da Segmentação e Paginação | ||
| 8.5.1 | Segmentação | ||
| 8.5.2 | Paginação | ||
| 8.6 | Linux | ||
| 8.6.1 | Memória Primária | ||
| 8.6.2 | Alocação de Páginas | ||
| 8.6.3 | Transferência de Páginas (paging) | ||
| 8.6.4 | Substituição de Páginas | ||
| 8.7 | Windows | ||
| 8.7.1 | Memória Primária | ||
| 8.7.2 | Alocação de Páginas | ||
| 8.7.3 | Transferência de Páginas (paging) | ||
| 8.7.4 | Substituição de Páginas | ||
| 9 - Sistema de Ficheiros | |||
| 9.1 | Organização do sistema de ficheiros | ||
| 9.1.1 | Entidades Fundamentais | ||
| 9.1.2 | Organização dos Nomes dos Ficheiros | ||
| 9.1.3 | Tipos de Ficheiros | ||
| 9.1.4 | Atributos de um Ficheiro | ||
| 9.1.5 | Operações do Sistema de Ficheiros | ||
| 9.2 | Estrutura Interna dos Sistemas de Armazenamento | ||
| 9.2.1 | Dispositivos de Memória Secundária | ||
| 9.2.2 | Organização Persistente dos Sistemas de Ficheiros | ||
| 9.2.3 | Estruturas de Suporte à Utilização dos Ficheiros | ||
| 9.3 | Linux | ||
| 9.3.1 | Modelo Computacional | ||
| 9.3.2 | Estrutura interna | ||
| 9.4 | Windows | ||
| 9.4.1 | Modelo Computacional | ||
| 9.4.2 | Estrutura Interna | ||
| 10 - Comunicação entre Processos | |||
| 10.1 | Modelo de Comunicação | ||
| 10.1.1 | Modelos de Interacção entre Processos Produtor e Consumidor | ||
| 10.1.2 | Objecto Canal | ||
| 10.1.3 | Características do Canal de Comunicação | ||
| 10.1.4 | Implementação do Canal de Comunicação | ||
| 10.2 | Comunicação no Modelo Computacional | ||
| 10.2.1 | Zonas de Memória Partilhada | ||
| 10.2.1 | Caixas de Mensagens | ||
| 10.2.2 | Ligações Virtuais | ||
| 10.2.1 | Resumo | ||
| 10.3 | Comunicação entre Processos em Linux | ||
| 10.3.1 | Pipes | ||
| 10.3.2 | Sockets Unix | ||
| 10.3.3 | Caixas de Mensagens no Sistema V | ||
| 10.3.4 | Comunicação por Memória Partilhada no Sistema V | ||
| 10.3.5 | Resumo | ||
| 10.4 | Comunicação entre Processos em Windows | ||
| 10.4.1 | Pipes | ||
| 10.4.1 | Mailslots | ||
| 10.4.2 | Windows Sockets | ||
| 10.4.3 | Memória Partilhada | ||
| 10.4.4 | Resumo | ||
| 10.4.5 | Mecanismos Exclusivos do Windows | ||
| 11 - Entradas/Saídas | |||
| 11.1 | Objectivos do Subsistema de E/S | ||
| 11.2 | Arquitectura das E/S | ||
| 11.3 | Modelo Computacional das E/S | ||
| 11.3.1 | Elementos do Modelo | ||
| 11.3.2 | Partilha de Periféricos | ||
| 11.4 | Modelo de Acesso à Interface Gestor/Núcleo | ||
| 11.4.1 | Fluxo de Acções Típico | ||
| 11.4.2 | Gestores de Periféricos Fora/Dentro do Núcleo | ||
| 11.5 | Gestores de Periféricos | ||
| 11.5.1 | Comunicação entre o Gestor e o Periférico | ||
| 11.5.2 | Estrutura Interna do Gestor de Periférico | ||
| 11.5.3 | Administração dos Gestores de Periféricos | ||
| 11.6 | E/S no Unix | ||
| 11.6.1 | Modelo Computacional | ||
| 11.6.2 | Interface Linux - Gestores de Periféricos | ||
| 11.6.3 | Administração dos Gestores de Periféricos | ||
| 11.7 | E/S no Windows | ||
| 11.7.1 | Modelo Computacional | ||
| 11.7.2 | Modelo de Gestão de Periféricos | ||
| 11.7.3 | Interface Windows / Gestores de Periféricos | ||
| 11.7.4 | Administração dos Gestores de Periféricos | ||
| 12 - Segurança | |||
| 12.1 | Objectivos de Segurança | ||
| 12.2 | Ameaças | ||
| 12.3 | Vulnerabilidades | ||
| 12.4 | Modelo de Segurança | ||
| 12.4.1 | Recurso Protegido | ||
| 12.4.2 | Políticas de Autorização | ||
| 12.4.3 | Autenticação | ||
| 12.4.4 | Confinamento | ||
| 12.4.5 | Prevenção versus Detecção | ||
| 12.5 | Mecanismos de Confinamento | ||
| 12.5.1 | Limitação do Espaço de Endereçamento | ||
| 12.5.2 | Operações Protegidas | ||
| 12.5.3 | Modos de Execução | ||
| 12.5.4 | Suporte de Hardware aos Mecanismos de Confinamento | ||
| 12.5.5 | Confinamento em Máquinas Virtuais Aplicacionais | ||
| 12.6 | Autenticação de Utilizadores | ||
| 12.6.1 | Autenticação com Senhas | ||
| 12.7 | Autorização | ||
| 12.7.1 | Espaço de Operações | ||
| 12.7.2 | Contexto | ||
| 12.7.3 | Matriz de Controlo de Acessos | ||
| 12.8 | Registo de Acções | ||
| 12.9 | Avaliação da Segurança | ||
| 12.10 | Unix | ||
| 12.10.1 | Confinamento | ||
| 12.10.2 | Autenticação | ||
| 12.10.3 | Autorização | ||
| 12.10.4 | Registo de Acções | ||
| 12.11 | Windows | ||
| 12.11.1 | Confinamento | ||
| 12.11.2 | Autenticação | ||
| 12.11.3 | Autorização | ||
| 12.11.4 | Registo de Acções | ||
| Páginas online | Topo |