Vous êtes sur la page 1sur 29

Universidade Estadual de Campinas ~ Faculdade de Engenharia Eletrica e de Computacao

Indice
1 Introduc~o a

Sistemas Operacionais
Notas de aula EA877 | Mini e Microcomputadores: Software

1.1 1.2 1.3 1.4

O que e um Sistema Operacional? Historia dos Sistemas Operacionais De nic~es o Exemplos

1
: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :

: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :

1 2 4 5

2 Processos
2.1 2.2 2.3 2.4 2.5 2.6 3.1 3.2 3.3 3.4 3.5 3.6

Conceitos Basicos Concorr^ncia e Comunicac~o Interprocessos a Escalonamento de Processos Processos em Unix Processos em MS-DOS

: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :

: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :

: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :

8 8 11 11 13 13 16 17 21 24 26 28

3 Ger^ncia de Memoria e
Texto-base: Introduc~o a Sistemas Operacionais a de E. Cardozo, M. Magalh~es e L. F. Faina, 1992 a adaptado para EA877 por Ivan L. M. Ricarte
~ ~ Departamento de Engenharia de Computacao e Automacao Industrial

Ger^ncia Sem Permuta e Ger^ncia com Permuta e Memoria Virtual Algoritmos de Troca de Pagina Ger^ncia de Memoria no UNIX e Ger^ncia de Memoria em MS-DOS e Interface do Sistema de Arquivos Projeto do Sistema de Arquivos O Sistema de Arquivos do Unix Sistemas de Arquivos do MS-DOS Princ pios do Hardware Princ pios do Software Discos E/S no Unix E/S em MS-DOS

16

: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :

: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :

: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :

4 Sistema de Arquivos
4.1 4.2 4.3 4.4

30
: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :

: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :

30 31 35 37

5 Entrada e Sa da
5.1 5.2 5.3 5.4 5.5

39
: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :

: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :

39 41 44 47 49

1996 i

Cardozo, Magalh~es, Faina & Ricarte a

Sistemas Operacionais

Cardozo, Magalh~es, Faina & Ricarte a

Cap tulo 1 Introduc~o a


o Programas computacionais (ou software ) constituem o elo entre o aparato eletr^nico (ou hardware ) e o ser humano. Tal elo se faz necessario dada a discrep^ncia entre o tipo de informac~o manipulada a a pelo homem e pela maquina. A maquina opera com cadeias de codigos binarios enquanto o homem opera com estruturas mais abstratas como conjuntos, arquivos, algoritmos, etc. Programas computacionais podem ser grosseiramente divididos em dois tipos: programas do sistema, que manipulam a operac~o do computador a programas aplicativos, que resolvem problemas para o usuario. O mais importante dos programas do sistema e o sistema operacional, que controla todos os recursos do computador e proporciona a base de sustentac~o para a execuc~o de programas aplicativos. a a

1.1 O que e um Sistema Operacional?


A maioria de usuarios de computador t^m alguma experi^ncia com sistemas operacionais, mas e e e dif cil de nir precisamente o que e um sistema operacional. Parte do problema decorre do fato do sistema operacional realizar duas func~es basicas e, dependendo do ponto de vista abordado, uma das o func~es e mais destacada do que a outra. Estas func~es s~o descritas a seguir. o o a A arquitetura (conjunto de instruc~es, organizac~o de memoria, E/S e estrutura de barramento) o a da maioria dos computadores a n vel de linguagem de maquina e primitiva e dif cil de programar, especi camente para operac~es de entrada e sa da. E prefer vel para um programador trabalhar com o abstrac~es de mais alto n vel onde detalhes de implementac~o das abstrac~es n~o s~o vis veis. No caso de o a o a a discos, por exemplo, uma abstrac~o t pica e que estes armazenam uma colec~o de arquivos identi cados a a por nomes simbolicos. O programa que esconde os detalhes de implementac~o das abstrac~es e o sistema operacional. A a o abstrac~o apresentada ao usuario pelo sistema operacional e simples e mais facil de usar que o hardware a original. Nesta vis~o, a func~o do sistema operacional e apresentada ao usuario como uma maquina estendida a a ou maquina virtual que e mais facil de programar que o hardware que a suporta.
ii

1.1.1 O Sistema Operacional como uma Maquina Virtual

c 1996

DCA/FEEC/UNICAMP

Cardozo, Magalh~es, Faina & Ricarte a

Sistemas Operacionais

Introduc~o a

Historia dos Sistemas Operacionais 1.2]

Um computador moderno e composto de varios subsistemas tais como processadores, memorias, discos, terminais, tas magneticas, interfaces de rede, impressoras, e outros dispositivos de E/S. Sob este ponto de vista, o sistema operacional tem a func~o de gerenciar de forma adequada estes recursos de a modo que as tarefas impostas pelos usuarios sejam atendidas da forma mais rapida e con avel poss vel. Um exemplo t pico e o compartilhamento da unidade central de processamento (CPU) entre as varias tarefas (programas) em sistemas multiprogramados. O sistema operacional e o responsavel pela distribuic~o de forma otimizada da CPU entre as tarefas em execuc~o. a a

1.1.2 O Sistema Operacional como um Gerenciador de Recursos

1.2 Historia dos Sistemas Operacionais


Os sistemas operacionais t^m evolu do com o passar dos anos. Nas proximas sec~es vamos apresentar e o de forma sucinta este desenvolvimento. Apos muitos esforcos mal sucedidos de se construir computadores digitais antes da 2a guerra mundial, em torno da metade da decada de 1940 alguns sucessos foram obtidos na construc~o de maquinas de a calculo empregando-se valvulas e reles. Estas maquinas eram enormes, ocupando salas com racks que abrigavam dezenas de milhares de valvulas (e consumiam quantidades imensas de energia). Naquela epoca, um pequeno grupo de pessoas projetava, construia, programava, operava e dava manutenc~o em cada maquina. Toda programac~o era feita absolutamente em linguagem de maquina, a a muitas vezes interligando plugs para controlar func~es basicas da maquina. Linguagens de programac~o o a eram desconhecidas, assim como sistemas operacionais. Por volta de 1950 foram introduzidos os cart~es o perfurados aumentando a facilidade de programac~o. a

1.2.1 A Primeira Gerac~o (1945-1955): Valvulas e Plugs a

1.2.2 A Segunda Gerac~o (1955-1965): Transistores e Processamento em a Batch


A introduc~o do transistor mudou radicalmente o quadro. Computadores tornaram-se con aveis a e difundidos (com a fabricac~o em serie), sendo empregados em atividades multiplas. Pela primeira a vez, houve uma separac~o clara entre projetistas, construtores, operadores, programadores e pessoal de a manutenc~o. Entretanto, dado seu custo ainda elevado, somente corporac~es e universidades de porte a o detinham recursos e infraestrutura para empregar os computadores desta gerac~o. a Estas maquinas eram acondicionadas em salas especiais com pessoal especializado para sua operac~o. a Para rodar um job (programa), o programador produzia um conjunto de cart~es perfurados (um cart~o o a por comando do programa), e o entregava ao operador que dava entrada do programa no computador. Quando o computador completava o trabalho, o operador devolvia os cart~es com a impress~o dos o a resultados ao programador. A maioria dos computadores de 2a gerac~o foram utilizados para calculos cient cos e de engenharia. a Estes sistemas eram largamente programados em FORTRAN e ASSEMBLY. Sistemas operacionais t picos1 eram o FMS (Fortran Monitor Systems) e o IBSYS (IBM's Operating Systems).
1

No in cio dos anos 60, a maioria dos fabricantes de computadores tinha duas linhas distintas e incompat veis de produtos. De um lado, havia os computadores cient cos que eram usados para calculos numericos na ci^ncia e engenharia. Do outro, haviam os computadores comerciais que executavam taree fas como ordenac~o de dados e impress~o de relatorios, sendo utilizados principalmente por instituic~es a a o nanceiras. A IBM tentou resolver este problema introduzindo a serie System/360. Esta serie consistia de maquinas com mesma arquitetura2 e conjunto de instruc~es. Desta maneira, programas escritos para o uma maquina da serie executavam em todas as demais. A serie 360 foi projetada para atender tanto aplicac~es cient cas quanto comerciais. o N~o foi poss vel para a IBM escrever um sistema operacional que atendesse a todos os con itos de a requisitos dos usuarios. O resultado foi um sistema operacional (OS/360) enorme e complexo comparado com o FMS. A despeito do tamanho e problemas, o OS/360 atendia relativamente bem as necessidades dos usuarios. Ele tambem popularizou muitas tecnicas ausentes nos sistemas operacionais de 2a gerac~o, a como por exemplo a multiprogramac~o. Outra caracter stica apresentada foi a capacidade de ler jobs a dos cart~es perfurados para os discos, assim que o programador os entregasse. Dessa maneira, assim o que um job terminasse, o computador iniciava a execuc~o do seguinte, que ja f^ra lido e armazenado a o em disco. Esta tecnica foi chamada spool (simultaneous peripherical operation on line), sendo tambem utilizada para a sa da de dados. O tempo de espera dos resultados dos programas reduziu-se drasticamente com a 3a gerac~o de a sistemas. O desejo por respostas rapidas abriu caminho para o time-sharing, uma variac~o da multia programac~o onde cada usuario tem um terminal on-line e todos compartilham uma unica CPU. a Apos o sucesso do primeiro sistema operacional com capacidade de time-sharing (o CTSS) desenvolvido no MIT3, um consorcio envolvendo o MIT, a GE e o Laboratorio Bell foi formado com o intuito de desenvolver um projeto ambicioso para a epoca: um sistema operacional que suportasse centenas de usuarios on-line. O MULTICS (MULTiplexed Information and Computing Service) introduziu muitas ideias inovadoras, mas sua implementac~o mostrou-se impraticavel para a decada de sessenta. O projeto a MULTICS in uenciou os pesquisadores da Bell que viriam a desenvolver o UNIX uma decada depois.

1.2.3 A Terceira Gerac~o (1965-1980): Circuitos Integrados e Multiproa gramac~o a

Com o desenvolvimento de circuitos LSI, chips contendo milhares de transistores em um cent metro quadrado de sil cio, surgiu a era dos computadores pessoais e estac~es de trabalho. Em termos de arquio tetura, estes n~o diferem dos minicomputadores da classe do PDP-11, exceto no quesito mais importante: a preco. Enquanto os minicomputadores atendiam companhias e universidades, os computadores pessoais e estac~es de trabalho passaram a atender usuarios individualmente. o O aumento do potencial destas maquinas criou um vast ssimo mercado de software a elas dirigido. Como requisito basico, estes produtos (tanto aplicativos quanto o proprio sistema operacional) necessitavam ser \amigaveis", visando usuarios sem conhecimento aprofundado de computadores e sem intenc~o a de estudar muito para utiliza-los. Esta foi certamente a maior mudanca em relac~o ao OS/360 que a
2 3

1.2.4 A Quarta Gerac~o (1980-): Computadores Pessoais e a Estac~es de Trabalho o

Que eram capazes de gerenciar apenas um job por vez.

Por sinal, o termo arquitetura de computador foi introduzido pelos projetistas deste sistema. Massachussets Institute of Technology.

c 1996

DCA/FEEC/UNICAMP

Cardozo, Magalh~es, Faina & Ricarte a

Sistemas Operacionais

Introduc~o a

Exemplos 1.4]

era t~o obscuro que diversos livros foram escritos sobre ele. Dois sistemas operacionais dominaram o a mercado: MS-DOS para os computadores pessoais e UNIX para as estac~es de trabalho. o O proximo desenvolvimento no campo dos sistemas operacionais surgiu com a tecnologia de redes de computadores: os sistemas operacionais de rede e distribu dos. Sistemas operacionais de rede diferem dos sistemas operacionais para um simples processador no tocante a capacidade de manipular recursos distribu dos pelos processadores da rede. Por exemplo, um arquivo pode ser acessado por um usuario num processador, mesmo que sicamente o arquivo se encontre em outro processador. Sistemas operacionais de rede prov^em ao usuario uma interface transparente e de acesso a recursos compartilhados (aplicativos, arquivos, impressoras, etc), sejam estes recursos locais ou remotos. Sistemas operacionais distribu dos s~o muito mais complexos. Estes sistemas permitem que os a processadores cooperem em servicos intr nsecos de sistemas operacionais tais como escalonamento de tarefas e paginac~o. Por exemplo, num sistema operacional distribu do uma tarefa pode \migrar" a durante sua execuc~o de um computador sobrecarregado para outro que apresente carga mais leve. a Contrario aos sistemas operacionais de rede que s~o largamente dispon veis comercialmente, sistemas a operacionais distribu dos t^m sua utilizac~o ainda restrita. e a

ao suporte de multiplos processos concorrentes, permite que instruc~es e dados de dois ou mais processos o disjuntos estejam residentes na memoria principal simultaneamente.

Multiprocessamento Embora a maioria dos computadores disponha de uma unica CPU que executa instruc~es uma a uma, certos projetos mais avancados incrementaram a velocidade efetiva de o computac~o permitindo que varias instruc~es fossem executadas ao mesmo tempo. Um computador a o com multiplos processadores que compartilhem uma memoria principal comum e chamado um multiprocessador. O sistema que suporta tal con gurac~o e um sistema que suporta o multiprocessamento. a Interpretador de Comandos (Shell) O interpretador de comando e um processo que perfaz a interface do usuario com o sistema operacional. Este processo l^ o teclado a espera de comandos, e interpreta-os e passa seus par^metros ao sistema operacional. Servicos como login e logout, manipulac~o a a de arquivos, e execuc~o de programas s~o solicitados atraves do interpretador de comandos. a a Chamadas de Sistema (System Calls) Assim como o interpretador de comandos e a interface entre usuario e sistema operacional, as chamadas do sistema constituem a interface entre programas aplicativos e o sistema operacional. As chamadas do sistema s~o func~es que podem ser ligadas com os a o aplicativos provendo servicos como leitura do relogio interno, operac~es de entrada/sa da e comunicac~o o a inter-processos. Arquivos Uma das func~es associadas a sistemas operacionais e esconder os detalhes de hardware do o a usuario. O conceito de arquivos oferece um n vel de abstrac~o que adequado para manipular grupos de dados armazenados em discos e perifericos de entrada e sa da (I/O). Alem de suportar func~es para o transferir dados entre discos (ou perifericos) e a aplicac~o, o sistema operacional pode tambem suportar a func~es para organizar os dados do disco em diretorios e para controlar o acesso a estes dados. o Codigo Reentrante Um codigo de um programa e dito ser reentrante quando um segundo processo pode iniciar a execuc~o deste codigo mesmo que o codigo esteja sendo executado por um outro processo. a

1.3 De nic~es o
Nesta sec~o, alguns termos basicos relativos a sistemas operacionais s~o de nidos. Nos cap tulos a a seguintes, os conceitos associados ser~o aprofundados. a

Processos Um processo (as vezes chamado de tarefa ou de processo sequencial) e basicamente um programa em execuc~o. Ele e uma entidade ativa que compete por recursos oferecidos pelo sistema a (acesso a discos, perifericos, e principalmente CPU) e interage com outros processos. Um processo pode assumir de tr^s estados, que s~o: executando (usando a CPU para executar as instruc~es do programa), e a o bloqueado (aguardando outros recursos | alem da CPU | n~o dispon veis no momento), ou ativo a (aguardando apenas CPU para executar). Sistemas Multitarefas e Multiusuarios Um sistema operacional multitarefa se distingue pela sua
habilidade de suportar a execuc~o concorrente de processos sobre um processador unico, sem necessaa riamente prover forma elaborada de gerenciamento de recursos (CPU, memoria, etc). Sistemas operacionais multiusuarios permitem acessos simult^neos ao computador atraves de dois ou mais terminais a de entrada. Embora frequentemente associada com multiprogramac~o, multitarefa n~o implica necessaa a riamente em uma operac~o multiusuario. Operac~o multiprocessos sem suporte de multiusuarios pode a a ser encontrado em sistemas operacionais de alguns computadores pessoais avancados e em sistemas de tempo-real. a Multiprogramac~o Multiprogramac~o e um conceito mais geral que multitarefa e denota um sistema a operacional que prov^ gerenciamento da totalidade de recursos tais como CPU, memoria, sistema de e arquivos, em adic~o ao suporte da execuc~o concorrente dos processos. Quando um sistema operacional a a permite apenas a monoprogramac~o, a execuc~o de programas passa por diversas fases, alternando a a momentos em que o processo se encontra executando ou bloqueado. Atraves do uso da multiprogramac~o a e poss vel reduzir os per odos de inatividade da CPU e consequentemente aumentar a e ci^ncia do uso e a a do sistema como um todo. O termo multiprogramac~o denota um sistema operacional o qual em adic~o c 1996

1.4 Exemplos
No restante desta apostila, os conceitos que ser~o apresentados | ger^ncia de processos e de a e memoria, manipulac~o de arquivos e de dispositivos de entrada e sa da | ser~o ilustrados sob a optica a a de dois sistemas operacionais de ampla utilizac~o, MS-DOS e Unix. Estes dois sistemas s~o brevemente a a introduzidos a seguir. O ja citado projeto MULTICS (Sec~o 1.2.3) n~o obteve sucesso por ser ambicioso demais. Um a a dos pesquisadores deste projeto, Ken Thompson (Bell Labs) decidiu escrever uma vers~o simpli cada a deste sistema em uma maquina ja sem uso (um minicomputador PDP-7). Esta vers~o do sistema foi a batizada de UNICS (Uniplexed Information and Computing Service), uma brincadeira com relac~o ao a \multiplexed" de MULTICS. Posteriormente, este sistema simpli cado viria a alcancar grande sucesso sob o nome de Unix.
DCA/FEEC/UNICAMP 5

1.4.1 Unix

Cardozo, Magalh~es, Faina & Ricarte a

Sistemas Operacionais

Introduc~o a

Exemplos 1.4]

