Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas

Sistemas operacionais, Manuais, Projetos, Pesquisas de Análise de Sistemas de Engenharia

Ótimo Livro com linguagem bastante accessível, fala sobre os vários aspectos do projeto de sistemas operacionais e suas principais características como gerenciamento de memória, processador etc.

Tipologia: Manuais, Projetos, Pesquisas

2011
Em oferta
50 Pontos
Discount

Oferta por tempo limitado


Compartilhado em 30/11/2011

alexsandro-silva-santos-6
alexsandro-silva-santos-6 🇧🇷

4.6

(9)

1 documento

1 / 187

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35
pf36
pf37
pf38
pf39
pf3a
pf3b
pf3c
pf3d
pf3e
pf3f
pf40
pf41
pf42
pf43
pf44
pf45
pf46
pf47
pf48
pf49
pf4a
pf4b
pf4c
pf4d
pf4e
pf4f
pf50
pf51
pf52
pf53
pf54
pf55
pf56
pf57
pf58
pf59
pf5a
pf5b
pf5c
pf5d
pf5e
pf5f
pf60
pf61
pf62
pf63
pf64
Discount

Em oferta

Pré-visualização parcial do texto

Baixe Sistemas operacionais e outras Manuais, Projetos, Pesquisas em PDF para Análise de Sistemas de Engenharia, somente na Docsity!

