Os autores e a editora empenharam-se para citar adequadamente e dar o devido crédito a todos os detentores dos direitos autorais de qualquer material utilizado neste livro, dispondo-se a possíveis acertos caso, inadvertidamente, a identificação de algum deles tenha sido omitida. Não é responsabilidade da editora nem dos autores a ocorrência de eventuais perdas ou danos a pessoas ou bens que tenham origem no uso desta publicação. Apesar dos melhores esforços dos autores, do tradutor, do editor e dos revisores, é inevitável que surjam erros no texto. Assim, são bem- vindas as comunicações de usuários sobre correções ou sugestões referentes ao conteúdo ou ao nível pedagógico que auxiliem o aprimoramento de edições futuras. Os comentários dos leitores podem ser encaminhados à LTC — Livros Técnicos e Científicos Editora pelo e-mail [email protected]. Translation of the OPERATING SYSTEM CONCEPTS, NINTH EDITION Copyright © 2013, 2012, 2008 John Wiley & Sons. All Rights Reserved. This translation published under license with the original publisher John Wiley & Sons Inc. ISBN: 978-1-1180-6333-0 Portuguese edition copyright © 2015 by LTC — Livros Técnicos e Científicos Editora Ltda. All rights reserved Direitos exclusivos para a língua portuguesa Copyright © 2015 by LTC — Livros Técnicos e Científicos Editora Ltda. Uma editora integrante do GEN | Grupo Editorial Nacional Reservados todos os direitos. É proibida a duplicação ou reprodução deste volume, no todo ou em parte, sob quaisquer formas ou por quaisquer meios (eletrônico, mecânico, gravação, fotocópia, distribuição na internet ou outros), sem permissão expressa da editora. Travessa do Ouvidor, 11 Rio de Janeiro, RJ − CEP 20040-040 Tels.: 21-3543-0770 / 11-5080-0770 Fax: 21-3543-0896 [email protected] www.ltceditora.com.br Design de capa: Madelyn Lesure Ilustração de capa: Red33|Dreamstime.com Produção digital: Geethik CIP-BRASIL. CATALOGAÇÃO-NA-FONTE SINDICATO NACIONAL DOS EDITORES DE LIVROS, RJ S576s 9. ed. Silberschatz, Abraham Fundamentos de sistemas operacionais / Abraham Silberschatz, Peter Baer Galvin, Greg Gagne. - 9. ed. - Rio de Janeiro: LTC, 2015. il.; 28 cm. Tradução de: Operating system concepts Inclui bibliografia e índice ISBN 978-85-216-3000-5 1. Sistemas operacionais (Computadores). I. Título. 15-23332 CDD: 005.43 CDU: 004.451 Aos meus filhos Lemor, Sivan e Aaron e à minha Nicolette Avi Silberschatz A Brendan e Ellen, Barbara, Anne e Harold, Walter e Rebecca Peter Baer Galvin A minha Mãe e meu Pai, Greg Gagne Material Suplementar Este livro conta com os seguintes materiais suplementares: ■ Apêndices: Estudos de caso do Unix BSD e The Mach System em (.pdf) (acesso livre); ■ Códigos-fonte: Códigos-fonte em C e Java (acesso livre); ■ Guia de Estudo: Guia de estudo para acompanhar o livro-texto em (.pdf) (acesso livre); ■ Máquinas Virtuais: Leia-me do software Virtualbox (acesso livre); ■ PowerPoint Slides: Apresentações para uso em sala de aula em inglês em (.ppt) (acesso restrito a docentes); ■ Respostas dos Exercícios Práticos: Problemas de revisão em (.pdf) (acesso livre); ■ Slides em PowerPoint: Ilustrações da obra em formato de apresentação (acesso restrito a docentes); ■ Soluções dos Exercícios: Soluções para os exercícios (.pdf) (acesso restrito a docentes); ■ Soluções dos Códigos-fonte: Soluções para os códigos-fonte em C e Java (acesso restrito a docentes); ■ Testbank: Banco de testes em inglês em (.pdf) (acesso restrito a docentes). O acesso aos materiais suplementares é gratuito, bastando que o leitor se cadastre em: http://gen-io.grupogen.com.br Os sistemas operacionais são parte essencial de qualquer sistema de computação. Da mesma forma, um curso sobre sistemas operacionais é parte essencial de qualquer currículo educacional em ciência da computação. Esse campo tem mudado rapidamente, já que, hoje em dia, os computadores predominam em praticamente todas as situações da vida cotidiana – desde dispositivos embutidos em automóveis até as mais sofisticadas ferramentas de planejamento para governos e empresas multinacionais. Porém, os conceitos fundamentais permanecem razoavelmente intocados, e é neles que baseamos este livro. Escrevemos este livro como texto para um curso introdutório sobre sistemas operacionais destinado aos ciclos básico e avançado de nível técnico ou ao primeiro ano de nível de graduação. Esperamos que os profissionais atuantes também o considerem útil. O livro oferece uma descrição clara dos conceitos que embasam os sistemas operacionais. Como pré- requisitos, supomos que o leitor tenha familiaridade com as estruturas de dados básicas, com a organização de computadores e com uma linguagem de alto nível, como C ou Java. Os tópicos de hardware necessários para a compreensão dos sistemas operacionais são abordados no Capítulo 1. Nesse capítulo, também incluímos uma visão geral das estruturas de dados básicas que são predominantes na maioria dos sistemas operacionais. Para os exemplos de códigos, utilizamos fundamentalmente C, com alguma coisa de Java, mas o leitor poderá entender os algoritmos, mesmo sem possuir um conhecimento profundo dessas linguagens. Os conceitos são apresentados utilizando-se descrições intuitivas. São abordados resultados teóricos importantes, mas omitidas provas formais. A Bibliografia no fim de cada capítulo contém indicações sobre artigos de pesquisa nos quais os resultados foram apresentados e demonstrados pela primeira vez, bem como referências a materiais recentes para leitura adicional. Em lugar de demonstrações, são utilizadas figuras e exemplos que sugerem por que podemos esperar que o resultado em questão seja verdadeiro. Os conceitos fundamentais e algoritmos abordados no livro são, com frequência, baseados nos utilizados tanto em sistemas operacionais comerciais quanto de fonte aberta. Nosso objetivo é apresentar esses conceitos e algoritmos de um modo geral sem vinculá-los a um sistema operacional em particular. No entanto, apresentamos um grande número de exemplos pertinentes aos sistemas operacionais mais conhecidos e inovadores, inclusive o Linux, o Microsoft Windows, o Mac OS X da Apple e o Solaris. Também incluímos exemplos tanto do Android quanto do iOS, atualmente os dois sistemas operacionais predominantes em dispositivos móveis. A organização do livro reflete os vários anos em que ministramos cursos sobre sistemas operacionais, assim como diretrizes curriculares publicadas pela IEEE Computing Society e a Association for Computing Machinery (ACM). Também consideramos o feedback fornecido pelos revisores do texto e os muitos comentários e sugestões que recebemos de leitores de nossas edições anteriores e de nossos alunos atuais e passados. Conteúdo Deste Livro O texto é organizado em oito partes principais: • Visão geral. Os Capítulos 1 e 2 explicam o que são sistemas operacionais, o que eles fazem e como são projetados e construídos. Esses dois capítulos discutem quais são as características comuns de um sistema operacional e o que um sistema operacional faz para o usuário. Incluímos a abordagem de sistemas operacionais tanto de PCs tradicionais quanto de servidores, assim como de sistemas operacionais para dispositivos móveis. A apresentação é, em essência, motivacional e explanatória. Nesses capítulos, evitamos uma discussão de como as coisas são realizadas internamente. Portanto, eles são adequados para leitores independentes ou para estudantes de nível básico que queiram aprender o que é um sistema operacional, sem precisar entrar nos detalhes dos algoritmos internos. Gerenciamento de processos. Os Capítulos 3 a 7 descrevem o conceito de processo e de concorrência como o • coração dos modernos sistemas operacionais. Um processo é a unidade de trabalho de um sistema. Um sistema é composto por um conjunto de processos em execução concorrente, alguns dos quais são processos do sistema operacional (aqueles que executam códigos de sistema), e o restante são processos de usuário (os que executam códigos de usuário). Esses capítulos abordam métodos para scheduling de processos, comunicação entre processos, sincronização de processos e manipulação de deadlocks. Também incluem uma discussão sobre threads, assim como o exame de aspectos relacionados a sistemas multicore e programação paralela. • Gerenciamento da memória. Os Capítulos 8 e 9 lidam com o gerenciamento da memória principal durante a execução de um processo. Para melhorar tanto a utilização da CPU quanto a velocidade de sua resposta aos usuários, o computador deve manter vários processos na memória. Há muitos esquemas diferentes de gerenciamento da memória, refletindo várias abordagens para esse gerenciamento, e a eficácia de um algoritmo específico depende da situação. • Gerenciamento do armazenamento. Os Capítulos 10 a 13 descrevem como o armazenamento de massa, o sistema de arquivos e o I/O são manipulados em um sistema de computação moderno. O sistema de arquivos fornece o mecanismo para armazenar e acessar dados e programas on-line. Descrevemos as estruturas e os algoritmos internos clássicos de gerenciamento do armazenamento e fornecemos um conhecimento prático sólido dos algoritmos usados – suas propriedades, vantagens e desvantagens. Já que os dispositivos de I/O conectados a um computador são muito variados, o sistema operacional precisa fornecer às aplicações um amplo conjunto de funcionalidades para permitir que elas controlem todos os aspectos desses dispositivos. Discutimos o I/O do sistema com detalhes, inclusive o projeto do sistema de I/O, interfaces, assim como estruturas e funções internas do sistema. Em muitos aspectos, os dispositivos de I/O são os componentes principais mais lentos do computador. Já que representam um gargalo para o desempenho, também examinamos questões de desempenho associadas aos dispositivos de I/O. • Proteção e segurança. Os Capítulos 14 e 15 discutem os mecanismos necessários à proteção e segurança dos sistemas de computação. Os processos em um sistema operacional devem ser protegidos das atividades uns dos outros, e, para fornecer tal proteção, precisamos assegurar que somente processos que tiverem recebido autorização apropriada do sistema operacional possam operar sobre os arquivos, sobre a memória, na CPU e sobre outros recursos do sistema. A proteção é um mecanismo para controlar o acesso de programas, processos ou usuários aos recursos do sistema de computação. Esse mecanismo deve fornecer meios para a especificação dos controles a serem impostos, assim como para sua execução. A segurança protege a integridade das informações armazenadas no sistema (tanto dados quanto código) e também dos recursos físicos do sistema contra acesso não autorizado, destruição ou alteração maliciosa e introdução acidental de inconsistências. • Tópicos avançados. Os Capítulos 16 e 17 discutem máquinas virtuais e sistemas distribuídos. O Capítulo 16 é um novo capítulo que fornece uma visão geral das máquinas virtuais e sua relação com os sistemas operacionais contemporâneos. O capítulo inclui uma visão geral das técnicas de hardware e software que tornam possível a virtualização. O Capítulo 17 condensa e atualiza os três capítulos sobre computação distribuída da edição anterior. Essa alteração pretende tornar mais fácil, para os instrutores, a abordagem do material no tempo limitado disponível durante um semestre e, para os alunos, a obtenção mais rápida de uma compreensão das ideias básicas da computação distribuída. • Estudos de caso. Os Capítulos 18 e 19 do texto e os Apêndices A e B (que estão disponíveis no site da LTC Editora) apresentam estudos de caso detalhados de sistemas operacionais reais, incluindo o Linux, o Windows 7, o FreeBSD e o Mach. Informações tanto sobre o Linux quanto sobre o Windows 7 são apresentadas no decorrer do texto; no entanto, os estudos de caso fornecem muito mais detalhes. É particularmente interessante comparar e confrontar o design desses dois sistemas tão diferentes. O Capítulo 20 descreve brevemente alguns outros sistemas operacionais influentes. A Nona Edição Enquanto escrevíamos esta Nona Edição de Fundamentos de Sistemas Operacionais, fomos influenciados pelo crescimento recente de três áreas básicas que afetam os sistemas operacionais: 1. Sistemas multicore 2. Computação móvel 3. Virtualização Para enfatizar esses tópicos, integramos uma abordagem relevante em toda esta nova edição – e, no caso da virtualização, redigimos um capítulo inteiramente novo. Além disso, reescrevemos o material de quase todos os capítulos atualizando materiais mais antigos e removendo materiais que deixaram de ser interessantes ou relevantes. Também fizemos modificações substanciais na organização. Por exemplo, eliminamos o capítulo sobre sistemas de tempo real e, em substituição, integramos uma abordagem apropriada desses sistemas no decorrer do texto. Reordenamos os capítulos sobre gerenciamento do armazenamento e antecipamos a apresentação da sincronização de processos para que apareça antes do scheduling de processos. A maioria dessas alterações na organização foi baseada em nossas experiências ministrando cursos de sistemas operacionais. A seguir, fornecemos uma breve descrição das principais alterações nos diversos capítulos: • O Capítulo 1, Introdução, inclui uma abordagem atualizada sobre sistemas multiprocessadores e multicore, assim como uma nova seção sobre estruturas de dados do kernel. Além disso, a abordagem de ambientes de computação agora inclui sistemas móveis e computação em nuvem. Também incorporamos uma visão geral dos sistemas de tempo real. • O Capítulo 2, Estruturas do Sistema Operacional, fornece uma nova abordagem sobre interfaces de usuário para dispositivos móveis, incluindo discussões sobre o iOS e o Android, e uma abordagem expandida do Mac OS X como um tipo de sistema híbrido. • O Capítulo 3, Processos, agora inclui uma abordagem sobre multitarefa em sistemas operacionais móveis, o suporte ao modelo multiprocesso do navegador Web Google Chrome e processos zumbis e órfãos no Unix. • O Capítulo 4, Threads, fornece uma abordagem expandida sobre paralelismo e lei de Amdahl. Também fornece uma nova seção sobre threading implícito, incluindo o OpenMP e o Grand Central Dispatch da Apple. • O Capítulo 5, Sincronização de Processos (anteriormente Capítulo 6), adiciona uma nova seção sobre locks mutex e uma abordagem sobre sincronização utilizando OpenMP, assim como linguagens funcionais. • O Capítulo 6, Scheduling da CPU (anteriormente Capítulo 5), contém uma nova abordagem sobre o scheduler CFS do Linux e sobre o scheduling de modalidade de usuário do Windows. A abordagem sobre algoritmos de scheduling de tempo real também foi integrada a esse capítulo. • O Capítulo 7, Deadlocks, não sofreu maiores alterações. • O Capítulo 8, Memória Principal, inclui uma nova abordagem do swapping em sistemas móveis e arquiteturas Intel de 32 e 64 bits. Uma nova seção discute a arquitetura ARM. • O Capítulo 9, Memória Virtual, atualiza o gerenciamento de memória do kernel para incluir os alocadores de memória SLUB e SLOB do Linux. • O Capítulo 10, Estrutura de Armazenamento de Massa (anteriormente Capítulo 12), adiciona a abordagem sobre discos de estado sólido. • O Capítulo 11, Interface do Sistema de Arquivos (anteriormente Capítulo 10), foi atualizado com informações sobre tecnologias atuais. • O Capítulo 12, Implementação do Sistema de Arquivos (anteriormente Capítulo 11), foi atualizado para abranger tecnologias atuais. • O Capítulo 13, I/O, atualiza as tecnologias e as estatísticas de desempenho, expande a abordagem sobre I/O síncrono/assíncrono e com/sem bloqueio, e adiciona uma seção sobre I/O vetorizado. • O Capítulo 14, Proteção, não sofreu maiores alterações. • O Capítulo 15, Segurança, tem uma seção de criptografia revisada com notação moderna e uma explanação aperfeiçoada de vários métodos de criptografia e seus usos. O capítulo também inclui uma nova abordagem sobre a segurança do Windows 7. • O Capítulo 16, Máquinas Virtuais, é um capítulo novo que fornece uma visão geral sobre virtualização e como ela está relacionada aos sistemas operacionais contemporâneos. • O Capítulo 17, Sistemas Distribuídos, é um novo capítulo que combina e atualiza uma seleção de materiais dos Capítulos 16, 17 e 18 anteriores. • O Capítulo 18, O Sistema Linux (anteriormente Capítulo 21), foi atualizado para abordar o kernel 3.2 do Linux. • O Capítulo 19, Windows 7, é um novo capítulo que apresenta um estudo de caso do Windows 7. • O Capítulo 20, Sistemas Operacionais Influentes (anteriormente Capítulo 23), não sofreu maiores alterações. Ambientes de Programação