Apos a vers~o inicial, desenvolvida por esforco pessoal de Thompson, outras pessoas passaram a a colaborar com o projeto e o sistema foi transportado para outras maquinas da fam lia PDP-11. Como o esforco de transportar o codigo desenvolvido em assembly era muito grande, o grupo decidiu desenvolver tambem uma linguagem de alto-n vel para reescrever o sistema. A primeira linguagem desenvolvida foi B posteriormente, o sistema foi reescrito na linguagem que sucedeu B, a linguagem C. Pelo trabalho em Unix, Thompson and Dennis Ritchie receberam posteiormente o pr^mio ACM Turing. Unix logo e alcancou sucesso entre os usuarios de PDP-11, que eram na epoca principalmente universidades. Com o desenvolvimento de um compilador C portatil (por Steve Johnson, de Bell Labs), Unix pode ser transportado facilmente para outros sistemas computacionais. Em meados da decada de 1980, a AT&T (companhia que controlava Bell Labs) passou a comercializar sua vers~o \o cial" de Unix. Em contraposic~o a esta vers~o, ha o sistema Unix desenvolvido (a partir a a a da vers~o para o PDP-11) na Universidade da California em Berkeley, usualmente conhecido como Unix a BSD (Berkeley Software Distribution). Varias empresas que passaram a distribuir suas vers~es de Unix o para seus sistemas utilizaram como base o Unix BSD, tais como a Sun e a DEC. As diferencas entre estas duas vers~es de Unix levaram ao desenvolvimento de um padr~o para uniformizar as interfaces de o a acesso aos servicos do sistema. Esta interface e conhecida como POSIX (Portable Operating System, Unix), e de ne nomes e formatos padronizados para servicos comuns do sistema operacional, tais como open, read e fork. Uma aplicac~o que utilize os servicos do sistema operacional de nidos pelo padr~o a a POSIX pode ser transportada para qualquer sistema tipo Unix sem problemas. Entretanto, a quest~o da uniformidade dos diferentes sistemas Unix ainda n~o foi completamente a a respondida. Ha ainda hoje distinc~o entre sistemas produzidos pela Open Software Foundation (OSF, a um consorcio de empresas de computac~o do porte da IBM, HP e DEC) e pela Unix International (UI, a outro consorcio liderado pela AT&T), alem de empresas que utilizam suas proprias variac~es, como o o AIX da IBM. mesmo assim, Unix e um dos sistemas operacionais de maior aceitac~o na comunidade a \n~o-comercial". A raz~o da aceitac~o do UNIX e explicada por: a a a ser escrito em linguagem de alto n vel, o que facilita seu transporte para diferentes plataformas ter interface simples para com o usuario (shell) fornecer primitivas que permitem o desenvolvimento de programas complexos a partir de programas mais simples suportar estrutura hierarquica de arquivos ter formatac~o de arquivos baseada no conceito de stream (cadeia) de bytes a ter interfaceamento simples e consistente com os dispositivos perifericos ser multiusuario/multiprogramado esconder a arquitetura do hardware, permitindo que um programa execute em multiplas plataformas. MS-DOS (MicroSoft Disk Operating System), provavelmente o sistema operacional com maior numero de usuarios, foi desenvolvido de forma n~o t~o pro ssional. Quando a IBM decidiu lancar seu compua a tador pessoal no in cio da decada de 1980, a empresa n~o estava interessada no desenvolvimento de a
6

hardware ou software para este sistema. Desta forma, ela selecionou como plataforma de hardware o processador 8088 da Intel, com arquitetura interna de 16 bits mas trabalhando em um barramento externo de dados de 8 bits. Apesar de que ja existia na epoca o processador 8086, com barramento externo de 16 bits, os perifericos para o 8088 eram muito mais baratos, o que determinou a escolha nal. A nal de contas, este era apenas um computador pessoal, que seria utilizado apenas para jogos. Pelo mesmo racioc nio, a IBM procurou uma pequena empresa de Seattle, a Microsoft, para licenciar uma vers~o de um interpretador BASIC para o seu computador pessoal. O proprietario da empresa, a Bill Gates, havia desenvolvido um interpretador BASIC para o primeiro computador pessoal, o Altair. Aproveitando a ocasi~o, a IBM manifestou interesse em um sistema operacional. Na epoca, a Microsoft a vendia o sistema Unix sob licenca da AT&T, mas este sistema seria muito grande para os recursos oferecidos pela maquina (64 KBytes de memoria, sem disco r gido). A recomendac~o foi adotar o sistema a CP/M-86, da Digital Research, a empresa que havia produzido o ent~o popular sistema operacional a CP/M para processadores de 8 bits. No entanto, o cronograma para o CP/M-86 estava atrasado, e a IBM n~o queria esperar. Voltando a Gates, pediu-lhe que produzisse um sistema operacional para 16 a bits. Gates ent~o comprou o software 86-DOS da empresa Seattle Computer Products (que o utilizava a para testar as placas de memoria que produzia) e contratou o autor do programa, Tim Patterson, para fazer uma adaptac~o rapida. Desta forma, nasceu MS-DOS, embarcado em IBM-PCs a partir de 1981. a Provavelmente, se a IBM ou a Microsoft pudessem imaginar o n vel de sucesso que esta combinac~o a iria obter, mais cuidado teria sido dado ao desenvolvimento do sistema. O motivo do sucesso deste sistema foi o fato de ter sido adotada uma arquitetura aberta, onde os componentes estavam dispon veis em qualquer loja de eletr^nica e os diagramas esquematicos e codigo basico podiam ser encontrados o no livro que descrevia o sistema. Desta forma, diversos fabricantes passaram a desenvolver modelos \compat veis" com o IBM-PC, e MS-DOS era o sistema operacional de todos eles. Entre as caracter sticas do IBM-PC que tiveram re exo no software desenvolvido para ele est~o o a modelo de memoria e a falta de protec~o de hardware. Apesar do processador 8088 ter um espaco de a enderecamento de 1 MByte, apenas os primeiros 640 KBytes (dez vezes maior que a memoria f sica) estavam dispon veis como RAM, sendo o restante do espaco de enderecamento alocado a outras memorias, como ROM e memoria de v deo. Esta caracter stica trouxe re exos posteriores, quando nenhum programa rodando em MS-DOS podia ser maior que 640 KBytes.

1.4.2 MS-DOS

c 1996

DCA/FEEC/UNICAMP

Cardozo, Magalh~es, Faina & Ricarte a

Processos

Concorr^ncia 2.2] e

ao m sem interrupc~o para evitar inconsist^ncias. Em situac~es como estas, a parte do codigo que o a e o manipula o recurso compartilhado e uma regi~o cr tica. a O codigo que implementa uma regi~o cr tica deve obedecer a uma serie de restric~es: a o

Cap tulo 2 Processos


2.1 Conceitos Basicos
No cap tulo anterior de nimos o conceito de processo | essencialmente, um programa em execuc~o. a Um processo possui duas importantes propriedades: o resultado da execuc~o de um processo independe da velocidade com que o processo e executado a se um processo for executado novamente com os mesmos dados, ele passara precisamente pela mesma sequ^ncia de instruc~es e fornecera o mesmo resultado. e o Estas propriedades enfatizam a natureza sequencial de um processo. O processo sequencial e de nido pelo resultado de suas instruc~es, n~o pela velocidade com que as instruc~es s~o executadas. o a o a A maioria dos computadores modernos s~o capazes de realizar diversas atividades em paralelo. a Enquanto roda um programa do usuario, o computador pode ler um disco ou utilizar a impressora. Em sistemas multiprogramados, a CPU e comutada de programa a programa em per odos da ordem de milesimos de segundos, dando ao usuario a impress~o de paralelismo. a A ger^ncia de atividades paralelas e dif cil de ser implementada com e ci^ncia. Entretanto, projee e tistas de sistemas operacionais ao longo dos anos v^m desenvolvendo modelos objetivando tornar esta e tarefa mais simples. No modelo mais empregado atualmente, todos os programas executaveis no computador, muitas vezes incluindo subsistemas do sistema operacional, est~o organizados na forma de processos. Conceia tualmente, cada processo tem uma CPU virtual propria. A posse da CPU real e passada periodicamente de processo a processo. Em sistemas multiprogramados, a velocidade de execuc~o de um processo e func~o da quantidade a a de processos competindo pela CPU. Isto implica que o tempo de execuc~o de um processo varia a cada a nova execuc~o, dependendo da \carga" da maquina | ou seja, processos n~o devem ser programados a a com considerac~es intr nsecas de tempo. o Neste cap tulo, avancaremos no estudo de processos, analisando problemas de concorr^ncia, escaloe namento e comunicac~o interprocessos. a

dois processos n~o podem estar simultaneamente executando regi~es cr ticas referentes a um a o mesmo recurso compartilhado (garantia de mutua exclus~o) a a garantia de mutua exclus~o deve ser independente da velocidade relativa dos processos ou numero a de CPUs nenhum processo executando fora de regi~es cr ticas pode bloquear outro processo o nenhum processo deve esperar um tempo arbitrariamente longo para poder executar uma regi~o a cr tica. Varios algoritmos de controle visando garantir as propriedades acima foram propostos. Estes algoritmos s~o classi cados segundo o modo com que esperam pela autorizac~o de entrada numa regi~o a a a cr tica: espera ocupada (usando a CPU durante a espera) ou bloqueada (n~o competindo pela CPU). a Todo algoritmo de mutua exclus~o possui duas func~es delimitadoras. A primeira func~o e evocada a o a quando o processo deseja iniciar a execuc~o de uma regi~o cr tica. Quando esta func~o retorna, o a a a processo esta apto a executar a regi~o cr tica. No nal da execuc~o da regi~o cr tica, o processo evoca a a a a segunda func~o, que ent~o provoca o retorno da primeira func~o em outro processo. Para permitir que a a a regi~es cr ticas que acessam recursos compartilhados distintos possam ser executadas ao mesmo tempo, o a cada recurso compartilhado e associado um identi cador, e as duas func~es que comp~em o algoritmo o o de garantia de mutua exclus~o possuem este identi cador como par^metro. a a Nesta sec~o analisaremos varias propostas para garantir exclus~o mutua nas regi~es cr ticas, n~o a a o a permitindo que mais de um processo possam manipular um recurso compartilhado ao mesmo tempo. Em todas, o processo que esta tentanto acessar uma regi~o cr tica em execuc~o por outro processo a a permanece em espera ocupada, isto e, competindo pela CPU mas sem avancar no seu processamento.

2.2.1 Mutua Exclus~o Com Espera Ocupada a

Desabilitar Interrupc~es A soluc~o mais simples e o metodo de desabilitar todas as interrupc~es o a o

quando se esta entrando na regi~o cr tica, e reabilita-las ao sair. Esta proposta n~o e muito atrativa, a a pois da ao processo usuario poder de desabilitar todas as interrupc~es, inclusive aquelas que permitem o o nucleo reassumir a CPU. Caso o processo n~o as reabilite por algum motivo, o sistema operacioa nal jamais reassume o controle do harware. Por outro lado, e conveniente para o sistema operacional desabilitar interrupc~es durante algumas instruc~es, enquanto esta atualizando variaveis internas. Aso o sim, desabilitar interrupc~es e uma soluc~o util para o sistema operacional, mas n~o para processos de o a a aplicac~o. a

2.2 Concorr^ncia e
Em muitos sistemas operacionais, processos frequentemente compartilham outros recursos alem da CPU. Em muitos casos, o recurso so pode atender a uma requisic~o por vez, e deve atend^-la do princ pio a e
8

Variaveis LOCK Uma segunda tentativa leva-nos a uma soluc~o por software. Considere, para cada a

recurso compartilhado, uma variavel global LOCK, inicialmente igual a 0. Quando um processo deseja entrar em sua regi~o cr tica ele primeiro testa o valor de LOCK. Se for 0, o processo altera para 1 e a executa a regi~o cr tica. Se for 1, ele espera ate que seja 0. Embora pareca uma boa soluc~o, o que ira a a ocorrer se dois processos testam uma variavel de valor 0 ao mesmo tempo?
9

c 1996

DCA/FEEC/UNICAMP

Cardozo, Magalh~es, Faina & Ricarte a

Sistemas Operacionais

Processos

Comunicac~o Interprocessos 2.3] a

Altern^ncia Estrita Esta proposta de ne uma variavel TURN que indica qual processo tem o direito a
i i i

de acesso a regi~o cr tica | ou seja, esta variavel indica quem deve esperar e quem pode entrar na sec~o a a cr tica. Se TURN for , o processo pode entrar na regi~o cr tica. Ao sair, deve passar o valor de TURN a para + 1 (modulo o numero total de processos). Este algoritmo garante a mutua exclus~o, mas os a processos estritamente se alternam na posse do recurso compartilhado. Isto faz com que um processo necessite aguardar o acesso a um recurso compartilhado por todos os demais ate que chegue novamente a sua vez. O que ocorre quando a frequ^ncia de acesso for diferente entre os processos? e criando-se tambem uma soluc~o por software para o problema. Ela evita os problemas individuais das a soluc~es anteriores, mas e pouco utilizada na pratica por utilizar espera ocupada. o

a caracter stica de mutua exclus~o, pois eles devem garantir que apenas um processo pode estar ativo1 a no monitor em um dado instante. Monitores constituem-se em um conceito de linguagem de programac~o, ou seja, o compilador recoa nhece que os monitores s~o especiais e pode manusear as chamadas do monitor diferentemente de outras a chamadas. Monitores, apesar de elegantes na manutenc~o de mutua exclus~o, t^m aplicac~o restrita a a e a pois raras s~o as linguagens de programac~o que os incorporam. a a

Soluc~o de Peterson Esta soluc~o e obtida pela combinac~o das ideias de variaveis LOCK e TURN, a a a Instruc~o TSL Esta proposta requer suporte de hardware. Ela utiliza uma instruc~o da forma TSL a a (Test and Set Lock) presente em muitos processadores. Esta instruc~o permite a implementac~o de a a variaveis LOCK cujo teste e atualizac~o s~o at^micos (em outras palavras, a instruc~o TSL e indivis vel a a o a mesmo frente a interrupc~es de hardware ). o

2.3 Comunicac~o Interprocessos a


Muitos autores consideram os mecanismos de exclus~o mutua apresentados acima como formas de a processos se comunicarem. Entretanto, preferimos considerar tais mecanismos como de sincronizac~o a interprocessos, usando o termo comunicac~o apenas quando ocorrer interc^mbio de informac~o entre a a a processos. Sincronizac~o e procedimento de controle, normalmente usado para garantir mutua exclus~o a a e gerenciar a competic~o entre os processos. Comunicac~o, por sua vez, visa promover a cooperac~o a a a entre os processos.

2.2.2 Mutua Exclus~o com Espera Bloqueada a

Ser~o apresentados a seguir alguns mecanismos de garantia de mutua exclus~o que bloqueiam os a a processos quando tentam executar uma regi~o cr tica \ocupada". S~o mais e cientes que os anteriores, a a posto que processos bloqueados n~o competem pela CPU. a do par sleep e wakeup. sleep e uma chamada de sistema que muda o estado de um processo em execuc~o para bloqueado. Um processo bloqueado volta a tornar-se ativo quando outro processo o a desbloqueia atraves da chamada wakeup. O metodo e o mesmo que emprega variaveis LOCK operadas por instruc~es TSL, exceto que quando a variavel apresenta valor 1, o processo executa sleep. O o processo que altera o valor de LOCK para 0 ao sair da regi~o cr tica e o responsavel por ativar um a processo bloqueado (via wakeup). Infelizmente, deixar ao programador a responsabilidade da execuc~o a destas chamadas pode levar a um estado onde todos os processos encontram-se bloqueados | uma situac~o denominada deadlock. a

Passagem de Mensagem Este metodo de comunicac~o entre processos usa duas chamadas de sisa tema, send (que envia umamensagem a um processo destino) e receive (que recebe uma mensagem de um processo fonte). Destino e fonte de mensagens s~o bu ers alocados pelos processos para ns a de envio e recepc~o de mensagens. Mensagens s~o estruturas cujo conteudo e interpretado unicamente a a pelos processos emissor e receptor da mensagem. Compartilhamento de Dados Processos podem se comunicar atraves do compartilhamento de uma
area comum onde dados podem ser escritos por um e lidos por outro processo. O acesso a esta area comum deve ser disciplinado por um mecanismo de mutua exclus~o (tipicamente semaforos) ou tornando a as instruc~es de leitura e gravac~o at^micas. Duas primitivas s~o necessarias, STORE (que grava dados na o a o a posic~o compartilhada especi cada) e FETCH (que acessa dados da posic~o compartilhada especi cada). a a

Sleep e Wakeup Um dos metodos mais simples de implementac~o da espera bloqueada e a utilizac~o a a

Semaforos Nesta abordagem, o bloqueio ou reativac~o de processos n~o e realizada diretamente pelo a a

usuario, mas atraves variaveis do tipo semaforos, que contam o numero de vezes que a operac~o wakeup a foi realizada. Duas operac~es, DOWN e UP s~o de nidas. A operac~o DOWN veri ca se o valor do o a a semaforo e maior que 0. Se o for, decrementa este valor e continua. Se o valor e 0, o processo e bloqueado. A operac~o UP incrementa o valor do semaforo. Se um ou mais processos estiverem bloqueados sobre a aquele semaforo, um deles e escolhido pelo sistema para completar a operac~o DOWN (emitindo-lhe um a wakeup). As operac~es com semaforos s~o at^micas ou indivis veis, implementadas com instruc~es TSL. o a o o

de troca de mensagens que estrutura processos como servidores ou clientes. Um processo servidor disp~e o de um conjunto de servicos que s~o disponibilizados para outros processos (atraves de uma rotina REa GISTER RPC). Um processo cliente pode evocar um destes servicos como se evocasse um procedimento local, passando par^metros para sua execuc~o se for o caso, atraves de uma rotina CALL RPC. Recea a bida a requisic~o, o servidor executa o servico e retorna os resultados ao cliente. O envio e recepc~o de a a par^metros e retornos se da por troca de mensagens, que cam transparentes para o programador. a

Chamada de Procedimentos Remotos Chamada de procedimentos remotos (RPC) e uma forma

2.4 Escalonamento de Processos


Quando mais de um processo esta ativo (pronto para executar), cabe ao sistema operacional decidir qual tera a posse da CPU. A parte do sistema operacional que toma esta decis~o e chamada escalonador a e o algoritmo utilizado e o algoritmo de escalonamento. Varios criterios devem ser observados por um algoritmo de escalonamento: progresso: garantir que cada processo tenha acesso a CPU
1

Monitores Semaforos tornam simples a protec~o de recursos compartilhados, mas n~o garantem a a

que n~o va haver deadlocks : a troca na ordem da chamada das primitivas pode gerar uma situac~o de a a bloqueio mutuo. Monitores s~o uma proposta de mecanismo de sincronizac~o de alto n vel. Um monitor a a e uma colec~o de procedimentos, variaveis e estruturas de dados agrupados em um bloco. Os processos a podem acessar os procedimentos do monitor mas n~o suas estruturas internas. Monitores apresentam a c 1996

Executando qualquer um de seus procedimentos.

10

DCA/FEEC/UNICAMP

11

Cardozo, Magalh~es, Faina & Ricarte a

Sistemas Operacionais

Processos

Processos em Unix 2.5]

e ci^ncia: manter a CPU ocupada praticamente 100% do tempo e tempo de resposta: minimizar o tempo de resposta na execuc~o dos processos, principalmente os a
interativos (editores, planilhas, etc)

2.5 Processos em Unix