Rômulo Silva de Oliveira Doutor em Engenharia Elétrica, ênfase em Sistemas de Informação pela UFSC e mes- tre em Ciência da Computação pelo Programa de Pós-Graduação em Computação da UFRGS. Professor do Instituto de Informática da UFRGS de 1989 a 1999, atualmente é Professor do Departamento de Automação e Sistemas da Universidade Federal de Santa Catarina e atua junto ao programa de Pós-Graduação de Engenharia Elétrica da UFSC Alexandre da Silva Carissimi Doutor em Informática pelo Institut National Polytechnique de Grenoble (INPG), Fran- ça. Mestre em Ciência da Computação pelo Programa de Pós-Graduação em Compu- tação da UFRGS. Engenheiro Eletricista pela UFRGS. Protessor do Departamento de Informática Aplicada da UFRGS desde 1989. Simão Sirineo Toscani Doutor em Informática pela Universidade Nova de Lisboa, Portugal. Mestre em Infor- mática pela PUC/RJ. Engenheiro Eletricista pela UFRGS. Professor do Instituto de In- formática da UFRGS de 1975 a 1998. Atualmente é professor no Centro Universitário ta Salle (Unilasalle). EPA SÉ nd 048s Oliveira, Rômulo Silva de. Sistemas operacionais / Rômulo Silva de Oliveira, Alexandre da Silva Carissimi, Simão Sirineo Toscani. — 4. ed. - Porto Alegre : Bookman : Instituto de Informática da UFRGS, 2010 374p.;il.;23cm. (Série Livros didáticos informática ; n. 11) ISBN 9/8-85-7780 521-1 1. Sistema operacional. |. Carissimi, Alexandre da Silva. | . Toscani, Simão Sirinco. Ill. Título. IV. Série. CDU 004.451.9 Catalogação na publicação: Renata de Souza Borges CRB-10/1922 rômulo silva de oliveira alexandre da silva carissimi 2010 simão sirineo toscani sistemas operacionais mm “edição (6 Artmed Editore SA, 2010 Leitura finel; Gustavo Melo Ribeiro e Maroni Vogel Editora Sênior: Anysinha Jacques Affonso Editora Júnior: Júlia Angst Coelho Capa e projeto gráfico interno: Tatiana Sperhacke Imagem de capa: GiStockphoto.com/a-papantoniou Editoração eletrônica: Techhooks Reservados todos os direitos de publicação, em lingua portuguesa, à ARTMED” EDITORA S.A (BOOKMAN* COMPANHIA EDITORA é uma divisão da ARTMED? EDITORA S.A.) Av. Jerênimo de Ornelas, 670 - Santana 040-340 — Porto Alegre — R$ Fone: (51) 3027-7000 Fax: (51) 3027-7070 É proibida & duplicação ou reprodução deste volume, no todo ou em parte, soa quaisquer formas ou por quaisquer meios (eletrônico, mecânico, gravação, fotocópia, distribuição na Web e outros), sem permissão expressa da Editora Unidade São Paulo Av. Fmbaixador Macedo de Soares, 10.735 — Galpão 5 — Vila Anástacio 05035-000 - São Paulo - SP Fone: (11) 3665-1100. Fax: (11) 3667-1333 SAC 0800 703-3444 IMPRESSO NO BRASIL. PRINTED IN BRAZIL ra Simone e Augusto, pelo incentivo e pela paciência, desta vez com figuras. Rômulo Silva de Oliveira Para meus pais, Lélio e Neley, pelo incentivo, pela educação, e pela dedicação. Alexandre da Silva Carissimi Para Laira, pelo incentivo, pela colaboração e pela paciência. Para Nadima, Najda, Laureano e Filipe, pelo carinho e afeto Simão Sirineo Toscani -— Apresentação Em 2008, um importante passo foi dado para a consolidação e ampliação de todo o trabalho: a publicação dos livros pela Artmed Editora S.A., por meio do selo Bookman. Hoje são 17 os títulos publicados — uma lista completa, incluindo os próximos lançamentos, encontra-se nas orelhas desta obra — am- pliando a oferta aos leitores da série. Sempre com a preocupação em manter nível compatível com a elevada qualidade do ensino e da pesquisa desenvolvi- dos no âmbito do Instituto de Informática da UFRGS e no Brasil Prof. Paulo Blauth Menezes Comissão Editorial da Série Livros Didáticos Instituto de Informática da UFRGS É com satisfação que redigimos o prefácio da quarta edição do livro de Siste- mas Operacionais. Estamos muito honrados pela aceitação das três primeiras edições deste livro, usadas em várias regiões do Brasil, Continuamos traba- lhando 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, incluímos um capítulo novo sobre virtualização, já que esse é um assunto de destaque e uma tendência atual no mundo da tecnologia da informação (TI). Também foram incluídos novos exercícios, e a indicação de qual seção do livro deve ser prioritariamente estudada para responder a cada exercício. O livro conta ainda com material didático de apoio na forma de transparências; para obter este material, os professores interessados devem acessar a Área do Professor no site da Bookman Editora (www.bookman.com.br). A disciplina de Sistemas Operacionais é fundamental para os cursos de Ciên- cia da Computação, Engenharia de Computação e Sistemas de Informação (6) correto entendimento dos mecanismos presentes nos sistemas operacionais permite ao profissional de informática uma melhor compreensão de seu am- biente 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 tópicos tipicamente abordados em uma discipli- na de graduação de Sistemas Operacionais. Além disso, o Linux e o Windows 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. x — Prefácio 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, o qual representa a abstração de um programa em execução. Praticamente todas as tarefas realizadas em um sistema operacional são baseadas nessa abstração. O capítulo 2, multiprogramação, apresenta esse conceito e analisa a sua implementação considerando aspectos como modos de operação e arquitetura nterna do processador e quais estados um processo pode assumir. Programação concorrente é um estilo de programação onde vários processos colaboram para atingir um determinado objetivo. A programação concorren- te tem sido usada frequentemente 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 concor- rente são apresentados no capítulo 3. O objetivo desse capítulo é fornecer ao estudante uma ideia de como processos em um sistema operacional in- teragem, e qual o impacto disto na gerência do sistema operacional. Mais detalhes sobre programação concorrente podem ser encontrados no livro Programação Concorrente, volume 14 desta mesma série didática, dedicado especificamente a este tema. O capítulo 4, gerência do processador, mostra como a abstração de pro- cesso é implementada, e como o sistema operacional compartilha o recurso processador entre os processos, possibilitando assim a multiprogramação. Na sequência, no 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, pois eles tem uma im- portância à parte em outros mecanismos básicos de um sistema operacional, tais 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 me- mó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. — Prefácio 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 opera- cional. A implementação de arquivos e diretórios é também abordada. Os capítulos 9 e 10 descrevem, respectivamente, aspectos da implementação dos sistemas operacionais Linux e Windows. Diversos conceitos e mecanis- mos descritos nos capítulos anteriores aparecem agora empregados na imple- mentação de um sistema operacional real. A apresentação segue, na medida do possível, a mesma ordem, para que o leitor possa ter uma visão comparativa entre as soluções adotadas por um e por outro sistema Por fim, o capítulo 11 discorre sobre virtualização. Virtualização é o con- ceito usado para representar de forma abrangente a abstração de um re- curso computacional. Em nosso contexto, o recurso mais importante é o de máquinas virtuais. Uma máquina virtual oferece um ambiente completo muito similar a uma máquina física e, com isso, pode ter seu próprio siste- ma operacional, seus próprios aplicativos e seus próprios serviços de rede (Internet). Em apenas uma máquina física podem conviver várias máquinas virtuais totalmente isoladas e independentes umas das outras. Essas carac- terísticas tornam a virtualização atrativa para infraestruturas de TI. É objetivo desse capítulo apresentar os principais conceitos, formas de implementação e estudos de caso de virtualização. O livro inclui ainda um apêndice sobre montadores, ligadores e carrega- dores, conteúdo que, embora não apareça normalmente nos textos sobre sistemas operacionais, faz parte dessa disciplina em algumas instituições. As- pectos desses componentes são importantes para o entendimento das técni- cas de gerência de memória. A sua colocação como apêndice indica tratar-se de uma opção para o leitor. O texto deste livro está baseado na experiência coletiva dos autores, que têm ministrado disciplinas de sistemas operacionais e correlatas ao lon- go das últimas duas décadas. A ordem dos capítulos não implica obriga- toriamente na ordem a ser seguida em sala de aula. É notória 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. Por isso, existem várias sequências possíveis para cobrir o con- teúdo do livro. Por exemplo, apresentar ou não o anexo, apresentar progra- mação concorrente na sequência sugerida ou após os capítulos, ou ainda tratá-la em uma disciplina à parte. ET 14 proteção entre processos 2.9 — Sumário 2.8.1 | modos de operação do processador 2.82 proteção dos periféricos ... 2.83 proteção da memória exercícios. programação concorrente 57 motivação .... especificação do paralelismo problema da seção crítica... mecanismos básicos de exclusão mútua... 3.4.1 soluções em software puro. 3.4.2 desabilitação de interrupções... 343 spinlock... semáforos 3.6.1 implementação de semáforos... = 3.62 exemplo do produtor ESASUNIdAA COI SEAAfONOE, soma BA monitores 3.7.1 implementação de monitores ............... Ré 37.2 exemplo do produtor EONEUMAlido Ei Moore mensagens 3.8.1 exemplo do produtor-consumidor com mensagens... visão geral e comparação deadlock.... exercícios. —> Sumário 15 bloco descritor de processo. chaveamento de contexto threads... escalonadores algoritmos de escalonamento 4.5.1 ordem de chegada (FIFO - first-in first-out) ................... 114 4.5.2 ciclo de processador menor antes (FSH job, essas oscoeressenecrsnrensersu PA. 453 - prioridade... 4.5.4 fatia de tempo 4.5.5 múltiplas filas .. 4.5.6 considerações finais exercícios... princípios básicos de hardware 5.1.1 — tipos de conexão e de transferência de dados 5.1.2 acesso aos dispositivos de entrada e saída... 5.1.3 mapeamento em espaço de memória e em espaço de entrada e saída .........seeeeeesessreeeerro DB 5.1.4 E/S programada... 5.1.5 o mecanismo de interrupções 5.1.6 | acesso direto à memória. princípios básicos de software de entrada e saída .. 5.2.1 drivers de dispositivo. a essemapueezanãs 5.2.2 E/S independente do dispositivos 5.2.3 | entrada e saída no nível do usuário... dispositivos periféricos típicos 5.3.1 — discos rígidos 16 Sumário 5.3.2 vídeo....... 5.3.3 teclado 5.3.4 rede.. exercícios... memória lógica e memória física. partições fixa: partições variáveis... swapping ... paginação .... segmentação. segmentação paginada .... exercícios... »] BRRGRBGAR E = mem virtual 175 implementação de memória virtual .. 74.1 princípio da localidade de referência . 7.1.2 | paginação sob demanda. Fepasa ao 7.1.3 | desempenho da paginação por demanda. alocação de memáória..... substituição de páginas na memória.. algoritmos de substituição de páginas na memória 7.41 algoritmos globais.............. 7.4.2 algoritmos locais. 743 thrashing... estudo de caso: arquitetura Intel ... exercícios... * Sumário sistema de arquivos conceitos básicos. E arquivos . 8.21 controle de acesso... 8.2.2 estrutura interna dos arquivos... 8.2.3 métodos de acesso. implementação de arquivos . 83.1 leitura e escrita de arquivo.............. 84 múltiplos sistemas de arquivos .. organização da cache gerência do espaço livre . 8.7 diretórios... BEE implementação de diretórios... EEEH organização interna de uma partição... EEREE sistemas de arquivos jornatizados.... exercícios. histórico, distribuições e versões 9.11 as distribuições Linux... 9.1.2 as versões do núcleo Linux. E arquitetura de sistemas operacionais. BEER o conceito de processo no Linux 9.3.1 ociclo de vida de um processo: criação 9.3.2 ciclo de vida de um processo: execução 9.3.3 ciclo de vida de um processo: término... 9.34 uma palavra sobre threads ... escalonamento em Linux... 17 224 DO 7d .230 236 «239 239: «242 E introdução Qualquer pessoa que utilize um computador sabe que existe algo chamado sistema operacional, que de alguma forma controla o equipamento. Isso é válido para qualquer tipo de computador. Aplica-se tanto ao microcomputador usado em casa quanto ao computador de grande porte. na universidade. Entretanto, é necessário definir o que é um sistema operacional. Neste capítulo, apresentaremos o conceito e a funcionalidade básica de um sistema operacional. Detalhes específicos serão apresentados no decorrer deste livro. 22 — Sistemas Operacionais conceito básico Em torno de um computador, existem usuários com problemas para serem resolvidos. Por exemplo, um usuário precisa editar texto, enquanto outro precisa fazer a contabili dade da empresa. O problema de cada usuário será resolvido por um programa espe- cífico. No exemplo, um editor de textos e um sistema de contabilidade. O dispositivo físico capaz de executar esses programas é o hardware do computador. Os programas possuem muito em comum. Por exemplo, tanto o editor de texto como a contabilidade precisam acessar o disco. A forma de acesso aos periféricos é a mesma para todos os programas. Para um melhor aproveitamento do haraware, vários usuá- rios compartilham simultaneamente o computador. Entretanto, os programas podem apresentar necessidades conflitantes, pois disputam os recursos do equipamento. Por exemplo, o editor de texto c a contabilidade podem querer utilizar, ao mesmo tempo, a única impressora disponível O sistema operacional é uma camaca de software colocada entre o hardware e os programas que executam tarefas para os usuários. Essa visão de um sistema compu- tacional é ilustrada na figura 1.1. O sistema operacional é responsável pelo acesso aos periféricos; sempre que um programa necessita de algum tipo de operação de entrada e saída, ele a solicita ao sistema operacional. Dessa forma, o programador não precisa conhecer os detalhes do hardware. Informações do tipo “como enviar um caractere para a impressora” ficam escondidas dentro do sistema operacional. AO Usuário Usuário Usuário. Usuário 1 2 o n Compilador — Editor de Browser Quake texto Sistema operacional figura 1.1 Sistema computacional Capítulo 1 -— Introdução 23 mesmo tempo, como todos os acessos aos periféricos são feitos através do sistema operacional, ele pode controlar qual programa está acessando qual recurso. É possi- vel, então, obter uma distribuição justa e eficiente dos recursos. Por exemplo, a divisão do espaço em disco entre os usuários é feita pelo sistema operacional. Ela pode ser feita considerando-se dois aspectos: a eficiência no acesso ao disco e a ocupação equi- librada do disco pelos usuários. | 1.2 | stema operacional O sistema operacional procura tornar a utilização do computador, ao mesmo tempo, mais eficiente e mais conveniente. A utilização mais eficiente busca um maior retorno no investimento feito no hardiware. Maior eficiência significa mais trabalho obtido do mesmo hardware. Uma utilização mais conveniente vai diminuir o tempo necessário para a construção dos programas. Isso também implica s redução no custo do soft- ware, pois são necessárias menos horas de programador. Uma utilização mais eficiente do computador é obtida através da distribuição de seus recursos entre os programas. Nesse contexto, são considerados recursos quaisquer com- ponentes do hardware disputados pelos programas. Por exemplo, espaço na memória principal, tempo de processador, impressora, espaço em disco, acesso a disco, etc. Uma utilização mais conveniente do computador é obtida escondendo se do progra- mador detalhes do hardware, em especial dos periféricos. Por exemplo, para colocar um caractere na tela do terminal, em geral é necessário toda uma sequência de aces- sos à interface do terminal. Diversos registradores de controle e de status devem ser lidos ou escritos. Além disso, pode haver mais de um tipo de interface, com diferentes sequências de acesso. Ao usar o sistema operacional, o programador apenas informa qual caractere deve ser colocado na tela. Todo o trabalho de acesso ao periférico é feito pelo sistema operacional. Aa esconder os detalhes dos periféricos, muitas vezes são criados recursos de mais alto nível. Por exemplo, os programas utilizam o espaço em disco através do concei- to de arquivo. Arquivos não existem no hardware. Eles formam um recurso criado a partir do que o hardware oferece. Para o programador, é muito mais confortável trabalhar com arquivos do que receber uma área de espaço em disco que ele próprio teria que organizar. [124 tipos de serviços 3 Para atingir os objetivos propostos, o sistema operacional oferece diversos tipos de serviços. A definição precisa dos serviços depende do sistema operacional em conside- ração. Entretanto, a maioria dos sistemas operacionais oferece um conjunto básico de serviços, sempre necessários. Esta seção descreve esse conjunto básico. E cit 26 > Sistemas Operacionais manuais de um sistema operacional. Por exemplo, considere um programa que lista o conteúdo de um arquivo texto na tela do terminal. Ele faz uma chamada de sistema para verificar se o arquivo a ser listado existe. Um dos parâmetros dessa chamada será provavelmente o nome do arquivo a ser listado. O restante do programa é um laço no qual são feitas sucessivas leituras do arquivo € escritas no terminal. Essas duas opera- ções também correspondem a chamadas de sistema, À parte do sistema operacional responsável por implementar as chamadas de sistema é normalmente chamada de núcleo ou kernel. Os principais componentes do kernel de qualquer sistema operacional são a gerência de processador, a gerência de memória, o sistema de arquivos e a gerência de entrada e saída. Cada um desses componentes será visto com detalhes nos próximos capítulos. Em função da complexidade interna de um kernel completo, muitos sistemas opera- cionais são implementados em camadas. Primeiro, um pequeno componente de soft- ware chamado micronúcleo ou microkernel implementa os serviços mais básicos associados a sistemas operacionais. Em cima do microkernel, usando os seus serviços, o kernel propriamente dito implementa os demais serviços. A figura 1.2 ilustra um sistema no qual, acima do hardware, existe um microkernel que oferece serviços básicos tais como gerência do processador, alocação e liberação de memória física e instalação de novos tratadores de dispositivos. O kernel do siste- ma oferece serviços tais como sistema de arquivos, meméria virtual e protocolos de comunicação. Alguns sistemas permitem que as aplicações acessem tanto as chamadas de sistema suportadas pelo kernef quanto os serviços oferecidos pelo microkernel. Entretanto, na maioria das vezes, apenas o código do kernel pode acessar os serviços do microkernel, enquanto aplicações ficam restritas às chamadas de sistema do kernel. | 1.3.2 programas de sistema Os programas de sistema, algumas vezes chamados de utilitários, são programas normais executados fora do kernel do sistema operacional. Eles utilizam as mesmas cha- madas de sistema disponíveis aos demais programas. Esses programas implementam ta. Aplicações eme] Chamada de sistema Serviças do Microkernel microkernel Hardware figura 1.2 Organização do sistema em kernel e microkernel. Capítulo 1 -— Introdução 27 refas básicas para a utilização do sistema e muitas vezes são confundidos com o próprio sistema operacional. Como implementam tarefas essenciais para a utilização do compu- tador, são, em geral, distribuídos pelo próprio fornecedor do sistema operacional. Exemplos são os utilitários para manipulação de arquivos: programas para listar ar- quivo, imprimir arquivo, copiar arquivo, trocar o nome de arquivo, listar o conteúdo de diretório, entre outros. Esses utilitários são, em geral, programas normais. Eles. utilizam chamadas de sistema para efetuar a operação solicitada pelo usuário. Tam- bém é usual o emprego de programas de sistema para a obtenção de informações a respeito do sistema, tais como data, hora ou quais usuários estão utilizando o computador no momento. Na década de 60, compiladores eram também considerados programas de sistema, fornecidos junto com o sistema operacional. Entretanto, com a expansão da indús- tria de microcomputadores, compiladores passaram a ser considerados programas normais. É usual o fornecedor do sistema operacional também oferecer uma linha de compiladores, ou fornecer alguns junto com o sistema. Mas, como diversos fornece- dores existem, pode-se comprar o sistema operacional de uma empresa e o compila- dor de outro. O mesmo é válido para montadores e editores de texto. O mais importante programa de sistema é o interpretador de comandos. Esse pro- grama é ativado pelo sistema operacional sempre que um usuário inicia sua sessao de trabalho. Sua tarefa é receber comandos do usuário e executá-los. Para isso, ele recebe as linhas tecladas pelo usuário, analisa o seu conteúdo e executa o comando teclado. A execução do comando, na maioria das vezes, vai exigir uma ou mais chamadas de sistema. Por exemplo, considere um comando do tipo “lista diretório”. Para executá- lo, O interpretador de comandos deve, primeiramente, ler o conteúdo do diretório solicitado pelo usuário. Isso é f por meio de uma chamada de sistema. A informa- cão pode ser formatada para facilitar a sua disposição na tela do terminal. Finalmente, novas chamadas de sistema serão feitas para listar essas informações na tela. Observe que a operação "lista diretório” pode ser feita por meio do interpretador de comandos ou de um utilitário. Em qualquer situação, as mesmas chamadas de sistema estarão envolvidas. É uma questão de projeto decidir quais comandos serão aceitos pelo interpretador. Os demais serão implementados através de utilitários. Em geral, comandos aceitos pelo interpretador são executados mais rapidamente, pois não exigem a carga e a execução de um outro programa. No caso, o outro programa é o utilitário. Entretanto, um interpretador de comandos muito grande pode tornar-se complexo. Além disso, ele vai ocupar memória com o código necessário para executar comandos que raramente são chamados. Em determinados momentos, o interpretador de comandos deve disparar a exe- cução de utilitários, ou mesmo de programas do usuário. Nesse caso, ele deve utilizar uma chamada de sistema que permita a um programa disparar a execução de outro programa. 28 —> Sistemas Operacionais O interpretador de comandos nao precisa ser um programa de sistema. Ele pode fazer parte de sistema operacional. Entretanto, a solução descrita antes é a que oferece a maior flexibilidade: pode-se alterar o interpretador de comandos sem mexer no siste- ma operacional. Mais ainda, pode-se construir vários interpretadores de comandos Nesse caso, cada usuário utilizaria um interpretador de comandos apropriado à sua experiência ou trabalho = ser desenvolvido. Tudo que foi dito sobre o interpretador de comandos é igualmente válido para a situa- ção em que o sistema operacional oferece uma interface gráfica de usuário (GUI graphical user interface). A única diferença está na comodidade para o usuário, que passa a usar ícones, menus e mouse no lugar de digitar comandos texluais. Na maioria das vezes, o interpretador de comandos, ou a GUI correspondente, “é o sistema operacional” para o usuério. Ele será julgado pela sua facilidade de uso em um primeiro momento. À medida que os usuários ganham experiência com o sistema, passam a julgar as interfaces pela sua flexibilidade e capacidade de realizar tarefas RR Na maior parte do tempo, o usuário trabalha com programas distantes do sistema operacional, Programadores utilizam principalmente editores de texto e compilado res. Usuários finais utilizam aplicativos e ferramentas de apoio. A opinião do usuário a respeito do sistema como um todo vai depender, principalmente, desses progra- mas. O sistema operacional propriamente dito fica escondido, longe da percepção do usuário comum. | 1.4 | sistema operacional na visão de projeto Na visão de projeto, o mais importante é como o sistema está organizado internamen- te. A organização de um sistema operacional corresponde à forma como ele imple- menta os vários serviços. O sistema operacional não resolve os problemas do usuário final. Ele não serve para editar texto, nem faz a contabilidade da empresa. Entretanto, com ele podemos obter uma maior eficiência e conveniência no uso do computador. A eficiência é obtida com o compartilhamento dos recursos. A conveniência é obtida por meio de uma interface mais confortável para a utilização dos recursos computacionais Normalmente, o processador está executando programas de usuário. É para isso que o computador foi comprado. Somente quando ocorre algum evento especial, o siste operacional é ativado, Dois tipos de eventos ativam o sistema operacional: uma cha- mada de sistema ou uma interrupção de periférico. Uma chamada de sistema corresponde a uma solicitação de serviço por parte do programa em execução. Primeiramente, deve ser verificada a legalidade da solicita- Capítulo 1 -— Introdução 29 cão. Por exemplo, um pedido para que arquivos de outros usuários sejam destruídos deverá ser recusado. No caso de uma solicitação legal, ela é realizada, e a resposta é devolvida ao programa. É possível que a chamada de sistema envolva o acesso à um periférico. Nesse caso, o programa deverá esperar até que o periférico conclua a operação solicitada. Em função das chamadas de sistema, o sistema operacional envia comandos pars os controladores dos periféricos. O controlador deve informar 20 sistema operacional quan- do à operação estiver concluída. Isso é feito por intermédio de uma interrupção. Quando a interrupção acontece, o processador para o que está fazendo e passa a executar uma rotina específica do sistema operacional. Como a interrupção do periférico avisa o érmi- no de alguma operação de entrada e saída, possivelmente uma chamada de sistema fo! concluída. Nesse caso, um programa à espera de resposta poderá ser liberado. Por exemplo, considere um programa que [az uma chamada de sistema para ler um registro de arquivo em disco. O sistema operacional envia o comando para o con- trolador do disco. O programa fica parado à espera da resposta. Quando a leitura é concluída, o controlador do disco informa ao sistema operacional, que então libera o programa do usuário para prosseguir sua execução. A descrição de sistema operacional apresentada nessa seção deixa clara a importân- cia das interrupções para a sua construção. Esse é possivelmente o mecanismo de harchware mais importante para a construção de um sistema operacional moderno, untamente com o conceito de unidade de gerência de memória (MMU- Memory Ma- nagement Unit). A função da MMU será descrita no capítulo que trata da gerência de memória. Os capítulos sobre multiprogramação e sobre gerência de entrada e saída descreverão o funcionamento do mecanismo de interrupção. 1.5 histórico de sistemas operaci Nessa seção, será feito um rápido histórico da evolução cos sistemas operacionais. As datas fornecidas para cada período são aproximadas, pois objetivo é apenas posicio- nar o leitor no tempo. Não existe 2 pretensão de definir com exatidão o momento em que determinada técnica surgiu ou passou à ser utilizada, mesmo porque, na répida evolução da computação, as etapas acabam ficando sobrepostas umas às outras. As novas técnicas não são assimiladas simultaneamente por todas as instalações. Muito pelo contrário, sempre existe alguma inércia contra qualquer alteração na forma de operação do computador Nos primórdios da computação, na década de 1940, não existia sistema operacional. Nesse ambiente, o programador é também o operador do computador. Existe uma planilha para alocação de horário na máquina. Durante o seu horário, o programador controla todo o equipamento. Um programa, quando executado, tem controle total 32 > Sistemas Operacion: no qual apenas um programa ocupe o computador de cada vez, interrupções não são essenciais. Pode-se fazer com que o processador fique em um laço, consultando a interface do periférico, até que a operação esteja concluída. Essa técnica é chama- da de polling ou busy-loop. Entretanto, não é possíve! implementar multiprogra- mação sem o auxílio de interrupções. O desenvolvimento dos discos magnéticos também foi importante para o sur gimenio da multiprogramação. Os jobs eram submetidos em cartões perfurados. Inicialmente, eles eram lidos pelo computador diretamente dos cartões. Mais tarde, eles passaram a ser antes copiados para fita magnética. O computador passou então a ler os jobs de fita magnética, e não de cartões. Como a fita é mais rápida, esse mecanismo diminuiu o tempo de entradá e saída é, por consequência, 0 tempo de processador parado. Entretanto, leitoras de cartões e unidades de fita magnética são dispositivos essencialmente sequenciais. Somente é possível ler o segundo job depois de ler completamente o primeiro job. Na multiprogramação, o segundo job é ne- cessário antes do término do primeiro. Por exemplo, quando o primeira job solicita uma operação de entrada para ler um dos seus cartões de dados, é necessário ter na memória principal o programa a ser executado para o segundo job. Isso significa ler cartões do segundo job sem ter lido ainda todos os cartões do primeiro job. Em um dispositivo sequencial, isso não é possível. O disco magnético permite a implementação da multiprogramação. Vários jobs são lidos de cartão perfurado ou fita magnética para o disco. Como c disco permite um acesso direto a qualquer posição, é possível ler parte do primeiro job e do segundo job. À medida que, em função de sua execução, um job solicita a leitura de mais da- dos, eles são buscados no disco. A execução de vários jobs pode agora ser sobreposta sem problemas O conceito de multiprogramação é essencial no estudo de sistemas operacionais. Ele também é a origem da maioria dos temas básicos da área. Por exemplo, agora que existem vários jobs na memória principal, existe a necessidade de controlar a ocupação da memória. Ao mesmo tempo, é preciso escolher qual job executar a seguir. Também é necessário organizar o conteúdo do disco, para que a informação descjada seja rapidamente localizada. Ao longo do texto, o conceito de multiprogramação estará sempre presente. Com a ulilização de disco magnético, não havia mais a necessidade de reunir jobs semelhantes em lotes. O termo batch passou então a designar um sistema no qual não existe interação entre o usuário e a execução do programa. Mais modernamente, o termo hatch foi substituído por “execução em background”. A depuração de programas em um ambiente batch é difícil. O programador submete o job e, algumas horas depois, recebe uma listagem com o resultado da execução. Os erros do progra- ma dbvem ser detectados e corrigidos nesse contexto. Capítulo 1 — Introdução 33 Durante a década de 1960, iniciaram as primeiras experiências com sistemas timesha- ring, e, na década de 1970, ocorreu sua disseminação. Em um ambiente com multi programação, diversos programas dividem o tempo do processador. Em um sistema timesharing, além da multiprogramação, cada usuário possui um terminal. Através desse terminal, o usuário pode interagir com o programa em execução. Por exemplo, um programador pode acompanhar passo a passo a execução de um programa em depuração. Ao detectar um erro, ele corrige e já inicia uma nova execução. A depura ção é muito mais rápida do que em um ambiente batch. Cada usuário, em seu terminal, tem a sensação de possuir o computador apenas para seus programas. Esse compartilhamento é possivel, pois usuários em terminais con- somem pouco tempo de processador. Enquanto o usuário pensa, conversa ou toma café, ele não está ocupando o processador. Isso acontece somente quando seus pro- gramas executam. Mesmo assim, programas em ambiente timesharing usualmente são bastante interativos. Por exemplo, considere um editor de texto, no qual um pro- grama está sendo digitado. No intervalo entre o acionar das teclas, o programa não gasta tempo de processador. Ele está parado, aguardando a próxima tecla. Ao receber o caractere digitado, o programa cditor de texto armazena-o nas suas estruturas de dados. Ele então volta a ficar bloqueado, à espera do próximo caractere. Em termos de instruções de méquina, o tempo entre a digitação de dois caracteres é muito gran- de, permitindo a execução de milhões de instruções de máguina (os digitadores mais rápidos possuem velocidade de 5 caracteres por segundo). A computação está em permanente evolução. Por exemplo, na década de 1980, temos uma enorme disponibilidade de microcomputadores. No início, os sistemas operacio- nais para microcompurtadores eram bastante simples, lembrando até o velho monitor residente. À medida que o haraware dessas máquinas foi melhorado, o mesmo acon- teceu com o sistema operacional. Atualmente, temos em microcomputadores meca- nismos encontrados, algum tempo atrás, apenas em máquinas ce grande porte. Historicamente, sistemas operacionais preocuparam-se principalmente com a eficiên- cia no uso do computador. Atualmente, existe uma grande preocupação com a conve- niência no uso. Isso, em parte, é consequência da redução no custo dos equipamen- tos, se comparado com o custo de pessoal. Essa preocupação com conveniência deu origem, por exemplo, a interfaces mais amigáveis. A interface tradicional do interpre- tador de comandos é bastante dura, bascada em comandos mnemônicos e em seus parâmetros, que devem ser memorizados pelo usuário. Atualmente, existe grande ênfase em interfaces baseadas em menus de comandos, mouse para indicação de co- mandos e janelas para acompanhar a execução de vários comandos simultaneamente e icones. Tudo isso para simplificar a utilização do computador. A maior parte das aplicações comerciais, mesmo em microcemputadores, é hoje cons- truída em torno de bancos de dados. Ainda que a maioria dos sistemas geren- 34 — Sistemas Operacionais ciadores de bancos de dados seja implementados fora do sistema operacional, este deve oferecer algum suporte. Por exemplo, vários programas podem querer acessar o banco de dados ao mesmo tempo. O sistema operacional pode, nesse caso, oferecer mecanismos para o compartilhamento controlado de arquivos Uma das áreas de pesquisa mais importantes atualmente é a dos sistemas operacio- nais distribuídos. Em um sistema desse tipo, vários computadores estão interconec- tados por meio de uma rede de comunicação de algum tipo. É possível, a partir de um dos computadores, acessar recursos em outros. Por exemplo, arquivos e periféricos de outro computador, ou até mesmo enviar um programa para ser executado em uma máquina de menor carga no momento. A gerência dessas solicilações aumenta a complexidade do sistema operacional e, ao mesmo tempo, cria sérios problemas de segurança. Em um sistema distribuído, fica mais difícil o controle de acessos não autorizados. Com o surgimento da Internet, a importância dos sistemas distribuídos aumentou ainda mais. Outra área importante são os sistemas operacionais de tempo real, usados no su- porte às aplicações submetidas a requisitos de natureza temporal. Nesses sistemas, os resultados devem estar corretos não somente do ponto de vista lógico, mas também devem ser gerados no momento correto. Aplicações com requisitos de tempo real são cada vez mais comuns. Essas aplicações variam muito com relação ao tamanho, complexidade e “criticalidade”. Entre os sistemas mais simples estão os controladores embutidos em utilidades domésticas, tais como lavadoras de roupa e videocassetes. Na outra extremidade desse espectro estão os sistemas militares de defesa e o controle de tráfego aéreo. Exemplos de aplicações críticas são os sistemas responsáveis pelo monitoramento de pacientes em hospitais e os sistemas embarcados em veículos, de automóveis até aviões c sondas espaciais. Entre aplicações não críticas estão os video- games e as aplicações multimídia em geral À medida que são desenvolvidos computadores com diversos processadores, passa a ser necessário rever aspectos básicos dos sistemas operacionais. Por exemplo, agora existe um paralelismo real a ser aproveitado. Diversos programas podem ser exe- cutados realmente em paralelo. É necessário agora decidir em que processador será executado qual programa. Além disso, o que essa escolha vai implicar em termos de gerência de memória. Essa questão é importante pois nem todos os processadores possuem acesso a toda a memória. Junto com sislemas distribuídos, sistemas opera- cionais para arquiteturas paralelas são atualmente uma das áreas de maior pesquisa em sistemas operacionais. Capítulo 1 -— Introdução 35 exercício 1 Consulte os manuais do sistema operacional usado na sua empresa ou universidade e liste os diferentes tipos de chamadas de sistema existentes. exercício 2 Classifique as chamadas de sistema levantadas no exercício anterior con- forme os tipos de serviço apresentados na seção 1.2, criando novos tipos de serviço caso seja necessário exercício 3 Muitos sistemas operacionais atuais são projetados para operar em redes de computadores. Cite vantagens e desvantagens dessa operação em rede, quando comparada com a operação clássica (stand-alone), DE sq 38 — Sistemas Operacionais Em um sistema multiprogramado diversos programas são mantidos na memória ao mesmo tempo. A figura 2.1 mostra uma possível organização da memória. Nesse sistema, existem 3 programas de usuário na memória principal, prontos para serem executados Vamos supor que O sistema operacional inicia a execução do programa 1. Após algum tempo, da ordem de milissegundos, o programa 1 faz uma chamada de sistema. Ele soli- cita algum tipo de operação de entrada ou saída. Por exemplo, uma leitura do disco. Sem multiprogramação, o processador ficaria parado durante a realização do acesso. Em um sistema multiprogramado, enquanto o periférico executa o comando enviado, o sistema operacional inicia a execução de outro programa. Por exemplo, o programa 2. Dessa forma, processador e periférico trabalham ao mesmo tempo. Enquanto o processador executa o programa 2, o periférico realiza a operação solicitada pelo programa 1. A maioria dos programas não precisa de toda a memória do computador. Na verdade, muitos programas ocupam uma pequena parcela da memória principal disponível. Sem multiprogramação, a memória não ocupada por um programa ficaria sem utilização. Com vários programas na memória, esse recurso também é mais bem aproveitado. Quando termina a operação de E/S do programa 1, ele pode voltar a ocupar o proces- sador. Entretanto, o programa 2 está sendo executado. Será necessário selecionar qual deles ficará com o processador. Algoritmos para essa situação serão apresentados no capítulo sobre gerência de processador. =| Em sistemas operacionais é conveniente diferenciar um programa de sua execução. Por exemplo, o mesmo programa pode estar sendo executado por vários usuários ao Memória principal Endereços 00000 H Sistema operacional (256 Kbytes) 3FFEFH Programa usuário 1 40000 H (160 Kbytes) 67FFFH Programa usuério 2 68000 H (64 Kbytes) TIFF H Programa usuário 3 78000 H . (32 Kbytes) ro 7FEFEH figura 2.1 Memória em um sistema com multiprogramação Capítulo 2 -— Multiprogramação 39 mesmo tempo. Para tanto é usado o conceito de processo. Não existe uma definição objetiva, aceita por todos, para a ideia de processo. Na maioria das vezes, um proces- so é definido como “um programa em execução”. O conceito de processo é bastante abstrato, mas essencial no estudo de sisternas operacionais. Um programa é uma sequência de instruções É algo passivo dentro do sistema. Ele não altera o seu próprio estado. O processo é um elemento ativo que altera o seu es- tado, à medida que executa um programa. É o processo que faz chamadas de sistema ao executar Os programas. É possível que vários processos executem o mesmo programa ao mesmo tempo. Por exemplo, diversos usuários podem estar utilizando simultaneamente o editor de tex- to favorito da instalação. Existe somente um programa “editor de texto”. Para cada usuário, existe um processo executando o programa. Cada processo representa uma execução independente do editor de textos. Todos os processos utilizam uma mesma cópia do código do editor de textos, porém cada processo trabalha sobre uma área de variáveis privativa | 2.3 —+ ciclos de um processo Processos são criados e destruídos. O momento e a forma pela qual eles são criados e destruídos depende do sistema operacional em consideração, Alguns sistemas tra- balham com um número fixo de processos. Por exemplo, um processo para cada ter- minal do computador, Nesse caso, todos os processos sao criados na inicialização do sistema. Eles somente são destruídos quando o próprio sistema é desligado. Outra forma de trabalhar com os processos é associá-los a uma sessão de trabalho. Um usuário abre uma sessão de trabalho fornecendo ao sistema seu código de usuário e, possivelmente, uma senha. A senha é necessária para que cada usuário limite o acesso de outros usuários aos seus arquivos. O sistema operacional verifica a validade da senha e cria um processo para atender o usuário. Provavelmente, o primeiro programa a ser executado pelo processo é o interpretador de comandos. No momento em que o usuário executa o comando “fim de sessão de trabalho”, o pro cesso associado à sessão é destruído. A forma mais flexível de operação é permitir que processos possam ser criados livre- mente, através de chamadas de sistema. Além da chamada de sistema "cria proces- so”, serão necessárias cnamadas para “autodestruição do processo” e também para "eliminação de outro processo”. A maioria dos processos de um sistema executa programas dos usuários. Entretanto, alguns podem realizar tarefas do sistema. São processos do sistema (daemon), não dos usuários. Por exemplo, para evitar conflitos na utilização da impressora, muitos sistemas trabalham com uma técnica chamada spooling. Para imprimir um 40 > Sistemas Operacionais arquivo, o processo de usuário deve colocá-lo em um diretório especial. Um proces- so do sistema copia os arquivos desse diretório para a impressora. Dessa forma, um processo de usuário nunca precisa esperar 2 impressora ficar livre, uma vez que ele não envia os dados para a impressora, mas sim para o disco. O processo que envia os dados para a impressora não está associado a nenhum usuário. É um processo do próprio sistema operacional. Após ter sido criado, o processo passa a ocupar O processador. Em determinados momentos, ele deixa de fazer isso para realizar uma operação de E/S. Os momentos em que um processo não está esperando por E/S, ou seja, em que ele deseja ocupar o processador, são chamados de ciclos de processador. Quando o processo está espe- rando por uma operação de E/S, ele está em um ciclo de E/S. A chamada de sistema é o evento que termina o ciclo de processador em andamento e inicia um ciclo de E/S. A conclusão da chamada de sistema faz o caminho inverso. O primeiro ciclo da vida de um processo será necessariamente um ciclo de processador. Para entrar em um cido de E/S é necessário executar ao menos uma instrução. No caso, a instrução que faz a chamada de sistema. Um processo que utiliza muito processador é chamado de cpu-bound. O seu tem po de execução é definido principalmente pelo tempo dos seus ciclos de processa dar. Por cutro lado, um processo que utiliza muita E/S é chamado ce i/o-bound (inputioutput-bouna). Nesse caso, o tempo de execução é definido principalmente pela duração das operações de E/S. Não existe uma quantificação precisa para es- sas definições. Por exemplo, um processo que executa um programa de cópia de arquivo é ifo-bound. Ele praticamente não utiliza processador, apenas acessa disco. Já um processo que executa um programa de inversão de matriz é cou bouna. Após ler alguns poucos dados, ele precisa apenas de processador. O ideal é ter no sistema uma mistura de processos cpu-bound com processos i/o bound. Se todos os processos forem cpu-bound, o processador será o gargalo do sistema; se todos forem ifo-bound, o processador ficará parado enquanto todos os processos tentam acessar os periféricos. 2.4 tre processos Dependendo do sistema operacional considerado, pode ou não haver algum tipo de relacionamento entre os processos. Em um sistema no qual existe independência total entre processos, operações devem ser realizadas sobre cada processo individualmente. Um exemplo de operação nesse contexto é a destruição do processo. Alguns sistemas suportam o conceito de grupo de processos. Por exemplo, todos os processos associados a um mesmo terminal podem formar um grupo. Se processos são criados através de chamada de sistema, pode se considerar como pertencentes ao mesmo grupo todos os processos criados pelo mesmo processo. O conceito de grupo permite que operações possam ser aplicadas sobre todo um conjunto de processos, e Capítulo 2 — Multiprogramação 41 não apenas sobre processos individuais. Por exemplo, os processos pertencentes a um mesmo grupo podem compartilhar os mesmos direitos perante o sistema (Como dito antes, em muitos sistemas os processos são criados por outros processos, pela chamada de sistema. Nesse caso, é possível cefinir uma hierarquia de processos O processo que faz a chamada de sistema é chamado de processo pai, enquanto o processo criado é chamado de processo filho. Um mesmo processo pai pode estar associado a vários processos filhos. Os processos filhos, por sua vez, podem criar autros processos. Essa siluação é facilmente representada por urna árvcre em que cada nodo representa um processo. Uma ligação entre dois nodos significa que o processo repre- sentado pelo noco superior criou o processo representado pelo nado inferior. A figura 2.2 ilustra a hierarquia de processos existente em um dado instante, em um sistema hipotético. O processo P1 é à processo inicial do sistema. Todos os demais foram criados a partir dele. Esse processo inicial não foi criado por chamada de sis- tema, mas sim durante a inicialização do sistema operacional. Os processos P2, P3 e P4 foram criados diretamente nor P1, enquanto os demais foram criados por seus processos filhos. É importente salientar que o formato da árvore muda com o passar co tempo. À medi- da que processos são criados e destruídos, nodos são acrescentados ou removidos da árvore, respectivamente. O sistema deve definir, por exemplo, o que fazer quando um processo com filhos é destruído. Pode-se definir que, quando um processo é destruído, todos os processos que derivam dele também são destruídos. Outra solução é manter o nodo que representa o processo destruído, até que todos os seus descendentes também terminem. Uma terceira solução é vincular os processos que são filhos do processo des- truído com o processo pai daquele, isso é, com o “processo avô” deles, 255 estados de um processo A descrição do funcionamento da multiprogramação mostrou diversos momentos pe- os quais passa o processo. A partir dessa descrição, pode-se estabelecer os estados possíveis para um processo. (7) E Ce) Sn io (rs) es (Pio) figura 2.2 Hierarquia de processos