




























































































Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Encontra documentos específicos para os exames da tua universidade
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
o livro é mt bom e vcs deveriam ler bom recomendo
Tipologia: Esquemas
Compartilhado em 08/04/2021
3 documentos
1 / 1012
Esta página não é visível na pré-visualização
Não perca as partes importantes!





























































































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-
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- Tels.: 21-3543-0770 / 11-5080- Fax: 21-3543- [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
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-
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
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.
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
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.
Este livro usa exemplos de muitos sistemas operacionais reais para ilustrar os conceitos fundamentais dos sistemas operacionais. Atenção especial é dada ao Linux e ao Microsoft Windows, mas também fazemos referência a várias versões do UNIX (incluindo o Solaris, o BSD e o Mac OS X). O texto também fornece vários exemplos de programas escritos em C e Java. Esses programas devem ser executados nos ambientes de programação a seguir:
POSIX. O POSIX (que significa Portable Operating System Interface ) representa um conjunto de padrões implementados principalmente para sistemas operacionais baseados no UNIX. Embora sistemas Windows também possam executar certos programas POSIX, nossa abordagem do POSIX enfoca sistemas UNIX e Linux. Sistemas compatíveis com o POSIX devem implementar o padrão POSIX básico (POSIX.1); o Linux, o Solaris e o Mac OS X são exemplos de sistemas compatíveis com o POSIX. O POSIX também define várias extensões dos padrões, inclusive extensões de tempo real/(POSIX1.b) e uma extensão para uma biblioteca de threads (POSIX1.c, mais conhecida como Pthreads). Fornecemos vários exemplos de programação escritos em C que ilustram a API base do POSIX, assim como o Pthreads e as extensões para programação em tempo real. Esses programas- exemplo foram testados em sistemas Linux 2.6 e 3.2, Mac OS X 10.7 e Solaris 10 utilizando o compilador gcc 4.0. Java. Java é uma linguagem de programação amplamente usada que tem uma API com muitos recursos e suporte de linguagem embutida para a criação e o gerenciamento de threads. Os programas Java são executados em qualquer sistema operacional que suporte uma máquina virtual Java (ou
Gostaríamos de receber sugestões sobre melhorias no livro. Também agradeceríamos qualquer contribuição feita ao site relacionada ao livro que possa ser útil para outros leitores, tais como exercícios de programação, sugestões de projetos, laboratórios e tutoriais on-line e dicas de ensino. E- mails devem ser enviados para [email protected].
Este livro é derivado das edições anteriores, as três primeiras delas com a coautoria de James Peterson. Outras pessoas que nos auxiliaram nas edições anteriores são Hamid Arabnia, Rida Bazzi, Randy Bentson, David Black, Joseph Boykin, Jeff Brumfield, Gael Buckley, Roy Campbell, P. C. Capon, John Carpenter, Gil Carrick, Thomas Casavant, Bart Childs, Ajoy Kumar Datta, Joe Deck, Sudarshan K. Dhall, Thomas Doeppner, Caleb Drake, M. Racsit Eskicioğlu, Hans Flack, Robert Fowler, G. Scott Graham, Richard Guy, Max Hailperin, Rebecca Hartman, Wayne Hathaway, Christopher Haynes, Don Heller, Bruce Hillyer, Mark Holliday, Dean Hougen, Michael Huang, Ahmed Kamel, Morty Kewstel, Richard Kieburtz, Carol Kroll, Morty Kwestel, Thomas LeBlanc, John Leggett, Jerrold Leichter, Ted Leung, Gary Lippman, Carolyn Miller, Michael Molloy, Euripides Montagne, Yoichi Muraoka, Jim M. Ng, Banu Özden, Ed Posnak, Boris Putanec, Charles Qualline, John Quarterman, Mike Reiter, Gustavo Rodriguez- Rivera, Carolyn J. C. Schauble, Thomas P. Skinner, Yannis Smaragdakis, Jesse St. Laurent, John Stankovic, Adam Stauffer, Steven Stepanek, John Sterling, Hal Stern, Louis Stevens, Pete Thomas, David Umbaugh, Steve Vinoski, Tommy Wagner, Larry L. Wear, John Werth, James M. Westall, J. S. Weston e Yang Xiang. Robert Love atualizou tanto o Capítulo 18 quanto a abordagem do Linux que aparece no decorrer do texto, assim como respondeu a muitas de nossas perguntas relacionadas ao Android. O Capítulo 19 foi escrito por Dave Probert e teve origem no Capítulo 22 da oitava edição de Fundamentos de Sistemas Operacionais. Jonathan Katz contribuiu no Capítulo 15. Richard West forneceu informações para o Capítulo 16. Salahuddin Khan atualizou a Seção 15.9 para fornecer uma nova abordagem da segurança do Windows 7. Partes do Capítulo 17 foram tiradas de um artigo de Levy e Silberschatz [1990]. O Capítulo 18 derivou de um manuscrito não publicado de Stephen Tweedie. Cliff Martin ajudou na atualização do apêndice sobre o UNIX para abordar o FreeBSD. Alguns dos exercícios e as soluções que os acompanham foram fornecidos por Arvind Krishnamurthy. Andrew DeNicola preparou o Guia de Estudo do Estudante, que está disponível no site da LTC Editora. Alguns dos slides foram preparados por Marilyn Turnamian. Mike Shapiro, Bryan Cantrill e Jim Mauro responderam a várias perguntas relacionadas ao Solaris e Bryan Cantrill, da Sun Microsystems, ajudou na abordagem do ZFS. Josh Dees e Rob Reynolds contribuíram na abordagem da Microsoft’sNET. O projeto de filas de mensagens do POSIX foi contribuição de John Trono, do Saint Michael’s College em Colchester, Vermont. Judi Paige ajudou a gerar figuras e slides de apresentação. Thomas Gagne preparou o novo trabalho
gráfico para esta edição. Owen Galvin ajudou na edição do Capítulo 16. Mark Wogahn garantiu que o software que produziu este livro (LATEX e fontes) funcionasse apropriadamente. Ranjan Kumar Meher reescreveu parte do software LATEX usado na produção deste novo texto. Nossa editora executiva, Beth Lang Golub, atuou como guia especializada enquanto preparávamos esta edição. Ela foi assistida por Katherine Willis, que gerenciou com tranquilidade os diversos detalhes do projeto. O editor de produção sênior, Ken Santor, foi essencial na manipulação de todos os detalhes de produção. A ilustradora da capa foi Susan Cyr, e a projetista, Madelyn Lesure. Beverly Peavler editou o manuscrito. A revisora das provas foi Katrina Avery; a indexadora foi a WordCo, Inc.
Abraham Silberschatz, New Haven, CT, 2012 Peter Baer Galvin, Boston, MA, 2012 Greg Gagne, Salt Lake City, UT, 2012
Notas Bibliográficas Bibliografia
Capítulo 3 Processos Conceito de Processo Scheduling de Processos Operações sobre Processos Comunicação Interprocessos Exemplos de Sistemas IPC Comunicação em Sistemas Cliente-Servidor Resumo Exercícios Práticos Exercícios Problemas de Programação Projetos de Programação Notas Bibliográficas Bibliografia
Capítulo 4 Threads Visão Geral Programação Multicore Modelos de Geração de Multithreads Bibliotecas de Threads Threading Implícito Questões Relacionadas com a Criação de Threads Exemplos de Sistemas Operacionais Resumo Exercícios Práticos Exercícios Problemas de Programação Projetos de Programação Notas Bibliográficas Bibliografia
Capítulo 5 Sincronização de Processos Antecedentes O Problema da Seção Crítica Solução de Peterson Hardware de Sincronização Locks Mutex Semáforos Problemas Clássicos de Sincronização Monitores Exemplos de Sincronização Abordagens Alternativas Resumo Exercícios Práticos
Exercícios Problemas de Programação Projetos de Programação Notas Bibliográficas Bibliografia
Captíulo 6 Scheduling da CPU Conceitos Básicos Critérios de Scheduling Algoritmos de Scheduling Scheduling de Threads Scheduling para Múltiplos Processadores Scheduling da CPU de Tempo Real Exemplos de Sistemas Operacionais Avaliação de Algoritmos Resumo Exercícios Práticos Exercícios Notas Bibliográficas Bibliografia
Capítulo 7 Deadlocks Modelo de Sistema Caracterização do Deadlock Métodos para a Manipulação de Deadlocks Prevenção de Deadlocks Impedimento de Deadlocks Detecção de Deadlocks Recuperação de Deadlocks Resumo Exercícios Práticos Exercícios Problemas de Programação Projetos de Programação Notas Bibliográficas Bibliografia
Capítulo 8 Memória Principal Antecedentes Permuta entre Processos ( Swapping ) Alocação de Memória Contígua Segmentação Paginação Estrutura da Tabela de Páginas Exemplo: Arquiteturas Intel de 32 e 64 Bits Exemplo: Arquitetura ARM Resumo