Unix e um sistema que suporta multiprogramac~o, e como tal pode ter diversos processos rodando a simultaneamente | alguns processos de usuarios, outros processos do nucleo do sistema. Cada processo corresponde a execuc~o de um programa e consiste de um conjunto de bytes que a CPU interpreta como a instruc~o de maquina, dado e pilha. O processo executa uma sequ^ncia de instruc~es que e auto-contida a e o e que n~o salta para um outro processo. Ele l^ e escreve seus dados nas suas areas de dado e pilha, mas a e n~o pode ler ou escrever nas areas de dado e pilha de outro processo. Os processos comunicam com a outros processos e com o resto do sistema atraves de chamadas de sistema. Do ponto de vista pratico, um processo em UNIX e uma entidade criada pela chamada fork, que cria um novo processo pela duplicac~o do estado de um processo que executa a chamada. O processo a que chamou fork e identi cado como \processo pai" e o processo criado por esta chamada e identi cado como \processo lho". Para que um processo lho execute um programa diferente do processo pai, uma chamada do sistema exec deve ser invocada apos o fork. Todo processo tem um unico pai mas pode ter varios lhos, determinando assim uma hierarquia de processos. Exceto pelo primeiro processo (processo 0, na raiz da hierarquia), qualquer outro processo e criado atraves da chamada fork. O processo 0 e um processo especial criado quando da iniciac~o do a sistema (boot). Apos criar o processo 1, conhecido como init, o processo 0 torna-se o processo swapper. O processo 1 e ancestral de qualquer outro processo no sistema, possuindo uma relac~o especial com a estes. O contexto de um processo e o estado de nido pelo seu texto correspondendo aos valores das suas variaveis globais e estruturas de dados, os valores dos registros de maquina usados, os valores armazenados no seu slot na tabela de processos e o conteudo das suas pilhas de usuario e nucleo. Quando o nucleo decide executar um novo processo realiza-se uma mudanca de contexto. Quando da realizac~o de uma mudanca de contexto o nucleo salva informac~es su cientes de modo a a o que posteriormente ele possa recuperar o contexto do processo anterior e continuar a sua execuc~o. Da a mesma forma, quando da mudanca do modo usuario para o modo nucleo, o nucleo salva as informac~es o necessarias para que o processo possa retornar ao modo usuario e continuar a execuc~o. Neste ultimo a caso, temos uma mudanca de modo e n~o de um chaveamento de contexto. a A vida de um processo pode ser representada por um conjunto de estados (Figura 2.1): executando no modo usuario executando no modo nucleo pronto ou bloqueado (dormindo). O nucleo protege a sua consist^ncia permitindo chaveamento de contexto apenas quando o processo transita do estado e \executando no modo nucleo" para o modo \bloqueado". O nucleo tambem eleva o n vel de execuc~o do a processador quando da execuc~o de regi~es cr ticas de modo a impedir interrupc~es que possam provocar a o o inconsist^ncias em suas estruturas de dados. O escalonador de processo realiza, periodicamente, a e \preempc~o" de processos executando no modo usuario de forma a que os processos n~o monopolizem a a a CPU.

tempo de espera: minimizar o tempo de espera de servicos n~o interativos (compilac~o, impress~o, a a a
etc)

vaz~o: maximizar o numero de processos executados por hora. a


E importante observar que alguns desses objetivos s~o contraditorios. Se um algoritmo favorece a o escalonamento de processos interativos certamento estara comprometendo os n~o interativos. Na a sequ^ncia apresentaremos alguns algoritmos de escalonamento. e

Escalonamento Round Robin Este e o mais antigo e simples algoritmo de escalonamento. Cada

processo e executado por um intervalo de tempo (quantum). Se o processo ainda estiver executando ao nal do quantum, ele e suspenso e a CPU e alocada a outro processo. Se o processo acabar ou for bloqueado antes do nal do quantum, a CPU tambem e passada a outro processo. O tamanho do quantum e cr tico nesta abordagem. Se for muito pequeno, diminui a e ci^ncia da CPU, pois a alocac~o e a da CPU para outro processo implica em uma sobrecarga de processamento para o chaveamento de recursos entre os processos. Se for muito grande, degrada a resposta para os processos interativos.

sos s~o de igual import^ncia. Certas aplicac~es, como controle de processos industriais, demandam a a o um algoritmo de escalonamento com prioridades | desta forma, e poss vel tratar adequadamente situac~es de emerg^ncia. O princ pio do escalonamento por prioridades e que cada processo tem associada o e uma prioridade, e processos com prioridades superiores devem ser executados primeiro. Para prevenir que processos de alta prioridade executem inde nidamente, o escalonador pode diminuir a prioridade dos processos com o aumento de seu respectivo tempo de execuc~o | um processo conhecido como a envelhecimento.

Algoritmos com Prioridades O algoritmo Round Robin faz a considerac~o que todos os procesa

Multiplas Filas Este e um algoritmo que de ne classes com prioridades. Processos na classe de

menor prioridade s~o executados por um quantum processos na classe seguinte, por dois quanta na a proxima classe por quatro quanta, e assim por diante. Quando um processo utiliza todos os quanta a ele alocados, o mesmo e interrompido e sua classe tem a prioridade diminu da. Este algoritmo diminui o numero de comutac~es da CPU entre os processos ativos. o

Tarefas Pequenas Primeiro Este algoritmo e designado para aplicac~es n~o interativas, onde o o a Algoritmo Policy-Driven Este algoritmo particiona a CPU de forma equ^nime entre os usuarios a
n =n

tempo medio de execuc~o e conhecido a priori. O algoritmo de ne que as tarefas menores devem ser a executadas primeiro. Prova-se que esta pol tica minimiza o tempo medio de espera dos jobs.

2.6 Processos em MS-DOS


Assim como Unix, MS-DOS tem um processo (command.com) que comeca a executar quando o sistema e iniciado e controla a interac~o entre entre o sistema e o usuario. Entretanto, ha uma diferenca a fundamental entre os modelos de execuc~o nos dois sistemas. Como MS-DOS n~o suporta multiproa a gramac~o, quando um processo lho e iniciado a partir de command.com ele passa a ter controle total a sobre a maquina. Ao contrario do que acontece em Unix, n~o e poss vel executar processos indepena dentes simultaneamente em uma mesma maquina. Quando um processo lho e iniciado, o processo pai
DCA/FEEC/UNICAMP 13

(n~o entre os processos). O algoritmo de ne que se existirem usuarios ligados ao sistema, cada usuario a devera receber 1 do poder da CPU. Para isto, o sistema deve manter informac~es do tempo de CPU o que cada usuario ja disp^s desde que entrou no sistema, e do instante de tempo que cada usuario ligou-se o ao sistema.
12

c 1996

Cardozo, Magalh~es, Faina & Ricarte a

Sistemas Operacionais

Processos

Processos em MS-DOS 2.6]

Executando em Modo Usurio

chamada de sistema ou interrupo

retorno

Executando em Modo Ncleo

interrupo/retorno 2

um apontador para o PSP do processo corrente. 3. Carregar o codigo binario na primeira posic~o apos o PSP. a 4. Iniciar a execuc~o do programa. a Escalonamento da CPU tambem e simples. Como so ha um processo ativo, este processo retem a posse da CPU o tempo todo, a n~o ser quando um processo TSR toma o controle da execuc~o. a a

escalonado aguardando evento 3 evento Pronto

Bloqueado

Figura 2.1: Estados de um processo deve car suspenso aguardando o m da execuc~o do processo lho. a MS-DOS tem dois tipos de arquivos executaveis binarios, e ha correspondentemente dois tipos de processos. Um arquivo com extens~o .com n~o tem nenhum cabecalho e ocupa um unico segmento a a combinando texto, dados e pilha, ate o limite maximo de 64 KBytes. O conteudo do arquivo e uma imagem exata do codigo executavel. Embora o segmento n~o possa ocupar mais do que 64 KBytes, o a processo recebe para si toda a memoria dispon vel. Uma tentativa de iniciar um novo processo lho nesta situac~o iria falhar por falta de memoria, a n~o ser que o programador explicitamente libere a a a porc~o da memoria que ele n~o ira usar para o sistema operacional com uma chamada do sistema. a a O outro tipo de arquivo executavel tem extens~o .exe. O processo criado por este tipo de arquivo pode a ter diversos segmentos: texto, dados, pilha e segmentos extras. Um arquivo .exe incorpora informac~o a de relocac~o, e pode ser relocado enquanto carregado. MS-DOS diferencia estes dois tipos de arquivo a pelo conteudo de seus dois primeiros bytes, e n~o pela extens~o do nome do arquivo. a a Todo processo em MS-DOS tem um bloco de 256 bytes, o PSP (Program Segment Pre x), que descreve informac~o basica para o controle do processo, tal como tamanho do programa, apontador a para o bloco do ambiente, apontador para o processo pai, e o endereco da rotina que sera invocada caso haja uma interrupc~o do usuario (Control-C). a Normalmente, quando um processo encerra sua execuc~o, o espaco em memoria ocupado por ele a e retomado pelo sistema e o processo deixa de existir. Uma alternativa permitida por MS-DOS e a sa da de um processo que mantem sua imagem em memoria, mesmo sem ser executado. Este tipo de processo, conhecido como TSR (Terminate and Stay Resident), e usualmente reativado por uma combinac~o especial de teclas. A forma pela qual MS-DOS permite que isto aconteca e atraves da a modi cac~o, pelo proprio processo do usuario, de rotinas que ir~o tratar interrupc~es de teclado. a a o A ger^ncia de processos em MS-DOS e simples. Quando um processo requer o carregamento e e execuc~o de um outro programa, os seguintes passos s~o executados pelo sistema operacional: a a 1. Encontrar um bloco de memoria grande o su ciente para o processo. Para um arquivo .exe, esta informac~o esta contida no cabecalho para arquivos .com, toda a memoria dispon vel e alocada a para o processo. 2. Contruir o PSP nos primeiros 256 bytes da area alocada. Uma variavel global do sistema mantem
14

c 1996

DCA/FEEC/UNICAMP

15

Cardozo, Magalh~es, Faina & Ricarte a

Ger^ncia de Memoria e

Ger^ncia com Permuta 3.2] e

processos em memoria, a CPU devera estar ocupada o tempo todo. Este modelo e otimista, entretanto, pois assume que os 5 processos nunca estejam esperando por E/S ao mesmo tempo.

Cap tulo 3 Ger^ncia de Memoria e


A parte do sistema operacional que gerencia a memoria e chamada de gerenciador de memoria. Dentre outras tarefas, o gerenciador de memoria monitora quais partes da memoria est~o em uso e a quais est~o dispon veis aloca e libera memoria para os processos gerencia a permuta de processos entre a memoria principal e secundaria (quando a memoria principal n~o e capaz de abrigar todos os processos). a Sistemas de ger^ncia de memoria podem ser divididos em duas classes: aqueles que mant^m os proe e cessos xos em memoria primaria e aqueles que movem processos entre a memoria principal e secundaria (tipicamente disco) durante a execuc~o, neste caso baseando-se em tecnicas de swapping (permuta) ou a paginac~o. a

3.1.3 Multiprogramac~o com Partic~es Fixas a o

Se adotarmos a estrategia de admitir mais de um processo na memoria por vez, devemos estabelecer uma estrategia de organizac~o da memoria. A estrategia mais simples consiste em dividir a memoria a em n (possivelmente diferentes) partic~es. o Quando um processo inicia, este pode ser colocado em uma la de entrada para ocupar a menor o a partic~o de tamanho su ciente para acomoda-lo. Desde que as partic~es s~o xas, qualquer espaco em a uma partic~o n~o usado pelo processo e perdido. A Figura 3.1(a) apresenta este esquema de partic~o. a a a
partio 4
partio 4

700K

partio 3

partio 3

400K
partio 2
partio 2

3.1 Ger^ncia Sem Permuta e


O esquema mais simples poss vel de ger^ncia de memoria consiste em ter-se somente um processo e na memoria durante toda a sua execuc~o. O usuario carrega um programa do disco (ou ta) para a a memoria, podendo este fazer uso de toda a maquina. Se a memoria for insu ciente, o programa simplesmente tem sua execuc~o rejeitada. a Quando o sistema e organizado dessa maneira, somente um processo pode estar em execuc~o por vez. a O usuario entra com um comando no terminal, e o sistema operacional carrega o programa requerido do disco para a memoria e o executa. Quando o processo termina, o sistema operacional reassume a CPU e espera por um novo comando para carregar um outro processo na memoria ja liberada pelo primeiro. Embora a monoprogramac~o seja usada em pequenos computadores, em grandes computadores a a a com multiplos usuarios ela e proibitiva. Multiprogramac~o, alem de suportar processos simult^neos de diversos usuarios, tambem permite utilizar melhor a CPU durante acessos de um processo a dispositivos de entrada e sa da. E comum para um processo permanecer em um loop lendo um bloco de dados de um arquivo em disco e ent~o realizando alguma computac~o sobre o conteudo dos blocos lidos. Se for a a gasto 40 ms para ler um bloco e a computac~o demanda apenas 10 ms, sem a multiprogramac~o a CPU a a estara desocupada esperando pelo acesso ao disco durante 80% do tempo. Quando a multiprogramac~o e usada, o percentual de utilizac~o da CPU aumenta. A grosso modo, a a se a media dos processos utilizam CPU somente 20% do tempo que permanecem na memoria, com 5
16

200K
partio 1
partio 1

3.1.1 Monoprogramac~o a

100K
sistema operacional
sistema operacional

(a)

(b)

Figura 3.1: Organizac~es com partic~es xas: (a) Partic~es de memoria xa com las de entrada o o o separadas para cada partic~o (b) partic~o de memoria xa com uma la simples de entrada a a A desvantagem de se ordenar os processos que chegam em las separadas torna-se aparente quando a la para a maior partic~o esta vazia, mas a la para a menor partic~o esta cheia, como no caso a a das partic~es 1 e 4 na Figura 3.1(a). Uma organizac~o alternativa e manter uma la unica como na o a Figura 3.1(b). Toda vez que uma partic~o e liberada, a mesma e alocada ao primeiro processo da a la. Uma vez que e indesejavel gastar uma partic~o grande com um processo pequeno, uma estrategia a mais e caz e procurar em toda la de entrada a maior tarefa para a partic~o liberada. Note que o a ultimo algoritmo discrimina os processos pequenos, quando e usualmente desejavel dar a eles o melhor tratamento, n~o o pior. a

3.1.2 Multiprogramac~o e Uso da Memoria a

3.2 Ger^ncia com Permuta e


Num sistema operando em batch, a organizac~o da memoria em partic~es xas e simples e efetiva. a o Quanto mais jobs estiverem na memoria, mais a CPU estara ocupada e n~o ha raz~o para usar algo a a mais complicado. Com time-sharing, a situac~o e diferente: ha normalmente mais usuarios que memoria a
DCA/FEEC/UNICAMP 17

c 1996

Cardozo, Magalh~es, Faina & Ricarte a

Sistemas Operacionais

Ger^ncia de Memoria e

Ger^ncia com Permuta 3.2] e

para armazenar os seus processos, sendo ent~o necessario mover temporariamente processos para disco. a Obviamente, para continuar sua execuc~o, um processo movido para disco deve ser trazido novamente a para a memoria. Outro aspecto fundamental nesta abordagem de ger^ncia e como controlar onde ha espaco dispon vel e na memoria. As duas estrategias mais utilizadas s~o ger^ncia de espaco livre por mapa de bits ou por a e listas encadeadas, que ser~o descritas na sequ^ncia. a e

3.2.1 Multiprogramac~o com Partic~es Variaveis a o


Em princ pio, um sistema que utiliza swapping pode ser baseado em partic~es xas. Sempre que o um processo e bloqueado, ele pode ser movido para o disco e um outro processo trazido do disco para a sua partic~o em memoria. Na pratica, partic~es xas s~o pouco atrativas quando a area de memoria e a o a escassa pois muita memoria e perdida por programas muito menores que o tamanho da partic~o. Assim a sendo, um novo sistema de ger^ncia de memoria foi desenvolvido, chamado ger^ncia com partic~es e e o variaveis. Quando partic~es variaveis s~o usadas, o numero e tamanho de processos na memoria varia dinamio a camente. A Figura 3.2 mostra como partic~es variaveis trabalham. Inicialmente, somente o processo A o esta na memoria. Ent~o o processo B e C s~o criados ou trazidos do disco. Na Figura 3.2(d) o processo a a A termina ou e movido para o disco. Ent~o o processo D inicia e B termina. Finalmente, processo E a inicia.

para compactar toda a memoria. Certos mainframes utilizam hardware especial para a compactac~o a da memoria. Um ponto negativo neste metodo de ger^ncia e saber o quanto de memoria alocar para um processo. e Se os processos s~o criados com um tamanho xo que permanece constante ao longo de sua execuc~o, a a ent~o a alocac~o e simples: aloca-se exatamente o necessario ao tamanho do processo, nem mais nem a a menos. Na pratica, os segmentos de dados e pilha de um processo tendem a crescer durante a sua execuc~o. a Alocac~o din^mica de memoria e recurs~o (presentes em praticamente em todas as linguagens modera a a nas de programac~o) s~o exemplos t picos de crescimento destes segmentos. Se o processo necessitar a a expandir sua memoria e existir um buraco adjacente, simplesmente o buraco pode vir a ser incorporado ao espaco de enderecamento do processo. De outra forma, se o processo esta adjacente a outro processo, o primeiro devera ser movido para um buraco grande o su ciente para armazena-lo, ou um ou mais processos ter~o que ser movidos para disco com o intuito de criar espaco na memoria. Se o processo n~o a a puder crescer na memoria e a area do disco reservada para abrigar processos permutados estiver cheia, o processo deve ser terminado. Com um mapa de bits, a memoria e dividida em unidades de alocac~o, desde um pequeno numero a de palavras ate muitos quilobytes. Para cada unidade de alocac~o existe um bit no mapa de bits, que a e 0 se a unidade estiver livre e 1 caso esteja ocupada (ou vice-versa). A Figura 3.3 mostra parte da memoria e o correspondente mapa de bits.
A 8 B C 16 D 24 ....

3.2.2 Ger^ncia com Mapa de Bits e

C
11111000 11111111 10011111 (a)

B E

A
sistema operacional

A
sistema operacional

D
sistema operacional

D
sistema operacional

D
sistema operacional
P 0 A

(b) B 5 B 6 8 p 9 14 C P 15 17 B 18 19 D P 20 25

sistema operacional

sistema operacional

(a)

(b)

(c)

(d)

(e)

(f)

(g)
P: processo B: buraco (c)

Figura 3.2: Organizac~o com swapping: mudancas na alocac~o de memoria com processos chegando e a a deixando a memoria (regi~es escuras representam espaco n~o usado) o a A principal diferenca entre partic~es xas da Figura 3.1 e partic~es variaveis da Figura 3.2 e que o o o numero, a localizac~o e o tamanho das partic~es variam dinamicamente ao longo do tempo. A a o exibilidade de n~o se ter um numero xo de partic~es aumenta a utilizac~o da memoria, mas tambem a o a complica a tarefa de alocar e liberar a memoria, bem como gerencia-la. E poss vel combinar todos os buracos disjuntos num unico espaco dispon vel agrupando-se todos processos para um lado da memoria. Esta tecnica e conhecida como compactac~o da memoria. Ela n~o a a e empregada com frequ^ncia pelo fato de requerer muito tempo de CPU. Por exemplo, um microcome putador com 1 MByte de memoria e que pode copiar 1 Byte por s (1 MByte/s), gasta um segundo
18

Figura 3.3: Organizac~o com mapa de bits: (a) parte da memoria com 5 processos e 3 buracos (as a marcas mostram as unidades de alocac~o da memoria e as regi~es escuras est~o livres) (b) mapa de a o a bits correspondente (c) a mesma informac~o como uma lista ligada a O tamanho de cada unidade de alocac~o e uma importante caracter stica de projeto. Para pequenas a unidades de alocac~o tem-se um mapa de bits maior. Entretanto, mesmo com uma unidade de alocac~o a a t~o pequena como 4 bytes, cada 32 bits de memoria requer somente 1 bit no mapa (3% da memoria). a Se a unidade de alocac~o for escolhida grande, o mapa de bits sera pequeno, mas memoria consideravel a pode ser desperdicada se o tamanho do processo n~o for um multiplo exato da unidade de alocac~o. a a
DCA/FEEC/UNICAMP 19

