Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Indice
1 Introduc~ ao
Sistemas Operacionais
Notas de aula EA877 | Mini e Microcomputadores: Software
O que e um Sistema Operacional? Historia dos Sistemas Operacionais De nic~ oes 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^ encia Comunicac~ ao Interprocessos Escalonamento de Processos Processos em Unix Processos em MS-DOS
: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :
: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :
: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :
8 8 11 11 13 13 16 17 21 24 26 28
Ger^ encia Sem Permuta Ger^ encia com Permuta Memoria Virtual Algoritmos de Troca de Pagina Ger^ encia de Memoria no UNIX Ger^ encia de Memoria em MS-DOS 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
Sistemas Operacionais
c 1996
DCA/FEEC/UNICAMP
Sistemas Operacionais
Introduc~ ao
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~ ao de gerenciar de forma adequada estes recursos de 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~ ao de forma otimizada da CPU entre as tarefas em execuc~ ao.
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^ encia e engenharia. Do outro, haviam os computadores comerciais que executavam tarefas como ordenac~ ao de dados e impress~ ao de relatorios, sendo utilizados principalmente por instituic~ oes nanceiras. A IBM tentou resolver este problema introduzindo a serie System/360. Esta serie consistia de maquinas com mesma arquitetura2 e conjunto de instruc~ oes. Desta maneira, programas escritos para uma maquina da serie executavam em todas as demais. A serie 360 foi projetada para atender tanto aplicac~ oes cient cas quanto comerciais. N~ ao foi poss vel para a IBM escrever um sistema operacional que atendesse a todos os con itos de 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~ ao, como por exemplo a multiprogramac~ ao. Outra caracter stica apresentada foi a capacidade de ler jobs dos cart~ oes perfurados para os discos, assim que o programador os entregasse. Dessa maneira, assim que um job terminasse, o computador iniciava a execuc~ ao do seguinte, que ja f^ ora lido e armazenado 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~ ao de sistemas. O desejo por respostas rapidas abriu caminho para o time-sharing, uma variac~ ao da multiprogramac~ ao onde cada usuario tem um terminal on-line e todos compartilham uma unica CPU. 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~ ao mostrou-se impraticavel para a decada de sessenta. O projeto MULTICS in uenciou os pesquisadores da Bell que viriam a desenvolver o UNIX uma decada depois.
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~ oes de trabalho. Em termos de arquitetura, estes n~ ao diferem dos minicomputadores da classe do PDP-11, exceto no quesito mais importante: preco. Enquanto os minicomputadores atendiam companhias e universidades, os computadores pessoais e estac~ oes de trabalho passaram a atender usuarios individualmente. 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~ ao de estudar muito para utiliza-los. Esta foi certamente a maior mudanca em relac~ ao ao OS/360 que
2 3
Por sinal, o termo arquitetura de computador foi introduzido pelos projetistas deste sistema. Massachussets Institute of Technology.
c 1996
DCA/FEEC/UNICAMP
Sistemas Operacionais
Introduc~ ao
Exemplos 1.4]
era t~ ao obscuro que diversos livros foram escritos sobre ele. Dois sistemas operacionais dominaram o mercado: MS-DOS para os computadores pessoais e UNIX para as estac~ oes de trabalho. 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^ eem ao usuario uma interface transparente de acesso a recursos compartilhados (aplicativos, arquivos, impressoras, etc), sejam estes recursos locais ou remotos. Sistemas operacionais distribu dos s~ ao muito mais complexos. Estes sistemas permitem que os processadores cooperem em servicos intr nsecos de sistemas operacionais tais como escalonamento de tarefas e paginac~ ao. Por exemplo, num sistema operacional distribu do uma tarefa pode \migrar" durante sua execuc~ ao de um computador sobrecarregado para outro que apresente carga mais leve. Contrario aos sistemas operacionais de rede que s~ ao largamente dispon veis comercialmente, sistemas operacionais distribu dos t^ em sua utilizac~ ao ainda restrita.
ao suporte de multiplos processos concorrentes, permite que instruc~ oes e dados de dois ou mais processos disjuntos estejam residentes na memoria principal simultaneamente. cuta instruc~ oes uma a uma, certos projetos mais avancados incrementaram a velocidade efetiva de computac~ ao permitindo que varias instruc~ oes fossem executadas ao mesmo tempo. Um computador com multiplos processadores que compartilhem uma memoria principal comum e chamado um multiprocessador. O sistema que suporta tal con gurac~ ao e um sistema que suporta o multiprocessamento. interface do usuario com o sistema operacional. Este processo l^ e o teclado a espera de comandos, interpreta-os e passa seus par^ ametros ao sistema operacional. Servicos como login e logout, manipulac~ ao de arquivos, e execuc~ ao de programas s~ ao solicitados atraves do interpretador de comandos.
Multiprocessamento Embora a maioria dos computadores disponha de uma unica CPU que exe-
entre usuario e sistema operacional, as chamadas do sistema constituem a interface entre programas aplicativos e o sistema operacional. As chamadas do sistema s~ ao func~ oes que podem ser ligadas com os aplicativos provendo servicos como leitura do relogio interno, operac~ oes de entrada/sa da e comunicac~ ao inter-processos.
Arquivos Uma das func~ oes associadas a sistemas operacionais e esconder os detalhes de hardware do usuario. O conceito de arquivos oferece um n vel de abstrac~ ao que adequado para manipular grupos de dados armazenados em discos e perifericos de entrada e sa da (I/O). Alem de suportar func~ oes para transferir dados entre discos (ou perifericos) e a aplicac~ ao, o sistema operacional pode tambem suportar func~ oes para organizar os dados do disco em diretorios e para controlar o acesso a estes dados. Codigo Reentrante Um codigo de um programa e dito ser reentrante quando um segundo processo
pode iniciar a execuc~ ao deste codigo mesmo que o codigo esteja sendo executado por um outro processo.
habilidade de suportar a execuc~ ao concorrente de processos sobre um processador unico, sem necessariamente prover forma elaborada de gerenciamento de recursos (CPU, memoria, etc). Sistemas operacionais multiusuarios permitem acessos simult^ aneos ao computador atraves de dois ou mais terminais de entrada. Embora frequentemente associada com multiprogramac~ ao, multitarefa n~ ao implica necessariamente em uma operac~ ao multiusuario. Operac~ ao multiprocessos sem suporte de multiusuarios pode ser encontrado em sistemas operacionais de alguns computadores pessoais avancados e em sistemas de tempo-real.
1.4 Exemplos
No restante desta apostila, os conceitos que ser~ ao apresentados | ger^ encia de processos e de memoria, manipulac~ ao de arquivos e de dispositivos de entrada e sa da | ser~ ao ilustrados sob a optica de dois sistemas operacionais de ampla utilizac~ ao, MS-DOS e Unix. Estes dois sistemas s~ ao brevemente introduzidos a seguir. O ja citado projeto MULTICS (Sec~ ao 1.2.3) n~ ao obteve sucesso por ser ambicioso demais. Um dos pesquisadores deste projeto, Ken Thompson (Bell Labs) decidiu escrever uma vers~ ao simpli cada deste sistema em uma maquina ja sem uso (um minicomputador PDP-7). Esta vers~ ao do sistema foi batizada de UNICS (Uniplexed Information and Computing Service), uma brincadeira com relac~ ao ao \multiplexed" de MULTICS. Posteriormente, este sistema simpli cado viria a alcancar grande sucesso sob o nome de Unix.
DCA/FEEC/UNICAMP 5
operacional que prov^ e gerenciamento da totalidade de recursos tais como CPU, memoria, sistema de arquivos, em adic~ ao ao suporte da execuc~ ao concorrente dos processos. Quando um sistema operacional permite apenas a monoprogramac~ ao, a execuc~ ao de programas passa por diversas fases, alternando momentos em que o processo se encontra executando ou bloqueado. Atraves do uso da multiprogramac~ ao e poss vel reduzir os per odos de inatividade da CPU e consequentemente aumentar a e ci^ encia do uso do sistema como um todo. O termo multiprogramac~ ao denota um sistema operacional o qual em adic~ ao
4
1.4.1 Unix
c 1996
Sistemas Operacionais
Introduc~ ao
Exemplos 1.4]
Apos a vers~ ao inicial, desenvolvida por esforco pessoal de Thompson, outras pessoas passaram 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^ emio ACM Turing. Unix logo 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~ ao \o cial" de Unix. Em contraposic~ ao a esta vers~ ao, ha o sistema Unix desenvolvido (a partir da vers~ ao para o PDP-11) na Universidade da California em Berkeley, usualmente conhecido como Unix BSD (Berkeley Software Distribution). Varias empresas que passaram a distribuir suas vers~ oes de Unix para seus sistemas utilizaram como base o Unix BSD, tais como a Sun e a DEC. As diferencas entre estas duas vers~ oes de Unix levaram ao desenvolvimento de um padr~ ao para uniformizar as interfaces de 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~ ao que utilize os servicos do sistema operacional de nidos pelo padr~ ao POSIX pode ser transportada para qualquer sistema tipo Unix sem problemas. Entretanto, a quest~ ao da uniformidade dos diferentes sistemas Unix ainda n~ ao foi completamente respondida. Ha ainda hoje distinc~ ao entre sistemas produzidos pela Open Software Foundation (OSF, um consorcio de empresas de computac~ ao do porte da IBM, HP e DEC) e pela Unix International (UI, outro consorcio liderado pela AT&T), alem de empresas que utilizam suas proprias variac~ oes, como o AIX da IBM. mesmo assim, Unix e um dos sistemas operacionais de maior aceitac~ ao na comunidade \n~ ao-comercial". A raz~ ao da aceitac~ ao do UNIX e explicada por: 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~ ao de arquivos baseada no conceito de stream (cadeia) de bytes 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.
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~ ao de um interpretador BASIC para o seu computador pessoal. O proprietario da empresa, Bill Gates, havia desenvolvido um interpretador BASIC para o primeiro computador pessoal, o Altair. Aproveitando a ocasi~ ao, a IBM manifestou interesse em um sistema operacional. Na epoca, a Microsoft 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~ ao foi adotar o sistema CP/M-86, da Digital Research, a empresa que havia produzido o ent~ ao popular sistema operacional CP/M para processadores de 8 bits. No entanto, o cronograma para o CP/M-86 estava atrasado, e a IBM n~ ao queria esperar. Voltando a Gates, pediu-lhe que produzisse um sistema operacional para 16 bits. Gates ent~ ao comprou o software 86-DOS da empresa Seattle Computer Products (que o utilizava para testar as placas de memoria que produzia) e contratou o autor do programa, Tim Patterson, para fazer uma adaptac~ ao rapida. Desta forma, nasceu MS-DOS, embarcado em IBM-PCs a partir de 1981. Provavelmente, se a IBM ou a Microsoft pudessem imaginar o n vel de sucesso que esta combinac~ ao 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^ onica e os diagramas esquematicos e codigo basico podiam ser encontrados 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~ ao o modelo de memoria e a falta de protec~ ao de hardware. Apesar do processador 8088 ter um espaco de 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.
hardware ou software para este sistema. Desta forma, ela selecionou como plataforma de hardware
1.4.2 MS-DOS
MS-DOS (MicroSoft Disk Operating System), provavelmente o sistema operacional com maior numero de usuarios, foi desenvolvido de forma n~ ao t~ ao pro ssional. Quando a IBM decidiu lancar seu computador pessoal no in cio da decada de 1980, a empresa n~ ao estava interessada no desenvolvimento de
6
c 1996
DCA/FEEC/UNICAMP
Processos
ao m sem interrupc~ ao para evitar inconsist^ encias. Em situac~ oes como estas, a parte do codigo que o manipula o recurso compartilhado e uma regi~ ao cr tica. O codigo que implementa uma regi~ ao cr tica deve obedecer a uma serie de restric~ oes:
dois processos n~ ao podem estar simultaneamente executando regi~ oes cr ticas referentes a um mesmo recurso compartilhado (garantia de mutua exclus~ ao) a garantia de mutua exclus~ ao deve ser independente da velocidade relativa dos processos ou numero de CPUs nenhum processo executando fora de regi~ oes cr ticas pode bloquear outro processo nenhum processo deve esperar um tempo arbitrariamente longo para poder executar uma regi~ ao cr tica. Varios algoritmos de controle visando garantir as propriedades acima foram propostos. Estes algoritmos s~ ao classi cados segundo o modo com que esperam pela autorizac~ ao de entrada numa regi~ ao cr tica: espera ocupada (usando a CPU durante a espera) ou bloqueada (n~ ao competindo pela CPU). Todo algoritmo de mutua exclus~ ao possui duas func~ oes delimitadoras. A primeira func~ ao e evocada quando o processo deseja iniciar a execuc~ ao de uma regi~ ao cr tica. Quando esta func~ ao retorna, o processo esta apto a executar a regi~ ao cr tica. No nal da execuc~ ao da regi~ ao cr tica, o processo evoca a segunda func~ ao, que ent~ ao provoca o retorno da primeira func~ ao em outro processo. Para permitir que regi~ oes cr ticas que acessam recursos compartilhados distintos possam ser executadas ao mesmo tempo, a cada recurso compartilhado e associado um identi cador, e as duas func~ oes que comp~ oem o algoritmo de garantia de mutua exclus~ ao possuem este identi cador como par^ ametro. Nesta sec~ ao analisaremos varias propostas para garantir exclus~ ao mutua nas regi~ oes cr ticas, n~ ao permitindo que mais de um processo possam manipular um recurso compartilhado ao mesmo tempo. Em todas, o processo que esta tentanto acessar uma regi~ ao cr tica em execuc~ ao por outro processo permanece em espera ocupada, isto e, competindo pela CPU mas sem avancar no seu processamento.
Desabilitar Interrupc~ oes A soluc~ ao mais simples e o metodo de desabilitar todas as interrupc~ oes
quando se esta entrando na regi~ ao cr tica, e reabilita-las ao sair. Esta proposta n~ ao e muito atrativa, pois da ao processo usuario poder de desabilitar todas as interrupc~ oes, inclusive aquelas que permitem o nucleo reassumir a CPU. Caso o processo n~ ao as reabilite por algum motivo, o sistema operacional jamais reassume o controle do harware. Por outro lado, e conveniente para o sistema operacional desabilitar interrupc~ oes durante algumas instruc~ oes, enquanto esta atualizando variaveis internas. Assim, desabilitar interrupc~ oes e uma soluc~ ao util para o sistema operacional, mas n~ ao para processos de aplicac~ ao. recurso compartilhado, uma variavel global LOCK, inicialmente igual a 0. Quando um processo deseja entrar em sua regi~ ao cr tica ele primeiro testa o valor de LOCK. Se for 0, o processo altera para 1 e executa a regi~ ao cr tica. Se for 1, ele espera ate que seja 0. Embora pareca uma boa soluc~ ao, o que ira ocorrer se dois processos testam uma variavel de valor 0 ao mesmo tempo?
DCA/FEEC/UNICAMP 9
Variaveis LOCK Uma segunda tentativa leva-nos a uma soluc~ ao por software. Considere, para cada
c 1996
Sistemas Operacionais
Processos
de acesso a regi~ ao cr tica | ou seja, esta variavel indica quem deve esperar e quem pode entrar na sec~ ao cr tica. Se TURN for , o processo pode entrar na regi~ ao cr tica. Ao sair, deve passar o valor de TURN para + 1 (modulo o numero total de processos). Este algoritmo garante a mutua exclus~ ao, mas os 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^ encia de acesso for diferente entre os processos?
i i i
Altern^ ancia Estrita Esta proposta de ne uma variavel TURN que indica qual processo tem o direito
a caracter stica de mutua exclus~ ao, pois eles devem garantir que apenas um processo pode estar ativo1 no monitor em um dado instante. Monitores constituem-se em um conceito de linguagem de programac~ ao, ou seja, o compilador reconhece que os monitores s~ ao especiais e pode manusear as chamadas do monitor diferentemente de outras chamadas. Monitores, apesar de elegantes na manutenc~ ao de mutua exclus~ ao, t^ em aplicac~ ao restrita pois raras s~ ao as linguagens de programac~ ao que os incorporam.
Soluc~ ao de Peterson Esta soluc~ ao e obtida pela combinac~ ao das ideias de variaveis LOCK e TURN,
criando-se tambem uma soluc~ ao por software para o problema. Ela evita os problemas individuais das soluc~ oes anteriores, mas e pouco utilizada na pratica por utilizar espera ocupada.
(Test and Set Lock) presente em muitos processadores. Esta instruc~ ao permite a implementac~ ao de variaveis LOCK cujo teste e atualizac~ ao s~ ao at^ omicos (em outras palavras, a instruc~ ao TSL e indivis vel mesmo frente a interrupc~ oes de hardware ).
Instruc~ ao TSL Esta proposta requer suporte de hardware. Ela utiliza uma instruc~ ao da forma TSL
Passagem de Mensagem Este metodo de comunicac~ ao entre processos usa duas chamadas de sis-
Ser~ ao apresentados a seguir alguns mecanismos de garantia de mutua exclus~ ao que bloqueiam os processos quando tentam executar uma regi~ ao cr tica \ocupada". S~ ao mais e cientes que os anteriores, posto que processos bloqueados n~ ao competem pela CPU.
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~ ao bu ers alocados pelos processos para ns de envio e recepc~ ao de mensagens. Mensagens s~ ao estruturas cujo conteudo e interpretado unicamente pelos processos emissor e receptor da mensagem.
Sleep e Wakeup Um dos metodos mais simples de implementac~ ao da espera bloqueada e a utilizac~ ao
do par sleep e wakeup. sleep e uma chamada de sistema que muda o estado de um processo em execuc~ ao para bloqueado. Um processo bloqueado volta a tornar-se ativo quando outro processo o desbloqueia atraves da chamada wakeup. O metodo e o mesmo que emprega variaveis LOCK operadas por instruc~ oes TSL, exceto que quando a variavel apresenta valor 1, o processo executa sleep. O processo que altera o valor de LOCK para 0 ao sair da regi~ ao cr tica e o responsavel por ativar um processo bloqueado (via wakeup). Infelizmente, deixar ao programador a responsabilidade da execuc~ ao destas chamadas pode levar a um estado onde todos os processos encontram-se bloqueados | uma situac~ ao denominada deadlock. usuario, mas atraves variaveis do tipo semaforos, que contam o numero de vezes que a operac~ ao wakeup foi realizada. Duas operac~ oes, DOWN e UP s~ ao de nidas. A operac~ ao DOWN veri ca se o valor do semaforo e maior que 0. Se o for, decrementa este valor e continua. Se o valor e 0, o processo e bloqueado. A operac~ ao UP incrementa o valor do semaforo. Se um ou mais processos estiverem bloqueados sobre aquele semaforo, um deles e escolhido pelo sistema para completar a operac~ ao DOWN (emitindo-lhe um wakeup). As operac~ oes com semaforos s~ ao at^ omicas ou indivis veis, implementadas com instruc~ oes TSL.
de troca de mensagens que estrutura processos como servidores ou clientes. Um processo servidor disp~ oe de um conjunto de servicos que s~ ao disponibilizados para outros processos (atraves de uma rotina REGISTER RPC). Um processo cliente pode evocar um destes servicos como se evocasse um procedimento local, passando par^ ametros para sua execuc~ ao se for o caso, atraves de uma rotina CALL RPC. Recebida a requisic~ ao, o servidor executa o servico e retorna os resultados ao cliente. O envio e recepc~ ao de par^ ametros e retornos se da por troca de mensagens, que cam transparentes para o programador.
Monitores Semaforos tornam simples a protec~ ao de recursos compartilhados, mas n~ ao garantem que n~ ao va haver deadlocks : a troca na ordem da chamada das primitivas pode gerar uma situac~ ao de bloqueio mutuo. Monitores s~ ao uma proposta de mecanismo de sincronizac~ ao de alto n vel. Um monitor e uma colec~ ao de procedimentos, variaveis e estruturas de dados agrupados em um bloco. Os processos podem acessar os procedimentos do monitor mas n~ ao suas estruturas internas. Monitores apresentam
10
c 1996
DCA/FEEC/UNICAMP
11
Sistemas Operacionais
Processos
e ci^ encia: manter a CPU ocupada praticamente 100% do tempo tempo de resposta: minimizar o tempo de resposta na execuc~ ao dos processos, principalmente os
interativos (editores, planilhas, etc)
tempo de espera: minimizar o tempo de espera de servicos n~ ao interativos (compilac~ ao, impress~ ao,
etc)
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^ encia da CPU, pois a alocac~ ao 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~ ao de igual import^ ancia. Certas aplicac~ oes, como controle de processos industriais, demandam um algoritmo de escalonamento com prioridades | desta forma, e poss vel tratar adequadamente situac~ oes de emerg^ encia. O princ pio do escalonamento por prioridades e que cada processo tem associada 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~ ao | um processo conhecido como envelhecimento.
Algoritmos com Prioridades O algoritmo Round Robin faz a considerac~ ao que todos os proces-
Multiplas Filas Este e um algoritmo que de ne classes com prioridades. Processos na classe de
menor prioridade s~ ao executados por um quantum processos na classe seguinte, por dois quanta na 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~ oes da CPU entre os processos ativos.
Tarefas Pequenas Primeiro Este algoritmo e designado para aplicac~ oes n~ ao interativas, onde o
tempo medio de execuc~ ao e conhecido a priori. O algoritmo de ne que as tarefas menores devem ser executadas primeiro. Prova-se que esta pol tica minimiza o tempo medio de espera dos jobs.
Algoritmo Policy-Driven Este algoritmo particiona a CPU de forma equ^ anime entre os usuarios
n =n
(n~ ao entre os processos). O algoritmo de ne que se existirem usuarios ligados ao sistema, cada usuario devera receber 1 do poder da CPU. Para isto, o sistema deve manter informac~ oes do tempo de CPU que cada usuario ja disp^ os desde que entrou no sistema, e do instante de tempo que cada usuario ligou-se ao sistema.
12
c 1996
Sistemas Operacionais
Processos
retorno
interrupo/retorno 2
um apontador para o PSP do processo corrente. 3. Carregar o codigo binario na primeira posic~ ao apos o PSP. 4. Iniciar a execuc~ ao do programa. Escalonamento da CPU tambem e simples. Como so ha um processo ativo, este processo retem a posse da CPU o tempo todo, a n~ ao ser quando um processo TSR toma o controle da execuc~ ao.
Bloqueado
Figura 2.1: Estados de um processo deve car suspenso aguardando o m da execuc~ ao do processo lho. MS-DOS tem dois tipos de arquivos executaveis binarios, e ha correspondentemente dois tipos de processos. Um arquivo com extens~ ao .com n~ ao tem nenhum cabecalho e ocupa um unico segmento 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~ ao possa ocupar mais do que 64 KBytes, o processo recebe para si toda a memoria dispon vel. Uma tentativa de iniciar um novo processo lho nesta situac~ ao iria falhar por falta de memoria, a n~ ao ser que o programador explicitamente libere a porc~ ao da memoria que ele n~ ao ira usar para o sistema operacional com uma chamada do sistema. O outro tipo de arquivo executavel tem extens~ ao .exe. O processo criado por este tipo de arquivo pode ter diversos segmentos: texto, dados, pilha e segmentos extras. Um arquivo .exe incorpora informac~ ao de relocac~ ao, e pode ser relocado enquanto carregado. MS-DOS diferencia estes dois tipos de arquivo pelo conteudo de seus dois primeiros bytes, e n~ ao pela extens~ ao do nome do arquivo. Todo processo em MS-DOS tem um bloco de 256 bytes, o PSP (Program Segment Pre x), que descreve informac~ ao basica para o controle do processo, tal como tamanho do programa, apontador para o bloco do ambiente, apontador para o processo pai, e o endereco da rotina que sera invocada caso haja uma interrupc~ ao do usuario (Control-C). Normalmente, quando um processo encerra sua execuc~ ao, o espaco em memoria ocupado por ele 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~ ao especial de teclas. A forma pela qual MS-DOS permite que isto aconteca e atraves da modi cac~ ao, pelo proprio processo do usuario, de rotinas que ir~ ao tratar interrupc~ oes de teclado. A ger^ encia de processos em MS-DOS e simples. Quando um processo requer o carregamento e execuc~ ao de um outro programa, os seguintes passos s~ ao executados pelo sistema operacional: 1. Encontrar um bloco de memoria grande o su ciente para o processo. Para um arquivo .exe, esta informac~ ao esta contida no cabecalho para arquivos .com, toda a memoria dispon vel e alocada 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
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.
Se adotarmos a estrategia de admitir mais de um processo na memoria por vez, devemos estabelecer uma estrategia de organizac~ ao da memoria. A estrategia mais simples consiste em dividir a memoria em n (possivelmente diferentes) partic~ oes. Quando um processo inicia, este pode ser colocado em uma la de entrada para ocupar a menor partic~ ao de tamanho su ciente para acomoda-lo. Desde que as partic~ oes s~ ao xas, qualquer espaco em uma partic~ ao n~ ao usado pelo processo e perdido. A Figura 3.1(a) apresenta este esquema de partic~ ao.
partio 4 700K partio 4
partio 3
partio 3
200K partio 1 100K sistema operacional (a) sistema operacional (b) partio 1
3.1.1 Monoprogramac~ ao
Figura 3.1: Organizac~ oes com partic~ oes xas: (a) Partic~ oes de memoria xa com las de entrada separadas para cada partic~ ao (b) partic~ ao de memoria xa com uma la simples de entrada A desvantagem de se ordenar os processos que chegam em las separadas torna-se aparente quando a la para a maior partic~ ao esta vazia, mas a la para a menor partic~ ao esta cheia, como no caso das partic~ oes 1 e 4 na Figura 3.1(a). Uma organizac~ ao alternativa e manter uma la unica como na Figura 3.1(b). Toda vez que uma partic~ ao e liberada, a mesma e alocada ao primeiro processo da la. Uma vez que e indesejavel gastar uma partic~ ao grande com um processo pequeno, uma estrategia mais e caz e procurar em toda la de entrada a maior tarefa para a partic~ ao liberada. Note que o ultimo algoritmo discrimina os processos pequenos, quando e usualmente desejavel dar a eles o melhor tratamento, n~ ao o pior.
c 1996
Sistemas Operacionais
para armazenar os seus processos, sendo ent~ ao necessario mover temporariamente processos para disco. Obviamente, para continuar sua execuc~ ao, um processo movido para disco deve ser trazido novamente para a memoria. Outro aspecto fundamental nesta abordagem de ger^ encia e como controlar onde ha espaco dispon vel na memoria. As duas estrategias mais utilizadas s~ ao ger^ encia de espaco livre por mapa de bits ou por listas encadeadas, que ser~ ao descritas na sequ^ encia.
para compactar toda a memoria. Certos mainframes utilizam hardware especial para a compactac~ ao da memoria. Um ponto negativo neste metodo de ger^ encia e saber o quanto de memoria alocar para um processo. Se os processos s~ ao criados com um tamanho xo que permanece constante ao longo de sua execuc~ ao, ent~ ao a alocac~ ao e simples: aloca-se exatamente o necessario ao tamanho do processo, nem mais nem menos. Na pratica, os segmentos de dados e pilha de um processo tendem a crescer durante a sua execuc~ ao. Alocac~ ao din^ amica de memoria e recurs~ ao (presentes em praticamente em todas as linguagens modernas de programac~ ao) s~ ao exemplos t picos de crescimento destes segmentos. Se o processo necessitar 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~ ao que ser movidos para disco com o intuito de criar espaco na memoria. Se o processo n~ ao 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~ ao, desde um pequeno numero de palavras ate muitos quilobytes. Para cada unidade de alocac~ ao existe um bit no mapa de bits, que 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 ....
C
11111000 11111111 10011111 (a)
B E
(b) B 5 B 6 8 p 9 14 C P 15 17 B 18 19 D P 20 25
Figura 3.2: Organizac~ ao com swapping: mudancas na alocac~ ao de memoria com processos chegando e deixando a memoria (regi~ oes escuras representam espaco n~ ao usado) A principal diferenca entre partic~ oes xas da Figura 3.1 e partic~ oes variaveis da Figura 3.2 e que o numero, a localizac~ ao e o tamanho das partic~ oes variam dinamicamente ao longo do tempo. A exibilidade de n~ ao se ter um numero xo de partic~ oes aumenta a utilizac~ ao da memoria, mas tambem 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~ ao da memoria. Ela n~ ao e empregada com frequ^ encia pelo fato de requerer muito tempo de CPU. Por exemplo, um microcomputador com 1 MByte de memoria e que pode copiar 1 Byte por s (1 MByte/s), gasta um segundo
18
Figura 3.3: Organizac~ ao com mapa de bits: (a) parte da memoria com 5 processos e 3 buracos (as marcas mostram as unidades de alocac~ ao da memoria e as regi~ oes escuras est~ ao livres) (b) mapa de bits correspondente (c) a mesma informac~ ao como uma lista ligada O tamanho de cada unidade de alocac~ ao e uma importante caracter stica de projeto. Para pequenas unidades de alocac~ ao tem-se um mapa de bits maior. Entretanto, mesmo com uma unidade de alocac~ ao t~ ao pequena como 4 bytes, cada 32 bits de memoria requer somente 1 bit no mapa (3% da memoria). Se a unidade de alocac~ ao for escolhida grande, o mapa de bits sera pequeno, mas memoria consideravel pode ser desperdicada se o tamanho do processo n~ ao for um multiplo exato da unidade de alocac~ ao.
DCA/FEEC/UNICAMP 19
c 1996
Sistemas Operacionais
Um mapa de bits (ocupando uma porc~ ao xa da memoria) prov^ e uma maneira simples de gerenciar memoria, uma vez que o tamanho do mapa de bits depende somente do tamanho da memoria e do tamanho da unidade de alocac~ ao. O problema principal com isto e que quando se decide trazer um processo de k unidades de alocac~ ao para a memoria, o gerenciador de memoria deve pesquisar no mapa de bits uma sequ^ encia de k consecutivos bits 0 no mapa. Esta operac~ ao e lenta, raz~ ao pela qual os mapas de bits s~ ao evitados na pratica. Outra maneira de gerenciar a memoria e manter uma lista de alocac~ oes e segmentos de memoria 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~ ao mantidos na lista ordenada por enderecos, varios algoritmos podem ser usados para alocar memoria, a m de criar ou permutar processos. Tais algoritmos s~ ao evocados 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~ ao de buracos, n~ ao de processos. O preco pago por esse aumento de velocidade na alocac~ ao e uma complexidade adicional e diminuic~ ao de velocidade quando se trata de liberar memoria, uma vez que um segmento livre tem de ser removido da lista de processos e inserido na lista de buracos. Novamente, a ine ci^ encia esta em se determinar poss veis fus~ oes. Os algoritmos apresentados acima mant^ em o rastreamento da memoria principal. Assim, quando processos s~ ao permutados do disco para a memoria, o sistema pode alocar espaco em memoria para eles. 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^ encia de espaco para permuta s~ ao os mesmos usados para ger^ encia da memoria principal. 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~ ao de espaco em disco por processo e necessaria (lembre-se que um processo pode ser permutado varias vezes durante a sua execuc~ ao). Entretanto, uma area maior de disco deve ser reservada para swapping.
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~ ao usada (de tamanho ; ). First- t e um algoritmo rapido pois naliza a busca o mais cedo poss vel.
M N > M M N M
Algoritmo First- t E o algoritmo mais simples. O algoritmo procura ao longo da lista de segmentos
Algoritmo Next- t Este algoritmo trabalha da mesma forma que o rst- t, exceto que guarda a
posic~ ao da lista onde o ultimo buraco foi alocado. Da proxima vez que e chamado, o algoritmo comeca a procurar a partir deste ponto. proximo de . E um algoritmo lento e cria na memoria buracos pequenos que di cilmente ser~ ao 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~ oes pequenas. 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.
M M
Algoritmo Best- t Este algoritmo procura pela lista inteira e toma o buraco de tamanho mais
Algoritmo Quick- t Este algoritmo mantem listas separadas para tamanhos comumente requeridos.
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~ ao e uma operac~ ao custosa. Se fus~ oes n~ ao forem feitas, a memoria rapidamente se fragmentara em um grande numero de pequenos buracos n~ ao utilizaveis.
20
3.3.1 Paginac~ ao
c 1996
Sistemas Operacionais
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~ ao v~ ao diretamente para o barramento de memoria. Ao inves disso, eles v~ ao a unidade de ger^ encia de memoria (Memory 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
Figura 3.4: A posic~ ao e func~ ao da MMU Um exemplo de como este mapeamento trabalha e mostrado na Figura 3.5. Neste exemplo, temos um computador que pode gerar enderecos de 16 bits, de 0 ate 64 KBytes. Estes s~ ao os enderecos virtuais. Este computador, entretanto, tem somente 32 KBytes de memoria f sica, assim, embora programas de 64K possam ser escritos, eles n~ ao podem ser carregados para a memoria na sua totalidade para serem 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~ ao chamadas page frames. As paginas e page frames s~ ao sempre do mesmo tamanho. Neste exemplo elas s~ ao de 4K, mas tamanhos de paginas de 512 bytes, 1K, e 2K s~ ao comumente usados. Com 64K de espaco de endereco virtual e 32K de memoria f sica, temos 16 paginas e 8 page frames. Transfer^ encias entre memoria e disco s~ ao 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~ ao transforma o endereco para 8192 e coloca o endereco 8192 no barramento. A tabela de memoria nada sabe a respeito da MMU, e apenas v^ e uma requisic~ ao para 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~ ao mapeada provoca uma falta de pagina (page fault). Neste caso, o sistema operacional libera um page frame e escreve seu conteudo de volta no disco. Ele ent~ ao busca a pagina referenciada para o page frame liberado, atualiza o mapa, e retorna a instruc~ ao interrompida.
Figura 3.5: Relac~ ao entre endereco virtual e endereco f sico de memoria, dada pela tabela de paginas ser~ ao responsaveis por ter de lembrar onde foram posicionadas areas de dados com func~ oes muitas vezes 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~ ao de choque entre estas areas. Para algumas aplicac~ oes, um espaco enderecavel bidimensional e mais conveniente. Esta alternativa e suportada atraves do conceito de segmentac~ ao, onde posic~ oes de memoria s~ ao identi cadas por um par (segmento, deslocamento). Esta abordagem de segmentac~ ao interpreta o espaco de memoria sob um 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~ ao afeta os demais. A traduc~ ao de enderecos segmentados para enderecos f sicos ocorre de maneira similar a traduc~ ao de enderecos virtuais. O sistema deve manter uma tabela mapeando segmentos para os enderecos da memoria. Uma diferenca fundamental e que segmentos t^ em dimens~ oes distintas, e portanto a informac~ ao sobre o comprimento de um segmento tambem deve ser mantida. O fato de se trabalhar com partic~ oes de tamanhos variaveis implica que apos um tempo de uso a fragmentac~ ao ira ocorrer, e pode ser necessario aplicar mecanismos de compactac~ ao. Uma forma de reduzir o problema de fragmentac~ ao mantendo-se o princ pio de segmentac~ ao e combinar este esquema com paginac~ ao | ou seja, cada segmento e dividido em paginas de tamanho xo, que s~ ao trazidas para a memoria de acordo com a demanda. Atraves do uso de segmentos e poss vel compartilhar trechos de codigo que s~ ao comuns entre diversas aplicac~ oes. Isto e util, por exemplo, em sistemas de interfaces gra cas, onde grandes bibliotecas s~ ao responsaveis pela ger^ encia de sistemas de janelas. Alem disto, o uso de segmentos facilita tambem a
DCA/FEEC/UNICAMP 23
3.3.2 Segmentac~ ao
Paginac~ ao prov^ e uma tecnica para implementac~ ao de um grande espaco enderecavel numa memoria f sica limitada. Este espaco de enderecamento e unidimensional, pois a posic~ ao de memoria e identi cada por um unico valor que vai de 0 ate um endereco maximo. Esta caracter stica implica que programadores
22
c 1996
Sistemas Operacionais
para distinguir paginas que n~ ao foram referenciadas recentemente daquelas que tenham sido. Quando 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) n~ ao referenciada, n~ ao modi cada. Classe 1 (01) n~ ao referenciada, modi cada.
Classe 2 (10) referenciada, n~ ao modi cada. Classe 3 (11) referenciada, modi cada.
Ainda que as paginas na classe 1 parecam, a primeira vista, imposs veis de existir, elas ocorrem quando as paginas da classe 3 t^ em seu bit R zerado pela interrupc~ ao do relogio. Interrupc~ oes de relogio n~ ao zeram o bit M porque esta informac~ ao e necessaria para determinar se uma pagina tera que ser reescrita no disco ou n~ ao. O algoritimo N~ ao Recentemente Usada (NRU) remove uma pagina aleatoria da classe n~ ao vazia de numerac~ ao mais baixa. A estrategia impl cita neste algoritmo e que e melhor remover uma pagina modi cada que n~ ao foi referenciada pelo menos no ultimo tick de relogio, que uma pagina n~ ao modi cada 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~ ao otimo, e geralmente tido como adequado. O algoritmo de paginac~ ao First-In-First-Out (FIFO) e similar ao NRU. O sistema operacional 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~ ao no FIFO para evitar o problema da retirada de uma pagina muito usada 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~ ao a pesquisa continua. O que o Segunda Chance faz e procurar por uma pagina velha que n~ ao tem sido referenciada 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~ ao para o algoritmo otimo e baseada em uma observac~ ao comum que as paginas muito usadas nas ultimas instruc~ oes provavelmente ser~ ao usadas nas proximas instruc~ oes. Da mesma forma, paginas que n~ ao t^ em sido usadas por um longo tempo provavelmente continuar~ ao sem uso. Esta observac~ ao sugere um algoritmo realizavel: quando ocorre uma falta de pagina, retira-se a pagina que n~ ao tem sido usada por um tempo longo. Esta estrategia e chamada de Menos Recentemente Usada (Least Recently Used, LRU). Embora o algoritmo LRU seja teoricamente realizavel, seu custo e alto. Para implementac~ ao completa 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
Para permitir que o sistema operacional colete estat sticas sobre quais paginas est~ ao sendo usadas e quais n~ ao est~ ao, muitos computadores com memoria virtual t^ em 2 bits associados a cada pagina. Um bit, R ou bit de refer^ encia, e ativado pelo hardware em qualquer leitura ou escrita de pagina. O outro bit, M ou bit de modi cac~ ao, e ativado pelo hardware quando ha alterac~ ao no conteudo de uma pagina. Uma vez que um bit foi ativado, ele permanece ativado ate que o sistema operacional o desative por software. Se o hardware n~ ao disp~ oe dos bits R e M, eles podem ser simulados por software atraves das rotinas de tratamento de faltas de pagina e de protec~ ao. Quando um processo e iniciado, todas as suas entradas de tabela de paginas s~ ao marcadas como ausentes na memoria. T~ ao logo uma pagina seja referenciada, uma falta de pagina ocorrera. O sistema operacional ent~ ao ativa o bit R (em sua tabela interna), muda a entrada de tabela de paginas para apontar para a pagina correta com modo READ ONLY e reinicia a instruc~ ao. Se a pagina e subsequentemente escrita, uma falta de protec~ ao da pagina ocorrera, pemitindo 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~ ao como se segue. Quando um processo e iniciado, ambos os bits de pagina para todas estas paginas s~ ao declarados 0 pelo sistema operacional. Periodicamente (a cada interrupc~ ao de relogio | tipicamente 20 mseg), o bit R e zerado,
24
c 1996
Sistemas Operacionais
ser atualizada em toda refer^ encia de memoria. Encontrar a pagina na lista, remov^ e-la de sua posic~ ao corrente, e mov^ e-la para o in cio representa um esforco n~ ao desprez vel. Manipular uma lista ligada a toda instruc~ ao e proibitivo, ate mesmo em hardware. Entretanto, 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~ ao. Alem disso, cada entrada na tabela de paginas deve tambem ter um campo grande o bastante para conter o contador. Apos cada refer^ encia de memoria, 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
demanda. Este esquema requer do hardware a possibilidade de reiniciar uma instruc~ ao interrompida pela aus^ encia de pagina cujo endereco foi referenciado na instruc~ ao. Assim que a pagina e trazida para a memoria, a instruc~ ao interrompida e reiniciada. No esquema de paginac~ ao por demanda, o espaco virtual de enderecamento e muito superior 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^ encia de memoria: 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~ ao xa pois a quantidade de paginas e igual a dimens~ ao f sica de memoria dividida pelo tamanho da pagina. Cada entrada na tabela possui campos descrevendo, entre outras informac~ oes, o endereco 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^ encia, modi cac~ ao, validade e protec~ ao. 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^ encia indicando quantos processos compartilham 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^ encia indicando quantas paginas se utilizam deste bloco em disco. Deve-se notar que algumas informac~ oes s~ ao replicadas em tabelas distintas. Esta replicac~ ao visa bene ciar a e ci^ encia do esquema de paginac~ ao, diminuindo o numero de consultas as tabelas. O processo paginador remove da memoria paginas n~ ao referenciadas pelos processos por um longo 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^ encia da pagina, como descrito na Sec~ ao 3.4.2. Uma pagina e candidata a permuta quando seu contador de refer^ encia foi zerado ha um determinado numero 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
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~ ao ent~ ao removidas da memoria e gravadas em disco ate que um limiar de memoria livre seja atingido. Ao gravar uma pagina em disco, o processo paginador apaga o bit de validade da pagina e decrementa seu contador de refer^ encia na tabela de frames. Se o contador de refer^ encia vai a zero (indicando que 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
c 1996
Sistemas Operacionais
pode ser revalidada (sem necessidade de traz^ e-la do disco) caso um processo torne a referencia-la. Neste caso, a pagina e removida da lista de paginas livres, tendo seu bit de validade reativado.
alocac~ ao desejado | rst t, best t ou last t | e outro para indicar se a area de memoria superior deve ou n~ ao ser inclu da na busca por um bloco de memoria livre.
c 1996
DCA/FEEC/UNICAMP
29
Sistema de Arquivos
Em muitos sistemas, arquivos regulares s~ ao subdivididos em diferentes tipos em func~ ao de sua utilizac~ ao. Os tipos s~ ao identi cados pelos nomes com que os arquivos regulares terminam | por exemplo, arquivo.c denotando um programa fonte em C e arquivo.obj para um arquivo objeto. Em alguns sistemas, as extens~ oes s~ ao simples convenc~ ao, representando apenas uma facilidade para o usuario identi car o tipo de conteudo no arquivo. Em outros, o sistema operacional tem regras r gidas em relac~ ao aos nomes | por exemplo, \o sistema n~ ao executara um arquivo a menos que sua extens~ ao seja .BIN." Diretorios, os quais em muitos casos s~ ao tambem arquivos, permitem organizar os arquivos de um 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~ ao comumente empregados. No primeiro metodo, cada arquivo e identi cado pela sequ^ encia de diretorios desde o diretorio raiz ate o arquivo (caminho absoluto). Nomes absolutos para caminhos sempre comecam na raiz e s~ ao unicos. Uma outra 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~ ao referenciados a partir do diretorio corrente.
A mesma pol tica esta presente no sistema de ger^ encia de memoria entre a segmentac~ ao pura e a paginac~ ao.
c 1996
DCA/FEEC/UNICAMP
31
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
A escolha da estrategia de alocac~ ao de um arquivo no disco traz impactos no desempenho e exibilidade de acesso aos dados armazenados. A seguir, estes impactos ser~ ao analisados para as diversas possibilidades de organizac~ ao. tamanho s~ ao as unicas informac~ oes necessarias para permitir o acesso ao seu conteudo. A transfer^ encia 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^ encia cont gua de bytes apresenta um problema obvio que e o crescimento do arquivo, uma ocorr^ encia muito comum | o arquivo provavelmente tera que ser movido no disco. Embora o problema seja o mesmo que ocorre em ger^ encia de memoria por segmentac~ ao, neste caso o impacto no desempenho e muito maior. possibilidade de se conectar os blocos de um mesmo arquivo e atraves da manutenc~ ao de apontadores de um bloco para o proximo. Assim, em cada bloco a primeira palavra indica qual o proximo bloco da lista, e o restante e a area de dados. A grande vantagem desta estrategia e evitar a fragmentac~ ao que ocorre no uso de alocac~ ao cont gua. No entanto, acessos a posic~ oes arbitrarias do arquivo (o chamado acesso aleatorio ) s~ ao lentos, uma vez que diversos blocos podem ter que ser lidos para alcancar a posic~ ao do dado desejado. um ndice (ou tabela) que e trazido a memoria principal. Desta forma, percorrer uma lista de blocos para alcancar uma posic~ ao arbitraria torna-se uma operac~ ao rapida, que e realizada sem acessos ao 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.
Alocac~ ao Cont gua Nesta estrategia, a posic~ ao inicial onde o arquivo esta armazenado no disco e seu
410 312
597 873
Listas Ligadas de Blocos Quando a estrategia de alocac~ ao em blocos e adotada, uma primeira
Figura 4.1: Organizac~ ao de blocos livres: (a) blocos livres armazenados em lista ligada (b) um mapa de bits. 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~ oes necessarias para prosseguir com as operac~ oes de acesso ao arquivo. Estas informac~ oes adicionais s~ ao mantidas nos arquivos diretorios. A estrategia de organizac~ ao de arquivos em diretorios mais simples e manter um diretorio unico. Assim, a localizac~ ao de um arquivo reduz-se a procura neste unico diretorio. Encontrado o registro do arquivo, tem-se o numero de blocos do disco, posto que estes s~ ao armazenados no proprio registro. Se o arquivo utiliza mais blocos de disco que o permitido no registro, o arquivo tera registros adicionais no diretorio. Informac~ oes usualmente mantidos s~ ao nome, tipo, usuario (durante a busca, apenas os registros pertencentes ao usuario corrente s~ ao considerados), tamanho e contador de bloco (indica qual bloco esta em uso). Campos adicionais cont^ em os numeros dos blocos de disco que comp~ oem o arquivo. Outra estrategia e a organizac~ ao de sistemas de diretorio em arvore (hierarquicos). Neste caso, todo 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~ ao, procura-se pelo 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~ ao pesquisados de forma id^ entica, apenas partindo do diretorio de trabalho em vez de partir-se do diretorio raiz. Todos os diretorios t^ em registros para . e .., criados juntamente com o diretorio, para indicar respectivamente o diretorio corrente e o diretorio pai. Nenhum mecanismo especial e necessario para manipular estes nomes. N~ ao raro, e conveniente que um mesmo arquivo (ou diretorio) pertenca simultaneamente a diferentes usuarios. A associac~ ao entre um diretorio e um arquivo pertencente a outro diretorio e chamada de conex~ ao ou link. O sistema de arquivos passa a ser organizado como um grafo, e n~ ao mais como uma 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~ ao associada e o nome absoluto do arquivo compartilhado original (/D1/X).
DCA/FEEC/UNICAMP 33
Listas Ligadas com Indice Nesta estrategia, os apontadores para proximo bloco s~ ao mantidos em
Nos Indices Neste caso, cada arquivo tem uma pequena tabela de ndices chamada de i-node que
mantem os enderecos em disco dos blocos que comp~ oem o arquivo. Quando um arquivo e aberto pela aplicac~ ao, o seu no ndice e lido para a memoria. Os enderecos dos primeiros blocos do arquivo s~ ao mantidos no proprio i-node, de forma que o acesso a pequenos arquivos e e ciente. Os ultimos enderecos do i-node n~ ao apontam diretamente para blocos de dados, mas para blocos contendo enderecos de outros 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^ es n veis de ndice t^ em de ser acessados). Apenas arquivos muito grandes precisariam usar este ultimo n vel de acesso indireto. sobre blocos livres no disco | informac~ ao que sera fundamental quando a aplicac~ ao requisitar a escrita de dados em arquivos. Dois metodos s~ ao amplamente usados (Figura 4.1). O primeiro consiste no uso de uma lista ligada de blocos, com cada elemento da lista armazenando tantos blocos livres quanto poss vel. Uma outra tecnica de ger^ encia de espaco livre e o mapa de bits. Um disco com blocos necessita de um mapa de bits com bits. Blocos livres s~ ao representados por 1s no mapa de bits blocos 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
Ger^ encia de Espaco Livre Outra quest~ ao importante para o projetista e como manter a informac~ ao
32
c 1996
Sistemas Operacionais
Sistema de Arquivos
Outra possibilidade depende da utilizac~ ao de nos ndice para a organizac~ ao de arquivos no disco. 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^ encias s~ ao feitas ao arquivo (de modo a garantir consist^ encia apos operac~ oes de remoc~ ao). Considerando a import^ ancia da informac~ ao mantida em discos, deve ser uma preocupac~ ao do projetista de um sistema de arquivos o aspecto de con abilidade deste sistema.
livres rastreando todos os blocos que n~ ao est~ ao em uso. Cada ocorr^ encia de um bloco na lista de blocos 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~ oes:
Blocos perdidos: 0 em ambos contadores, ou seja, blocos que n~ ao ocorrem em nenhuma das tabelas.
A soluc~ ao para blocos perdidos e simples: o veri cador do sistema de arquivos acrescenta-os na lista de blocos livres. lista livre.
Bloco livre e ocupado: 1 em ambos contadores. A soluc~ ao tambem e simples: remover o bloco da Blocos multiplamente livres: 0 no contador de blocos ocupados e um valor maior que 1 no contador Blocos multiplamente ocupados: 0 no contador de blocos livres e um valor maior que 1 no contador
de blocos livres. A soluc~ ao neste caso tambem e simples: reconstruir a lista de blocos livres, eliminando-se as duplicac~ oes.
Blocos Defeituosos Discos frequentemente apresentam blocos defeituosos (bad blocks), isto e, blocos
onde a escrita e/ou leitura e impossibilitada. Duas soluc~ oes para o problema de blocos defeituosos s~ ao empregadas, uma em hardware e outra em software. A soluc~ ao em hardware consiste em dedicar um setor no disco para a lista de blocos defeituosos. Quando o controlador do disco e iniciado, este l^ ea lista de blocos defeituosos e escolhe blocos sobressalentes para substitu -los. S~ ao feitas ent~ ao indirec~ oes dos blocos defeituosos para os blocos sobressalentes. Da por diante, qualquer operac~ ao envolvendo um bloco defeituoso tera efeito em seu respectivo bloco sobressalente. A soluc~ ao em software requer que o usuario informe (ou que o sistema de arquivos detecte) os blocos defeituosos. Estes blocos s~ ao encadeados como se fosse um arquivo do sistema, de modo que eles n~ ao far~ ao parte da lista de blocos livres.
Backups Mesmo com uma estrategia engenhosa para tratar os blocos defeituosos, e importante se
de blocos ocupados. Este e o tipo de falha mais grave. A ac~ ao apropriada do utilitario e alocar um bloco livre, copiar o conteudo do bloco duplicado nele, e inserir a copia em um dos arquivos. Desde modo, a informac~ ao dos arquivos n~ ao e alterada (embora certamente incorreta para um dos arquivos), mas a estrutura do sistema de arquivos e, pelo menos, consistente. O erro sera informado para permitir ao usuario examinar a falha.
proceder backups frequentes. Sistemas de arquivos em discos de pequena capacidade podem ser salvos em ta magnetica, por exemplo, tas padr~ ao de 9 trilhas (com capacidade de 50 Megabytes por bobina) ou 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^ es, e, diariamente, 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~ ao para cada arquivo deve ser mantida no disco.
Outro topico envolvendo con abilidade e a consist^ encia do sistema de arquivos. Muitos sistemas de arquivos l^ eem blocos, modi cam-nos, e os regravam mais tarde. Se o sistema falha antes que todos os 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~ ao foram escritos, s~ ao blocos de i-nodes, blocos de diretorio, ou blocos contendo a lista de blocos livres. Para veri car a consist^ encia do sistema de arquivos, muitos sistemas operacionais utilizam programas utilitarios desenvolvidos para este m. Tais programas s~ ao executados sempre que o sistema e iniciado, particularmente depois de um desligamento abrupto. Para controle de consist^ encia a n vel de blocos, o utilitario constroi uma tabela com dois contadores 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^ encia ele aparece na lista de blocos livres. O utilitario acessa a informac~ ao de todos os arquivos, incrementando o primeiro contador para a ocorr^ encia de cada bloco que faz parte de cada arquivo. A seguir, e examinada a lista de blocos
34
c 1996
Sistemas Operacionais
Sistema de Arquivos
open: abre um arquivo para leitura/gravac~ ao. Par^ ametros da chamada indicam, por exemplo, se o
arquivo deve ser criado (caso inexista) e permiss~ oes. close: encerra a operac~ ao sobre um arquivo aberto. read: l^ e dados de um arquivo (para um bu er em memoria). write: escreve dados num arquivo (de um bu er em memoria). lseek: altera a posic~ ao corrente de leitura/gravac~ ao no arquivo. chdir: altera o diretorio corrente. chown: altera o usuario que t^ em a posse do arquivo. chmod: altera permiss~ oes de um arquivo. stat: fornece informac~ oes sobre um arquivo (tipicamente as constantes no i-node do arquivo).
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
} tamanho do disco
Figura 4.3: Estrutura da FAT Cada entrada no diretorio tem 32 bytes, dos quais 11 s~ ao reservados para o nome e extens~ ao do arquivo. Um byte de atributos descreve o tipo e propriedades do arquivo. Hora e data da ultima atualizac~ ao ocupam dois bytes cada. Os dois ultimos campos indicam o endereco do primeiro bloco (2
DCA/FEEC/UNICAMP 37
c 1996
Sistemas Operacionais
bytes) e o tamanho do arquivo (4 bytes). A partir do primeiro bloco, os demais s~ ao localizados a partir da Tabela de Alocac~ ao de Arquivos.
c 1996
DCA/FEEC/UNICAMP
39
Sistemas Operacionais
Entrada e Sa da
Unidades de E/S consistem tipicamente de componentes mec^ anicos e eletr^ onicos. E frequente a separac~ ao das duas porc~ oes para se obter um projeto mais geral e modular. O componente eletr^ onico e 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^ anico e o dispositivo propriamente dito. O cart~ ao do controlador normalmente tem um conector, no qual um cabo condutor do proprio dispositivo pode ser conectado. Muitos controladores podem manusear dois ou mais dispositivos do mesmo tipo. A distinc~ ao entre dispositivo e controlador deve ser ressaltada, ja que o sistema operacional v^ eo controlador, n~ ao o dispositivo. Normalmente, minicomputadores e microcomputadores usam um barramento unico (Figura 5.1) para comunicac~ ao entre CPU e os controladores. Mainframes frequentemente 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
disquete do IBM PC, por exemplo, aceita 15 diferentes comandos, tais como read, write, seek, format, e recalibrate. Muitos dos comandos t^ em par^ ametros, os quais s~ ao tambem carregados nos registradores do controlador. Quando um comando e aceito, a CPU pode abandonar o controlador atender a outra tarefa. Quando completado, o controlador causa uma interrupc~ ao com o objetivo de permitir que o sistema operacional tome o controle da CPU e teste o resultado da operac~ ao. A CPU obtem o resultado e o status do dispositivo pela leitura de um ou mais bytes de informac~ ao nos registradores do controlador.
CPU
memria
barramento
Figura 5.1: Um modelo para conex~ ao da CPU, memoria, controladores e dispositivos de E/S 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^ ambulo, depois os 4096 bits no setor, e nalmente o checksum ou o codigo de correc~ ao de erro. O pre^ ambulo e escrito quando o disco 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~ ao de erro necessaria. O bloco de bytes e tipicamente primeiro montado, bit por bit, em um bu er mantido no controlador. Apos o checksum ter sido veri cado e o bloco declarado livre de erro, ele pode ent~ ao ser copiado para a memoria principal. O controlador para o terminal CRT tambem trabalha como um dispositivo serial de bits e em baixo n vel. Ele l^ e da memoria o byte contendo o caracter a ser exibido, e gera os sinais usados na modulac~ ao 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~ ao tivessemos um controlador CRT, o sistema operacional teria que gerar estes sinais no tubo. Com o controlador, o sistema operacional inicia-o com poucos par^ ametros, tais como o numero de caracteres por linha e o numero de linhas por tela, deixando o controlador tomar conta do direcionador do feixe de raios catodicos. Cada controlador tem alguns poucos registradores que s~ ao usados para comunicac~ ao com a CPU. Em alguns computadores estes registradores s~ ao parte do espaco de enderecamento regular. O sistema operacional realiza E/S escrevendo comandos nos registradores dos controladores. O controlador de
40
c 1996
Sistemas Operacionais
Entrada e Sa da
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~ ao do sistema, uma vez que algumas func~ oes que s~ ao independentes do dispositivo podem atualmente estarem nos drivers, por e ci^ encia ou outras raz~ oes. As func~ oes listadas abaixo s~ ao tipicamente implementadas no software independente do dispositivo: interface uniforme para com os drivers de dispositivos identi cac~ ao simbolica dos dispositivos protec~ ao dos dispositivos manipulac~ ao de blocos independente dos dispositivos \bu erizac~ ao" alocac~ ao de espaco nos dispositivos do tipo bloco alocac~ ao e liberac~ ao de dispositivos dedicados ger^ encia de erros. A func~ ao basica do software independente do dispositivo e realizar as func~ oes de E/S que s~ ao comuns a todos os dispositivos, e suportar uma interface uniforme para o software do usuario. Uma quest~ ao fundamental em um sistema operacional e como objetos tais como os arquivos e dispositivos de E/S s~ ao identi cados. O software independente do dispositivo se encarrega do mapeamento simbolico dos nomes dos dispositivos para os seus drivers apropriados. Relacionado ao nome esta a protec~ ao. Como o sistema previne usuarios de acessar dispositivos que n~ ao est~ ao autorizados a acessar? Em muitos microcomputadores, n~ ao ha nenhuma protec~ ao. Em muitos 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~ ao" e uma outra quest~ ao, tanto para dispositivos de blocos como para de caracter. Para 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~ ao transferidos para o dispositivo f sico, necessitando assim de \bu erizac~ ao". Entrada de teclado e outro exemplo de atividade que requer \bu erizac~ ao". Quando um arquivo e criado e preenchido com dados, novos blocos de disco t^ em que ser alocados para o arquivo. Para realizar esta alocac~ ao, o sistema operacional precisa de uma lista ou mapa de bits 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~ ao para usar o dispositivo e aceita ou n~ ao, dependendo da disponibilidade do dispositivo requisitado.
DCA/FEEC/UNICAMP 43
c 1996
Sistemas Operacionais
Entrada e Sa da
camada processos do usurio funcionalidade executa operao de E/S
Discos 5.3]
A manipulac~ ao de erros tambem e feita nesta camada. Um erro t pico e causado por um bloco do disco ruim e que n~ ao pode mais ser lido. Apos o driver tentar ler o bloco varias vezes, ele informa ao software independente do dispositivo a raz~ ao. O erro e ent~ ao tratado. Se ocorreu num arquivo do 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~ ao. Embora muito do software de E/S esteja embutido no sistema operacional, uma pequena porc~ ao 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~ ao normalmente feitas por procedimentos da biblioteca. Quando um programa em C contem a chamada o procedimento da biblioteca fread sera ligado com o programa. A colec~ ao de todos estes procedimentos da biblioteca e parte do sistema de E/S. Enquanto estes procedimentos fazem pouco mais que colocar seus par^ ametros em lugares apropriados para a chamada do sistema, ha outros procedimentos de E/S que fazem o trabalho real. Em particular, a formatac~ ao de uma entrada e sa da e feita por um procedimento da biblioteca. Nem todo o software de E/S utilizado pelo usuario consiste de procedimentos da biblioteca. Outra importante categoria e o sistema spooling. Spooling e o modo de negociac~ ao com os dispositivos dedicados de E/S em um sistema com multiprogramac~ ao, tais como impressoras. Embora seja facil permitir que algum processo do usuario abra o arquivo especial associado a uma impressora, se o processo mantiver o arquivo aberto por varias horas ent~ ao nenhum outro processo podera imprimir. 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~ ao o daemon, o unico processo que tem permiss~ ao de usar 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~ oes, tais como a transfer^ encia de arquivos na rede. Para 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~ oes principais de cada n vel.
bytes_lidos = fread(buffer, tam_item, n_itens, arquivo)
identifio, proteo, bloqueio "bufferizao" inicia registradores do dispositivo verifica status da operao desbloqueia o driver quando a operao de E/S se completa
drivers de dispositivos
gerenciadores de interrupo
dispositivos
requisio de E/S
resposta da requisio
Figura 5.2: N veis do sistema de E/S e func~ oes principais de cada n vel setores no anel externo do disco sejam sicamente maiores que aqueles no anel interno. O espaco extra n~ ao e aproveitado. Um aspecto que tem importante implicac~ oes no disk driver e a possibilidade do controlador fazer buscas (seek) em dois ou mais dispositivos ao mesmo tempo. Estas s~ ao conhecidas como busca entrelacada (overlapped seek). Enquanto o controlador e o software est~ ao esperando uma busca se completar em um 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^ encia usa muito de sua capacidade computacional). A habilidade de realizar duas ou mais buscas ao mesmo tempo pode reduzir sensivelmente o tempo medio de acesso. Nesta sec~ ao 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^ es fatores: o tempo de seek (tempo para 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^ encia. Para muitos discos, o tempo de seek domina. Reduzindo-se o tempo de seek, podemos melhorar substancialmente o desempenho do sistema.
5.3 Discos
Dispositivos do tipo bloco s~ ao armazenadores que aceitam dois comandos: escrever um bloco e ler um bloco. Normalmente esses blocos s~ ao armazenados em memoria rotativa, tal como os discos r gidos e ex veis. Nas sec~ oes seguintes, descreveremos brevemente o hardware do disco, passando para os disk drivers a seguir.
Todos os discos rotativos s~ ao organizados em cilindros, cada qual contendo tantas trilhas quanto cabecas empilhadas verticalmente. As trilhas s~ ao divididas em setores, com um numero de setores na circunfer^ encia, tipicamente entre 8 a 32. Todos os setores cont^ em o mesmo numero de bytes, embora
44
c 1996
Sistemas Operacionais
Entrada e Sa da
uma tabela, indexada pelo numero do cilindro, com todas as requisic~ oes pendentes para cada cilindro, 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~ ao chega para ler um bloco no cilindro 11. Enquanto a busca para o cilindro 11 esta em progresso, novas requisic~ oes chegam para os cilindros 1, 36, 16, 34, 9, e 12, nesta ordem. Elas s~ ao inseridas na tabela de requisic~ oes pendentes, tendo cada cilindro um lista separada. As requisic~ oes s~ ao mostradas na Figura 5.3.
posio inicial
A Figura 5.4 mostra o algoritmo do elevador usando as mesmas sete requisic~ oes da Figura 5.3, assumindo que o bit de direc~ ao esteja inicialmente em UP . A ordem na qual os cilindros s~ ao servidos 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~ ao de requisic~ oes, o limite 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
tempo
Figura 5.4: Escalonamento de requisic~ oes no disco atraves do algoritmo do elevador 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~ ao e poss vel. Se duas ou mais requisic~ oes para o mesmo cilindro est~ ao pendentes, o driver pode emitir a requisic~ ao para o setor que passara sob a cabeca do proximo cilindro. Note que quando trilhas multiplas est~ ao presentes num cilindro, requisic~ oes consecutivas podem ser conduzidas para diferentes trilhas com nenhuma penalidade. O controlador pode selecionar alguma das cabecas instantaneamente, uma vez que selec~ ao de cabeca n~ ao requer movimento dos bracos nem atraso rotacional. Quando existe varios dispositivos, uma tabela de requisic~ oes pendentes deve ser mantida para cada 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^ encia corrente termina, um teste pode ser feito para veri car se algum dos dispositivos est~ ao posicionados no cilindro correto. Se um ou mais est~ ao, a proxima transfer^ encia pode ser iniciada no dispositivo que ja esta no cilindro correto. Se nenhum dos bracos esta na posic~ ao desejada, o driver deve emitir novos seeks sobre os dispositivos que ja completaram a transfer^ encia, e esperar ate a proxima interrupc~ ao para examinar em qual dispositivo o posicionamento do braco se completou.
Figura 5.3: Algoritmo de escalonamento menor seek primeiro (SSF) Quando a requisic~ ao corrente termina (cilindro 11), o disk driver tem que escolher qual sera a proxima requisic~ ao. Usando FCFS, ele ira para o cilindro 1, ent~ ao para o 36, e assim por diante. Este algoritmo requer movimentos do braco de 10, 35, 20, 18, 25, e 3, respectivamente, num total de 111 cilindros. Alternativamente, a proxima requisic~ ao pode ser manuseada a m de minimizar o tempo de seek. Dadas as requisic~ oes da Figura 5.3, a sequ^ encia 12, 9, 16, 1, 34, e 36, como mostrado na linha entalhada. Com esta sequ^ encia, os movimentos do braco s~ ao 1, 3, 7, 15, 33, e 2, num total de 61 cilindros. Este 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~ oes chegando enquanto as requisic~ oes da Figura 5.3 esta sendo processada. Por exemplo, se, apos chegar ao cilindro 16, uma nova requisic~ ao para o cilindro 8 esta presente. Esta requisic~ ao tera prioridade sobre o cilindro 1. Se a requisic~ ao for 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~ oes das extremidades. Requisic~ oes distantes do meio s~ ao em media mais demoradas, colocando o objetivo de m nima resposta no tempo e imparcialidade no acesso. Um algoritmo para reconciliar os objetivos con itantes entre a e ci^ encia e imparcialidade constituise em manter o movimento do braco na mesma direc~ ao ate n~ ao haver mais requisic~ oes pendentes naquela direc~ ao, e ent~ ao o movimento do braco e mudado. Este algoritmo, conhecido como algoritmo do elevador, requer o software mantenha 1 bit: o bit da direc~ ao corrente, UP ou DOWN . Quando a requisic~ ao termina, o disk driver testa o bit. Se e UP, o braco e movido para a proxima requisic~ ao pendente de posic~ oes mais altas, se houver. Se n~ ao ha requisic~ oes pendentes para posic~ oes mais altas, o bit de direc~ ao e revertido. Quando o bit e mudado para DOWN, o movimento sera para a proxima requisic~ ao de posic~ ao mais baixa, se houver.
46
c 1996
Sistemas Operacionais
Entrada e Sa da
Em dispositivos que operam em bloco, a transfer^ encia de dados entre o espaco de enderecamento de um processo e o dispositivo de da atraves de um bu er cache. A raz~ ao para tal e que tais dispositivos s~ ao lentos, sendo portanto a \bu erizac~ ao" um meio de aumentar a taxa de transfer^ encia de dados. Dispositivos do tipo caracter (terminais, por exemplo) s~ ao inerentemente rapidos e n~ ao necessitam 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~ ao e obtida na tabela de arquivos.
open close read write ioctl open close read mount umount write
Uma rotina denominada strategy perfaz as operac~ oes de leitura e escrita em tais dispositivos. Quando uma operac~ ao de leitura ou escrita e requisitada, o nucleo identi ca a rotina strategy de nida para o 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.
dispositivo
open
close
strategy
driver
driver
gerenciador de interrupes
gerenciador de interrupes
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~ oes t picas s~ ao bloquear um arquivo, desligar o eco do terminal, ajustar taxa de transfer^ encia de modems e rebobinar uma ta. 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
Entrada e Sa da
(5)
Problemas
processo (produtor) p~ oe informac~ ao em um bu er com capacidade limitada, enquanto outro processo (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~ ao para este problema de sincronizac~ ao usando semaforos. (2) Medidas em um sistema indicam que umprocesso executa em media segundos antes de bloquear em uma operac~ ao de entrada e sa da. O tempo de chaveamento de contexto e segundos. Para um sistema escalonador usando round-robin com um quantum , de na uma formula para a e ci^ encia da CPU (raz~ ao entre tempo gasto com trabalho util sobre tempo total) em cada um dos casos 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^ em tempos estimados de execuc~ ao 10, 6, 2, 4 e 8 minutos, respectivamente, e prioridades (de nidas externamente) 3, 5, 2, 1, e 4, com 5 sendo a prioridade mais alta. Determine o tempo medio de execuc~ ao por processo para cada uma das seguintes pol ticas de escalonamento: (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, ~ sucessivas para segmentos de 12K, 10K e 9K. Que buracos 18K, 7K, 9K, 12K e 15K. Ha requisicOes s~ ao ocupados quando a pol tica de alocac~ ao e: (a) First t? (b) Best t? (c) Next t?
T S Q Q Q > T S < Q < T Q Q S
(6)
(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~ ao de memoria a cada segundo. Se e preciso 0.5 s para copiar um byte e o tamanho medio de um buraco e 40% do tamanho medio de um segmento, que frac~ ao do tempo total de CPU e gasta com compactac~ ao? Usando a tabela de paginas da Figura 3.5, d^ e os enderecos f sicos correspondentes aos enderecos 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^ e a sequ^ encia de paginas referenciadas por este programa, considerando que cada instruc~ ao ocupa 4 bytes (uma palavra). Tanto refer^ encias a dados quanto a instruc~ oes 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^ ametro atual com a constante imediata 4 Jump se igual para 5152. Um computador tem quatro page frames. O instante em que foram carregados, o instante da ultima refer^ encia e os estados dos bits R e M s~ ao indicados abaixo: 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~ ao e 20 ms e as trilhas t^ em 32K quando o tamanho das paginas e
DCA/FEEC/UNICAMP 51
50
c 1996
Sistemas Operacionais
(a) 2K? (b) 4K? As paginas est~ ao espalhadas aleatoriamente pelo disco. (10) Considere um disco de 1G de capacidade com blocos de tamanho 4K. Quanto espaco e necessario para manter a ger^ encia de espaco livre por mapa de bits? E por lista ligada de blocos? A partir de qual fator de ocupac~ ao uma estrategia passa a ser mais econ^ omica que a outra? (11) Um veri cador de sistema de arquivos construiu a seguinte tabela de consist^ encia de blocos:
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^ encia? Em caso a rmativo, estes erros s~ ao graves? Por qu^ e?
(12) Um driver de disco r gido recebe requisic~ oes para os cilindros 10, 22, 20, 2, 40, 6 e 38, nesta ordem.
O tempo de seek toma 6 ms por cilindro. Qual e o tempo gasto em posicionamento para atender estas requisic~ oes com as pol ticas de (a) FCFS (b) SSF e (c) elevador? Considere que o disco estava posicionado no cilindro 20, e para o elevador a direc~ ao inicial era crescente (para cima). (13) A rotina de manipulac~ ao de interrupc~ ao de relogio em um computador requer 2 ms para executar, incluindo-se chaveamento de contextos. O relogio trabalha a uma frequ^ encia de 60 Hz. Que frac~ ao do tempo de CPU e dedicada ao relogio?
52
c 1996