É com satisfação que nós autores temos a oportunidade de redigir o prefácio da terceira edição do livro de Sistemas Operacionais. Estamos muito honrados pela aceitação das duas primeiras edições deste livro, totalizando cerca de 5000 exemplares que estão sendo usados em várias regiões do Brasil. Nós continuamos trabalhando para aprimorar cada vez mais a qualidade deste livro, e como sempre, estamos abertos para críticas e sugestões de você, nosso leitor. Nesta edição, além de corrigir alguns erros que resistiram às revisões anteriores nós fizemos uma abrangente reforma no capítulo sobre memória virtual para tratar o tema com maior profundidade. Também foram incluídos alguns novos exercícios e a indicação de qual seção do livro deve ser principalmente estudada paa responder a cada exercício. O livro conta ainda com uma página Web onde o leitor encontra a sua disposição material didático de apoio a este livro na forma de transparências (http://www.inf.ufrgs.br/~asc/livro).
A disciplina de Sistemas Operacionais é fundamental para os cursos de Ciência da Computação, Engenharia de Computação e de Sistemas de Informação. O correto entendimento dos mecanismos presentes nos sistemas operacionais permite ao profissional de informática uma melhor compreensão de seu ambiente de trabalho, resultando no desenvolvimento de soluções com maior qualidade e eficiência.
Este livro descreve os conceitos e mecanismos básicos presentes nos sistemas operacionais atuais cobrindo os tópicos tipicamente abordados em uma disciplina de graduação de Sistemas Operacionais. Além disso, o Linux e o Windows 2000 são empregados como estudo de caso para ilustrar a teoria apresentada. O livro segue as Diretrizes Curriculares estabelecidas pelo MEC para cursos da área de Computação e Informática. O texto é de fácil leitura. Possui cerca de 100 figuras e inclui exercícios no final de cada capítulo, podendo ser adotado como bibliografia básica da disciplina.
Inicialmente, no capítulo 1, a introdução, são estabelecidos os conceitos básicos de sistemas operacionais, seus objetivos e principais componentes. Também é feito um rápido histórico, uma vez que a tecnologia atual é fruto de 40 anos de evolução.
Um dos conceitos fundamentais de sistemas operacionais é o de processo que representa a abstração de um programa em execução. Praticamente todas as tarefas realizadas em um sistema operacional são baseadas nesta abstração. O capítulo 2, multiprogramação, apresenta este conceito e analisa a sua implementação considerando aspectos como modos de operação e arquitetura interna do processador e quais os estados que um processo pode assumir.
A programação concorrente é um estilo de programação onde vários processos colaboram para atingir um determinado objetivo. Programação concorrente tem sido usada freqüentemente na construção de sistemas operacionais e em aplicações nas áreas de comunicação de dados e controle industrial. Os conceitos básicos e alguns mecanismos clássicos da programação concorrente são apresentados no capítulo 3. O objetivo deste capítulo é fornecer ao estudante uma idéia de como processos em um sistema operacional interagem, e quais as conseqüências disto a nível da gerência do sistema operacional. Maiores detalhes sobre programação concorrente podem ser encontrados no livro Sistemas Operacionais e Programação Concorrente, volume 14, desta mesma Série Didática, o qual é dedicado especificamente a este tema.
O capítulo 4, gerência do processador, mostra como a abstração de processo é implementada, e como o sistema operacional compartilha o recurso processador entre os processos possibilitando assim a multiprogramação.
Na seqüência, capítulo 5, são descritas as principais técnicas empregadas na gerência de entrada e saída. São apresentados aspectos relacionados ao controle de periféricos comuns, como teclado, vídeo, mouse, placas de rede. Especial destaque é dado aos discos magnéticos por estes terem uma importância a parte em outros mecanismos básicos de um sistema operacional como gerência de memória e sistema de arquivos.
Os capítulos 6 e 7 tratam da gerência de memória e da memória virtual, respectivamente. Enquanto o capítulo 6 descreve diversas gerências de memória convencionais, como paginação e segmentação, o capítulo 7 mostra como é possível executar simultaneamente programas que, somados, são maiores que toda a memória principal do computador.
O capítulo 8 apresenta as principais técnicas utilizadas na implementação de sistemas de arquivos, talvez o elemento mais visível de um sistema operacional. A implementação de arquivos e diretórios é abordada.
O capítulo 9 descreve a implementação do sistema operacional Linux. Diversos conceitos e mecanismos descritos nos capítulos anteriores aparecem agora empregados na implementação de um sistema operacional real, o qual é cada vez mais utilizado em casa e nas empresas.
Finalmente, o capítulo 10, introduzido nesta segunda edição, o qual apresenta o sistema operacional Windows 2000 (NT 5.0). Nesse capítulo, nós discutimos detalhes da arquitetura do Windows 2000 seguindo, na medida do possível, a mesma ordem de apresentação do capítulo sobre Linux para que o leitor possa ter uma visão comparativa entre as soluções adotadas, por um e por outro sistema, na implementação de seus mecanismos básicos.
O livro inclui ainda um anexo sobre montadores, ligadores e carregadores que, embora não apareça normalmente nos textos sobre sistemas operacionais, faz parte desta disciplina em algumas instituições. Aspectos destes componentes são importantes para o entendimento das técnicas de gerência de memória. A sua colocação como anexo indica tratar-se de uma opção para o leitor.
O texto deste livro está baseado na experiência coletiva dos autores, os quais têm ministrado disciplinas de sistemas operacionais e correlatas ao longo das últimas duas décadas, em universidades de destaque como UFRGS, UFSC e PUCRS. A ordem dos capítulos não implica obrigatoriamente na ordem a ser seguida em sala de aula. É notório entre os professores de sistemas operacionais a discussão sobre a conveniência de apresentar o conceito de programação concorrente no início ou no final da disciplina. Desta forma, existem várias seqüências possíveis para cobrir o conteúdo do livro. Por exemplo, apresentar ou não o anexo, apresentar programação concorrente na seqüência sugerida ou após os capítulos, ou ainda tratá-la em uma disciplina a parte.
Para concluir, os autores agradecem às várias pessoas que contribuíram para a escrita desse livro, em especial os Professores Thadeu Botteri Corso e Rafael Bordini, pelas inúmeras sugestões. Agradecemos também ao editor da Série Didática, Professor Tiarajú Diverio, pois sem o seu trabalho incansável e seus constantes "empurrões" este livro não teria sido concluído. Ao mestrando Alexandre Cervieri pela sua valiosa contribuição na preparação do capítulo sobre Windows. À aluna Aline Vieira Malanovicz, a "revisora gramatical oficial" dos textos da série didática, pela sua leitura criteriosa da penúltima versão final deste documento. Aproveitamos, ainda, para assumir a responsabilidade dos eventuais erros gramaticais que resistiram aos esforços de revisão. Finalmente, os autores gostariam de agradecer aos alunos das dezenas de turmas de "Sistemas Operacionais I" com as quais tivemos oportunidade de trabalhar. Eles serviram como "cobaias" do texto contido aqui, e a realimentação provida por eles permitiu o aprimoramento do material.
Porto Alegre, abril de 2004.
Rômulo Silva de Oliveira
Alexandre da Silva Carissimi
Simão Sirineo Toscani