c 1996

Cardozo, Magalh~es, Faina & Ricarte a

Sistemas Operacionais

Ger^ncia de Memoria e

Memoria Virtual 3.3]

Um mapa de bits (ocupando uma porc~o xa da memoria) prov^ uma maneira simples de gerenciar a e memoria, uma vez que o tamanho do mapa de bits depende somente do tamanho da memoria e do tamanho da unidade de alocac~o. O problema principal com isto e que quando se decide trazer um a processo de k unidades de alocac~o para a memoria, o gerenciador de memoria deve pesquisar no mapa a de bits uma sequ^ncia de k consecutivos bits 0 no mapa. Esta operac~o e lenta, raz~o pela qual os e a a mapas de bits s~o evitados na pratica. a Outra maneira de gerenciar a memoria e manter uma lista de alocac~es e segmentos de memoria o livre, onde um segmento e um processo ou um buraco entre dois processos. A memoria da Figura 3.3(a) e representada na mesma gura (c) como uma lista encadeada de segmentos. Cada entrada da lista especi ca um buraco (B) ou um processo (P), contendo o endereco onde comeca, onde termina (ou tamanho do bloco), e um ponteiro para a proxima entrada da lista. Neste exemplo, a lista de segmentos e mantida ordenada por enderecos. A vantagem desse metodo e que quando o processo termina ou e movido para o disco, torna-se simples combinar o buraco criado com buracos adjacentes. Quando processos e buracos s~o mantidos na lista ordenada por enderecos, varios algoritmos podem a ser usados para alocar memoria, a m de criar ou permutar processos. Tais algoritmos s~o evocados a quando o gerenciador de memoria necessita um segmento de memoria de bytes.
M

Todos os quatro algoritmos podem melhorar seus desempenhos mantendo-se em separado listas para processos e buracos. Neste caso, todos devotam suas energias para inspec~o de buracos, n~o de a a processos. O preco pago por esse aumento de velocidade na alocac~o e uma complexidade adicional e a diminuic~o de velocidade quando se trata de liberar memoria, uma vez que um segmento livre tem de a ser removido da lista de processos e inserido na lista de buracos. Novamente, a ine ci^ncia esta em se e determinar poss veis fus~es. o Os algoritmos apresentados acima mant^m o rastreamento da memoria principal. Assim, quando e processos s~o permutados do disco para a memoria, o sistema pode alocar espaco em memoria para eles. a Em alguns sistemas, quando um processo esta na memoria, nenhum espaco em disco e a ele reservado. Quando for movido da memoria, espaco deve ser alocado na area de disco para abriga-lo (portanto, em cada troca o processo pode residir em lugares diferentes no disco). Neste caso, os algoritmos para ger^ncia de espaco para permuta s~o os mesmos usados para ger^ncia da memoria principal. e a e Em outros sistemas, quando um processo e criado, um espaco para permuta e alocado em disco (usando um dos algoritmos descritos acima). Sempre que um processo em memoria da lugar a outro processo, ele e colocado no espaco em disco a ele previamente alocado. Quando um processo termina, o seu espaco para permuta em disco e desalocado. Esta tecnica e mais e ciente que a anterior pois uma unica alocac~o de espaco em disco por processo e necessaria (lembre-se que um processo pode a ser permutado varias vezes durante a sua execuc~o). Entretanto, uma area maior de disco deve ser a reservada para swapping.

3.2.3 Ger^ncia com Listas Encadeadas e

3.2.4 Alocac~o de Espaco para Permuta a

Algoritmo First- t E o algoritmo mais simples. O algoritmo procura ao longo da lista de segmentos
M N > M M N M

ate encontrar um buraco de tamanho maior ou igual a . Caso o buraco tenha tamanho ,o buraco e quebrado em dois segmentos: um para o processo (de tamanho ) e o outro para a memoria n~o usada (de tamanho ; ). First- t e um algoritmo rapido pois naliza a busca o mais cedo a poss vel. posic~o da lista onde o ultimo buraco foi alocado. Da proxima vez que e chamado, o algoritmo comeca a a procurar a partir deste ponto.
M

3.3 Memoria Virtual


Desde o in cio da informatica, o tamanho dos programas vem superando a quantidade de memoria dispon vel para abriga-los. A soluc~o usualmente adotada era dividir o programa em partes, chamados a overlays, que eram mantidas em disco e permutadas para a memoria pelo sistema operacional. Overlays apresentavam um problema: a partic~o do programa era deixada a cargo do programador. a Um metodo que foi desenvolvido para deixar o particionamento do programa a cargo do sistema operacional veio a ser conhecido como memoria virtual. A ideia basica e que a combinac~o do tamanho do a programa, dados e pilha, pode exceder a quantia de memoria f sica dispon vel. O sistema operacional mantem aquelas partes do programa correntemente em uso na memoria principal e o resto no disco. Memoria virtual pode tambem trabalhar em um sistema com multiprogramac~o. De fato, memoria a virtual e multiprogramac~o est~o intimamente relacionadas. Enquanto um programa esta esperando a a que parte de seu espaco de enderecamento seja trazido a memoria, o programa e bloqueado, aguardando E/S. Ate que a operac~o de E/S seja completada, a CPU pode ser direcionada para outro processo. a A maioria dos sistemas com memoria virtual usa uma tecnica chamada paginac~o. Em qualquer a computador existe certo conjunto de enderecos de memoria que programas podem referenciar | seu espaco de enderecamento. Enderecos podem ser gerados por exemplo usando indexac~o, registradores a base ou registradores de segmento. Estes enderecos gerados pelos programas s~o chamados enderecos virtuais e formam o espaco virtual a de enderecamento do processo. Em computadores sem memoria virtual, o endereco virtual e colocado
DCA/FEEC/UNICAMP 21

Algoritmo Next- t Este algoritmo trabalha da mesma forma que o rst- t, exceto que guarda a

Algoritmo Best- t Este algoritmo procura pela lista inteira e toma o buraco de tamanho mais
M

proximo de . E um algoritmo lento e cria na memoria buracos pequenos que di cilmente ser~o a alocados. Entretanto, para grande, o best- t aumenta as chances de se encontrar na lista um buraco de tamanho adequado, posto que minimiza o uso buracos grandes para atender alocac~es pequenas. o Como um exemplo, considere a Figura 3.3. Se um bloco de tamanho 2 for solicitado, o algoritmo rst t alocara o buraco 5, e o best t o buraco 18. Por exemplo, seja uma tabela com n entradas, na qual a primeira e um ponteiro para a cabeca da lista de buracos de tamanho 4 KBytes, a segunda e um ponteiro para a cabeca da lista de buracos de tamanho 8 KBytes, a terceira de tamanho 12 KBytes, e assim sucessivamente. Com o quick- t, acha-se um buraco de tamanho requerido muito rapidamente, mas com a desvantagem de todos os esquemas de classi car os buracos por tamanho, a saber, quando um processo termina ou e permutado para disco, determinar seus vizinhos para uma poss vel fus~o e uma operac~o custosa. Se fus~es n~o forem feitas, a memoria a a o a rapidamente se fragmentara em um grande numero de pequenos buracos n~o utilizaveis. a
20

Algoritmo Quick- t Este algoritmo mantem listas separadas para tamanhos comumente requeridos.

3.3.1 Paginac~o a

c 1996

Cardozo, Magalh~es, Faina & Ricarte a

Sistemas Operacionais

Ger^ncia de Memoria e
espao de endereamento virtual (tabela) 0 2 1 1 2 6 8-12K 3 0 4 12-16K 4 16-20K 5 5 20-24K 6 X 7 X 8 X 9 5 10 X 11 7 12 X 13 X 14 X 15 X : pgina de 4 Kbytes X: pgina ausente (em disco) 28-32K 24-28K 7 6 4 3 4-8K 2 0-4K 1 espao de endereamento real (fsico) 0

Memoria Virtual 3.3]

diretamente no barramento de memoria e causa uma palavra da memoria f sica com mesmo endereco ser lida ou escrita. Quando memoria virtual e usada, os enderecos de memoria n~o v~o diretamente a a para o barramento de memoria. Ao inves disso, eles v~o a unidade de ger^ncia de memoria (Memory a e Management Unit, MMU), onde um hardware espec co mapeia os enderecos virtuais nos enderecos da memoria f sica como ilustrado na Figura 3.4.
processador

CPU endereo virtual MMU memria control. de disco

barramento endereo fsico

Figura 3.4: A posic~o e func~o da MMU a a Um exemplo de como este mapeamento trabalha e mostrado na Figura 3.5. Neste exemplo, temos a um computador que pode gerar enderecos de 16 bits, de 0 ate 64 KBytes. Estes s~o os enderecos virtuais. Este computador, entretanto, tem somente 32 KBytes de memoria f sica, assim, embora programas de 64K possam ser escritos, eles n~o podem ser carregados para a memoria na sua totalidade para serem a executados. Uma copia completa de um nucleo de imagem do programa, acima de 64K, deve estar presente no disco os pedacos podem ser trazidos para a memoria pelo sistema a medida que se tornem necessarios. O espaco de enderecamento virtual e dividido em unidades chamadas paginas. As unidades correspondentes na memoria f sica s~o chamadas page frames. As paginas e page frames s~o sempre do a a mesmo tamanho. Neste exemplo elas s~o de 4K, mas tamanhos de paginas de 512 bytes, 1K, e 2K s~o a a comumente usados. Com 64K de espaco de endereco virtual e 32K de memoria f sica, temos 16 paginas e a e 8 page frames. Transfer^ncias entre memoria e disco s~o sempre feitas em unidades de paginas. Quando o programa tenta acessar o endereco 0, o endereco virtual 0 e enviado para a MMU. Ela reconhece que este endereco cai na pagina 0 (0 a 4095), o qual, de acordo com seu mapeamento e a page frame numero 2 (8192 ate 12287). Ele ent~o transforma o endereco para 8192 e coloca o endereco 8192 a no barramento. A tabela de memoria nada sabe a respeito da MMU, e apenas v^ uma requisic~o para e a leitura ou escrita no endereco 8192, a qual e respeitada. Assim, a MMU mapeou todo endereco virtual entre 0 e 4095 em endereco f sico de 8192 a 12287. Uma tentaiva de acessar uma pagina n~o mapeada provoca uma falta de pagina (page fault). Neste a caso, o sistema operacional libera um page frame e escreve seu conteudo de volta no disco. Ele ent~o a busca a pagina referenciada para o page frame liberado, atualiza o mapa, e retorna a instruc~o intera rompida. Paginac~o prov^ uma tecnica para implementac~o de um grande espaco enderecavel numa memoria a e a f sica limitada. Este espaco de enderecamento e unidimensional, pois a posic~o de memoria e identi cada a por um unico valor que vai de 0 ate um endereco maximo. Esta caracter stica implica que programadores
22

Figura 3.5: Relac~o entre endereco virtual e endereco f sico de memoria, dada pela tabela de paginas a ser~o responsaveis por ter de lembrar onde foram posicionadas areas de dados com func~es muitas vezes a o distintas | por exemplo, para codigo e para tabelas de dados. Alem disto, o crescimento de uma area alem do previsto pode levar a uma situac~o de choque entre estas areas. a Para algumas aplicac~es, um espaco enderecavel bidimensional e mais conveniente. Esta alternativa o o a e suportada atraves do conceito de segmentac~o, onde posic~es de memoria s~o identi cadas por um a par (segmento, deslocamento). Esta abordagem de segmentac~o interpreta o espaco de memoria sob um a ponto de vista mais proximo da logica do programador | por exemplo, um segmento pode conter procedimentos, ou tabelas de dados. Como cada segmento tem um espaco de enderecamento independente dos outros, o crescimento de um segmento n~o afeta os demais. a A traduc~o de enderecos segmentados para enderecos f sicos ocorre de maneira similar a traduc~o a a de enderecos virtuais. O sistema deve manter uma tabela mapeando segmentos para os enderecos da memoria. Uma diferenca fundamental e que segmentos t^m dimens~es distintas, e portanto a informac~o e o a sobre o comprimento de um segmento tambem deve ser mantida. O fato de se trabalhar com partic~es de o tamanhos variaveis implica que apos um tempo de uso a fragmentac~o ira ocorrer, e pode ser necessario a aplicar mecanismos de compactac~o. a Uma forma de reduzir o problema de fragmentac~o mantendo-se o princ pio de segmentac~o e coma a binar este esquema com paginac~o | ou seja, cada segmento e dividido em paginas de tamanho xo, a que s~o trazidas para a memoria de acordo com a demanda. a Atraves do uso de segmentos e poss vel compartilhar trechos de codigo que s~o comuns entre diversas a aplicac~es. Isto e util, por exemplo, em sistemas de interfaces gra cas, onde grandes bibliotecas s~o o a responsaveis pela ger^ncia de sistemas de janelas. Alem disto, o uso de segmentos facilita tambem a e
DCA/FEEC/UNICAMP 23

3.3.2 Segmentac~o a

c 1996

Cardozo, Magalh~es, Faina & Ricarte a

Sistemas Operacionais

Ger^ncia de Memoria e

Algoritmos de Troca de Pagina 3.4]

protec~o de acesso a areas da memoria. a

3.4 Algoritmos de Troca de Pagina


Quando uma falta de pagina ocorre, o sistema operacional tem que escolher uma pagina para remover da memoria a m de dar lugar a que sera trazida do disco. Se a pagina a ser removida foi modi cada enquanto estava na memoria, ela deve ser reescrita no disco para manter a copia em disco atualizada. Se, todavia, a pagina n~o tiver sido alterada, a copia do disco ja esta atualizada, n~o sendo necessaria a a sua reescrita. A pagina a ser lida e simplesmente superposta a pagina retirada. Apesar de ser poss vel escolher uma pagina aleatoria para dar lugar a pagina em demanda, o desempenho do sistema e melhorado se for escolhida uma pagina pouco usada (referenciada). Se uma pagina muito usada e removida, ela provavelmente tera de ser trazida de volta em breve, resultando um esforco adicional. Algoritmos e cientes de troca de pagina visam minimizar este esforco. O melhor algoritmo de troca de paginas e facil de descrever mas imposs vel de implementar. No momento que ocorre uma falta de pagina, um certo conjunto de paginas esta na memoria. Uma dessas paginas sera referenciada em muitas das proxima instruc~es (a pagina contendo a instruc~o). Outras o a paginas n~o ser~o referenciadas antes de 10, 100, ou talvez 1000 instruc~es. Cada pagina pode ser rotua a o lada com o numero de instruc~es que ser~o executadas antes que a pagina seja inicialmente referenciada. o a O algoritmo da pagina otima simplesmente diz que a pagina com o maior rotulo deve ser removida, adiando-se o maximo poss vel a proxima falta de pagina. O unico problema com este algoritimo e que ele n~o e realizavel. No momento da falta de pagina, a o sistema operacional n~o tem como saber quando cada pagina sera referenciada. No entanto, uma a aplicac~o a posteriori deste algoritmo e util para comparar o desempenho de algoritmos realizaveis com a o melhor poss vel.

para distinguir paginas que n~o foram referenciadas recentemente daquelas que tenham sido. Quando a uma falta de pagina ocorre, o sistema operacional examina todas as paginas e as classi ca em quatro categorias baseado nos valores correntes de seus bits RM :

Classe 0 (00) Classe 1 (01) Classe 2 (10) Classe 3 (11)

n~o referenciada, n~o modi cada. a a n~o referenciada, modi cada. a referenciada, n~o modi cada. a referenciada, modi cada.

3.4.1 Troca Otima de Pagina

Ainda que as paginas na classe 1 parecam, a primeira vista, imposs veis de existir, elas ocorrem quando as paginas da classe 3 t^m seu bit R zerado pela interrupc~o do relogio. Interrupc~es de relogio n~o e a o a zeram o bit M porque esta informac~o e necessaria para determinar se uma pagina tera que ser reescrita a no disco ou n~o. a O algoritimo N~o Recentemente Usada (NRU) remove uma pagina aleatoria da classe n~o vazia a a de numerac~o mais baixa. A estrategia impl cita neste algoritmo e que e melhor remover uma pagina a modi cada que n~o foi referenciada pelo menos no ultimo tick de relogio, que uma pagina n~o modi cada a a mas muito usada. As caracter sticas principais do NRU e que ele e facil de entender, e ciente de se implementar, e gera um desempenho que, enquanto certamente n~o otimo, e geralmente tido como a adequado. O algoritmo de paginac~o First-In-First-Out (FIFO) e similar ao NRU. O sistema operacional a mantem uma lista de todas as paginas correntes na memoria, sendo a pagina da cabeca da lista a mais velha e a pagina do m a instalada mais recentemente. Em uma falta de pagina, a pagina da cabeca e removida e a nova pagina acrescentada no m da lista. Uma simples modi cac~o no FIFO para evitar o problema da retirada de uma pagina muito usada a e o algoritmo Segunda Chance. A ideia e primeiro examinar a pagina mais velha como uma v tima potencial. Se seu bit R e 0, a pagina e trocada imediatamente. Se o bit R e 1, o bit e zerado e a pagina e colocada no m da lista de paginas, como se estivesse acabado de chegar a memoria. Ent~o a pesquisa a continua. O que o Segunda Chance faz e procurar por uma pagina velha que n~o tem sido referenciada a no tick de relogio anterior. Se todas as paginas tiverem sido referenciadas, o algoritmo degenera-se e torna-se simplesmente um FIFO. Uma boa aproximac~o para o algoritmo otimo e baseada em uma observac~o comum que as paginas a a muito usadas nas ultimas instruc~es provavelmente ser~o usadas nas proximas instruc~es. Da mesma o a o forma, paginas que n~o t^m sido usadas por um longo tempo provavelmente continuar~o sem uso. Esta a e a observac~o sugere um algoritmo realizavel: quando ocorre uma falta de pagina, retira-se a pagina que a n~o tem sido usada por um tempo longo. Esta estrategia e chamada de Menos Recentemente Usada a (Least Recently Used, LRU). Embora o algoritmo LRU seja teoricamente realizavel, seu custo e alto. Para implementac~o coma pleta do LRU, e necessario manter uma lista ligada de todas as paginas em memoria, com a pagina mais recentemente usada no in cio e a menos recentemente usada no nal. A di culdade e que a lista deve
DCA/FEEC/UNICAMP 25

3.4.3 Troca da Pagina FIFO

3.4.2 Troca da Pagina N~o Recentemente Usada (NRU) a

Para permitir que o sistema operacional colete estat sticas sobre quais paginas est~o sendo usadas e a quais n~o est~o, muitos computadores com memoria virtual t^m 2 bits associados a cada pagina. Um a a e bit, R ou bit de refer^ncia, e ativado pelo hardware em qualquer leitura ou escrita de pagina. O outro e bit, M ou bit de modi cac~o, e ativado pelo hardware quando ha alterac~o no conteudo de uma pagina. a a Uma vez que um bit foi ativado, ele permanece ativado ate que o sistema operacional o desative por software. Se o hardware n~o disp~e dos bits R e M, eles podem ser simulados por software atraves das rotinas a o de tratamento de faltas de pagina e de protec~o. Quando um processo e iniciado, todas as suas entradas a de tabela de paginas s~o marcadas como ausentes na memoria. T~o logo uma pagina seja referenciada, a a uma falta de pagina ocorrera. O sistema operacional ent~o ativa o bit R (em sua tabela interna), muda a a entrada de tabela de paginas para apontar para a pagina correta com modo READ ONLY e reinicia a instruc~o. Se a pagina e subsequentemente escrita, uma falta de protec~o da pagina ocorrera, pemitindo a a ao sistema operacional ativar o bit M e mudar o modo da pagina para READ/WRITE. Os bits R e M podem ser usados para construir um algoritmo de paginac~o como se segue. Quando a um processo e iniciado, ambos os bits de pagina para todas estas paginas s~o declarados 0 pelo sistema a operacional. Periodicamente (a cada interrupc~o de relogio | tipicamente 20 mseg), o bit R e zerado, a
24

3.4.4 Troca da Pagina Menos Recentemente Usada (LRU)

c 1996

Cardozo, Magalh~es, Faina & Ricarte a

Sistemas Operacionais

Ger^ncia de Memoria e

Ger^ncia de Memoria no UNIX 3.5] e

ser atualizada em toda refer^ncia de memoria. Encontrar a pagina na lista, remov^-la de sua posic~o e e a corrente, e mov^-la para o in cio representa um esforco n~o desprez vel. e a Manipular uma lista ligada a toda instruc~o e proibitivo, ate mesmo em hardware. Entretanto, a ha outras maneiras de implementar LRU com um hardware especial. Vamos considerar o caminho mais simples primeiro. Este metodo requer equipar o hardware com um contador de 64 bits, C, que e automaticamente incrementado apos cada instruc~o. Alem disso, cada entrada na tabela de paginas a deve tambem ter um campo grande o bastante para conter o contador. Apos cada refer^ncia de memoria, e o valor corrente de C e armazenado na entrada da tabela de paginas para a pagina referenciada. Quando ocorre uma falta de pagina, o sistema operacional examina todos os contadores na tabela de paginas para achar o menor deles. A pagina correspondente e a menos recentemente usada. Agora vejamos um segundo algoritmo LRU, tambem em hardware. Para uma maquina com page frames, o LRU deve manter uma matriz de bits, inicialmente todos zero. Quando o page frame e referenciado, o hardware primeiro ativa todos os bits da linha para 1, atribuindo a todos os bits da coluna o valor 0. Em algum instante, a linha na qual o valor binario e menor, e a menos recentemente usada, a linha na qual o valor e o proximo superior e a segunda menos recentemente usada, e assim por diante.
N N N k k k

Simulac~o do LRU em Software a


Embora os algoritmos apresentados sejam realizaveis, eles s~o dependentes de hardware especial, e a s~o de pouco uso para o projetista de sistema operacional construindo um sistema para uma maquina a que n~o disp~e deste hardware. Uma soluc~o que pode ser implementada em software faz-se necessaria. a o a a Uma possibilidade e o algoritmo chamado de N~o Frequentemente Usada (NFU). O algoritmo NFU requer um contador em software associado a cada pagina, inicialmente zero. Em cada tick de relogio, o sistema operacional pesquisa todas as paginas na memoria. Para cada pagina, o bit R, que e 0 ou 1, e adicionado ao contador. Em suma, os contadores s~o uma tentativa de guardar a frequ^ncia com que a e cada pagina tem sido referenciada. Quando uma falta de pagina ocorre, a pagina com o menor contador e escolhida para substituic~o. a O principal problema com o NFU e que ele nunca esquece refer^ncias anteriores. Paginas muito e (e n~o mais) refenciadas no comeco da execuc~o de um programa permanecem com um contador alto a a ate o nal da execuc~o. Felizmente, uma pequena modi cac~o no NFU faz com que este seja capaz de a a simular LRU muito bem (o algoritmo modi cado e denominado Aging ). A modi cac~o tem duas partes. a Primeiro, os contadores s~o cada um deslocados 1 bit para a direita antes do bit R ser incrementado. a Segundo, o bit R e incrementado no bit mais a esquerda. Quando ocorre ume falta de pagina, a pagina de menor contador e removida. E obvio que a pagina que n~o tenha sido referenciada por, digamos, quatro ticks de relogio tera quatro zeros signi cativos a em seu contador, tendo assim um valor mais baixo que o contador de uma pagina que tenha sido referenciada nos quatro ultimos ticks de relogio. Uma diferenca entre LRU e Aging e que no ultimo os contadores t^m um numero nito de bits (tie picamente 8). Portanto, n~o podemos classi car as paginas segundo refer^ncias anteriores a capacidade a e do contador.

demanda. Este esquema requer do hardware a possibilidade de reiniciar uma instruc~o interrompida a pela aus^ncia de pagina cujo endereco foi referenciado na instruc~o. Assim que a pagina e trazida para e a a memoria, a instruc~o interrompida e reiniciada. a No esquema de paginac~o por demanda, o espaco virtual de enderecamento e muito superior a a quantidade de memoria f sica dispon vel, sendo limitado apenas pelo capacidade de enderecamento virtual da MMU. O nucleo mantem quatro estruturas principais para ns de ger^ncia de memoria: e tabela de paginas, tabela de frames, descritores de blocos e tabela de uso de swap. A tabela de paginas tem como entrada o numero da pagina. Deve-se notar que esta tabela tem dimens~o xa pois a quantidade de paginas e igual a dimens~o f sica de memoria dividida pelo tamanho a a da pagina. Cada entrada na tabela possui campos descrevendo, entre outras informac~es, o endereco o f sico de memoria que contem os dados referentes a pagina, a idade da pagina (i.e., por quantos ciclos esta pagina esta ativa na memoria), os ags de refer^ncia, modi cac~o, validade e protec~o. e a a A tabela de frames armazena dados adicionais a pagina, tais como o endereco f sico de memoria que contem os dados referentes a pagina, um contador de refer^ncia indicando quantos processos compartie lham esta pagina em memoria, e o numero do bloco alocado a pagina. Finalmente, a tabela de uso de swap e acessada tendo como ndice o dispositivo de swap e numero do bloco neste dispositivo. Esta tabela armazena apenas um contador de refer^ncia indicando quantas e paginas se utilizam deste bloco em disco. Deve-se notar que algumas informac~es s~o replicadas em tabelas distintas. Esta replicac~o visa o a a bene ciar a e ci^ncia do esquema de paginac~o, diminuindo o numero de consultas as tabelas. e a O processo paginador remove da memoria paginas n~o referenciadas pelos processos por um longo a tempo. Quando executado, o processo vai montando uma lista de paginas candidatas a permuta (Figura 3.6). O processo paginador zera o bit de refer^ncia da pagina, como descrito na Sec~o 3.4.2. Uma e a pagina e candidata a permuta quando seu contador de refer^ncia foi zerado ha um determinado numero e de passadas do processo paginador. Se uma pagina candidata a permuta e novamente referenciada, a mesma e removida da lista.
pgina referenciada (idade zerada) pgina pronta para swap pgina em memria pgina no refenciada (idade aumentando) 1 2 3 .... n

pgina em swap-in disco swap-out

Figura 3.6: Fila de paginas candidatas a permuta O processo paginador e ativado quando a quantidade de memoria dispon vel atinge um limite m nimo. Paginas s~o ent~o removidas da memoria e gravadas em disco ate que um limiar de memoria livre seja a a atingido. Ao gravar uma pagina em disco, o processo paginador apaga o bit de validade da pagina e decrementa seu contador de refer^ncia na tabela de frames. Se o contador de refer^ncia vai a zero (indicando que e e um unico processo estava utilizando a pagina), o nucleo adiciona o campo da tabela de frames referente a pagina numa lista de paginas livres. O conteudo de uma pagina na lista de paginas livres continua valido ate que o sistema associe a pagina a outro processo. Mesmo na lista de paginas livres, uma pagina
DCA/FEEC/UNICAMP 27

3.5 Ger^ncia de Memoria no UNIX e


Vers~es anteriores ao System V e ao 4.2 BSD empregavam um esquema de permuta (swapping) de o processos como pol tica de ger^ncia de memoria. Vers~es atuais empregam o esquema de paginac~o por e o a
26

c 1996

Cardozo, Magalh~es, Faina & Ricarte a

Sistemas Operacionais

Ger^ncia de Memoria e

Ger^ncia de Memoria em MS-DOS 3.6] e

pode ser revalidada (sem necessidade de traz^-la do disco) caso um processo torne a referencia-la. Neste e caso, a pagina e removida da lista de paginas livres, tendo seu bit de validade reativado.

alocac~o desejado | rst t, best t ou last t | e outro para indicar se a area de memoria superior a deve ou n~o ser inclu da na busca por um bloco de memoria livre. a

3.6 Ger^ncia de Memoria em MS-DOS e


A ger^ncia de memoria em MS-DOS apresenta um modelo razoavelmente complexo, em parte pela e arquitetura de memoria adotada pelos processadores da linha Intel 80x86 e em parte heranca de decis~es o tomadas pela IBM para a implementac~o dos primeiros PCs. a A complexidade imposta pela arquitetura dos processadores esta relacionada com a caracter stica de compatibilidade de codigo desenvolvido para os processadores antecessores, que deveriam ser capaz de ser executados em cada novo processador. Assim foi que, por exemplo, o 8086, apesar de ser capaz de enderecar 1 MByte de memoria, mantinha um esquema de enderecamento baseado em 16 bits a m de manter compatibilidade com codigo desenvolvido para o 8080. Desta forma, foi introduzido o conceito de segmentos com o limite maximo de 64 KBytes. Com relac~o as decis~es de projeto da IBM, decidiu-se que os primeiros 640 KBytes (a chamada area a o de memoria convencional ) seriam alocados ao espaco de enderecamento para programas, enquanto que o espaco de enderecamento entre 640K e 1 Mbyte (a area de memoria superior ) seria reservado para ROMs, RAM de v deo e enderecos de placas de entrada e sa da. Posteriormente (apos MS-DOS 5.0), foram introduzidos mecanismos para que processadores 80386 ou posteriores pudessem usar parte deste espaco de enderecamento | por exemplo, para alocar o programa do sistema operacional, drivers de dispositivos e programas TSR. Pelo esquema de segmentac~o do processador, e poss vel que um endereco seja gerado para o espaco a de 64 KBytes acima de 1 MByte. Este espaco tem o nome de area de memoria alta, ou HMA. Esta area pode ou ser mapeada para receber o programa do sistema operacional ou, em caso de sistemas que mantem compatibilidade estrita com o processador 8088, ser um espaco que equivale sicamente ao primeiro bloco de 64K, entre os enderecos 0 e 65519. Processadores posteriores ao 8088 podiam ter mais de 1 MByte de memoria f sica | 16M para o 80286 e 4 GBytes para 80386 e posteriores. A memoria acima de 1M e chamada de memoria estendida. MS-DOS n~o pode fazer uso diretamente desta area de memoria, uma vez que ele e executado no a chamado modo real do processador, que limita acesso ao primeiro megabyte apenas. Foram ent~o a desenvolvidos aplicativos que permitiam usar este espaco em MS-DOS como discos RAM e cache de bu ers, tais como RAMDRIVE.SYS e SMARTDRV.SYS, respectivamente. A m de se vencer a barreira de 640K com MS-DOS, dois esquemas foram de nidos. O sistema operacional suporta um esquema em software, atraves de chamadas de sistemas que permitem a execuc~o a de programas em overlays. O outro esquema, em hardware, partiu de um consorcio entre Lotus, Intel e Microsoft para desenvolver um esquema alternativo de memoria. Este esquema foi denominado sistema de memoria expandida (EMS), que permitiu que mesmo um processador 8088 pudesse utilizar grandes memorias f sicas. Neste caso, a memoria esta sicamente alocada em placas de extens~o de memoria a (desenvolvidas pela Intel), e pode ser acessada por aplicativos como Lotus 1-2-3 e o proprio MS-DOS. A placa de memoria expandida contem registros que mapeiam um espaco de enderecamento virtual de 640K para a memoria sicamente maior, permitindo que programas trabalhassem com dados acima do limite de 640 KBytes. Em processadores 80386 e posteriores, o proprio hardware suporta o mecanismo de paginac~o necessario, e a memoria estendida pode ser utilizada para simular a memoria expandida a sem necessidade de placas especiais. MS-DOS suporta chamadas do sistema para alocar e liberar blocos de memoria, assim como para modi car o tamanho de um bloco ja alocado. Ha tambem um mecanismo para especi car o tipo de
28

c 1996

DCA/FEEC/UNICAMP

29

Cardozo, Magalh~es, Faina & Ricarte a

Sistema de Arquivos

Projeto do Sistema de Arquivos 4.2]

Cap tulo 4 Sistema de Arquivos


A parte mais vis vel de um sistema operacional e o seu sistema de arquivos. Programas aplicativos utilizam o sistema de arquivos (atraves de chamadas de sistema) para criar, ler, gravar e remover arquivos. Usuarios utilizam interativamente o sistema de arquivos (atraves de shell ) para listar, alterar propriedades e remover arquivos. A conveni^ncia e facilidade de uso de um sistema operacional e e fortemente determinada pela interface, estrutura e con abilidade de seu sistema de arquivos. Do ponto de vista do usuario, o aspecto mais importante do sistema de arquivos e como ele se apresenta, isto e, o que constitui um arquivo, como os arquivos s~o identi cados e protegidos, que a operac~es s~o permitidas sobre os arquivos, e assim por diante. Para o projetista do sistema, por outro o a lado, a preocupac~o e como organizar e gerenciar arquivos de forma a garantir boa ocupac~o do espaco a a em disco e bom desempenho nas operac~es sobre arquivos. o

Em muitos sistemas, arquivos regulares s~o subdivididos em diferentes tipos em func~o de sua a a utilizac~o. Os tipos s~o identi cados pelos nomes com que os arquivos regulares terminam | por a a exemplo, arquivo.c denotando um programa fonte em C e arquivo.obj para um arquivo objeto. Em alguns sistemas, as extens~es s~o simples convenc~o, representando apenas uma facilidade para o usuario o a a identi car o tipo de conteudo no arquivo. Em outros, o sistema operacional tem regras r gidas em relac~o a aos nomes | por exemplo, \o sistema n~o executara um arquivo a menos que sua extens~o seja .BIN." a a Diretorios, os quais em muitos casos s~o tambem arquivos, permitem organizar os arquivos de um a sistema. Um diretorio contem tipicamente um registro por arquivo. Sistemas primitivos admitiam um unico diretorio compartilhado por todos os usuarios, ou um unico diretorio por usuario. Os sistemas operacionais modernos permitem um numero arbitrario de diretorios por usuario (em geral, formando uma hierarquia). Quando o sistema de arquivos e organizado como uma arvore de diretorios, algum meio se faz necessario para especi car nomes de arquivos. Dois metodos s~o comumente empregados. No primeiro a metodo, cada arquivo e identi cado pela sequ^ncia de diretorios desde o diretorio raiz ate o arquivo e (caminho absoluto). Nomes absolutos para caminhos sempre comecam na raiz e s~o unicos. Uma outra a forma de especi car nomes de arquivos e atraves de seu caminho relativo. E usado em conjunto com o conceito de diretorio de trabalho (ou diretorio corrente). Um usuario pode designar um diretorio como diretorio corrente. Neste caso, todos os caminhos s~o referenciados a partir do diretorio corrente. a

4.2 Projeto do Sistema de Arquivos


Examinaremos agora o sistema de arquivos do ponto de vista do projetista de sistemas operacionais. Uma das grandes preocupac~es associadas com a manipulac~o de sistemas de arquivos refere-se ao o a desempenho. Discos s~o organizados em cilindros, os quais s~o compostos de trilhas, que por sua a a vez s~o compostos por setores. Um acesso ao disco envolve movimentac~o de partes mec^nicas para a a a o posicionamento na trilha desejada e a transfer^ncia dos setores contendo dados, sendo que a taxa e de transfer^ncia esta associada a velocidade de rotac~o do disco. Como estes tempos s~o muito mais e a a lentos que a velocidade de processamento, um acesso ine ciente pode tornar a utilizac~o do sistema a demasiadamente baixa.

4.1 Interface do Sistema de Arquivos


A maior parte dos sistemas operacionais traz a seguinte proposta para armazenagem de informac~o: a permitir aos usuarios de nir objetos chamados arquivos, que podem armazenar programas, dados, ou qualquer outra informac~o. Estes arquivos n~o s~o parte enderecavel de nenhum processo e o sistema a a a operacional suporta operac~es especiais (chamadas de sistema) para criar, destruir, ler, atualizar e o proteger arquivos. Todos os sistemas operacionais visam uma independ^ncia dos dispositivos de armazenagem, permie tindo acessar um arquivo sem especi car em qual dispositivo o mesmo se encontra sicamente armazenado. Um programa que l^ um arquivo de entrada e escreve um arquivo de sa da deve ser capaz de e operar com arquivos armazenados em quaisquer dispositivos, sem necessidade de um codigo especial para explicitar o tipo de periferico. Alguns sistemas operacionais suportam maior independ^ncia dos dispositivos de armazenagem que e outros. No Unix, por exemplo, um sistema de arquivos pode ser montado em qualquer dispositivo de armazenagem, permitindo que qualquer arquivo seja acessado pelo seu nome (path name) sem considerar o dispositivo f sico. No MS-DOS, o usuario deve especi car em qual dispositivo cada arquivo se encontra (exceto quando um dispositivo e default e for omitido). A maior parte dos sistemas operacionais suportam varios tipos de arquivos | por exemplo, arquivos regulares, diretorios e arquivos especiais. Arquivos regulares contem dados e programas do usuario. Diretorios permitem identi car arquivos atraves de nomes simbolicos (sequ^ncia de caracteres ASCII). e Arquivos especiais s~o usados para especi car perifericos tais como terminais, impressoras e unidades a de ta.
30

4.2.1 Ger^ncia de Espaco em Disco e


Arquivos s~o normalmente armazenados em disco, sendo portanto a ger^ncia do espaco em disco de a e a maior interesse do projetista. Duas estrategias s~o poss veis para armazenagem em um arquivo com bytes: bytes consecutivos do disco s~o alocados ou o arquivo e dividido em um numero de blocos n~o a a necessariamente cont guos1. Quando blocos de tamanho xo s~o adotados, e necessario de nir qual o tamanho do bloco. Uma a unidade de alocac~o grande, tal como um cilindro, implica que muitos arquivos, ate mesmo arquivos de 1 a byte, dever~o ocupar o cilindro inteiro. Por outro lado, usar uma unidade de alocac~o pequena signi ca a a que cada arquivo tera muitos blocos, o que pode prejudicar o desempenho de acesso. E compromisso usual escolher um bloco de tamanho entre 512 e 4K bytes. Se um bloco de tamanho 1K for escolhido em um disco com setor de 512 bytes, ent~o o sistema de arquivo sempre ira ler ou escrever em dois a setores consecutivos, e trata-los como uma unidade indivis vel.
n n

A mesma pol tica esta presente no sistema de ger^ncia de memoria entre a segmentac~o pura e a paginac~o. e a a

c 1996

DCA/FEEC/UNICAMP

31

Cardozo, Magalh~es, Faina & Ricarte a

Sistemas Operacionais

Sistema de Arquivos
42 136 45 127 65 254 321 342 123 415 239 124 432 58 490 643 486 12 43 481 971 7 99 640 589 737 872 543 321 13

Projeto do Sistema de Arquivos 4.2]


1001001001011001 0000100100011000 0011001110100100 1000000100001001 0000000000001000

A escolha da estrategia de alocac~o de um arquivo no disco traz impactos no desempenho e exia bilidade de acesso aos dados armazenados. A seguir, estes impactos ser~o analisados para as diversas a possibilidades de organizac~o. a

Alocac~o Cont gua Nesta estrategia, a posic~o inicial onde o arquivo esta armazenado no disco e seu a a tamanho s~o as unicas informac~es necessarias para permitir o acesso ao seu conteudo. A transfer^ncia a o e dos dados, uma vez que o posicionamento inicial ja tenha sido completado, e rapido, pois envolve requer mudancas m nimas de posicionamento. Entretanto, armazenar um arquivo como uma sequ^ncia cont gua de bytes apresenta um problema e obvio que e o crescimento do arquivo, uma ocorr^ncia muito comum | o arquivo provavelmente tera e que ser movido no disco. Embora o problema seja o mesmo que ocorre em ger^ncia de memoria por e segmentac~o, neste caso o impacto no desempenho e muito maior. a
possibilidade de se conectar os blocos de um mesmo arquivo e atraves da manutenc~o de apontadores a de um bloco para o proximo. Assim, em cada bloco a primeira palavra indica qual o proximo bloco da a lista, e o restante e a area de dados. A grande vantagem desta estrategia e evitar a fragmentac~o que ocorre no uso de alocac~o cont gua. No entanto, acessos a posic~es arbitrarias do arquivo (o chamado a o acesso aleatorio ) s~o lentos, uma vez que diversos blocos podem ter que ser lidos para alcancar a posic~o a a do dado desejado.

0100001100000011 1111000011000010 (b)

410 312

654 318 (a)

597 873

Listas Ligadas de Blocos Quando a estrategia de alocac~o em blocos e adotada, uma primeira a

Figura 4.1: Organizac~o de blocos livres: (a) blocos livres armazenados em lista ligada (b) um mapa a de bits.

4.2.2 Estrutura de Diretorio

a Listas Ligadas com Indice Nesta estrategia, os apontadores para proximo bloco s~o mantidos em um ndice (ou tabela) que e trazido a memoria principal. Desta forma, percorrer uma lista de blocos para alcancar uma posic~o arbitraria torna-se uma operac~o rapida, que e realizada sem acessos ao a a disco. A desvantagem deste metodo e que todo o ndice deve ser alocado a memoria principal, o que pode ocupar um espaco consideravel de memoria para discos com grande capacidade. mantem os enderecos em disco dos blocos que comp~em o arquivo. Quando um arquivo e aberto pela o aplicac~o, o seu no ndice e lido para a memoria. Os enderecos dos primeiros blocos do arquivo s~o a a mantidos no proprio i-node, de forma que o acesso a pequenos arquivos e e ciente. Os ultimos enderecos do i-node n~o apontam diretamente para blocos de dados, mas para blocos contendo enderecos de outros a blocos. Em geral, ha um apontador para enderecos indiretos simples (o bloco apontado contem enderecos de blocos de dados), outro para enderecos indiretos duplos (o bloco apontado contem enderecos de blocos que apontam para blocos de dados) e outro para enderecos indiretos triplos (para encontrar o endereco do bloco de dados tr^s n veis de ndice t^m de ser acessados). Apenas arquivos muito grandes precisariam e e usar este ultimo n vel de acesso indireto.

Nos Indices Neste caso, cada arquivo tem uma pequena tabela de ndices chamada de i-node que

Ger^ncia de Espaco Livre Outra quest~o importante para o projetista e como manter a informac~o e a a sobre blocos livres no disco | informac~o que sera fundamental quando a aplicac~o requisitar a escrita a a de dados em arquivos. Dois metodos s~o amplamente usados (Figura 4.1). O primeiro consiste no uso a de uma lista ligada de blocos, com cada elemento da lista armazenando tantos blocos livres quanto poss vel. Uma outra tecnica de ger^ncia de espaco livre e o mapa de bits. Um disco com blocos e necessita de um mapa de bits com bits. Blocos livres s~o representados por 1s no mapa de bits blocos a alocados por 0s (ou vice-versa). Para um disco cheio (com poucos blocos livres) a lista ligada necessita de menos espaco que o mapa de bits.
n n

Antes de um arquivo ser manipulado, ele deve ser aberto. Quando um arquivo e aberto, o sistema operacional usa o nome do arquivo para buscar as informac~es necessarias para prosseguir com as o operac~es de acesso ao arquivo. Estas informac~es adicionais s~o mantidas nos arquivos diretorios. o o a A estrategia de organizac~o de arquivos em diretorios mais simples e manter um diretorio unico. a Assim, a localizac~o de um arquivo reduz-se a procura neste unico diretorio. Encontrado o registro do a arquivo, tem-se o numero de blocos do disco, posto que estes s~o armazenados no proprio registro. Se a o arquivo utiliza mais blocos de disco que o permitido no registro, o arquivo tera registros adicionais no diretorio. Informac~es usualmente mantidos s~o nome, tipo, usuario (durante a busca, apenas os o a registros pertencentes ao usuario corrente s~o considerados), tamanho e contador de bloco (indica qual a bloco esta em uso). Campos adicionais cont^m os numeros dos blocos de disco que comp~em o arquivo. e o Outra estrategia e a organizac~o de sistemas de diretorio em arvore (hierarquicos). Neste caso, todo a diretorio (exceto o raiz) e um arquivo. Quando um arquivo e aberto, o sistema de arquivos recebe o nome de arquivo fornecido e localiza seus blocos no disco. Para nomes absolutos, primeiro o sistema de arquivo localiza o diretorio raiz, que e mantido em um lugar xo no disco. Ent~o, procura-se pelo a arquivo (diretorio) que e o primeiro componente do caminho, e neste diretorio procura pelo proximo componente, ate encontrar a entrada para o arquivo sendo aberto. Nomes de caminhos relativos s~o a pesquisados de forma id^ntica, apenas partindo do diretorio de trabalho em vez de partir-se do diretorio e raiz. Todos os diretorios t^m registros para . e .., criados juntamente com o diretorio, para indicar e respectivamente o diretorio corrente e o diretorio pai. Nenhum mecanismo especial e necessario para manipular estes nomes. N~o raro, e conveniente que um mesmo arquivo (ou diretorio) pertenca simultaneamente a diferentes a usuarios. A associac~o entre um diretorio e um arquivo pertencente a outro diretorio e chamada de a conex~o ou link. O sistema de arquivos passa a ser organizado como um grafo, e n~o mais como uma a a arvore. Uma possibilidade de suportar o compartilhamento de arquivos e manter um link simbolico. Por exemplo, digamos que um arquivo X em um diretorio D1 deve tambem ser visto por um diretorio D2. O link simbolico sera uma entrada no diretorio D2 com o nome X, mas marcada como sendo um tipo especial de arquivo (link) e cuja informac~o associada e o nome absoluto do arquivo compartilhado a original (/D1/X).
33

32

c 1996

DCA/FEEC/UNICAMP

Cardozo, Magalh~es, Faina & Ricarte a

Sistemas Operacionais

Sistema de Arquivos

O Sistema de Arquivos do Unix 4.3]

Outra possibilidade depende da utilizac~o de nos ndice para a organizac~o de arquivos no disco. a a Neste caso, a entrada do diretorio armazena apenas o apontador para o no ndice do arquivo compartilhado, e o no ndice deve manter um contador de quantas refer^ncias s~o feitas ao arquivo (de modo a e a garantir consist^ncia apos operac~es de remoc~o). e o a Considerando a import^ncia da informac~o mantida em discos, deve ser uma preocupac~o do proa a a jetista de um sistema de arquivos o aspecto de con abilidade deste sistema. onde a escrita e/ou leitura e impossibilitada. Duas soluc~es para o problema de blocos defeituosos s~o o a empregadas, uma em hardware e outra em software. A soluc~o em hardware consiste em dedicar um a setor no disco para a lista de blocos defeituosos. Quando o controlador do disco e iniciado, este l^ a e lista de blocos defeituosos e escolhe blocos sobressalentes para substitu -los. S~o feitas ent~o indirec~es a a o dos blocos defeituosos para os blocos sobressalentes. Da por diante, qualquer operac~o envolvendo a um bloco defeituoso tera efeito em seu respectivo bloco sobressalente. A soluc~o em software requer a que o usuario informe (ou que o sistema de arquivos detecte) os blocos defeituosos. Estes blocos s~o a encadeados como se fosse um arquivo do sistema, de modo que eles n~o far~o parte da lista de blocos a a livres.

livres rastreando todos os blocos que n~o est~o em uso. Cada ocorr^ncia de um bloco na lista de blocos a a e livres resulta no incremento do segundo contador. Se o sistema de arquivo for consistente, cada bloco tera o valor 1 em um contador e 0 no outro. Contudo, em caso de falha, pode detectar-se as seguintes situac~es: o

4.2.3 Con abilidade do Sistema de Arquivos

Blocos perdidos: 0 em ambos contadores, ou seja, blocos que n~o ocorrem em nenhuma das tabelas. a
A soluc~o para blocos perdidos e simples: o veri cador do sistema de arquivos acrescenta-os na a lista de blocos livres. lista livre.

Bloco livre e ocupado: 1 em ambos contadores. A soluc~o tambem e simples: remover o bloco da a Blocos multiplamente livres: 0 no contador de blocos ocupados e um valor maior que 1 no contador
de blocos livres. A soluc~o neste caso tambem e simples: reconstruir a lista de blocos livres, a eliminando-se as duplicac~es. o de blocos ocupados. Este e o tipo de falha mais grave. A ac~o apropriada do utilitario e alocar a um bloco livre, copiar o conteudo do bloco duplicado nele, e inserir a copia em um dos arquivos. Desde modo, a informac~o dos arquivos n~o e alterada (embora certamente incorreta para um a a dos arquivos), mas a estrutura do sistema de arquivos e, pelo menos, consistente. O erro sera informado para permitir ao usuario examinar a falha.

Blocos Defeituosos Discos frequentemente apresentam blocos defeituosos (bad blocks), isto e, blocos

Blocos multiplamente ocupados: 0 no contador de blocos livres e um valor maior que 1 no contador

Backups Mesmo com uma estrategia engenhosa para tratar os blocos defeituosos, e importante se proceder backups frequentes. Sistemas de arquivos em discos de pequena capacidade podem ser salvos em ta magnetica, por exemplo, tas padr~o de 9 trilhas (com capacidade de 50 Megabytes por bobina) ou a ta de 8 mm (com capacidade de ate 4 Gigabytes). Para discos de grande capacidade, salvar o conteudo inteiro em tas e inconveniente e consome muito tempo. Uma alternativa e o backup incremental. Em sua forma mais simples, copia-se para ta todos os arquivos a cada semana ou m^s, e, diariamente, e apenas daqueles arquivos que foram modi cados deste o ultimo backup completo. Num outro esquema, mais e ciente, copia-se apenas aqueles arquivos que foram alterados desde o ultimo backup. Para implementar este metodo, o horario da ultima duplicac~o para cada arquivo deve ser mantida no disco. a
Outro topico envolvendo con abilidade e a consist^ncia do sistema de arquivos. Muitos sistemas de e arquivos l^em blocos, modi cam-nos, e os regravam mais tarde. Se o sistema falha antes que todos os e blocos modi cados sejam escritos no disco, o sistema de arquivos assume um estado inconsistente. Este problema e especialmente cr tico se alguns dos blocos que n~o foram escritos, s~o blocos de i-nodes, a a blocos de diretorio, ou blocos contendo a lista de blocos livres. Para veri car a consist^ncia do sistema de arquivos, muitos sistemas operacionais utilizam programas e utilitarios desenvolvidos para este m. Tais programas s~o executados sempre que o sistema e iniciado, a particularmente depois de um desligamento abrupto. Para controle de consist^ncia a n vel de blocos, o utilitario constroi uma tabela com dois contadores e por bloco, ambos iniciados em 0. O primeiro contador rastreia quantas vezes o bloco aparece referenciado por algum arquivo o segundo contador registra com que frequ^ncia ele aparece na lista de blocos e a livres. O utilitario acessa a informac~o de todos os arquivos, incrementando o primeiro contador para a ocorr^ncia de cada bloco que faz parte de cada arquivo. A seguir, e examinada a lista de blocos e
34

4.3 O Sistema de Arquivos do Unix


Todo arquivo no Unix System V contem um unico i-node. O i-node possui as informac~es necessarias o para um processo acessar um arquivo, tais como: proprietario do arquivo, direito de acesso, tamanho do arquivo e localizac~o dos dados do arquivo no sistema de arquivos. A refer^ncia a um arquivo e feita a e pelo seu nome e, atraves deste, o nucleo determina o i-node do arquivo. Um i-node existe estaticamente no disco e o nucleo realiza a sua leitura para a memoria quando necessita manipula-lo. O i-node no disco contem os seguintes campos (Figura 4.2): identi cador do dono do arquivo: dividido em dono individual e grupo tipo do arquivo: regular, diretorio, especial ou FIFO (pipes) permiss~o de acesso a instantes de acesso ao arquivo: ultima modi cac~o, ultimo acesso e ultima modi cac~o ocorrida a a no i-node numero de conex~es (links) associados ao arquivo o enderecos no disco dos blocos de dados do arquivo tamanho do arquivo. A indicac~o dos blocos do disco que constituem um determinado arquivo encontra-se no i-node a associado ao arquivo. Esta indicac~o traduz-se na utilizac~o de 13 numeros para blocos. Os 10 primeiros a a
DCA/FEEC/UNICAMP 35

4.2.4 Consist^ncia do Sistema de Arquivos e

c 1996

Cardozo, Magalh~es, Faina & Ricarte a


ponteiro para blocos de dados

Sistemas Operacionais

Sistema de Arquivos

Sistemas de Arquivos do MS-DOS 4.4]

INODE arquivo numeros de links identificador do proprietrio grupo do proprietrio tamanho do arquivo data da criao data do ltimo acesso data da ltima modificao

ponteiro para 10 blocos de dados

bloco indireto simples bloco indireto duplo bloco indireto triplo

arquivo deve ser criado (caso inexista) e permiss~es. o close: encerra a operac~o sobre um arquivo aberto. a read: l^ dados de um arquivo (para um bu er em memoria). e write: escreve dados num arquivo (de um bu er em memoria). lseek: altera a posic~o corrente de leitura/gravac~o no arquivo. a a chdir: altera o diretorio corrente. chown: altera o usuario que t^m a posse do arquivo. e chmod: altera permiss~es de um arquivo. o stat: fornece informac~es sobre um arquivo (tipicamente as constantes no i-node do arquivo). o

open: abre um arquivo para leitura/gravac~o. Par^metros da chamada indicam, por exemplo, se o a a

4.4 Sistemas de Arquivos do MS-DOS


Discos em MS-DOS s~o organizados como se segue. O primeiro setor do disco e reservado para o a codigo de boot. Apos o setor de boot vem a Tabela de Alocac~o de Arquivos (FAT), que e um ndice a para uma lista ligada de blocos. Blocos livres s~o marcados com um codigo especial nesta tabela. A a Figura 4.3 ilustra a organizac~o da FAT no MS-DOS. a Figura 4.2: Estrutura de i-node numeros (blocos diretos) contem numeros para blocos de disco os tr^s numeros seguintes indicam e respectivamente apontadores indireto simples, indireto duplo e indireto triplo. Os processos enxergam o arquivo como um conjunto de bytes comecando com o endereco 0 e terminando com o endereco equivalente ao tamanho do arquivo menos 1. O nucleo converte esta vis~o dos a processos em termos de bytes em uma vis~o em termos de blocos: o arquivo comeca com o bloco 0 (apona tado pelo primeiro numero de bloco no i-node ) e continua ate o numero de bloco logico correspondente ao tamanho do arquivo. Quando da abertura de um arquivo, o sistema operacional utiliza o nome (path) do arquivo fornecido pelo usuario para localizar os blocos do disco associados ao arquivo. O mapeamento do nome nos i-nodes esta associado a forma como o sistema de diretorio encontra-se organizado. A estrutura de diretorio usada no Unix e extremamente simples. Cada entrada contem o nome do arquivo e o numero do seu i-node. Todos os diretorios do Unix s~o arquivos e podem conter um numero a arbitrario destas entradas. Quando um arquivo e aberto, o sistema deve, atraves do nome do arquivo, localizar os seus blocos no disco. Caso o nome do arquivo seja relativo, o nucleo acessa primeiro o i-node associado ao diretorio corrente. Cada arquivo no Unix e identi cado por um descritor de arquivos (um numero inteiro). Descritores de arquivos identi cam arquivos univocamente a n vel de processo, isto e, dois arquivos abertos pelo mesmo processo possuem descritores necessariamente diferentes. Rotinas do nucleo do sistema operacional operam com estes descritores. As principais chamadas de sistema referentes ao sistema de arquivos s~o: a
36
FAT x x EOF 13 2 9 8 FREE 4 12 3 FREE EOF EOF EOF BAD 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
10 3 13 5 9 12

} tamanho do disco

Figura 4.3: Estrutura da FAT Cada entrada no diretorio tem 32 bytes, dos quais 11 s~o reservados para o nome e extens~o do a a arquivo. Um byte de atributos descreve o tipo e propriedades do arquivo. Hora e data da ultima atualizac~o ocupam dois bytes cada. Os dois ultimos campos indicam o endereco do primeiro bloco (2 a
DCA/FEEC/UNICAMP 37

c 1996

Cardozo, Magalh~es, Faina & Ricarte a

Sistemas Operacionais

Cardozo, Magalh~es, Faina & Ricarte a

bytes) e o tamanho do arquivo (4 bytes). A partir do primeiro bloco, os demais s~o localizados a partir a da Tabela de Alocac~o de Arquivos. a

Cap tulo 5 Entrada e Sa da


Uma das func~es do sistema operacional e controlar todos os dispositivos de entrada e sa da (E/S) o do computador, emitindo comandos para os dispositivos, atendendo interrupc~es e manipulando erros. o Deve tambem prover uma interface entre os dispositivos e o resto do sistema, que seja simples e facil de usar (se poss vel, a interface deve ser a mesma para todos os dispositivos). O codigo de entrada e sa da representa uma frac~o signi cativa do total do sistema operacional. A forma como o sistema a operacional gerencia E/S e o objeto deste cap tulo.

5.1 Princ pios do Hardware


Diferentes indiv duos v^em o hardware de E/S de diferentes maneiras. Engenheiros eletr^nicos e o v^em em termos de chips, os, fontes de pot^ncia, motores e todos os outros componentes f sicos que e e constituem em conjunto o hardware. Programadores v^em como a interface apresentada ao software, e os comandos que o hardware aceita, as func~es que ele suporta, e os erros que s~o reportados. O nosso o a interesse aqui e restringir em como o hardware e programado, e n~o como ele trabalha internamente. a Dispositivos de E/S podem ser grosseiramente divididos em duas categorias: dispositivos de bloco e dispositivos de caracter. Um dispositivo de bloco armazena informac~es em blocos de tamanho xo, o cada um com seu proprio endereco. Tamanhos comuns de blocos est~o na faixa de 128 bytes a 4096 a bytes. A propriedade essencial dos dispositivos de bloco e que e poss vel ler ou escrever cada bloco independentemente de todos os outros. Em outras palavras, em qualquer instante, o programa pode ler ou escrever qualquer um dos blocos. Discos s~o dispositivos de bloco. a O outro tipo de dispositivo de E/S, o de caracter, libera ou aceita uma la de caracteres sem estrutura. Ele n~o e enderecavel e n~o aceita operac~es de busca. Terminais, impressoras, leitora optica a a o e outros dispositivos que n~o trabalham como os discos s~o exemplos de dispositivos de caracter. a a Este esquema de classi cac~o n~o e perfeito. Alguns dispositivos n~o s~o enquadrados nele. Relogios, a a a a por exemplo, n~o s~o enderecaveis por bloco. Nem geram ou aceitam las de caracteres. Tudo o que a a fazem e gerar interrupc~es em intervalos regulares. Contudo, este modelo e geral o su ciente para o ser usado como base na construc~o de um sistema operacional com bom n vel de independ^ncia dos a e dispositivos de E/S. O sistema de arquivo, por exemplo, negocia apenas com dispositivos de blocos abstratos, e deixa a parte dependente do dispositivo para o software de mais baixo n vel, chamado acionadores de dispositivos (device drivers).
38

5.1.1 Dispositivos de E/S

c 1996

DCA/FEEC/UNICAMP

39

Cardozo, Magalh~es, Faina & Ricarte a

Sistemas Operacionais

Entrada e Sa da

Princ pios do Software 5.2]

Unidades de E/S consistem tipicamente de componentes mec^nicos e eletr^nicos. E frequente a a o separac~o das duas porc~es para se obter um projeto mais geral e modular. O componente eletr^nico e a o o chamado de controlador do dispositivo (device controller ou adapter). Em mini e microcomputadores, ele normalmente toma forma de um circuito impresso que pode ser inserido no computador. O componente mec^nico e o dispositivo propriamente dito. a O cart~o do controlador normalmente tem um conector, no qual um cabo condutor do proprio a dispositivo pode ser conectado. Muitos controladores podem manusear dois ou mais dispositivos do mesmo tipo. A distinc~o entre dispositivo e controlador deve ser ressaltada, ja que o sistema operacional v^ o a e controlador, n~o o dispositivo. Normalmente, minicomputadores e microcomputadores usam um barraa mento unico (Figura 5.1) para comunicac~o entre CPU e os controladores. Mainframes frequentemente a usam um modelo diferente, no qual multiplos barramentos e computadores especializados de E/S, chamados canais de E/S, aliviam parte da carga da CPU.
unidades de disco

5.1.2 Controladores de Dispositivos

disquete do IBM PC, por exemplo, aceita 15 diferentes comandos, tais como read, write, seek, format, e recalibrate. Muitos dos comandos t^m par^metros, os quais s~o tambem carregados nos registradores e a a do controlador. Quando um comando e aceito, a CPU pode abandonar o controlador atender a outra a tarefa. Quando completado, o controlador causa uma interrupc~o com o objetivo de permitir que o sistema operacional tome o controle da CPU e teste o resultado da operac~o. A CPU obtem o resultado a e o status do dispositivo pela leitura de um ou mais bytes de informac~o nos registradores do controlador. a

5.2 Princ pios do Software


Os objetivos gerais do software de E/S s~o faceis de serem estabelecidos. A ideia basica e organizar a o software como uma serie de camadas, com as mais baixas escondendo peculiaridades do hardware e as mais altas mostrando-se simples para o usuario.

5.2.1 Objetivos do Software de E/S


e O conceito chave no projeto do software de E/S e a independ^ncia do dispositivo. Deve ser poss vel escrever programas que usem arquivos gravados em disquete ou em disco r gido, sem a necessidade de modi car o programa para cada tipo de dispositivo. De prefer^ncia, deve ser poss vel utilizar o programa e sem recompila-lo. Relacionado com a independ^ncia do dispositivo esta a uniformidade de nome. O nome de um e dispositivo ou arquivo deve ser simplesmente uma cadeia de caracteres (string) ou um inteiro n~o a dependente do dispositivo em nenhum caso. Outra caracter stica importante e a manipulac~o de erros. Em geral os erros devem ser manipulados a o mais proximo poss vel do hardware. Se o controlador encontra um erro, ele deve tentar corrig -lo, se poss vel. Se n~o, o driver do dispositivo deve faz^-lo, talvez apenas tentando ler novamente. Muitos a e erros s~o transientes e desaparecem se a operac~o for repetida. Somente se as camadas mais baixas n~o a a a conseguirem resolver o problema e que este deve ser apresentado as camadas superiores. Transfer^ncias podem ser s ncronas (blocos) e ass ncronas (manipuladas por interrupc~o). Muitos e a dispositivos de E/S s~o ass ncronos: a CPU inicia a transfer^ncia e se ocupa de outras atividades ate a e que chegue uma interrupc~o. O sistema operacional realiza as operac~es de forma ass ncrona, mas para a o o usuario ela se apresenta como transfer^ncia de blocos (o que torna muito mais simples a programac~o). e a Alguns dispositivos de E/S, como discos, podem ser utilizados por muitos usuarios ao mesmo tempo. Outros dispositivos, como impressoras, devem ser dedicados a um unico usuario ate que este nalize a operac~o. A inclus~o de dispositivos dedicados introduz uma variedade de problemas, como o deadlock. a a Sistemas operacionais devem manipular os dispositivos de maneira a evitar estes problemas. Estes objetivos podem ser organizados de maneira clara e e ciente pela estruturac~o do software em a quatro camadas:

impressora interface controlador-dispositivo controlador de disco controlador de impressora outros controladores

CPU

memria

barramento

Figura 5.1: Um modelo para conex~o da CPU, memoria, controladores e dispositivos de E/S a A interface entre o controlador e o dispositivo e, via de regra, uma interface de baixo n vel. O disco, por exemplo, pode ser formatado com 8 setores de 512 bytes por trilha. O que realmente sai do driver, entretanto, e uma lista serial de bits, partindo com um pre^mbulo, depois os 4096 bits no a setor, e nalmente o checksum ou o codigo de correc~o de erro. O pre^mbulo e escrito quando o disco a a e formatado, e contem o numero de cilindros e de setores, o tamanho do setor, e outros dados. A tarefa do controlador e converter a lista serial de bits em um bloco de bytes e realizar alguma correc~o de erro necessaria. O bloco de bytes e tipicamente primeiro montado, bit por bit, em um bu er a mantido no controlador. Apos o checksum ter sido veri cado e o bloco declarado livre de erro, ele pode ent~o ser copiado para a memoria principal. a O controlador para o terminal CRT tambem trabalha como um dispositivo serial de bits e em baixo n vel. Ele l^ da memoria o byte contendo o caracter a ser exibido, e gera os sinais usados na modulac~o e a do feixe do CRT para causar a escrita na tela. O controlador tambem gera os sinais para o feixe CRT fazer o retrace horizontal apos ele ter terminado de esquadrinhar a linha, como tambem sinais para fazer o retrace vertical apos a tela toda ter sido esquadrinhada. Se n~o tivessemos um controlador CRT, a o sistema operacional teria que gerar estes sinais no tubo. Com o controlador, o sistema operacional inicia-o com poucos par^metros, tais como o numero de caracteres por linha e o numero de linhas por a tela, deixando o controlador tomar conta do direcionador do feixe de raios catodicos. Cada controlador tem alguns poucos registradores que s~o usados para comunicac~o com a CPU. a a Em alguns computadores estes registradores s~o parte do espaco de enderecamento regular. O sistema a operacional realiza E/S escrevendo comandos nos registradores dos controladores. O controlador de
40

1. Manipulac~o de interrupc~es. a o 2. Drivers de dispositivos. 3. Software do sistema operacional independente do dispositivo. 4. Software do n vel do usuario.
DCA/FEEC/UNICAMP 41

c 1996

Cardozo, Magalh~es, Faina & Ricarte a

Sistemas Operacionais

Entrada e Sa da

Princ pios do Software 5.2]

5.2.2 Manipuladores de Interrupc~es o


Interrupc~es s~o eventos complexos, que devem ser isolados de modo que apenas uma pequena parte o a do sistema operacional os manipule. Um meio para isolar o tratamento de interrupc~es e bloquear os o processos aguardando operac~es de E/S ate que uma interrupc~o anuncie que a operac~o se completou. o a a Quando a interrupc~o acontece, a rotina de tratamento daquela interrupc~o libera o processo bloa a queado atraves do envio de uma mensagem. Em alguns sistemas, isto e conseguido fazendo-se um UP sobre um semaforo. Seja qual for a forma adotada, o efeito da interrupc~o e que o processo que estava a previamente bloqueado devera agora estar habilitado para execuc~o. a

5.2.3 Drivers de Dispositivos


Todo o codigo dependente do dispositivo aparece no driver do dispositivo. Cada driver manipula um dispositivo ou uma classe de dispositivos intimamente relacionados. Foi visto que cada controlador de dispositivos tem registradores para receber comandos. O driver do dispositivo envia estes comandos e testa se foram carregados propriamente. Desta maneira, o driver e a parte do sistema operacional que conhece quantos registradores tem, por exemplo, o controlador de disco e para que estes s~o utilizados. Ele reconhece setores, trilhas, cilindros, cabecas de leitura/escrita, a motor, fator de entrelacamento e todos os mecanismos que fazem um disco trabalhar propriamente. Em termos gerais, o trabalho de um driver e aceitar requisic~es abstratas de um software de mais o alto n vel, e providenciar para que o pedido seja atendido. Uma t pica requisic~o e ler um bloco. Se a o driver esta desocupado no momento, a requisic~o e aceita, sendo processada imediatamente. Caso o a driver esteja processando uma requisic~o, esta normalmente entra numa la de requisic~es pendentes. a o O primeiro passo e transcrever os termos abstratos da requisic~o para ac~es concretas. Para um disk a o driver, por exemplo, isto signi ca informar onde o bloco se encontra no disco, veri car se o motor esta girando, determinar se o braco esta posicionado no cilindro apropriado, e assim por diante. Em poucas palavras, o driver deve decidir quais operac~es do controlador s~o requeridas e em que sequ^ncia. o a e Uma vez determinado quais comandos emitir ao controlador, este inicia a emiss~o escrevendo nos rea gistradores do controlador do dispositivo. Alguns controladores podem manusear somente um comando por vez. Outros controladores aceitam uma lista de comandos, os quais s~o carregadas sem a ajuda do a sistema operacional. Apos o comando ou comandos terem sido emitidos, podem ocorrer duas situac~es. Em muitos casos o o device driver deve esperar ate que o controlador execute as operac~es requisitadas. Se estas operac~es o o forem lentas (envolvendo movimentos mec^nicos, por exemplo), o driver bloqueia ate que as operac~es a o se completem. Em outros casos, entretanto, as operac~es s~o rapidas, situac~o esta em que o driver n~o o a a a precisa ser bloqueado. Como um exemplo dessa situac~o, o deslocamento da tela em terminais requer a apenas escrita de uns poucos bytes nos registradores do controlador. Nenhum movimento mec^nico e a necessario e a operac~o toda pode se completar em alguns microsegundos. a Neste ponto, apos a operac~o ter sido completada, o driver deve veri car a ocorr^ncia de erros. Se a e tudo estiver correto, ele passa os dados (o bloco lido, por exemplo) para a proxima camada do software de E/S. Finalmente, ele retorna alguma informac~o de status de erros. Se alguma requisic~o esta na a a la, uma delas pode agora ser selecionada e iniciada. Se nenhuma esta na la, o driver ca aguardando a proxima requisic~o. a
42

Embora parte de software de E/S seja espec co do dispositivo, grande parte e independente do dispositivo. O limite exato entre os drivers e o software independente dos dispositivos e func~o do a sistema, uma vez que algumas func~es que s~o independentes do dispositivo podem atualmente estarem o a nos drivers, por e ci^ncia ou outras raz~es. As func~es listadas abaixo s~o tipicamente implementadas e o o a no software independente do dispositivo: interface uniforme para com os drivers de dispositivos identi cac~o simbolica dos dispositivos a protec~o dos dispositivos a manipulac~o de blocos independente dos dispositivos a \bu erizac~o" a alocac~o de espaco nos dispositivos do tipo bloco a alocac~o e liberac~o de dispositivos dedicados a a ger^ncia de erros. e A func~o basica do software independente do dispositivo e realizar as func~es de E/S que s~o comuns a o a a todos os dispositivos, e suportar uma interface uniforme para o software do usuario. Uma quest~o fundamental em um sistema operacional e como objetos tais como os arquivos e dispoa sitivos de E/S s~o identi cados. O software independente do dispositivo se encarrega do mapeamento a simbolico dos nomes dos dispositivos para os seus drivers apropriados. Relacionado ao nome esta a protec~o. Como o sistema previne usuarios de acessar dispositivos que a n~o est~o autorizados a acessar? Em muitos microcomputadores, n~o ha nenhuma protec~o. Em muitos a a a a mainframes e superminis, acessos a dispositivos de E/S pelos usuarios e completamente proibido. Diferentes discos podem ter diferentes tamanhos de setor. O software independente do dispositivo deve encobrir este fato e prover um tamanho de bloco uniforme para camadas superiores, por exemplo, pelo tratamento de varios setores como um simples bloco logico. Deste modo, os n veis superiores somente negociam com dispositivos abstratos que usam o mesmo tamanho de bloco logico, independente do tamanho f sico do setor. \Bu erizac~o" e uma outra quest~o, tanto para dispositivos de blocos como para de caracter. Para a a dispositivos de bloco, o hardware executa escrita e leitura de blocos inteiros, mas o processo do usuario esta livre para ler ou escrever unidades arbitrarias. Para dispositivos de caracter, usuarios podem escrever dados no sistema mais rapido do que a taxa com que eles s~o transferidos para o dispositivo a f sico, necessitando assim de \bu erizac~o". Entrada de teclado e outro exemplo de atividade que requer a \bu erizac~o". a Quando um arquivo e criado e preenchido com dados, novos blocos de disco t^m que ser alocados e para o arquivo. Para realizar esta alocac~o, o sistema operacional precisa de uma lista ou mapa de bits a dos blocos livres no disco, mas o algoritmo para localizar um bloco livre e independente do dispositivo e pode ser implementado acima do n vel do driver. Alguns dispositivos, tais como as tas magneticas, podem ser usadas somente por um simples processo em um dado momento. E o sistema operacional que examina a requisic~o para usar o dispositivo a e aceita ou n~o, dependendo da disponibilidade do dispositivo requisitado. a
DCA/FEEC/UNICAMP 43

5.2.4 Software de E/S Independente do Dispositivo

c 1996

Cardozo, Magalh~es, Faina & Ricarte a

Sistemas Operacionais

Entrada e Sa da
camada processos do usurio funcionalidade executa operao de E/S

Discos 5.3]

A manipulac~o de erros tambem e feita nesta camada. Um erro t pico e causado por um bloco do a disco ruim e que n~o pode mais ser lido. Apos o driver tentar ler o bloco varias vezes, ele informa a ao software independente do dispositivo a raz~o. O erro e ent~o tratado. Se ocorreu num arquivo do a a usuario, e su ciente informar o erro para o mesmo. Entretanto, se o erro ocorreu numa area cr tica, o sistema operacional deve apresentar uma mensagem e, eventualmente, terminar sua execuc~o. a Embora muito do software de E/S esteja embutido no sistema operacional, uma pequena porc~o a dele consiste de bibliotecas ligadas juntamente com programas do usuario, e ate mesmo com programas inteiros executando fora do nucleo. Chamadas de sistema, incluindo chamadas do subsistema de E/S, s~o normalmente feitas por procedimentos da biblioteca. Quando um programa em C contem a chamada a o procedimento da biblioteca fread sera ligado com o programa. A colec~o de todos estes procedimentos a da biblioteca e parte do sistema de E/S. Enquanto estes procedimentos fazem pouco mais que colocar seus par^metros em lugares apropriados a para a chamada do sistema, ha outros procedimentos de E/S que fazem o trabalho real. Em particular, a formatac~o de uma entrada e sa da e feita por um procedimento da biblioteca. a Nem todo o software de E/S utilizado pelo usuario consiste de procedimentos da biblioteca. Outra a importante categoria e o sistema spooling. Spooling e o modo de negociac~o com os dispositivos dedicados de E/S em um sistema com multiprogramac~o, tais como impressoras. Embora seja facil permitir que a algum processo do usuario abra o arquivo especial associado a uma impressora, se o processo mantiver o arquivo aberto por varias horas ent~o nenhum outro processo podera imprimir. a Ao inves disso, o que e feito e criar um processo especial, chamado daemon, e um diretorio especial, chamado spooling directory. Para imprimir um arquivo, o aplicativo recebe o arquivo inteiro para ser impresso e o coloca no spooling directory. Ent~o o daemon, o unico processo que tem permiss~o de usar a a o arquivo especial associado a impressora, transfere um arquivo do spooling directory para a impressora por vez. Protegendo-se os arquivos especiais contra o uso direto por usuarios, o problema de se ter alguem monopolizando-os e eliminado. Spooling e tambem usado em outras situac~es, tais como a transfer^ncia de arquivos na rede. Para o e enviar um arquivo a algum lugar, o aplicativo coloca o arquivo dentro do diretorio de spooling da rede. Mais tarde, o network daemon acessa o arquivo e o transmite. A Figura 5.2 resume o sistema de E/S, mostrando todas os n veis e func~es principais de cada n vel. o
bytes_lidos = fread(buffer, tam_item, n_itens, arquivo)

software independente do dispositivo

identifio, proteo, bloqueio "bufferizao" inicia registradores do dispositivo verifica status da operao desbloqueia o driver quando a operao de E/S se completa

5.2.5 Software a N vel do Usuario

drivers de dispositivos

gerenciadores de interrupo

dispositivos

executa fisicamente a operao de E/S

requisio de E/S

resposta da requisio

Figura 5.2: N veis do sistema de E/S e func~es principais de cada n vel o setores no anel externo do disco sejam sicamente maiores que aqueles no anel interno. O espaco extra n~o e aproveitado. a Um aspecto que tem importante implicac~es no disk driver e a possibilidade do controlador fazer buso cas (seek) em dois ou mais dispositivos ao mesmo tempo. Estas s~o conhecidas como busca entrelacada a (overlapped seek). Enquanto o controlador e o software est~o esperando uma busca se completar em um a dispositivo, o controlador pode iniciar uma busca em outro. Muitos controladores podem tambem ler ou escrever em um dispositivo enquanto executam uma busca em um ou mais dispositivos, mas nenhum pode ler ou escrever em dois dispositivos no mesmo tempo. (Ler ou escrever requer que o controlador mova bits na faixa de microsegundos, assim uma transfer^ncia usa muito de sua capacidade computae cional). A habilidade de realizar duas ou mais buscas ao mesmo tempo pode reduzir sensivelmente o tempo medio de acesso.

5.3 Discos
Dispositivos do tipo bloco s~o armazenadores que aceitam dois comandos: escrever um bloco e ler a um bloco. Normalmente esses blocos s~o armazenados em memoria rotativa, tal como os discos r gidos a e ex veis. Nas sec~es seguintes, descreveremos brevemente o hardware do disco, passando para os disk o drivers a seguir. Todos os discos rotativos s~o organizados em cilindros, cada qual contendo tantas trilhas quanto a a cabecas empilhadas verticalmente. As trilhas s~o divididas em setores, com um numero de setores na circunfer^ncia, tipicamente entre 8 a 32. Todos os setores cont^m o mesmo numero de bytes, embora e e
44

5.3.2 Software do Disco

a Nesta sec~o veremos algumas caracter sticas genericas relacionadas com os disk drivers. O tempo de leitura ou escrita de um bloco do disco e determinado por tr^s fatores: o tempo de seek (tempo para e mover o braco para o cilindro desejado), o atraso rotacional (tempo para o setor desejado car sob a cabeca de leitura/escrita), e o tempo de transfer^ncia. Para muitos discos, o tempo de seek domina. e Reduzindo-se o tempo de seek, podemos melhorar substancialmente o desempenho do sistema.

5.3.1 Hardware do Disco

Algoritmos de Escalonamento do Braco do Disco


Se o disk driver aceita uma requisic~o por vez e a executa nesta ordem, isto e, First-Come, Firsta Served (FCFS), pouco pode ser feito para otimizar o tempo de seek. Entretanto uma estrategia e poss vel: e provavel que enquanto o braco esta executando um seek na metade de uma requisic~o, a uma outra requisic~o de disco pode ter sido gerada por outro processo. Muitos disk drivers mantem a
DCA/FEEC/UNICAMP 45

c 1996

Cardozo, Magalh~es, Faina & Ricarte a

Sistemas Operacionais

Entrada e Sa da

E/S no Unix 5.4]

uma tabela, indexada pelo numero do cilindro, com todas as requisic~es pendentes para cada cilindro, o encadeadas juntas numa lista. Para este tipo de estrutura de dados, podemos melhorar o algoritmo de escalonamento First-Come, First-Served. Considere um disco com 40 cilindros. Uma requisic~o chega para ler um bloco no cilindro a 11. Enquanto a busca para o cilindro 11 esta em progresso, novas requisic~es chegam para os cilindros o 1, 36, 16, 34, 9, e 12, nesta ordem. Elas s~o inseridas na tabela de requisic~es pendentes, tendo cada a o cilindro um lista separada. As requisic~es s~o mostradas na Figura 5.3. o a
posio inicial

A Figura 5.4 mostra o algoritmo do elevador usando as mesmas sete requisic~es da Figura 5.3, o a assumindo que o bit de direc~o esteja inicialmente em UP . A ordem na qual os cilindros s~o servidos a e 12, 16, 34, 36, 9, e 1, gerando movimento do braco de 1, 4, 18, 2, 27, e 8, num total de 60 cilindros. Neste caso, o algoritmo do elevador e um pouco melhor que SSF, embora seja usualmente pior. Uma propriedade interessante do algoritmo do elevador e que dada uma colec~o de requisic~es, o limite a o superior para o total de movimentos e xado: ele e apenas duas vezes o numero de cilindros.
posio inicial X 0 5 X 10 X X 15 X 20 25 X 30 X cilindro

X 0 5

X 10

X X 15

X 20 25

X 30

X cilindro

sequncia de movimentos tempo


sequncia de movimentos

tempo

Figura 5.4: Escalonamento de requisic~es no disco atraves do algoritmo do elevador o Alguns controladores de disco suportam um modo do software para inspecionar o numero de setores correntes sob a cabeca. Com um desses controladores, uma outra otimizac~o e poss vel. Se duas ou a mais requisic~es para o mesmo cilindro est~o pendentes, o driver pode emitir a requisic~o para o setor o a a que passara sob a cabeca do proximo cilindro. Note que quando trilhas multiplas est~o presentes num a cilindro, requisic~es consecutivas podem ser conduzidas para diferentes trilhas com nenhuma penalidade. o O controlador pode selecionar alguma das cabecas instantaneamente, uma vez que selec~o de cabeca a n~o requer movimento dos bracos nem atraso rotacional. a Quando existe varios dispositivos, uma tabela de requisic~es pendentes deve ser mantida para cada o dispositivo separadamente. Quando algum dispositivo esta desocupado, um seek deve ser emitido para mover os seus bracos para o cilindro onde sera necessario (assumindo que o controlador permita seeks sobrepostos). Quando a transfer^ncia corrente termina, um teste pode ser feito para veri car se algum e dos dispositivos est~o posicionados no cilindro correto. Se um ou mais est~o, a proxima transfer^ncia a a e pode ser iniciada no dispositivo que ja esta no cilindro correto. Se nenhum dos bracos esta na posic~o a desejada, o driver deve emitir novos seeks sobre os dispositivos que ja completaram a transfer^ncia, e e esperar ate a proxima interrupc~o para examinar em qual dispositivo o posicionamento do braco se a completou.

Figura 5.3: Algoritmo de escalonamento menor seek primeiro (SSF) Quando a requisic~o corrente termina (cilindro 11), o disk driver tem que escolher qual sera a a proxima requisic~o. Usando FCFS, ele ira para o cilindro 1, ent~o para o 36, e assim por diante. Este a a algoritmo requer movimentos do braco de 10, 35, 20, 18, 25, e 3, respectivamente, num total de 111 cilindros. Alternativamente, a proxima requisic~o pode ser manuseada a m de minimizar o tempo de seek. a Dadas as requisic~es da Figura 5.3, a sequ^ncia 12, 9, 16, 1, 34, e 36, como mostrado na linha entalhada. o e Com esta sequ^ncia, os movimentos do braco s~o 1, 3, 7, 15, 33, e 2, num total de 61 cilindros. Este e a algoritmo, menor seek primeiro (SSF), diminuiu o total de movimentos do braco pela metade, comparado com o FCFS. Infelizmente, SSF tem um problema. Suponha mais requisic~es chegando enquanto as requisic~es o o da Figura 5.3 esta sendo processada. Por exemplo, se, apos chegar ao cilindro 16, uma nova requisic~o a para o cilindro 8 esta presente. Esta requisic~o tera prioridade sobre o cilindro 1. Se a requisic~o for a a para o cilindro 13, o braco ira para o 13, ao inves de ir para o cilindro 1. Com disco muito carregados, o braco tende a permanecer no meio do disco a maior parte do tempo, prejudicando assim as requisic~es o das extremidades. Requisic~es distantes do meio s~o em media mais demoradas, colocando o objetivo o a de m nima resposta no tempo e imparcialidade no acesso. Um algoritmo para reconciliar os objetivos con itantes entre a e ci^ncia e imparcialidade constituie se em manter o movimento do braco na mesma direc~o ate n~o haver mais requisic~es pendentes a a o naquela direc~o, e ent~o o movimento do braco e mudado. Este algoritmo, conhecido como algoritmo a a do elevador, requer o software mantenha 1 bit: o bit da direc~o corrente, UP ou DOWN . Quando a a requisic~o termina, o disk driver testa o bit. Se e UP, o braco e movido para a proxima requisic~o a a pendente de posic~es mais altas, se houver. Se n~o ha requisic~es pendentes para posic~es mais altas, o a o o o bit de direc~o e revertido. Quando o bit e mudado para DOWN, o movimento sera para a proxima a requisic~o de posic~o mais baixa, se houver. a a
46

5.4 E/S no Unix


Dispositivos no Unix podem ser do tipo bloco ou caracter. O interfaceamento com os dispositivos e se da atraves do subsistema de arquivos. Cada dispositivo tem um nome id^ntico a nomes de arquivos (/dev/tty, /dev/console) e um respectivo i-node. i-nodes associados a dispositivos t^m como tipo de e arquivo \block" ou \character special", o que os distingue dos arquivos regulares. Cada dispositivo tem seu device driver associado. No Unix, um driver implementa as chamadas de sistema open, close, read, write e ioctl para o seu dispositivo, bem como o tratamento para as interrupc~es oriundas deste. o
DCA/FEEC/UNICAMP 47

c 1996

Cardozo, Magalh~es, Faina & Ricarte a

Sistemas Operacionais

Entrada e Sa da

E/S em MS-DOS 5.5]

Em dispositivos que operam em bloco, a transfer^ncia de dados entre o espaco de enderecamento de e um processo e o dispositivo de da atraves de um bu er cache. A raz~o para tal e que tais dispositivos a s~o lentos, sendo portanto a \bu erizac~o" um meio de aumentar a taxa de transfer^ncia de dados. a a e Dispositivos do tipo caracter (terminais, por exemplo) s~o inerentemente rapidos e n~o necessitam a a deste recurso. A Figura 5.5 mostra o esquema basico de entrada e sa da no Unix. Quando um processo executa uma chamada de sistema open, por exemplo, o nucleo acessa o i-node do arquivo passado a chamada e descobre que e um arquivo associado a um dispositivo de E/S. Atraves de uma tabela de chaveamento de dispositivo, o nucleo obtem o endereco da rotina de open para este dispositivo. Uma vez iniciado o dispositivo, um campo na tabela de arquivos e adicionado, sendo o ndice deste campo (descritor) retornado ao processo. Uma chamada close faz com que o nucleo acesse o respectivo procedimento para o dispositivo, cuja identi cac~o e obtida na tabela de arquivos. a
open close read write ioctl open close read mount umount write

Uma rotina denominada strategy perfaz as operac~es de leitura e escrita em tais dispositivos. Quando o uma operac~o de leitura ou escrita e requisitada, o nucleo identi ca a rotina strategy de nida para o a dispositivo, passando a mesma o endereco do cabecalho do bu er para onde os dados devem ser copiados, caso leitura, ou contendo os dados para escrita.

5.5 E/S em MS-DOS


Assim como Unix, MS-DOS tambem suporta dispositivos de E/S atraves de arquivos especiais de tipo bloco ou caracter. Parte dos drivers esta incorporada no arquivo io.sys, mas o usuario pode instalar drivers adicionais atraves de comandos device= no arquivo con g.sys. Todo driver em MS-DOS e composto de duas partes de codigo, uma para receber as requisic~es o (o request handler ) do sistema operacional e outra parte para efetivar a operac~o de transfer^ncia de a e dados. Cada driver instalado e inserido no topo de uma lista ligada de drivers, e uma variavel interna do sistema aponta para o topo da lista. Desta forma, drivers instalados recentemente tem preced^ncia e sobre drivers antigos. Em termos de dispositivos f sicos, muitos t^m enderecos pre-de nidos na con gurac~o de hardware. A e a Tabela 5.1 mostra os enderecos de E/S e os vetores de interrupc~o alocados para alguns dos controladores a do IBM PC. A atribuic~o de enderecos de E/S para dispositivos e feita por um decodi cador logico a associado ao controlador. Alguns IBM PC-compat veis usam diferentes enderecos de E/S. relogio 040 - 043 8 teclado 060 - 063 9 porta serial secundaria 2F8 - 2FF 11 disco r gido 320 - 32F 13 impressora 378 - 37F 15 v deo monocromatico 380 - 3BF v deo colorido 3D0 - 3DF disco ex vel 3F0 - 3F7 14 porta serial primaria 3F8 - 3FF 12 Tabela 5.1: Alguns exemplos de controladores, os seus enderecos de E/S e seus vetores de interrupc~o a no IBM PC

rotinas do cache de buffers

tabela de chaveamento (dispositivos orientados a caracter)

tabela de chaveamento (dispositivos orientados a bloco)

dispositivo

endereco E/S vetor int.

open close read write ioctl

open

close

strategy

driver

driver

gerenciador de interrupes

gerenciador de interrupes

vetor de interrupo interrupes


dispositivo
dispositivo

dispositivo

Figura 5.5: Esquema basico de E/S no Unix Chamadas ioctl permitem o usuario operar tanto arquivos regulares quanto dispositivos do tipo caracter. Operac~es t picas s~o bloquear um arquivo, desligar o eco do terminal, ajustar taxa de o a transfer^ncia de modems e rebobinar uma ta. e Para dispositivos do tipo bloco, chamadas read e write seguem o mesmo procedimento. Para tais dispositivos, na qual o driver tem que iteragir com as rotinas de bu er cache, o procedimento e outro.
48

c 1996

DCA/FEEC/UNICAMP

49

Cardozo, Magalh~es, Faina & Ricarte a

Entrada e Sa da

E/S em MS-DOS 5.5]

(5)

Problemas
processo (produtor) p~e informac~o em um bu er com capacidade limitada, enquanto outro proo a cesso (consumidor) remove elementos deste bu er. O bu er e um recurso compartilhado, e deve ser controlado de forma que nem o produtor possa inserir elementos quando o bu er esta cheio e nem o consumidor retire elementos de um bu er vazio. Esquematize uma soluc~o para este problema a de sincronizac~o usando semaforos. a (2) Medidas em um sistema indicam que umprocesso executa em media segundos antes de bloquear em uma operac~o de entrada e sa da. O tempo de chaveamento de contexto e segundos. Para um a sistema escalonador usando round-robin com um quantum , de na uma formula para a e ci^ncia e da CPU (raz~o entre tempo gasto com trabalho util sobre tempo total) em cada um dos casos a seguintes: (a) = 1 (b) (c) (d) = (e) 0 (3) Cinco jobs (A, B, C, D, E) chegam a um centro de processamento quase ao mesmo tempo. Eles t^m tempos estimados de execuc~o 10, 6, 2, 4 e 8 minutos, respectivamente, e prioridades (de nidas e a externamente) 3, 5, 2, 1, e 4, com 5 sendo a prioridade mais alta. Determine o tempo medio de execuc~o por processo para cada uma das seguintes pol ticas de escalonamento: a (a) Round robin (b) Por prioridades (c) FCFS (d) Tarefas pequenas primeiro. (4) Considere um sistema de swapping na qual a memoria tem buracos de tamanhos 10K, 4K, 20K, ~ 18K, 7K, 9K, 12K e 15K. Ha requisicOes sucessivas para segmentos de 12K, 10K e 9K. Que buracos s~o ocupados quando a pol tica de alocac~o e: a a (a) First t? (b) Best t? (c) Next t?
T S Q Q Q > T S < Q < T Q Q S

(6)

(1) Um problema classico de sincronizac~o e conhecido como o problema produtor-consumidor. Um a (7)

(8)

(d) Worst t (sempre ocupar o maior buraco dispon vel)? Considere um computador com 1M de memoria do usuario que executa um procedimento de compactac~o de memoria a cada segundo. Se e preciso 0.5 s para copiar um byte e o tamanho medio a de um buraco e 40% do tamanho medio de um segmento, que frac~o do tempo total de CPU e a gasta com compactac~o? a Usando a tabela de paginas da Figura 3.5, d^ os enderecos f sicos correspondentes aos enderecos e virtuais: (a) 20 (b) 4100 (c) 8300 A listagem a seguir corresponde a um programa em assembly para um computador com paginas de 512 bytes. O programa esta localizado no endereco 1020, e o stack pointer esta em 8192 (com a pilha crescendo para 0). D^ a sequ^ncia de paginas referenciadas por este programa, considerando e e que cada instruc~o ocupa 4 bytes (uma palavra). Tanto refer^ncias a dados quanto a instruc~es a e o devem ser consideradas. Load palavra em 6144 no registrador 0 Push registrador 0 na pilha Call procedimento em 5120, empilhando endereco de retorno Subtract a constante imediata 16 do stack pointer Compare o par^metro atual com a constante imediata 4 a Jump se igual para 5152. Um computador tem quatro page frames. O instante em que foram carregados, o instante da ultima refer^ncia e os estados dos bits R e M s~o indicados abaixo: e a Frame Carreg Refer R M 0 126 279 0 0 1 230 260 1 0 2 120 120 1 1 3 160 280 1 1

Qual pagina seria substitu da se a pol tica de troca adotada fosse: (a) FIFO? (b) NRU? (c) LRU? (d) Segunda chance? (9) Quanto tempo e necessario para carregar um programa de 64K do disco se o tempo medio de posicionamento e 30 ms, o tempo de rotac~o e 20 ms e as trilhas t^m 32K quando o tamanho das a e paginas e
DCA/FEEC/UNICAMP 51

50

c 1996

Cardozo, Magalh~es, Faina & Ricarte a

Sistemas Operacionais

(a) 2K? (b) 4K? As paginas est~o espalhadas aleatoriamente pelo disco. a (10) Considere um disco de 1G de capacidade com blocos de tamanho 4K. Quanto espaco e necessario para manter a ger^ncia de espaco livre por mapa de bits? E por lista ligada de blocos? A partir de e qual fator de ocupac~o uma estrategia passa a ser mais econ^mica que a outra? a o (11) Um veri cador de sistema de arquivos construiu a seguinte tabela de consist^ncia de blocos: e
Em uso: 1 0 1 0 0 1 0 1 1 0 1 0 0 1 0 Livre: 0 0 0 1 1 1 0 0 0 1 0 1 1 0 1

Ha algum erro de consist^ncia? Em caso a rmativo, estes erros s~o graves? Por qu^? e a e

(12) Um driver de disco r gido recebe requisic~es para os cilindros 10, 22, 20, 2, 40, 6 e 38, nesta ordem. o

O tempo de seek toma 6 ms por cilindro. Qual e o tempo gasto em posicionamento para atender estas requisic~es com as pol ticas de (a) FCFS (b) SSF e (c) elevador? Considere que o disco o estava posicionado no cilindro 20, e para o elevador a direc~o inicial era crescente (para cima). a (13) A rotina de manipulac~o de interrupc~o de relogio em um computador requer 2 ms para executar, a a incluindo-se chaveamento de contextos. O relogio trabalha a uma frequ^ncia de 60 Hz. Que frac~o e a do tempo de CPU e dedicada ao relogio?

52

c 1996

De: Eleri Cardozo [eleri@dca.fee.unicamp.br] Enviado em: segunda-feira, 8 de setembro de 2008 11:31 Para: Professor BELFORT Assunto: Re: apostila Anexos: so-apst.pdf Prezado Marcus, A apostila pode ser utilizada mantidos os nomes dos autores. Segue em anexo uma verso mais atualizada (mas ainda assim antiga com muita herana do livro do Tanenbaum). Abraos, Eleri.

Professor BELFORT wrote: > Caro Professor Cardozo, > Sou professor de cursinhos preparatrios pra concursos em Braslia/DF. > Tambm, sou Oficial da Aeronutica (coronel-aviador) da reserva. > Apenas por curiosidade, vi no seu currculo que o senhor passou pelo > ITA. Tambm estudei e trabalhei l, pelos idos de 1987 a 1990. > Escrevo para saber se posso usar essa sua apostila (vide anexo) em > minhas aulas, em carter TEMPORRIO (enquanto meu material no est > pronto), mantida a formatao original, conforme o anexo, com todos os > crditos de autoria pertinentes. Seu material abrangente, sinttico, > claro e didtico, ideal para o trabalho que venho desenvolvendo. > Agradeo se puder me ajudar. > Um grande abrao. > Marcus Belfort.