Anda di halaman 1dari 68

Sistemas Operacionais

Professor Leonardo Vianna


2008

Sistemas Operacionais - 1/2008 Prof.: Leonardo Vianna

Captulo 1 Introduo
Um sistema operacional (SO) um programa que age como intermedirio entre o usurio do computador e o seu hardware, com o propsito de oferecer ao usurio um ambiente no qual possa executar programas de forma conveniente e eficiente. Dessa forma, o primeiro objetivo de um sistema operacional tornar o sistema computacional conveniente para uso e fazer com que os recursos do sistema sejam utilizados de maneira eficiente.

1.1)

O que um Sistema Operacional?

O Sistema Operacional (SO) um componente fundamental de (praticamente) todos os sistemas computacionais. Um Sistema Computacional pode ser dividido em quatro componentes fundamentais: o hardware, o SO, os programas de aplicao e, por ltimo, os usurios (Figura 1.1).
Usurio 1 Usurio 2

...

Usurio n

Compilador

Editor de Textos

Banco de Dados

Programas de Aplicao Sistema Operacional Hardware


Figura 1.1: Componentes de um sistema computacional.

Sistemas Operacionais - 1/2008 Prof.: Leonardo Vianna

Hardware: fornece os recursos bsicos da mquina. So eles: CPU (Central Processing Unit Processador), Memrias e Dispositivos de Entrada/Sada (I/O Input/Output). Usurios: tentam encontrar, com o auxlio do sistema computacional, a soluo para um determinado problema. Podem ser pessoas ou at mesmo outros computadores. Programas de Aplicao: definem como os recursos (hardware) do sistema computacional sero utilizados para a resoluo de um problema requisitado pelo usurio. Exemplos: compiladores, sistemas de banco de dados, jogos e editores de texto. Sistema Operacional: controla e coordena o uso do hardware entre os vrios programas de aplicao para os diversos usurios do sistema computacional.
-

Deve-se observar que o SO, por si prprio, no executa nenhuma tarefa. Ele simplesmente oferece um ambiente no qual outros programas podem realizar seus trabalhos. Ele pode ser visto como um distribuidor de recursos aos diversos programas e usurios do sistema computacional, de acordo com suas necessidades e requisies. De uma maneira geral, no h uma definio de sistemas operacionais aceita universalmente. Uma outra definio bem comum que o SO o programa que est a todo momento sendo executado no sistema computacional (usualmente denominado kernel), sendo todos os demais programas considerados de aplicao. De certa forma, mais fcil definir sistemas operacionais pelo que eles fazem do que pelo que eles so: oferecer convenincia e eficincia ao usurio.

1.2)

Os primeiros sistemas

Os primeiros computadores eram mquinas enormes (fisicamente) operadas a partir de uma console. O programador, que tambm era o operador da mquina, escrevia seu programa e o operava diretamente atravs da console. Primeiro, o programa devia ser carregado manualmente para memria. Durante a execuo do programa, o programador podia monitorla. Se algum erro ocorresse, o programador podia cancelar a execuo, analisar os contedos de memria e registradores. Os dispositivos de entrada comuns eram leitoras de cartes e unidades de fita, enquanto os dispositivos de sada mais encontrados consistiam em impressoras de linha, unidades de fita e perfuradoras de cartes. Por exemplo, para executar um programa em Pascal, o programador precisava primeiro carregar o compilador Pascal, normalmente armazenado em uma fita magntica. Feito isso,
3

Sistemas Operacionais - 1/2008 Prof.: Leonardo Vianna

precisava-se ler o programa a ser executado, para que este fosse traduzido para linguagem de mquina. O primeiro passo da traduo consistia no compilador Pascal ler o programa instruo por instruo (atravs de cartes perfurados) e gerar uma imagem do programa em assembly. Aps isso, era necessrio carregar o assembler (tambm em fita magntica) que traduziria o programa em assembly para, finalmente, o programa em linguagem de mquina. Torna-se bvio o quanto era caro tal processo! Em outras palavras, o setup time era um grande problema. Deve-se observar que o setup time to elevado trazia grandes problemas na utilizao do sistema. Por exemplo, enquanto fitas eram colocadas na leitora ou enquanto o programador operava a console, a CPU permanecia ociosa. Uma vez que na poca, poucos eram os computadores disponveis, ter a CPU parada era realmente um grande problema (econmico). Quando um computador era desenvolvido, milhes de dlares eram investidos, logo, sempre se esperava uma utilizao mxima de seus recursos. Uma primeira soluo foi a contratao de um operador que, por ter mais experincia, poderia manipular os recursos de forma mais gil, diminuindo o setup time. Dessa forma, o usurio (o programador) no interagia diretamente com o sistema computacional. Ao invs, ele preparava um programa e o entregava ao operador, sob a forma de cartes perfurados. Algum tempo depois era gerada a sada que consistia no resultado do programa (e um dump de memria e registradores no caso de erros), todas essas informaes recolhidas pelo operador e entregues mais tarde ao programador que analisaria a execuo do programa. Uma vez finalizada a execuo de um programa, o operador poderia seguir imediatamente para a execuo do prximo programa, sempre visando a otimizao no uso dos recursos da mquina. A segunda soluo encontrada (melhorando ainda mais a primeira) para acelerar o processamento consistiu em os operadores reunirem os programas em lotes com necessidades semelhantes e os executarem como um grupo. Assim, os programadores deixavam seus programas com o operador que os classificava em lotes e, medida que o computador ficava disponvel, executava cada lote ou batch. Da a denominao de sistemas batches. Com certeza, tais melhorias reduziram bastante o setup time. Porm, ainda existiam problemas. Por exemplo, quando a execuo de um programa parava, o operador teria que analisar a console, determinar o porqu do trmino da execuo (normal ou anormal erros?), fazer um dump de memria se necessrio, e iniciar a execuo do prximo programa. Durante essa transio, a CPU permanecia ociosa. A soluo foi obtida atravs da implementao do seqenciamento automtico de processos ( programa em execuo), gerando, assim, o primeiro sistema operacional. Na verdade, o que era feito antes pelo operador passou a ser realizado pela prpria mquina, atravs de um fragmento de software sempre em memria denominado Monitor Residente (Figura 1.2).

Sistemas Operacionais - 1/2008 Prof.: Leonardo Vianna

Monitor Residente

rea do programa de usurio Figura 1.2: Layout da memria com o Monitor Residente

Quando o computador era ligado, o Monitor Residente era chamado, e este transferia o controle da mquina para o primeiro programa a ser executado. Ao terminar a execuo do programa que detinha a CPU, o controle era retornado ao Monitor Residente, que alocava a CPU ao prximo programa e assim sucessivamente at atender a todos os programas. Neste ambiente de execuo, a CPU muitas vezes ainda fica ociosa porque as velocidades dos dispositivos mecnicos de E/S so inferiores s dos dispositivos eletrnicos. O advento da tecnologia de discos permitiu que o sistema operacional mantivesse todos os processos em um disco, em vez de em uma leitora de cartes. Com acesso direto a vrios processos, o escalonamento de processos poderia ser executado para utilizar recursos e realizar tarefas de forma eficiente. O aspecto mais importante do escalonamento de processos a capacidade de multiprogramao. Um nico processo no pode, em geral, manter a CPU e/ou os dispositivos de E/S ocupados em todos os momentos. A multiprogramao aumenta a utilizao da CPU organizando processos de forma que a CPU sempre tenha um processo para executar (ou quase sempre). A idia da multiprogramao a seguinte: em determinado instante, o sistema operacional mantm vrios processos carregados em memria, esperando para serem executados (Figura 1.3). O SO ento escolhe um dos processos para executar segundo algum critrio. Quando a execuo deste processo terminar ou for interrompida, o SO escolhe dentre os processos que esto em memria o prximo a ser executado. Este procedimento repetido at que todos os processos do sistema sejam executados.

Sistemas Operacionais - 1/2008 Prof.: Leonardo Vianna

SO
Job 1 Job 2 Job 3 Job 4 Figura 1.3: Layout da memria para um sistema multiprogramvel.

A multiprogramao o primeiro exemplo onde o SO toma decises para o usurio. Os SOs multiprogramveis so, portanto, bastante sofisticados. Todos os processos que entram no sistema so mantidos no pool de processos (ou fila de entrada). Esse pool consiste em todos os processos residentes no disco aguardando alocao na memria principal. Se vrios processos estiverem prontos para serem carregados na memria e no houver espao suficiente para todos o SO dever fazer a escolha de quem ser carregado. Essa tomada de deciso chamada de escalonamento de processos. Escolhido o processo, o SO o carrega na memria para que possa ser executado. Porm, uma vez que vrios processos podem estar em memria a espera da utilizao da CPU, o SO deve tomar outra deciso: escolher qual processo em memria ir receber a posse da CPU, ou seja, ser executado. Esta deciso conhecida como escalonamento de CPU. Os sistemas batches multiprogramveis forneciam um ambiente no qual os vrios recursos do sistema eram utilizados de maneira eficiente, porm no permitiam a interao dos usurios com o sistema computacional. A tcnica time-sharing (ou multitasking (multitarefa) ou tempo compartilhado) uma extenso da multiprogramao onde vrios programas so executados "simultaneamente", havendo interao entre o usurio e o processo. Isso acontece porque a CPU executa vrios processos alternadamente, mas como essas trocas ocorrem com alta freqncia, possvel que os usurios interajam com seus programas durante sua execuo. Um sistema computacional interativo permite a comunicao direta entre o usurio e o sistema, contrapondo-se aos sistemas batches. O usurio passa instrues ao SO ou a um programa diretamente e espera por resultados imediatos. Um sistema time-sharing permite que vrios usurios compartilhem os recursos da mquina simultaneamente. Uma vez que cada comando nesse sistema tende a levar pouco tempo, apenas um pequeno tempo de CPU necessrio para cada processo. Dessa forma, como o chaveamento feito rapidamente, dada a cada usurio a impresso de que ele tem sua prpria mquina. A evoluo dos sistemas continua at os dias atuais e vrios sistemas, com caractersticas prprias, tm sido definidos, como, por exemplo, sistemas paralelos, sistemas
6

Sistemas Operacionais - 1/2008 Prof.: Leonardo Vianna

distribudos e sistemas de tempo real.

Sistemas Operacionais - 1/2008 Prof.: Leonardo Vianna

Captulo 2 Estruturas do Sistema Computacional


Antes de iniciar o estudo das principais caractersticas dos sistemas operacionais, faz-se necessria uma viso geral da estrutura do sistema computacional. Isso porque o SO tem como uma de suas principais funes assegurar o funcionamento correto do sistema computacional e fazer com que programas de usurio no interfiram na execuo de outros programas e at mesmo do SO.

2.1)

Operao do Sistema Computacional

De uma forma geral, um sistema computacional consiste de uma CPU e um determinado nmero de controladores de dispositivos conectados via barramento comum que serve para acessar uma memria compartilhada (Figura 2.1). Cada controlador de dispositivo responsvel pelo funcionamento de um tipo especfico de dispositivo (por exemplo, discos, monitores, teclados, etc.). Tanto a CPU quanto os controladores (que so pequenos processadores PPU - peripheral processing units) podem executar concorrentemente, competindo por ciclos de memria. Dessa forma, para garantir uma ordenao nos acessos memria compartilhada, h tambm um controlador de memria com a funo de sincronizar o acesso a este dispositivo. Para um computador iniciar sua execuo, ele precisa executar um programa especial. Esse programa inicial, chamado de bootstrap, tende a ser simples. Ele inicializa todos os aspectos do sistema, desde registradores at controladores e contedos de memria. Alm disso, o bootstrap deve saber carregar o SO e iniciar sua execuo. Para alcanar essa meta, o programa deve localizar e carregar na memria principal o kernel do SO. O SO em seguida inicia a execuo do primeiro processo e espera a ocorrncia de algum evento, que usualmente sinalizada atravs de uma interrupo de hardware ou software. O hardware pode disparar uma interrupo a qualquer momento enviando um sinal CPU, atravs do barramento do sistema. O software, por sua vez, pode disparar uma interrupo atravs da execuo de uma operao especial conhecida por chamada de sistema (system call).
8

Sistemas Operacionais - 1/2008 Prof.: Leonardo Vianna

Existem vrios tipos de eventos que podem disparar uma interrupo, como, por exemplo, o trmino de uma operao de E/S, uma diviso por zero, violao de memria, ou ainda a requisio de algum servio do SO. Para cada tipo de interrupo, existe uma rotina responsvel para o tratamento da interrupo.

CPU
Controlador do disco Controlador da impressora

Controlador de memria

Memria Figura 2.1: Partes do Sistema Computacional.

Quando a CPU interrompida, ela pra o que est fazendo e transfere sua execuo para um local fixo da memria. Este local usualmente contm o endereo inicial no qual se encontra a rotina de tratamento da interrupo. Tal rotina executa e, ao terminar, a CPU volta a executar o que estava antes da interrupo. Interrupes consistem em uma importante parte da arquitetura de computadores. Cada projeto de computador possui seu prprio mecanismo de interrupes, mas vrias funes so comuns. A interrupo deve transferir o controle da CPU para sua rotina de tratamento. Uma vez que h um nmero pr-definido de rotinas de tratamento, estas so armazenadas em um local especfico de memria, de modo a facilitar o acesso e agilizar a execuo da rotina. Este local consiste em regies contguas de memrias, de modo a formar um vetor, o vetor de interrupes. A arquitetura de interrupes tambm deve salvar o endereo da instruo interrompida.
9

Sistemas Operacionais - 1/2008 Prof.: Leonardo Vianna

Os SOs modernos so baseados em interrupes. Se no houver processos para executar, nenhum dispositivo de E/S ao qual fornecer e nenhum usurio a ser atendido, o SO permanecer parado, a espera da ocorrncia de algum evento. Os eventos so quase sempre sinalizados por uma interrupo ou um trap. Trap, ou exceo, uma interrupo gerada por software causada por um erro (por exemplo, a diviso por zero ou acesso invlido memria), ou por um pedido especfico de um programa de usurio para que um servio do SO seja executado. Usualmente, interrupes so desabilitadas enquanto uma interrupo estiver sendo executada, postergando a ocorrncia de quaisquer possveis interrupes at o momento em que a atual tenha sido tratada pelo SO.

2.2)

Estruturas de Armazenamento

Para que um computador consiga realizar a sua nica funo, a de processar, faz-se necessrio que os programas a serem executados estejam na memria principal. A memria principal o nico dispositivo de armazenamento que a CPU pode acessar diretamente e consiste em um vetor de palavras, cada qual com seu prprio endereo. A comunicao entre a CPU e a memria principal se d atravs de uma srie de leituras e escritas em determinados endereos. Tipicamente, o ciclo de execuo de uma instruo possui os seguintes passos, respeitando a arquitetura Von Neumann:

Busca em memria da instruo a ser executada seguida de seu armazenamento no registrador de instruo (IR). Para isto, deve-se utilizar um outro registrador, o contador de instrues (PC), que guarda o endereo da prxima instruo a ser executada e atualizado a cada busca. Decodificao da instruo, determinando a operao a ser realizada e os operandos a serem manipulados. Se necessrio, devem ser buscados em memria os operandos especificados na instruo. Definida a operao e em posse dos operandos, a instruo pode ser finalmente executada. Caso algum resultado seja gerado, este deve ser retornado memria.

O ideal seria que os programas e os dados residissem permanentemente em memria. Porm, isso no possvel por duas razes: 1) De uma forma geral, a memria principal muito pequena para armazenar permanentemente todos os programas e dados necessrios; 2) A memria principal voltil, o que significa que perde todo o seu contedo quando perde a alimentao de energia.
10

Sistemas Operacionais - 1/2008 Prof.: Leonardo Vianna

Portanto, os computadores possuem o que chamamos de memria secundria como uma extenso da memria principal. Logo, a principal exigncia que este tipo de memria, secundria, seja capaz de armazenar uma grande massa de dados permanentemente. Alm desses tipos de memria, h outras duas formas de armazenamento no sistema computacional: Registradores memria de tamanho reduzido, porm de altssima velocidade, localizada dentro da CPU; Cache utilizada para aumentar o desempenho na interao CPU-memria.

Observao: por questo de nomenclatura, comearemos a chamar a memria principal de simplesmente memria. Os demais tipos de memria sero, por sua vez, definidos como memria secundria, cache e registradores.

2.3)

Hierarquia de Armazenamento

Os vrios dispositivos de armazenamento existentes em um sistema computacional podem ser organizados de forma hierrquica (Figura 2.2) de acordo com suas velocidades e seus custos. Os nveis mais altos so caros, porm rpidos. medida que descemos a pirmide, o custo por bit diminui, porm sua velocidade de acesso aumenta. Alm dos parmetros velocidade e custo, tambm deve ser considerada a volatilidade. O armazenamento voltil perde o seu contedo quando interrompida a energia para o dispositivo. Na hierarquia da Figura 2.2, todos os dispositivos acima dos discos consistem em memrias volteis.
Registradores

Velocidade Custo

Cache

Memria Principal

Discos

Capacidade

Fitas

Figura 2.2: Hierarquia de dispositivos de armazenamento.

11

Sistemas Operacionais - 1/2008 Prof.: Leonardo Vianna

O projeto de um sistema de memria completo deve balancear todos esses fatores: ele s vai usar memria cara quando necessrio, fornecendo ao mesmo tempo a maior quantidade possvel de memria no-voltil barata. Caches podem ser instaladas quando, entre dois componentes, for detectada disparidade em relao a tempo de acesso e taxa de transferncia.

Caching

Caching um importante princpio de sistemas de computadores, tanto em hardware quanto em software. A informao manipulada no sistema normalmente mantida em algum meio de armazenamento, como a memria principal. medida que a informao referenciada, ela copiada para um dispositivo mais rpido, a cache. Dessa forma, quando determinada informao requisitada, checa-se primeiro se ela se encontra na cache. Caso se encontre, a informao armazenada na cache utilizada; caso contrrio, a memria principal acessada em busca da informao, mas uma cpia sua armazenada na cache, considerando a possibilidade de ser acessada novamente no futuro. Esse mecanismo tende a diminuir bastante os tempos de acesso, em especial entre a CPU e a memria principal.

Operao em Modo Dual

Para garantir a correta operao do sistema computacional, necessrio proteger o SO e todos os outros programas e seus dados de qualquer programa que possa estar executando de forma no-apropriada. E essa proteo deve ser estendida a qualquer recurso do sistema que possa ser compartilhado por mais de um processo. A estratgia utilizada para esta proteo feita via hardware (dentro da CPU), atravs da utilizao de apenas um bit, que far a distino entre a execuo do SO e a execuo de programas de usurios. Esse bit o mode bit que, dependendo do valor armazenado, definir dois modos de execuo: modo supervisor, indicando que o SO est executando, e modo usurio, caso um programa do usurio esteja sendo executado. Ao executar o booting, o hardware inicia em modo supervisor. O SO ento carregado e comea ento a execuo de programas do usurio, j em modo usurio. Sempre que uma interrupo ocorrer, o hardware troca o mode bit para modo supervisor para que, dessa forma, o SO possa tomar as devidas providncias para o tratamento do evento. Ainda visando proteo dos programas sendo executados, algumas instrues de mquina so classificadas como instrues privilegiadas, pois suas execues podem causar danos aos programas caso no sejam manipuladas de forma cuidadosa. Com esta classificao, tais instrues s podem ser executadas em modo supervisor, ou seja, s podem ser executadas pelo SO. Se um programa do usurio (modo usurio) tentar executar uma dessas instrues, ela no executada e considerada um acesso ilegal e ocorre um trap.
12

Sistemas Operacionais - 1/2008 Prof.: Leonardo Vianna

Captulo 3 Processos
Os primeiros sistemas computacionais permitiam a execuo de apenas um programa em cada instante. Este programa tinha total controle do sistema e tinha acesso a todos os recursos da mquina. Atualmente, os sistemas computacionais permitem que diversos programas sejam carregados em memria e executados concorrentemente. Essa evoluo exigiu maior controle e maior compartilhamento entre os diversos programas. Essas necessidades resultaram na noo de um processo que consiste simplesmente em um programa em execuo. Embora o objetivo principal de qualquer sistema computacional seja servir s necessidades do usurio, atravs da execuo de seus programas, ele tambm precisa cuidar das vrias tarefas de sistema que devem ser executadas para garantir o bom funcionamento do sistema computacional. Isso significa dizer que, a todo momento, existem processos do usurio e processos do sistema necessitando serem executados, ou seja, utilizar CPU. Chaveando a CPU entre os processos de maneira bem cuidadosa, o SO pode tornar a mquina mais produtiva, mais eficiente.

3.1)

O Conceito de Processo

Um obstculo discusso de SOs que existe dificuldade em denominar todas as atividades da CPU. Um sistema batch executa jobs, enquanto um sistema time-sharing executa programas de usurio ou tarefas. Mesmo em um sistema monousurio, um usurio pode executar vrios programas de uma vez. Mesmo se o usurio s puder executar um programa de cada vez, o SO poder precisar dar suporte a suas prprias atividades, como gerncia de memria. Em muitos aspectos, todas essas atividades so semelhantes e, por isso, chamamos todas de processos.

3.1.1) O Processo
Informalmente, um processo um programa em execuo. Sua execuo deve ser seqencial, respeitando a ordem das instrues definidas pelo programa. Isto , em dado instante, no mximo uma de suas instrues estar sendo executada.
13

Sistemas Operacionais - 1/2008 Prof.: Leonardo Vianna

Um processo compreende mais do que o cdigo de programa e sua atividade instantnea. Inclui tambm uma pilha do processo contendo dados temporrios (parmetros para sub-rotinas, endereos de retorno, variveis temporrias, etc.) e uma sesso de dados (variveis globais). Devemos enfatizar que um programa por si prprio no consiste em um processo; um programa uma entidade esttica, armazenada em um arquivo em disco e um processo uma entidade dinmica, com, por exemplo, o PC apontando para a prxima instruo a ser executada e um conjunto de recursos associados.

3.1.2) Estados do Processo


medida que o processo executa, ele muda de estado e este definido, em parte, pela sua atividade corrente. Um processo, em determinado instante, pode estar em um dos cinco estados a seguir e a Figura 3.1 apresenta o diagrama de transio destes estados:

Novo: o processo acabou de ser criado; Em execuo: suas instrues esto sendo executadas. Obs.: apenas um processo pode estar nesse estado a cada instante. Em espera ou Suspenso: o processo est esperando que um evento ocorra, normalmente o trmino de uma E/S. Pronto: o processo est pronto para utilizar a CPU. Terminado: o processo terminara sua execuo.
Novo Terminado

Pronto

Em execuo

Em espera
Figura 3.1: Diagrama de transio de estados do processo.

3.1.3) Bloco de Controle do Processo (PCB)


Cada processo representado no SO pelo seu bloco de controle (Process Control Block PCB), que fica armazenado na memria do SO. Ele possui diversas informaes associadas ao processo, incluindo:
14

Sistemas Operacionais - 1/2008 Prof.: Leonardo Vianna

O estado do processo. O PC indicando a prxima instruo do processo a ser executada. Os valores de alguns registradores da CPU: acumuladores, registradores de uso geral, stack pointer, bits de estado (essas informaes so salvas quando um evento ocorre para que seja possvel continuar a execuo do processo posteriormente, de forma correta Figura 3.2). Informaes para escalonamento de CPU: prioridade, filas de escalonamento, etc.. Informaes para gerncia de memria: registradores base, limite, ou tabelas de pgina ou de segmentos. Informaes para tarifao: tempo de CPU, limites de tempo, nmero da conta, nmero do processo, etc.. Informaes de estado de E/S: pedidos de E/S, dispositivos alocados ao processo, lista de arquivos abertos, etc.. Sistema Operacional
Salvar PCB0

Carregar PCB1

ocioso

execuo

Carregar PCB0

Salvar PCB1

P0

Figura 3.2: Diagrama mostrando o chaveamento da CPU entre os processos P0 e P1.

P1

3.2)

Escalonamento de Processos

O objetivo principal da multiprogramao est na tentativa de ter sempre um processo em execuo no sistema, maximizando dessa forma a utilizao de CPU. O objetivo dos sistemas time-sharing chavear a CPU entre os processos to freqentemente de modo a permitir que os usurios interajam com todos os seus programas durante suas respectivas execues, dando a impresso de que todos esto sendo executados ao mesmo tempo. Mas a verdade : se h apenas uma CPU no sistema computacional, nunca haver mais de um
15

Sistemas Operacionais - 1/2008 Prof.: Leonardo Vianna

processo executando em determinado instante. Se h mais processos necessitando do processador, estes tero que esperar at que a CPU se torne novamente livre e seja reescalonada pelo SO a outro processo.

3.2.1) Filas de Escalonamento


3 Os processos que chegam ao sistema para iniciar a sua execuo so colocados na fila de processos (ou fila de entrada). Essa fila composta por todos os processos em disco que esperam por carga na memria principal. Os processos residentes em memria que esto prontos, porm esperando pela utilizao da CPU, se encontram na fila de prontos, formada pelos PCBs de tais processos. Alm dessas filas, existem outras gerenciadas pelo SO, como, por exemplo, uma fila para cada dispositivo de E/S, onde so mantidos os PCBs dos processos que precisam utilizar o dispositivo em questo. Um processo recm carregado na memria colocado inicialmente na fila de prontos e fica aguardando at que o SO o selecione para usar a CPU. Durante o uso da CPU, um dos seguintes eventos pode ocorrer: O processo faz um pedido de E/S e colocado na fila do dispositivo (entra no estado de espera); O processo cria um subprocesso e espera pelo trmino da execuo deste (entra no estado de espera); A CPU retirada do processo por causa de uma interrupo e ele colocado de volta na fila dos prontos (Figura 3.3).

Fila de prontos

CP U

E/S

Fila de E/S

Pedido de E/S

Fim do time-slice
Final de exec. filho

Execu o do Filho Interrup.

Criao proc. filho

Espera interrupo

Figura 3.3: Diagrama de filas representando o escalonamento de processos. 16

Sistemas Operacionais - 1/2008 Prof.: Leonardo Vianna

3.2.2) Escalonadores
4 Ao longo de sua execuo, um processo migra pelas diversas filas do sistema. O SO deve selecionar processos destas filas segundo alguma filosofia. Tal seleo realizada pelo escalonador apropriado. Em um sistema batch, h normalmente mais processos submetidos do que processos executados imediatamente. Tais processos so colocados em um spooling de entrada (no disco) onde aguardam por carga em memria. Quem seleciona um desses processos, no instante que houver memria livre, o LTS (long-term scheduler, escalonador de longo prazo ou, simplesmente, escalonador de processos). O STS (short-time scheduler, escalonar de curto prazo ou escalonado de CPU) seleciona um dos processos da fila dos prontos para usar a CPU (note que nem todos os processos que esto na memria esto prontos). A diferena principal entre esses dois escalonadores est na freqncia que executam. O escalonador de CPU deve selecionar um novo processo freqentemente. Portanto, o escalonador de CPU deve ser muito rpido. O escalonador de processos, por outro lado, executa menos freqentemente, pois pode haver intervalos de minutos entre a chegada e partida de processos no sistema. O escalonador de processos controla o grau de multiprogramao, isto , o nmero de processos em memria, e s precisa ser executado quando algum processo deixa o sistema. Por isso, este escalonador pode consumir mais tempo de CPU do que o escalonador de CPU. importante que o escalonador de processos proceda uma seleo bem cuidadosa. Em geral, os processos so possveis de classificar como CPU Bound ou I/O Bound. Um processo I/O Bound gasta mais tempo realizando E/S do que efetivamente utilizando a CPU. Por sua vez, um processo CPU Bound raramente faz requisies de E/S, se dedicando mais utilizao da CPU. Dessa forma, importante que o escalonador de processos consiga uma mistura de processos dos dois tipos, para garantir uma melhor utilizao dos recursos do sistema. Se todos os processos so I/O Bound, a fila dos prontos estar quase sempre vazia e o escalonador de CPU ter pouco a fazer. Por outro lado, se todos os processos so CPU Bound, as filas de dispositivos estaro quase sempre vazias. Em ambos os casos, o sistema estar desbalanceado. Alguns sistemas operacionais, especialmente os que possuem memria virtual, tm um escalonador adicional, o escalonador de mdio prazo (medium-term scheduler MTS). A idia da utilizao do MTS (Figura 3.4) que algumas vezes pode ser vantajoso remover alguns processos da memria, reduzindo o grau de multiprogramao. Em algum instante posterior, cada processo carregado de volta na memria e sua execuo retomada do ponto que parou. Essa tcnica chamada de swapping. O MTS responsvel por fazer swap in e swap out dos processos. O swapping pode se mostrar necessrio para realizar a desejada mistura de processos
17

Sistemas Operacionais - 1/2008 Prof.: Leonardo Vianna

ou ainda para atender uma requisio extra de memria por parte de algum processo, sendo necessrio, dessa forma, liberar memria.
Processos swapped-out parcialmente executados swap in Entrada Fila de Prontos swap out Sada

CPU

E/S

Fila dos dispositivos

Figura 3.4: Incluso do MTS no diagrama de filas

3.2.3) Troca de Contexto


Chavear a CPU de um processo para outro exige salvar o contexto do processo que tinha o controle da CPU e carregar o contexto do processo que agora ganhou o direito de us-la. Essa ao tem o nome de troca de contexto e feita pelo SO. O tempo da troca de contexto puro overhead, uma vez que nenhum sistema realiza alguma funo til quando realiza esta operao e varia de uma arquitetura para outra, devendo ser minimizado.

18

Sistemas Operacionais - 1/2008 Prof.: Leonardo Vianna

Captulo 4 Escalonamento de CPU


Escalonamento de CPU a base de sistemas operacionais multiprogramveis. Atravs do chaveamento da CPU entre os processos que esto em memria prontos para executar, o SO pode tornar o sistema computacional mais produtivo.

4.1)

Conceitos Bsicos

O objetivo da multiprogramao ter sempre algum processo executando no sistema computacional, maximizando assim a utilizao da CPU. O escalonamento de CPU uma funo fundamental de qualquer SO. Praticamente todos os recursos do sistema devem ser escalonados antes de serem usados. E a CPU, por ser um dos principais recursos do sistema, seu escalonamento de suma importncia.
4.1.1)

CPU e I/O Burst Cycle

O escalonamento de CPU depende da seguinte propriedade sobre processos: a execuo de um processo uma sucesso de execues em CPU e espera por E/S. A execuo comea com um perodo CPU burst (utilizao de CPU), que seguido por um perodo I/O burst (espera por uma E/S). Esses perodos se repetem, at que o ltimo perodo CPU burst termina com a chamada de sistema terminate. A durao de cada perodo CPU burst varia de processo para processo e de computador para computador. Existe um grande nmero de perodos CPU burst curtos e um pequeno nmero de perodos CPU burst longos. Um programa I/O bound tem todos os perodos CPU burst curtos. Um programa CPU bound tem alguns perodos CPU burst longos. A escolha do algoritmo de escalonamento de CPU apropriado considera essa caracterstica.

19

Sistemas Operacionais - 1/2008 Prof.: Leonardo Vianna

4.1.2) Escalonador de CPU


Sempre que a CPU fica livre, o SO seleciona um processo, entre os que esto na fila de prontos, para executar. Essa seleo feita pelo STS (escalonador de CPU). Deve-se observar que a fila de prontos no necessariamente uma fila FIFO (First-in First-out). Podem existir outros critrios (como, por exemplo, o de prioridades) de ordenao dos processos. O que deve se ter em mente que o que fica armazenado nas filas so os PCBs dos processos, e no os prprios processos.

4.1.3) Preempo
O escalonamento de CPU pode se dar em 4 situaes distintas: i. ii. iii.
iv.

Um processo faz uma chamada de sistema e tem que esperar (o SO tem que selecionar outro processo). Ocorre uma interrupo (o processo vai para a fila de prontos e o SO trata a interrupo). O processo colocado na fila de prontos pelo SO, depois de tratar uma interrupo (o processo terminou uma E/S). O processo faz a chamada de sistema terminate (o SO tem que selecionar outro processo).

Quando o escalonador executa somente nos casos i e iv, ento dito que o escalonamento no preemptivo (preempo interrupo). Nesse caso, o processo s perde a CPU se fizer uma chamada de sistema (o SO trata interrupes e devolve a CPU a o processo que a detinha antes da interrupo). Quando o escalonador executa nos quatro casos, ento dito que o escalonamento preemptivo.
4.1.4)

Dispatcher (Mdulo Despachante)

Outro componente envolvido no escalonamento de CPU o dispatcher. Este o mdulo do SO que realmente d a CPU ao processo escolhido pelo escalonador de CPU. Ele deve executar muito rapidamente as seguintes operaes: Trocar o contexto; Mudar o mode bit para modo usurio; e Desviar para o endereo do programa do usurio (o valor do PC contido no respectivo PCB).

20

Sistemas Operacionais - 1/2008 Prof.: Leonardo Vianna

4.2)

Critrios de Escalonamento

Diferentes algoritmos de escalonamento de CPU possuem diferentes propriedades. Para escolher um deles para ser empregado em um SO especfico, preciso poder compar-los. Diferentes critrios podem ser usados para comparar tais algoritmos. Dependendo do critrio usado, a determinao do melhor algoritmo pode variar. Os critrios utilizados incluem: Utilizao de CPU: se a CPU cara, ento desejamos mant-la ocupada o maior tempo possvel. Em um sistema real, essa taxa pode variar de 40 % a 90 %; Throughput (vazo): se a CPU est ocupada, isto significa que h processo sendo executado. O throughput o nmero mdio de processos que so executados (terminados) por unidade de tempo; Turnaround time: o intervalo de tempo desde a submisso do processo at seu trmino (tempo de espera por carga na memria + espera na fila de prontos + espera por E/S + tempo de CPU); Tempo de espera: o tempo que o processo fica na fila de prontos; Tempo de resposta (em sistemas interativos): o tempo que o sistema leva para dar a resposta a uma requisio do usurio.

Uma vez escolhido o critrio para comparao, geralmente deseja-se otimiz-lo. Ento desejvel maximizar, por exemplo, a utilizao da CPU e o throughput, e minimizar o turnaround time, o tempo de espera e o tempo de resposta. Em alguns casos, so as mdias que so otimizadas, em outros os valores mnimos e os mximos (caso queiramos garantir que todos os usurios tenham sempre um bom servio). Em sistemas interativos, porm, melhor minimizar a variao do tempo de resposta.
4.3)

Algoritmos de Escalonamento

Escalonamento de CPU lida com o problema de decidir qual processo que se encontra na fila de prontos ganhar a posse da CPU. Para isto, h uma variedade de algoritmos de escalonamento, que se diferem no critrio adotado em tal seleo.
4.3.1)

Algoritmo FCFS (First-Come, First-Served)

o algoritmo de escalonamento mais simples: a CPU dada ao processo que chegou mais cedo na fila de prontos, classificando-se como no-preemptivo. A implementao do FCFS feita gerenciando-se uma fila FIFO. Quando o processo chega na fila de prontos, seu PCB colocado no final da fila. A CPU, ficando livre, ento alocada ao primeiro processo da fila dos prontos, que retirado da fila. Essa estratgia de fcil implementao e entendimento. Porm, o desempenho do FCFS muito baixo. Por exemplo, consideremos 3 (trs) processos cujos prximos CPU burst so conhecidos (em unidades de
21

Sistemas Operacionais - 1/2008 Prof.: Leonardo Vianna

tempo u.t.): P1 = 24, P2 = 3 e P3 = 3. Todos chegam na fila dos prontos no instante 0. Se a ordem de chegada P1, P2 e P3, ento temos a seguinte situao: P1 0 24 P2 27 P3 30

O tempo de espera mdio TEM : (0+24+27)/3 = 17 u.t.. Mas se a ordem de chegada dos processos na fila de prontos fosse P2, P3 e P1, teramos: P2 3 P3 6 P1 30

O TEM passa a ser: (6+0+3)/3 = 3 u.t.. Esta reduo substancial. Podemos dizer ento que o tempo de espera mdio, nesse tipo de escalonamento, geralmente no mnimo e varia substancialmente se os tempos CPU burst variarem muito. Alm disso, consideremos tambm o FCFS na situao dinmica na qual temos um processo CPU bound e vrios processos I/O bound. Em um dado momento, o processo CPU bound ganha controle da CPU, e a retm. Durante esse tempo, todos os outros processos terminam de fazer E/S e esto na fila de prontos. Enquanto esperam, todas as filas de E/S esto vazias e os dispositivos ociosos, caracterizando desbalanceamento do sistema. O processo CPU bound termina seu ciclo CPU burst e faz E/S. Todos os demais processos, que so I/O bound e, portanto, possuem perodos CPU burst muito curtos, executam e voltam para as filas de E/S, deixando a CPU ociosa. O ciclo pode se repetir causando o que chamamos de efeito comboio (convoy effect). Em outras palavras, como se todos os processos esperassem que um grande processo largasse a CPU. Esse efeito provoca a m utilizao da CPU e dos dispositivos. Utilizao essa que seria melhorada se os processos de ciclos CPU burst menores ganhassem a CPU primeiro.
4.3.2)

Algoritmo SJF (Shortest Job First)

O SJF pode ser preemptivo ou no-preemptivo. Ele associa a cada processo a durao do prximo CPU burst. Quando a CPU fica disponvel, ela dada ao processo de menor prximo CPU burst. Se dois processos tm CPU burst de mesma durao, ento o FCFS usado. Note que o termo mais apropriado seria shortest next CPU burst, uma vez que o escalonamento realizado considerando o tempo do prximo CPU burst e no sobre a durao total do processo. Vejamos o exemplo. Consideremos 4 (quatro) processos cujos prximos CPU burst so conhecidos (em unidades de tempo u.t.): P1 = 6, P2 = 8, P3 = 7 e P4 = 3. Podemos calcular o tempo de espera mdio se a ordem de chegada P1, P2, P3 e P4.

22

Sistemas Operacionais - 1/2008 Prof.: Leonardo Vianna

P4 0 3

P1 9

P3

16

P2 24

O TEM : (3+16+9+0)/4 = 7 u.t.. Se estivssemos utilizando o FCFS, este tempo aumentaria para 10,25 u.t.. O SJF timo por fornecer um tempo de espera mnimo para um conjunto de processos. Porm, a dificuldade conhecer a durao do prximo perodo CPU burst dos processos. Embora o SJF seja timo, o escalonador de CPU associado no implementvel: no h como conhecer a durao do prximo CPU burst. O que se tenta fazer uma previso desse valor, isto , podemos imaginar que o prximo perodo ser semelhante ao anterior. escolhido ento o processo com menor prximo CPU burst estimado. No SJF preemptivo, ou shortest remaining time first SRTF, sempre que um processo chega fila dos prontos, a execuo do processo parada, j que o novo processo pode ter prximo CPU burst menor que o resto daquele que est em execuo. Nesse caso, somente o resto do processo entra na fila, e o SO pode escolher um novo processo para executar, ou continuar executando o anterior. Consideremos um exemplo com 4 (quatro) processos para ilustrar o SJF preemptivo: P1 = 8, P2 = 4, P3 = 9 e P4 = 5. Podemos calcular o tempo de espera supondo que P1 chega a fila dos prontos no instante 0, P2 no 1, P3 no 2 e P4 no instante 3.

P1 0 1

P2 5

P4

10

P1 17

P3 26

O tempo de espera mdio : ((10-1) + (1-1) + (17-2) + (5-3))/4 = 6,5 u.t.. Se o SJF no preemptivo usado, esse valor aumenta para 7,75 u.t..
4.3.3)

Algoritmo de Prioridades

SJF um caso particular do algoritmo de escalonamento de prioridades (a prioridade o inverso do prximo CPU burst). Uma prioridade associada a cada processo, e a CPU dada ao processo de maior prioridade. Processos com mesma prioridade so tratados na ordem FCFS. Pode ser preemptivo e no preemptivo. Prioridades vo, por exemplo, de 0 a 7 ou de 0 a 4095; isto , compreendem uma faixa de nmeros adequada (em geral, a prioridade 0 a mais alta).

23

Sistemas Operacionais - 1/2008 Prof.: Leonardo Vianna

Consideremos 5 (cinco) processos aonde todos chegam na fila dos prontos no instante 0, na ordem P1, P2, P3, P4 e P5. Esses processos tm respectivamente CPU burst de 10, 1, 2, 1 e 5. Suas prioridades so, respectivamente, 3, 1, 3, 4 e 2. Usando o escalonamento de prioridades, o tempo de espera mdio de 8,2 u.t.. P2 0 1 P5 6 P1 P3 18 P4 19

16

As prioridades podem ser definidas interna ou externamente. Se definidas internamente, podem ser baseadas, por exemplo, no tempo limite, necessidade de memria, nmero de arquivos abertos, ou na taxa mdia entre perodo I/O burst e CPU burst. As prioridades definidas externamente so definidas atravs de critrios externos ao SO, tais como o valor da conta do usurio. O maior problema desse algoritmo o que denominamos blocking ou starvation, que pode fazer com que um processo de baixa prioridade espere indefinidamente por CPU na fila dos prontos. Em outras palavras, se o escalonamento de CPU for por prioridade, em sistemas muito ocupados, o alto fluxo de processos de alta prioridade na fila de processos pode impedir que processo de prioridade mais baixa ganhe controle da CPU. Nesse caso, duas coisas podem ocorrer: o processo de baixa prioridade executa s 02:00 h da manh, quando a carga fica reduzida, ou o sistema cai, e todos os processos de baixa prioridade so perdidos. A soluo para starvation dos processos de baixa prioridade uma tcnica chamada aging, na qual a prioridade aumenta gradualmente medida que o processo permanece no sistema sem conseguir usar a CPU.
4.3.4)

Algoritmo Round-Robin - RR

um algoritmo preemptivo, projetado especialmente para sistemas time-sharing. similar ao FCFS, mas existe preempo. Uma pequena unidade de tempo (quantum ou timeslice) definida (normalmente, de 10 a 100 ms). A fila dos prontos tratada como uma fila circular, e a CPU alocada para cada processo por um perodo que pode durar at um quantum. A fila dos prontos organizada de modo FIFO. Novos processos e processos que perdem controle da CPU entram no final da fila. O escalonador escolhe o primeiro processo da fila dos prontos. Antes de dar o controle da CPU ao processo selecionado, o SO carrega o timer com o valor do quantum. Quando um processo ganha o direito de usar a CPU, duas coisas podem ocorrer: O CPU burst do processo menor do que um quantum, e o processo libera a CPU voluntariamente;

24

Sistemas Operacionais - 1/2008 Prof.: Leonardo Vianna

O CPU burst do processo maior do que um quantum, e o timer provoca uma interrupo e o SO coloca o PCB do processo no final da fila dos prontos, e o escalonador de CPU escalona o primeiro processo da fila para receber a CPU.

Freqentemente, o tempo de espera mdio fornecido por este algoritmo longo. Consideremos 3 (trs) processos cujos prximos CPU burst so: P1 = 24, P2 = 3 e P3 = 3. Se a ordem de chegada P1, P2 e P3, e o quantum de 4 u.t., temos a seguinte situao: P1 0 4 P2 7 P3 P1 14 P1 18 P1 22 P1 26 P1 30

10

O tempo de espera mdio de 17/3 = 5,66 u.t.. O desempenho do RR depende da durao do quantum. Se o quantum for grande, tornase FCFS. Se, por outro lado, for muito pequeno, o SO vai gastar mais tempo de CPU fazendo troca de contexto do que executando os programas do usurio (e a troca de contexto puro overhead). Consideremos, por exemplo, um processo de CPU burst de 10 u.t.. Na Figura, observamos que quanto menor o quantum, maior o nmero de trocas de contexto. Quantum = 12 0 Trocas 0 6 10 Quantum = 6 1 Troca

Quantum = 1 9 Trocas
Figura 4.1: Definio do tamanho do quantum.

4.3.5) Algoritmo de Mltiplas Filas


Esse algoritmo foi criado para ambientes nos quais os processos so facilmente classificados em grupos diferentes. Por exemplo, foreground (interativos) e background (batch). Estes dois tipos de processos possuem diferentes necessidades de tempos de resposta e, portanto, podem apresentar diferentes necessidades de escalonamento. Alm disso, podem ser definidas prioridades sobre determinado tipo de processo; os foregrounds, por exemplo, possurem maio prioridade. O algoritmo de mltiplas filas parte a fila de prontos em diversas filas (Figura 4.2). Cada fila pode ter uma poltica de escalonamento diferente. Deve existir tambm um escalonamento
25

Sistemas Operacionais - 1/2008 Prof.: Leonardo Vianna

entre as filas, que geralmente um baseado em prioridades fixas. Uma outra possibilidade dar uma fatia de tempo (time-slice) a cada uma das filas. Prioridade mais alta Processos do sistema Processos interativos Processos batch Processos de estudantes Prioridade mais baixa
Figura 4.2: Algoritmos de mltiplas filas.

4.3.6) Algoritmo de Mltiplas Filas com Realimentao


No algoritmo anterior, os processos no mudam de fila. O algoritmo de mltiplas filas com realimentao permite que isso ocorra. O objetivo aqui separar processos com caractersticas CPU burst diferentes. Por exemplo, se um processo usa muita CPU, movido para filas de prioridade mais baixa, deixando processos I/O bound e interativos em fila de maior prioridade. De modo anlogo, um processo que espera por longo perodo de tempo em fila de prioridade baixa pode ser movido para uma fila de prioridade maior. Por exemplo, considere trs filas, numeradas de 0 a 2 (Figura 4.3). O escalonador primeiro executa todos os processos da fila 0 (a de maior prioridade). Quando esta fica vazia, executa os da fila 1. Os processos da fila 2 s so executados se as filas 0 e 1 estiverem vazias. Se um processo chega na fila 0, interrompe a execuo de um processo de fila 1 ou 2. Um processo que chega na fila 1 interrompe um da fila 2 (isso pode causar starvation se no for devidamente tratado). Em geral, o escalonador desse tipo definido pelos seguintes parmetros: O nmero de filas; O algoritmo para cada fila; Um mtodo para determinar quando um processo deve ser posto na fila de maior prioridade, evitando, por exemplo, o starvation; Um mtodo para determinar quando um processo deve ser posto na fila de menor

26

Sistemas Operacionais - 1/2008 Prof.: Leonardo Vianna

prioridade; Um mtodo para determinar em qual fila o processo inicia. Quantum = 8 Fila 0

Quantum = 16

Fila 1

FCFS
Figura 4.3: Algoritmos de mltiplas filas com realimentao.

Fila 2

Este o algoritmo de escalonamento mais geral (pode ser configurado para qualquer sistema) e o mais complexo. necessrio, porm, selecionar valores de todos os parmetros para obter um bom escalonamento.

27

Sistemas Operacionais - 1/2008 Prof.: Leonardo Vianna

Captulo 5 Gerncia de Memria


Anteriormente, vimos como a CPU pode ser compartilhada por um conjunto de processos. Como conseqncia do escalonamento de CPU, podemos aumentar tanto a utilizao da CPU quanto a velocidade de resposta s requisies do usurio. Porm, para obtermos este aumento de performance, necessrio ter vrios processos simultaneamente em memria; isto , necessrio compartilhar memria.

5.1)

Conceitos Bsicos

A memria uma grande array de palavras ou bytes, cada qual com seu prprio endereo. A CPU busca instrues na memria de acordo com o valor armazenado no PC e tais buscas podem ocasionar buscas adicionais de dados ou ainda armazenamento de resultados em determinados endereos de memria. Mas quais so os passos envolvidos na execuo de uma instruo? De maneira breve, podemos citar os seguintes passos: 1) 2) 3)
5.2)

Busca da instruo em memria; Decodificao da instruo que pode ocasionar a busca de operandos em memria; Aps a instruo ser executada, os resultados podem ser retornados para a memria.

Address Binding (Relocao de endereos)

Como visto anteriormente, deve-se distinguir, por suas caractersticas prprias, o significado de programa e o de processo. O programa reside em disco como um arquivo binrio executvel. Para que ele seja executado, ele deve ser carregado na memria e, ento, passa a ser chamado de processo. Dependendo do tipo de gerncia de memria adotada, o processo pode pular do disco para a memria e vice-versa durante a sua execuo. O procedimento normal selecionar um processo da fila de entrada e carreg-lo na memria para iniciar a competio pela utilizao da CPU. medida que o processo executa, ele acessa instrues e dados na memria. Eventualmente, o processo termina sua execuo e a
28

Sistemas Operacionais - 1/2008 Prof.: Leonardo Vianna

memria por ele ocupada ento liberada e um novo processo pode ser carregado e executado nesta regio. A maioria dos sistemas operacionais permite que um processo de usurio resida em qualquer parte da memria fsica. Porm, embora o espao de endereamento fsico inicie no endereo 00000, no h nada que force que o processo do usurio seja carregado neste endereo (00000). Isto , o primeiro endereo do processo no , em geral, o endereo 00000 da memria, o que acarreta a relocao dos endereos (address binding). Na maioria das vezes, o programa passa por diversas etapas (algumas opcionais), at ser efetivamente executado, como pode ser visto na Figura 5.1. Os endereos podem ser representados de diversas formas durante estas etapas: No programa fonte, endereos geralmente so simblicos (como i, j, nome, etc.) as conhecidas variveis. O compilador associa esses endereos simblicos a endereos relocveis (por exemplo, 14 bytes a partir do incio do mdulo). O link-editor ou o loader, por sua vez, associam esses endereos relocveis a endereos absolutos de memria (como, 74014).

Cada tipo de binding consiste no mapeamento de um espao de endereamento em outro. Neste caso, um mapeamento de endereos lgicos em endereos fsicos. A associao de endereos de memria a instrues e dados, dependendo do sistema computacional, pode ser feita em: Tempo de compilao: se em tempo de compilao conhecido o endereo inicial de memria onde o programa ir executar, ento o cdigo absoluto pode ser gerado durante a compilao. Porm, se em algum momento posterior, o endereo inicial for alterado, ser necessria a recompilao do programa. Tempo de carga: se em tempo de compilao no conhecido o endereo inicial da regio de memria onde o programa ir executar, ento o compilador gera cdigo relocvel, e a associao de endereos e dados a endereos de memria (binding) postergada at o tempo de carga (se o endereo inicial mudar, ento no ser necessrio recompilar todo o programa). Tempo de execuo: se o processo pode ser movido de uma parte da memria para outra durante a sua execuo, ento a associao de endereos deve ser feita em tempo de execuo (nesse caso, necessrio hardware de relocao).

29

Sistemas Operacionais - 1/2008 Prof.: Leonardo Vianna

Program a Fonte

Compilador ou assembler

Tempo de Compilao

Mdulo Objeto

Outros Md. Obj.

Link-editor

Tempo de Carga

Mdulo de carga

Bibliot. de Sistema

Loader

Tempo de Execuo

Processo

DLLs do Sistema
Figura 5.1: Mltiplos passos da execuo de um programa do usurio.

30

Sistemas Operacionais - 1/2008 Prof.: Leonardo Vianna

5.3)

Carga Dinmica

Para obter uma melhor utilizao do espao de memria, podemos utilizar a carga dinmica. Nesse caso, uma rotina s carregada quando chamada. Todas as rotinas so mantidas em disco em formato relocvel e s sero carregadas no momento que forem referenciadas. O programa principal carregado na memria e executado. Quando uma rotina chama outra rotina, ela verifica se a rotina chamada j foi carregada. Se no, tal rotina deve ser carregada na memria e as estruturas de dados atualizadas de modo a refletir a nova situao. O controle ento transferido para a rotina recm-carregada. A vantagem desta tcnica que determinada rotina s ser carregada se realmente for necessria, sendo particularmente til quando uma grande quantidade de cdigo for necessria para tratar situaes no muito freqentes, como o tratamento de erros. Neste caso, embora o programa possa ser muito grande, a parte que realmente utilizada pode ser muito menor, fazendo com que menos memria seja necessria. Carga dinmica no requer suporte especial do sistema operacional. Fica sob a responsabilidade do usurio fazer seus programas tomando vantagem dessa tcnica.
5.4)

Link Dinmico (DLL)

At pouco tempo, a maioria dos sistemas operacionais suportava apenas o link esttico, onde as bibliotecas das linguagens so tratadas como qualquer mdulo objeto e so linkadas ao programa objeto a fim de gerar o executvel. Conceitualmente, o link dinmico semelhante carga dinmica. Porm, ao invs da carga ser postergada, o que postergado at o tempo de execuo a link-edio. Sem essa facilidade, todos os programas so obrigados a ter uma cpia de rotinas de biblioteca usadas no prprio mdulo executvel, o que ocasiona um alto consumo de espao em disco e tambm de memria. Para cada referncia a determinada rotina de biblioteca, includo um stub no executvel. Stub um pequeno cdigo que indica como localizar uma rotina de biblioteca residente em memria ou ainda como carreg-la se ela ainda no estiver em memria. Quando o stub executado, ele se substitui pelo endereo da rotina, e a executa. Na prxima vez que a rotina for chamada, ela ser executada diretamente, sem nenhum custo para o link dinmico. Com esta tcnica, todos os processos que utilizam, por exemplo, a biblioteca Biblio1, acabam por acessar a mesma cpia, ao invs de cada processo ter tal cpia incorporada em seu
31

Sistemas Operacionais - 1/2008 Prof.: Leonardo Vianna

cdigo. Ao contrrio da carga dinmica, o link dinmico j requer uma ajuda adicional do sistema operacional.
5.5)

Sobreposies (Overlays)

Os sistemas operacionais iniciais exigiam que o programa estivesse todo em memria antes de iniciar a sua execuo o que fazia com que o tamanho do processo fosse limitado ao tamanho da memria. Porm, se um processo for maior do que a memria fsica, ento, algumas vezes, a tcnica conhecida como overlays pode ser usada. A idia manter na memria somente instrues e dados que so necessrios em dado momento. Se outras instrues so necessrias, so carregadas em endereos anteriormente ocupados por instrues no mais necessrias. Para exemplificar o funcionamento desta tcnica, consideremos um assembler que executa em dois passos (Figura 5.2). Durante o passo 1, ele constri a tabela de smbolos. Ento, no passo 2, o cdigo de mquina gerado. Dessa forma, possvel separar seu cdigo em subpartes que incluem: passo 1 (70 K), passo 2 (80 K), tabela de smbolos (20 K) e rotinas comuns aos 2 passos (30 K). Deve-se observar que esses valores (tamanho de cada subparte) so apenas para exemplificar.
Tabela de Smbolos

20 K

Rotinas Comuns Driver do overlay

30 K

uns
10 K

70 K

Passo 1

Passo 2

80 K

Figura 5.2: Overlays para um assembler de dois passos.

32

Sistemas Operacionais - 1/2008 Prof.: Leonardo Vianna

Com tais valores, o total de memria para carregar o assembler de 200 K. Se tivermos apenas 150 K, o processo no poder ser executado. Se a tcnica de overlays usada, ento o passo 2 pode ser carregado na mesma regio ocupada anteriormente pelo passo 1, uma vez que so cdigos totalmente independentes. preciso, ento, acrescentar um pequeno cdigo (driver de overlay) para que a carga do passo 2 possa ser realizada. Dessa forma, a ltima instruo do passo 1 faz um jump para o incio desse cdigo adicional que carrega o passo 2, sobrescrevendo o passo 1 ali antes carregado.

5.6)

Swapping

Como visto vrias vezes anteriormente, um processo precisa estar na memria para que possa ser executado. possvel, porm, retir-lo da memria temporariamente (swap out) para a memria de apoio (backing store), que, em geral, um disco, e mais tarde traz-lo de volta para continuar sua execuo (swap in) (Figura 5.3).

Sistema Operacional

Swap out

P1

Memria do usurio
Swap in Memria Principal Figura 5.3: Swapping de dois processos.

P2
Memria de Apoio

Por exemplo, suponha um ambiente com multiprogramao no qual o algoritmo de escalonamento RR usado. Quando o quantum se esgota, o gerente de memria pode fazer swap out do processo e swap in de outro para a memria que ficou livre. Nesse meio tempo, o escalonador de CPU aloca um outro quantum para um outro processo em memria. Quando cada processo esgota seu quantum, trocado (swapped) por outro processo. Idealmente, o gerente de memria faz o swapping rpido o suficiente, de modo a existir sempre um processo na memria, pronto para executar, quando o escalonador de CPU desejar reescalon-la. O quantum tambm deve ser grande o suficiente para que uma quantidade razovel de computao seja feita entre trocas sucessivas.
33

Sistemas Operacionais - 1/2008 Prof.: Leonardo Vianna

Uma variao do swapping usada para escalonamento baseado em prioridades. Se um processo de maior prioridade chega fila de entrada, ento o gerente de memria pode fazer swap out de um processo de prioridade mais baixa, a fim de carregar e executar o processo de maior prioridade. Quando o processo de maior prioridade terminar sua execuo, o de menor sofre swap in e pode ento continuar sua execuo. Essa variao do swapping chamada rollout, roll-in. Normalmente um processo que sofreu swap out, sofre swap in para a mesma regio de memria ocupada anteriormente. Essa restrio est condicionada ao momento da associao de endereos regio de memria (address binding). Se a associao feita em tempo de compilao ou em tempo de carga, ento o processo no pode ser movido para regies diferentes da original para que a relocao de endereos no necessite ser refeita. Se a associao de endereos feita em tempo de execuo, ento outras regies de memria podem ser usadas para fazer swap in do processo. O swapping exige memria de apoio que deve ser grande suficiente para conter imagens de memria de todos os usurios e deve permitir acesso direto a estas imagens; por esse motivo, os discos so utilizados na implementao desta memria. Deve-se observar que agora a fila dos prontos passa a ser constituda por todos os processos que esto prontos para execuo e cujas imagens se encontram na memria de apoio ou na principal. Sempre que o escalonador de CPU decide executar um processo, ele chama o dispatcher que verifica se o processo escolhido encontra-se em memria ou no. Se no estiver em memria e no existir memria livre, ento o dispatcher faz swap out de algum processo em memria e, em seguida, swap in do processo desejado. Depois, restaura registradores e passa o controle para o processo selecionado (o tempo necessrio para a troca de contexto aumenta). Existe ainda uma outra restrio no swapping. O problema surge se for feito swap out de um processo com E/S pendente. Como os dispositivos trabalham de forma assncrona, quando um pedido for atendido, haver tentativa de usar memria agora pertencente a outro processo (o que sofreu swap in na regio de memria do anterior), o que acarretar alguma forma de erro. Existem duas solues para este problema: nunca fazer swap out de processos com E/S pendente, ou executar E/S em buffers do SO. Nesse ltimo caso, a transferncia do buffer do sistema para o processo s se d quando este voltar memria (swap in).

5.7)

Alocao Contgua de Memria

A memria principal tem que acomodar tanto o sistema operacional quanto os programas do usurio. Para isso, a memria usualmente dividida em duas partes: uma s para o SO e a outra para os programas de usurio. Geralmente, o SO fica nos endereos mais baixos de memria uma vez que l que se encontra o vetor de interrupo. O vetor de interrupes uma tabela de endereos de memria que apontam para as
34

Sistemas Operacionais - 1/2008 Prof.: Leonardo Vianna

rotinas de tratamento de interrupo. Quando uma interrupo gerada, o processador salva o seu estado atual e comea a executar o tratamento de interrupo apontado pelo vetor.

35

Sistemas Operacionais - 1/2008 Prof.: Leonardo Vianna

5.7.1) Partio nica


A tcnica de gerncia de memria mais simples a ausncia de gerncia. O usurio tem controle sobre toda a mquina e total flexibilidade para usar a memria da forma que desejar. Esta tcnica simples, sem custo e no requer hardware especial para gerncia de memria, uma vez que no existe SO. Por outro lado, as desvantagens incluem ausncia de servios, de tratamento de interrupes e no existe seqenciamento de jobs ( usado somente em sistemas dedicados). A prxima tcnica mais simples consiste em particionar a memria em duas regies: uma para o SO e outra para o programa do usurio. Dessa forma, o SO deve ser protegido de acesso ilegal e tal proteo feita pelo hardware. Outro problema a ser considerado a carga do processo de usurio. Embora o espao de endereamento fsico comece em 0, o primeiro endereo do programa do usurio comea no endereo contido no registrador base, que, em geral, no o endereo 0. Se esse valor conhecido em tempo de compilao, o cdigo absoluto pode ser gerado durante a compilao. Porm, se o endereo inicial da partio do usurio mudar, ento ser necessrio recompilar todo o programa. Como alternativa, o compilador gera cdigo relocvel, e a ligao de instrues e dados a endereos de memria (relocao de endereos) postergada at o tempo de carga. 0 Sistema Operacional

Usurio

512 K
Figura 5.4: Memria Principal na Partio nica.

36

Sistemas Operacionais - 1/2008 Prof.: Leonardo Vianna

Em ambos os casos, o endereo inicial da regio de memria na qual o programa executa no pode ser alterado durante a execuo do programa (isso pode ser desejvel se cdigo transiente do SO estiver presente). Existem duas formas para a soluo desse problema: Carregar o processo do usurio nos endereos mais altos (todo o espao de memria no utilizado fica no meio e tanto o SO como o programa do usurio podem se expandir). Fazer a relocao de endereos em tempo de execuo.

0 Sistema Operacional

RB

14000

+
End Log = 346 End Fis =14346 Memria Usurio 512 K
Figura 5.5: Hardware para a Relocao de Endereos em Tempo de Execuo.

O programa do usurio gera endereos lgicos. O hardware apresentado converte tais endereos nos endereos fsicos correspondentes. Dessa forma, torna-se possvel movimentar o programa de usurio na memria em tempo de execuo e apenas alterar o contedo do registrador base. Se o endereo lgico do programa for de 0 a max, seus endereos fsicos correspondentes sero RB+0 a RB+max, onde RB o contedo do registrador base. Nota: o SO pode acessar endereos fsicos diretamente em modo supervisor. Porm, todas as informaes passadas pelo programa do usurio para o SO devem ser relocadas pelo SO.

37

Sistemas Operacionais - 1/2008 Prof.: Leonardo Vianna

5.7.2) Mltiplas Parties


Em sistemas multiprogramveis, diversos processos residem em memria e a CPU chaveada entre eles. O problema ento est em alocar memria para os diversos processos que esto na fila de entrada esperando para serem levados para a memria. A tcnica de gerncia de memria conhecida por mltiplas parties nos permite trabalhar tanto com nmero fixo quanto varivel de tarefas. No primeiro deles, a memria dividida em um nmero de regies ou parties de tamanho fixo. Cada uma delas pode conter exatamente um processo o que faz com que o grau de multiprogramao fique limitado ao nmero de parties. Quando uma partio torna-se livre, ento um processo da fila de entrada selecionado e carregado nesta partio. Quando o processo termina, a partio se torna novamente disponvel para que outro processo possa ser carregado. Deve-se observar que, uma vez que o tamanho das parties fixo, o nmero de parties sempre o mesmo, o que caracteriza esta tcnica como multiprogramao com nmero fixo de tarefas (MFT). A generalizao desta tcnica conhecida como multiprogramao com nmero varivel de tarefas (MVT). Nesta tcnica, o SO mantm uma tabela indicando quais as partes da memria esto livres e quais esto ocupadas. Inicialmente, a memria um nico bloco livre. Quando um processo chega na fila de entrada, o LTS (escalonador de longo prazo) busca um bloco de memria livre capaz de cont-lo. Se esse bloco existir, alocada memria suficiente para o processo, e o restante do bloco mantido disponvel para necessidades futuras (em qualquer instante, existem blocos de memria livre de diversos tamanhos espalhados) (Figura 5.6). A alocao dinmica de memria utiliza trs estratgias distintas para satisfazer a necessidade de n palavras de uma lista de regies de memrias livres. A lista de regies livres de memria pesquisada para alocar uma regio, segundo: First-fit: aloca a primeira regio capaz de conter o programa (a busca termina assim que a primeira regio encontrada e pode ser iniciada pelo incio da lista ou a partir de onde a pesquisa anterior terminou mais rpida). Best-fit: aloca a menor regio capaz de conter o programa (a lista precisa ser toda pesquisada a menos que seja mantida ordenada por tamanho de regio produz a menor regio resto). Worst-fit: aloca a maior regio livre disponvel (a lista precisa ser toda pesquisada a menos que seja mantida ordenada por tamanho de regio produz a maior regio resto).

As trs tcnicas provocam a fragmentao externa, isto , a medida que os processos so


38

Sistemas Operacionais - 1/2008 Prof.: Leonardo Vianna

carregados na memria e removidos, a memria fica partida em pequenos pedaos. A fragmentao externa est presente se existe memria total suficiente para atender um pedido, mas essa memria no forma um nico bloco.
0 400 K

SO
P1 P2 P3 P4 P5

Fila de processos
Processo Tamanho
600 K 1000 K 300 K 700 K 500 K

Tempo
10 5 20 8 15

2160 K 2560 K
0 400 K 1000 K P1

SO

0 400 K 1000 K

SO
P1

0 400 K 1000 K 1700 K 2000 K

SO
P1 P4 P3

0 400 K 1000 K 1700 K 2000 K 2300 K 2560 K

SO

0 400 K 900 K 1000 K

SO
P5 P4 P3

2000 K 2300 K 2560 K

P2 P3

P4 P3

2000 K 2300 K 2560 K P3

1700 K 2000 K 2300 K 2560 K

2300 K 2560 K

Figura 5.6: Exemplo da Utilizao da MVT

Como diversos processos residem na memria simultaneamente, preciso um hardware para proteo de memria, de modo que a execuo de um no interfira na execuo de outros. Deve-se cuidar para que um processo de usurio no invada a memria do SO nem regies de memria alocadas aos outros processos de usurio. Como pode ser visto na Figura 5.7, o hardware de proteo de memria utiliza os registradores base e limite, possibilitando a relocao de endereos em tempo de execuo. O registrador base contm o menor endereo fsico e o registrador limite contm o tamanho do programa. Desse modo, cada endereo lgico dinamicamente relocado pela soma do valor contido no registrador base com o endereo lgico.

39

Sistemas Operacionais - 1/2008 Prof.: Leonardo Vianna

RL

RB

CPU

End. lgico

<

Sim

End. fsico

Memria
No Trap: erro de endereo

Quando o escalonador de CPU seleciona um processo para ser executado, o dispatcher carrega os registradores base e limite com os valores corretos, contidos no PCB. Como cada endereo gerado pela CPU manipulado pelo hardware de proteo de memria, um processo em execuo no pode acessar endereos que no pertenam ao seu espao de endereamento, o que caracterizaria violao de memria. Um outro problema encontrado nessa e nas tcnicas de gerncia anteriores consiste na fragmentao interna, pois regies de memrias de pequenos tamanhos podem no ser devolvidas para lista de regies livres, quando da carga de um programa. Isso ocorre pois pequenas regies (2 bytes, por exemplo) no so teis e acabam por retardar a pesquisa das regies livres. medida que programas chegam ao sistema, eles so colocados na fila de entrada. O LTS leva em conta as necessidades de memria de cada processo e a quantidade de memria disponvel para determinar a que processos sero dadas as regies livres. Quando a memria alocada para o processo, este carregado na memria e, se necessrio, relocado. Nesse instante, ele passa a competir pela utilizao da CPU. Quando o processo termina sua execuo, a rea de memria por ele ocupada liberada e, ento, o escalonador de processos pode selecionar um outro processo da fila de entrada. Assim, em qualquer instante, deve existir a lista dos tamanhos dos blocos de memria livres e a fila de entrada, esta podendo estar ordenada conforme o algoritmo de escalonamento adotado. O LTS aloca memria para os processos da fila at que a necessidade do primeiro processo da fila no possa mais ser satisfeita. Nesse instante, este escalonador pode esperar at que haja memria para o processo, ou passar a examinar os prximos processos da fila de entrada para verificar se a necessidade de um processo de menor prioridade pode ser satisfeita. A utilizao de memria da MVT geralmente melhor que na MFT. A fragmentao interna se existir pequena, mas a fragmentao externa considervel. No pior caso, pode existir um fragmento entre cada dois processos.
40

Figura 5.7: Hardware de Proteo de Memria (MVT)

Sistemas Operacionais - 1/2008 Prof.: Leonardo Vianna

A compactao uma soluo para a fragmentao j que seu objetivo arrumar o contedo da memria de forma a ter-se toda a memria livre em um nico bloco. Porm, a compactao s possvel se a relocao dinmica (em tempo de execuo) usada. Nesse caso, o programa mudado de lugar e o registrador base alterado. Quando a compactao possvel, preciso determinar seu custo. O algoritmo de compactao mais simples move todos os processos para uma das extremidades da memria, o que pode se apresentar muito caro. Tambm possvel mover apenas alguns processos de modo a minimizar o nmero de palavras copiadas na memria durante a compactao. Se a MVT for usada associada ao swapping, o cdigo adicional para a compactao fica reduzido.

SO P1 = 200 K P2 = 100 K

SO P1 = 200 K P2 = 100 K P3 = 200 K

SO P1 = 200 K P2 = 100 K P4 = 400 K

SO P1 = 200 K P2 = 100 K

400 K P3 = 200 K P4 = 400 K

P3 = 200 K 900 K

300 K

P4 = 400 K 900 K 200 K Alocao original Movimento de 600 K

900 K

P4 = 400 K P3 = 200 K

Movimento de 400 K

Movimento de 200 K

Figura 5.8: Exemplo da Utilizao da Compactao na Soluo da Fragmentao.

41

Sistemas Operacionais - 1/2008 Prof.: Leonardo Vianna

Captulo 6 Paginao
A paginao uma soluo para a fragmentao externa, pois permite que a memria de programas seja no contnua, ou seja, a memria livre alocada para o programa qualquer que seja a sua localizao.

6.1)

Princpios Bsicos

Nesta tcnica, a memria dividida em blocos de tamanho fixo chamados de frames e a memria lgica (o programa) divida em blocos chamados de pginas. Obs.: O tamanho da pgina igual ao do frame. Quando um programa chega para executar, suas pginas so carregadas em quaisquer frames livres. Cada endereo gerado pela CPU composto por duas partes: o nmero da pgina (p) que indexa a tabela de pginas (TP), e o deslocamento dentro dessa pgina (d). A TP contm o endereo base de cada pgina na memria. A posio na TP indexada por p contm o endereo base do frame (f). Combinando f com d, o hardware de paginao produz o endereo fsico de memria (Figura 6.1). O tamanho da pgina (e do frame) geralmente uma potncia de 2 (varia de 512 B a 8 KB), evitando assim a diviso para a obteno de p e d. Se a pgina tem tamanho 2n, os n bits menos significativos do endereo lgico indicam o deslocamento d e os bits restantes indicam o nmero da pgina (p). A paginao uma forma de relocao dinmica, pois cada endereo lgico mapeado, por meio do hardware, em algum endereo fsico. Usando paginao, no h fragmentao externa, isto , qualquer frame livre pode ser alocado a um processo que dele necessite. Existe, no entanto, alguma fragmentao interna, pois a ltima pgina pode no estar completamente cheia (em mdia, a fragmentao de meia pgina por programa). A fragmentao interna aponta que o tamanho da pgina deve ser pequeno, mas isso obriga uma TP grande o que aponta para o tamanho da pgina grande. Acessos eficientes a disco
42

Sistemas Operacionais - 1/2008 Prof.: Leonardo Vianna

tambm apontam para pginas grandes. Normalmente, as pginas possuem 2 ou 4 KB.

Endereo Lgico

Endereo Fsico

p
CPU

p f

Memria Principal

TP
Figura 6.1: Converso de endereos lgicos em fsicos na paginao.

Cada processo tem sua prpria tabela de pginas que salva no PCB pelo SO quando o processo perde o controle da CPU. Quando um programa deseja executar, suas pginas so carregadas em quaisquer frames livres e sua TP preenchida de forma a refletir o carregamento (Figura 6.2). Uma vez que o SO controla o mapeamento de endereos lgicos em fsicos, ele precisa manter o controle dos frames livres (e a quantidade de frames livres). Essas informaes so mantidas numa estrutura de dados chamada de tabela de frames. A tabela de frames possui uma entrada para cada frame, onde est indicado:

Frame livre ou ocupado. Se ocupado, com qual pgina e de qual processo.

O SO mantm uma cpia da TP para cada programa e deve cuidar que todos os endereos lgicos usados como parmetros de E/S sejam traduzidos em endereos fsicos.
43

Sistemas Operacionais - 1/2008 Prof.: Leonardo Vianna

0 1 2 3

A B C D

0 0 1 3 1 TP 4 E F G

4 E 5 F 6 G Memria Lgica

12

A B C D Memria Fsica

Figura 6.2: Paginao em memria de 16 bytes e pginas de 4 bytes

6.2)

Implementao da TP

No caso mais simples, a TP implementada em registradores dedicados e o dispatcher os recarrega como qualquer outro registrador. Instrues para carregar ou modificar os registradores da TP so privilegiadas, portanto s o SO pode alterar o mapeamento de memria. Como todo acesso memria passa pela TP, ento o desempenho a maior preocupao. Essa soluo de ter a TP em registradores satisfatria se a tabela for razoavelmente pequena. Se a TP cresce muito (maior que 256 entradas, por exemplo) preciso mant-la em memria, e um nico registrador na CPU (Page Table Base Registrer - PTBR) aponta para a TP. Isso reduz o tempo necessrio para a troca de contexto, j que no necessrio recarregar todos os registradores da TP, apenas o PTBR.
44

Sistemas Operacionais - 1/2008 Prof.: Leonardo Vianna

O problema que para acessar um endereo da memria do usurio, so necessrios dois acessos memria: um TP e o outro ao endereo propriamente dito (o tempo de acesso memria dobrado), o que em muitos casos intolervel. Para a soluo desse problema, usado um tipo de memria chamada memria cache. A cache uma memria de alta velocidade. Cada registrador da cache tem dois campos: a chave e o valor. Quando um item apresentado cache, esse item comparado simultaneamente com todos os campos chave. Se o item igual a alguma chave, o valor correspondente a essa chave devolvido. A cache rpida, porm cara, e tem em geral de 8 a 2048 entradas (Figura 6.3).

Endereo Lgico

Endereo Fsico

p CPU

f
hit Memria Principal

miss Cache

p f

Figura 6.3: Utilizao de cache na paginao.

TP

45

Sistemas Operacionais - 1/2008 Prof.: Leonardo Vianna

A cache usada com a TP da seguinte forma: Somente algumas entradas da TP so mantidas na cache. Quando um endereo lgico gerado pela CPU, o n da pgina (p - o item) enviado para a cache. Se p igual a algum campo chave da cache, ento f (que est no campo valor correspondente) devolvido imediatamente e usado para gerar o endereo fsico (apenas 10% a mais de tempo consumido). Se p no est presente na cache, ento necessrio acessar a TP em memria e obter o f, que usado para o acesso memria desejado, e atualizar a cache para posterior uso (isso pode requerer substituio).

Na troca de contexto, preciso que a cache seja esvaziada para garantir que o prximo processo a usar a CPU no obtenha algum f do processo anterior. Considerando, por exemplo, a taxa de acerto como sendo 80% ( chamada de taxa de hit) dos acessos, e que 20ns so gastos para pesquisar a cache, e que 100ns so gastos para acessar a memria, ento se ocorre hit, um acesso memria consome 120ns. Se ocorre um miss, ento so gastos 220ns (100 + 20 + 100). Portanto, 120ns so gastos para acessar a memria em 80% dos casos, e em 20% dos casos so gastos 220ns. Para determinar o tempo efetivo de acesso memria usamos a taxa de hit: tempo efetivo de acesso memria = 0,80 120 + 0,20 220 = 140ns. O acesso memria, no exemplo, passou de 100ns para 140ns (portanto, piorou em 40%).
6.3)

Proteo

Cada frame pode ter bits associados para exprimir o tipo de proteo. Normalmente esses bits so mantidos na TP. Por exemplo, bits read/write ou read only. A cada referncia memria, a TP acessada para gerao do endereo fsico, e simultaneamente a violao da proteo verificada (se a proteo for violada, ocorre um trap). Pode haver tambm um bit para garantir execute only. Existe um outro bit de proteo associado a cada entrada da TP, que indica se a pgina vlida ou invlida: o bit de validade. Uma pgina invlida se o programa tem um n de pginas menor que o mximo possvel permitido (n de entradas na TP). Em outras palavras, o hardware intercepta qualquer acesso a pginas invlidas (Figura 6.4). A ltima pgina do programa em geral menor que o frame e acessos a endereos do frame que contm a ltima pgina e que no pertencem ao programa no tm proteo. Esses endereos correspondem fragmentao interna. Como grande parte dos processos usa somente uma pequena parte dos endereos que podem
46

Sistemas Operacionais - 1/2008 Prof.: Leonardo Vianna

ter (tm um n pequeno de pginas), dispendioso criar TP com todas as entradas possveis para cada processo. pgina 0 pgina 1 pgina 2 pgina 3 pgina 4 0 1 2 3 4 5 6 7 1 7 4 8 3 ? ? ? TP V V V V V I I I pgina 1 pgina 3 pgina 4 pgina 2 pgina 0

Figura 6.4: Bit de validade na tabela de pginas.

Alguns processadores possuem o page table length register PTLR que contm o n de pginas do processo em execuo. A cada p gerado, p comparado com o PTLR e qualquer acesso invlido provoca trap.
6.4)

Pginas Compartilhadas

Uma das vantagens da paginao a possibilidade de vrios processos compartilharem cdigo comum (importante em time sharing). Para compartilhar cdigo, necessrio que esse seja reentrante (ou cdigo puro), isto , no modifique a si prprio. Nesse caso, apenas uma cpia do programa mantida em memria fsica, e diversas TP mapeiam os mesmos frames. Os dados de cada um dos processos que compartilham cdigo so mantidos em frames independentes (correspondem a pginas no compartilhadas). Compartilhar pginas evita que mltiplas cpias de programas muito usados sejam mantidas em memria (Figura 6.5).
47

Sistemas Operacionais - 1/2008 Prof.: Leonardo Vianna

ED 1 ED 2 ED 3 Dados 1 P1

3 4 6 1 TP1 ED 1 ED 2 ED 3 Dados 3 P3 3 4 6 2 TP3

0 1 2 3 4 5 6 7 8 9 10 ED 3 Dados 2 Dados 1 Dados 3 ED 1 ED 2

ED 1 ED 2 ED 3 Dados 2 P2

3 4 6 7 TP2

Figura 6.5: Compartilhamento de pginas

48

Sistemas Operacionais - 1/2008 Prof.: Leonardo Vianna

Captulo 7 Memria Virtual


Memria Virtual (MV) a tcnica de gerncia de memria que permite a execuo de processos que no esto inteiramente carregados na memria. A maior vantagem do uso da MV a possibilidade de executar programas maiores que a memria fsica de modo transparente ao programador (na tcnica de overlays, isto no ocorre). As principais desvantagens da tcnica recaem na queda do desempenho (devido ao acesso a disco) e na implementao mais difcil.
7.1)

Conceitos Bsicos

Ao examinar um programa real, vemos que na maior parte dos casos o programa, durante a sua execuo, no precisa estar todo em memria. Por exemplo, observamos que: 1) Suas rotinas para tratamento de erros raramente so utilizadas. 2) Vetores, matrizes, tabelas, etc. so muitas vezes declarados com um nmero maior de elementos do que o realmente usado. 3) Certas opes/condies que, na prtica, nunca ou raramente ocorrem. Mesmo que todas as partes do programa sejam necessrias em dada execuo, no o sero ao mesmo tempo. A habilidade de executar programas parcialmente carregados na memria produz benefcios como: 1) O tamanho do programa no fica restrito ao tamanho da memria (o espao de endereamento virtual pode ser maior que o real). 2) Um maior nmero de programas pode ser executado em um dado momento (nesse caso, a utilizao da CPU e o throughput aumentam, porm o tempo de resposta tende a diminuir). 3) necessrio menos E/S para fazer swapping de programas do usurio. Em outras palavras, executar programas que no esto inteiramente na memria traz benefcios tanto para o usurio como para o sistema. Com a MV, o programador no precisa
49

Sistemas Operacionais - 1/2008 Prof.: Leonardo Vianna

preocupar-se com o tamanho da memria fsica, nem usar a tcnica de overlays. A MV geralmente implementada por meio da paginao sob demanda - PSD.
7.2)

Paginao sob Demanda

semelhante paginao associada ao swapping. Os processos residem na memria secundria (disco). No lugar de fazer swap-in do programa inteiro para a memria, a MV usa o swapper preguioso que s carrega uma pgina na memria quando um dos seus endereos referenciado. Como o swapper manipula apenas pginas (no o programa inteiro), ele s vezes chamado de pager. Na PSD, necessrio distinguir que pginas esto em memria e que pginas esto em disco. Para isso, usado o bit de validade que indica se determinada pgina ou no vlida. Aqui, o bit setado como vlido significa que a pgina associada est em memria e que o acesso legal. Por outro lado, se o bit est setado como invlido, pode significar ou que a pgina associada no est em memria ou ainda que o acesso ilegal (Figura 7.1).
0 1 2 3 0 1 2 4 3 4 5 9 6 7 TP 6 v i v i i v i i 4 5 6 7 8 9 10 11 12 13 14 15 Memria Fsica
Figura 7.1: A TP quando algumas pginas no esto em memria. 50

0 1 2 3 4 5 6 7

A B C D E F G H

C A A F B E C F D

Memria Lgica

Sistemas Operacionais - 1/2008 Prof.: Leonardo Vianna

Cada bit de validade marcado como invlido pelo SO, na criao do processo (alguns sistemas mantm na TP no lugar de f o endereo de disco que contm a pgina invlida). A cada endereo gerado, o hardware verifica o bit de validade: 1) Se vlido, o acesso se d normalmente como na paginao. 2) Se invlido, ento ocorre um trap chamado de page fault. O SO trata page fault da seguinte forma (Figura 7.2): 1) Verifica na TP se o acesso vlido ou se tentativa de violao de proteo de memria. 2) Se o acesso invlido, o processo terminado; se vlido, preciso trazer a pgina para a memria. 3) buscado e alocado um frame livre (na lista de frames livres) para conter a pgina em questo. 4) O disco programado para realizar a cpia da pgina para o frame alocado em 3. 5) Quando a leitura termina, a TP atualizada. 6) A instruo que provocou o page fault reiniciada (o processo pode agora acessar a pgina como se ela sempre estivesse na memria). possvel iniciar a execuo de um processo sem que nenhuma de suas pginas esteja em memria. Quando ocorre a tentativa de fazer a busca da primeira instruo do processo, ento ocorre um page fault. A PSD pura nunca traz uma pgina (nem a primeira) para a memria at que esta seja referenciada. Alm do software adicional, o hardware de suporte PSD quase o mesmo usado na paginao e no swapping: 1) TP com bit de validade. 2) Memria secundria: em geral um disco de alta velocidade, chamado de swap device, para conter as pginas que no esto em memria (a frao do disco usada com essa finalidade denominada de backing store). Algumas restries so impostas ao hardware. A principal que preciso reiniciar a execuo da instruo que causou o page fault. Isto , se o trap ocorre na busca da instruo, preciso fazer a busca outra vez; se ocorre durante a busca de um operando, preciso fazer a busca da instruo e do operando outra vez (reiniciar a execuo da instruo).

51

Sistemas Operacionais - 1/2008 Prof.: Leonardo Vianna

SO

1
load M

6 TP

frame livre

Memria Fsica Figura 7.2: Tratamento de page fault

O pior caso quando o page fault se d durante a escrita do resultado, porm o esforo necessrio sempre menor que a execuo de uma instruo inteira. O problema arquitetural ocorre quando a execuo de uma nica instruo modifica diversos endereos. Por exemplo, no IBM 360/370, a instruo move character - MVC - pode copiar at 256 bytes de uma regio para outra. Outro exemplo o PDP-11, onde um registrador ndice auto-incrementado (ou decrementado) automaticamente durante a execuo de algumas instrues. Logo, no basta ter hardware de paginao e swapping para que a PSD seja implementada em um sistema computacional. preciso examinar cuidadosamente o efeito da execuo de cada instruo, do conjunto de instrues e resolver situaes semelhantes s examinadas (IBM 360/370 e PDP-11).

52

Sistemas Operacionais - 1/2008 Prof.: Leonardo Vianna

7.3)

Substituio de Pginas

At esse instante, quando da ocorrncia de um page fault, sempre existe um frame livre para carregar a pgina necessria. A questo : quantos processos podem estar em execuo para garantir que sempre teremos um frame livre, j que no possvel saber antecipadamente quantos frames sero necessrios para cada programa? Se limitarmos o grau de multiprogramao de modo que todos consigam carregar todas as suas pginas, teremos uma subutilizao (j que alguns deles no precisaro de todas), deixando muitos frames sem uso. Por outro lado, se imaginarmos que cada processo usa, por exemplo, apenas a metade de suas pginas e aumentarmos o grau de multiprogramao pode ocorrer que todos os processos precisem de todas as suas pginas, resultando em over-allocating de memria. Se deixarmos que o over-allocating ocorra, ento quando ocorre um page fault, o SO pode: 1) Terminar o processo (e assim a PSD deixa de ser transparente para o programador); ou 2) Reduzir o grau de multiprogramao, fazendo swap-out do processo, liberando seus frames; ou 3) Fazer a substituio de uma pgina. A substituio de uma pgina vai requerer que o SO trate page fault do seguinte modo: 1) Verifica na TP se o acesso vlido ou se tentativa de violao de proteo de memria. 2) Se o acesso invlido, o processo terminado; se vlido, preciso trazer a pgina para a memria. 3) Encontrar um frame livre: 3.1) Se h um frame livre, utilize-o. 3.2) Se no, execute o algoritmo de substituio de pginas para determinar o frame vtima. 3.3) Esvazie o frame vtima, transferindo a pgina que ele contm para o disco e atualize a TP e a lista de frames livres. 4) Transfira a pgina para o frame alocado em 3). 5) Quando a leitura terminar, a TP e a lista de frames livres so atualizadas. 6) A instruo que provocou o page fault reiniciada (o processo pode agora acessar a pgina como se ela sempre estivesse na memria). Note que agora so feitos dois acessos ao disco, o que significa dobrar o tempo efetivo de acesso memria. possvel reduzir o problema, equipando cada frame com o dirty bit (ou bit de pgina modificada). O hardware liga esse bit toda vez que um acesso ao frame de escrita.
53

Sistemas Operacionais - 1/2008 Prof.: Leonardo Vianna

Se a pgina vtima foi modificada enquanto esteve no frame, ento preciso reescrev-la no disco; em caso contrrio, um acesso ao disco poupado. Substituir pginas indispensvel para a PSD, pois o que realmente permite executar grandes espaos de endereamento lgico (programas) em espaos de endereamento fsico (memria) reduzidos. Note que agora uma pgina pode provocar mais de um page fault. Para a implementao da PSD, dois problemas principais precisam ser solucionados, isto , preciso desenvolver: 1) Um algoritmo de alocao de frames (quantos frames so dados a cada processo); e 2) Um algoritmo de substituio de pginas.
7.4)

Algoritmos de Substituio de Pginas

Existem vrios algoritmos, porm o que se deseja utilizar aquele que resulte em uma taxa de page faults baixa. Para avaliar um algoritmo de substituio de pginas usado o reference string que consiste em uma seqncia de acessos a endereos de memria e permite contabilizar o nmero de page faults ocorrido durante essa seqncia. Um reference string pode ser gerado aleatoriamente ou a partir de traces (mais real). Traces produzem uma imensa quantidade de informao e, para torn-la tratvel, preciso: 1) Conhecer o tamanho da pgina, e considerar apenas o nmero da pgina no lugar do endereo completo; e 2) Saber que se uma referncia pgina p feita, ento se a referncia seguinte feita mesma pgina p, essa referncia nunca provoca um page fault. Exemplo: seja o trace feito durante a execuo de um processo: 0100, 0432, 0101, 0612, 0102, 0103, 0104, 0101, 0611, 0102, 0103, 0104, 0101, 0610, 0102, 0103, 0104, 0101, 0609, 0102, 0105. Considere que cada pgina tem 100 bytes. Dessa forma, o reference string associado seqncia 1, 4, 1, 6, 1, 6, 1, 6, 1, 6, 1. Para determinar o nmero de page faults que um determinado reference string provoca, preciso conhecer o nmero de frames existente. Se o nmero aumenta, o nmero de page faults reduzido (at um nmero mnimo). Se o nmero diminui, o nmero de page faults aumenta. De agora em diante, 3 frames e o reference string 7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2, 1, 2, 0, 1, 7, 0, 1, sero usados para avaliar os algoritmos de substituio.

7.4.1) Algoritmo FIFO


No FIFO, associado a cada pgina o instante que ela foi carregada na memria. A pgina
54

Sistemas Operacionais - 1/2008 Prof.: Leonardo Vianna

vtima aquela que est mais tempo na memria. fcil perceber que na implementao real, no necessrio associar tempo (data e hora) a cada pgina, mas basta utilizar uma fila FIFO das pginas em memria. A pgina no incio da fila a vtima, e a pgina recm trazida colocada no fim da fila. Reference String: 7 7 0 7 0 1 7 0 1 2 2 0 1 0 3 2 3 1 0 2 3 0 4 4 3 0 2 4 2 0 3 4 2 3 0 0 2 3 3 2 1 0 1 3 2 0 1 2 0 1 7 7 1 2 0 7 0 2 1 7 0 1

Resultado da execuo do algoritmo FIFO Inicialmente, os 3 frames esto vazios. As 3 primeiras referncias (7, 0, 1) provocam page faults e so carregadas nos frames vazios no havendo necessidade de substituio. Observando a figura, vemos que a referncia pgina 2 substitui a 7, pois ela que est mais tempo na memria. A referncia pgina 0 no provoca page fault (j est na memria), porm a referncia a 3 provoca a substituio da 0, j que dentre as que esto em memria (0, 1, 2), a mais antiga a 0. A substituio anterior da pgina 0 faz com que um page fault ocorra, imediatamente, quando a pgina 0 se mostra necessria (a pgina 1 substituda). O total de page faults para esse reference string 15. O FIFO fcil de programar e entender, porm ele substitui pginas como as que contm variveis globais, que so trazidas cedo para a memria e necessrias durante toda a execuo, fazendo com que o nmero de page faults cresa e tambm, por conseqncia, o tempo efetivo de acesso memria. Alm disso, o FIFO sofre da anomalia de Belady, ou seja, se o nmero de frames disponveis aumenta, pode ocorrer que o nmero de page faults tambm cresa. Com o reference string 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5 e 4 frames, temos 10 page faults. Se o nmero de frames 3, o nmero de page faults 9. Em outras palavras, aumentamos o nmero de frames de 3 para 4 e, contraditoriamente, o nmero de page faults aumentou.

7.4.2) Algoritmo timo


Por causa da anomalia de Belady, foi desenvolvido o algoritmo timo. Um algoritmo de substituio de pgina timo aquele que apresenta uma taxa de page faults mnima e que no sofre da anomalia de Belady. O algoritmo de substituio de pgina timo chamado de OPT ou MIN e sua regra : substitua a pgina que no ser usada por mais tempo.
55

Sistemas Operacionais - 1/2008 Prof.: Leonardo Vianna

Reference String: 7 7 0 7 0 1 7 0 1 2 2 0 1 0 3 2 0 3 0 4 2 4 3 2 3 0 2 0 3 3 2 1 2 0 1 2 0 1 7 7 0 1 0 1

Resultado da execuo do algoritmo timo Para o mesmo reference string usado no FIFO e para 3 frames, o nmero de page faults no OPT cai para 9. Inicialmente, os 3 frames esto vazios. As 3 primeiras referncias (7, 0, 1) provocam page faults e so carregadas nos frames vazios no havendo necessidade de substituio. Vemos que a referncia pgina 2 substitui a 7, pois ela que no ser referenciada por mais tempo (s na referncia 18, a pgina 0 ser referenciada na 5 e a 1 na 14). A referncia pgina 3 provoca a substituio da 1. Implementar esse algoritmo requer conhecimento do reference string (o que no vivel, logo ele s usado para comparao).
7.4.3)

Algoritmo LRU (Least Recently Used)

A principal diferena entre o FIFO e o OPT que o primeiro olha o tempo passado e o segundo, o futuro. Se for considerado que o comportamento futuro ser semelhante ao comportamento passado, possvel substituir a pgina que no vem sendo usada por mais tempo (ou seja, least recently used). Reference String: 7 7 0 7 0 1 7 0 1 2 2 0 1 0 3 2 0 3 0 4 4 0 3 2 4 0 2 3 4 3 2 0 0 3 2 3 2 1 1 3 2 2 0 1 0 2 1 7 1 0 7 0 1

Resultado da execuo do algoritmo LRU O nmero de page faults 12, sendo os 5 primeiros os mesmos que do OPT. Quando a referncia pgina 4 ocorre, o LRU verifica que das 3 pginas em memria, a 2 que no tem
56

Sistemas Operacionais - 1/2008 Prof.: Leonardo Vianna

sido acessada por mais tempo e a substitui. Todavia, a pgina 2 se faz necessria logo em seguida, provocando um page fault que o OPT no provoca. Existem duas implementaes para o LRU: Contadores: a cada entrada na TP associado um campo no qual registrado o instante do ltimo acesso pgina. necessrio tambm um contador na CPU que incrementado a cada acesso memria, e o seu contedo copiado para o campo associado pgina que contm o endereo referenciado. Quando uma pgina precisa ser substituda, selecionada aquela cujo campo associado contm o menor valor. Lista: mantida uma lista com os nmeros das pginas. Sempre que uma pgina referenciada, seu nmero removido da lista (se estiver na lista) e colocado no seu final. Dessa forma, as pginas recentemente utilizadas estaro no fim da lista, e no incio, a pgina que no tem sido utilizada por mais tempo, ou seja, a pgina vtima.

Reference String:

Lista em a: 2 1 0 7 4 Lista em b: 7 2 1 0 4

O uso da lista para registrar as referncias mais recentes

7.4.4) Algoritmo que tentam se aproximar do LRU


Poucos sistemas computacionais tm hardware suficiente para implementar o LRU. Alguns, porm, tm algum hardware auxiliar para a substituio de pginas. O bit de referncia o mais usual. Um bit de referncia associado a cada entrada da TP. Inicialmente, todos os bits de referncia so colocados a zero pelo SO. O bit de referncia ligado pelo hardware sempre que o programa do usurio faz referncia (para leitura ou escrita) a uma pgina. Aps algum tempo, examinando os bits de referncia, possvel saber que pginas foram acessadas. Bits de referncia no permitem conhecer a ordem em que as pginas referenciadas foram acessadas.

Algoritmos com bits de referncia adicionais (bits de histria)

Se a intervalos regulares armazenarmos nos bits de histria o contedo de cada bit de referncia, podemos ter mais informao para fazer a substituio de pginas. Com 8 bits
(1 byte) de histria associados a cada entrada da TP e com o timer programado para
57

Sistemas Operacionais - 1/2008 Prof.: Leonardo Vianna

interromper, por exemplo, a cada 100 ms, o SO ao ganhar o controle da CPU: Desloca o byte (com bits de histria) um bit para a direita, eliminando o bit menos significativo, ou seja, a referncia mais antiga. Copia o bit de referncia para o bit mais significativo do byte (com bits de histria). Zera todos os bits de referncia. Os 8 bits associados a uma entrada da TP contm a histria do uso dessa pgina nos 8 perodos de tempo anteriores. Se esses bits contm 00000000, ento a pgina no foi acessada; se contm 11111111, ento a pgina foi acessada pelo menos uma vez em cada um dos 8 perodos anteriores. A pgina com valor 11000100 foi acessada mais recentemente que uma outra com valor 01110111. Logo, quando da substituio de uma pgina, a pgina vtima aquela que contm o menor valor nos bits de histria. Bits de histria de duas ou mais pginas podem conter o mesmo valor. Nesse caso ou se faz swap out de todas elas ou se seleciona segundo uma poltica FIFO a que foi trazida h mais tempo para a memria. O nmero de bits de histria pode variar e at ser reduzido a zero. Nesse caso, resta apenas o bit de referncia e apenas com esse bit o algoritmo de substituio de pginas factvel o de segunda chance.

Algoritmo de Segunda Chance

Se uma pgina selecionada para ser substituda, por meio de uma poltica FIFO, o SO antes de faz-lo examina o bit de referncia correspondente: Se o bit est ligado, ento a pgina no substituda, mas seu bit de referncia zerado; isto , dada uma segunda chance para que a pgina se mostre ativa (nesse caso, o SO repete essa mesma ao para a pgina seguinte). Se o bit de referncia zero, ento a pgina no est em atividade e substituda. A implementao desse algoritmo faz uso de um apontador que indica qual a pgina que a possvel prxima vtima (Figura 7.3). No caso extremo, onde todos os bits de referncias esto ligados, o apontador d a volta completa dando a cada pgina uma segunda chance, retornando primeira pgina examinada. Nesse caso, o algoritmo degenera para um FIFO.

58

Sistemas Operacionais - 1/2008 Prof.: Leonardo Vianna

1 . . . 0

. . .

0 . . . 0

. . .

1 Figura 7.3: Algoritmo de segunda chance

Aperfeioando o Algoritmo de Segunda Chance

Se alm do bit de referncia existe um bit de pgina modificada (acessada para escrita) possvel aperfeioar a substituio de pginas, considerando 4 classes diferentes de pginas: (0,0) no referenciada recentemente e no modificada (melhor pgina para substituir). (0,1) no referenciada recentemente e modificada (pgina no muito boa para substituir pois precisa ser reescrita na memria de apoio). (1,0) referenciada recentemente e no modificada (pgina que provavelmente ser acessada outra vez, no muito boa para substituir). (1,1) referenciada recentemente e modificada (pgina que provavelmente ser acessada outra vez e precisa e precisa ser reescrita na memria de apoio). Com essa classificao, o algoritmo de segunda chance usado, porm determinada a classe da provvel pgina vtima, e substitua a primeira pgina encontrada na classe de mais baixa prioridade no vazia (pode ser necessrio percorrer a fila diversas vezes).

59

Sistemas Operacionais - 1/2008 Prof.: Leonardo Vianna

Algoritmos que usam contadores

Existem outros algoritmos para substituio de pginas, entre eles o que mantm um contador com o nmero de referncias feitas a cada pgina: LFU (Least Frequently Used) a pgina vtima a que tem o contador com menor valor (parte do pressuposto que pginas muito ativas tm no seu contador um valor alto). Pginas de inicializao que so muito usadas no incio da execuo tm contadores elevados, mas no so mais necessrias e no so substitudas. A soluo deslocar periodicamente o contador um bit para a direita. MFU (Most Frequently Used) a pgina vtima a que tem contador com maior valor (parte do pressuposto que pginas que acabaram de ser trazidas para a memria tm no seu contador um valor baixo).

Nem o MFU nem o LFU so habitualmente usados, j que suas implementaes exigem hardware adicional e seus resultados no chegam prximos dos do OPT.

7.5)

Alocao de Frames

Como distribuir um nmero fixo de frames livres entre os diversos processos? Se temos, por exemplo, dois processos em execuo, quantos frames devem ser destinados a cada um? Em um sistema monousurio, no h grandes problemas: parte da memria destinada ao SO e o resto da memria compe frames que so usados pelo nico processo do usurio. Desse modo, frames livres so usados nos page faults indistintamente (em outras palavras, o processo pode fazer uso de qualquer frame livre). Quando o processo provoca um nmero maior de page faults do que o nmero de frames existentes no sistema computacional, pginas desse nico processo so substitudas. Quando o processo termina, todos os frames so devolvidos para a lista de frames livres. Em um sistema com multiprogramao, a situao se torna mais complicada.

7.5.1) Nmeros Mnimo e Mximo de Frames Necessrios a um Processo


Considerando que se o nmero de frames alocado a cada processo diminui, o nmero de page faults aumenta, preciso decidir quantos frames devem ser dados a cada processo. O nmero mximo de frames destinado a um processo o nmero existente na arquitetura. O nmero mnimo determinado pelo conjunto de instrues da arquitetura, j que quando um page fault ocorre, a instruo que o provocou deve ser reiniciada depois que a pgina necessria for trazida para a memria. Por exemplo, se uma instruo ao ser executada pode acessar 3 (trs) operandos em
60

Sistemas Operacionais - 1/2008 Prof.: Leonardo Vianna

memria (cada um pode estar em uma pgina diferente), necessrio garantir no mnimo 4 (quatro) frames para esse processo (1 para a instruo e os outros 3 para os operandos). Se a instruo faz uso de endereamento indireto, ento todas as indirees precisam ser consideradas para o estabelecimento desse nmero mnimo.

7.5.2) Algoritmos de Alocao de Frames


A forma mais simples de dividir m frames entre n processos dar a cada um deles m/n frames. Esta tcnica chamada de alocao igual. Uma poltica alternativa leva em conta que as necessidades de memria de cada processo so diferentes, isto , alocao proporcional. Se o processo P1 tem 10 K e P2 tem 127 K, ento se existem no sistema 62 frames livres de 1 K, no faz sentido dar a cada processo 31 frames (P1 no precisa mais do que 10 frames; se a alocao igual usada, 21 frames so desperdiados). Na alocao proporcional, a memria alocada considerando o tamanho de cada processo. Seja si o tamanho do processo Pi em pginas. Seja S a soma dos tamanhos de todos os processos, isto , S = si. Desse modo, se o nmero de frames m, ai frames so alocados para Pi, onde ai aproximadamente: ai = si / S m. necessrio que ai seja arredondado para um nmero inteiro necessariamente maior do que o mnimo determinado pelo conjunto de instrues da arquitetura. Se o processo P1 tem 10 K e P2 tem 127 K, e se existem no sistema 62 frames livres de 1 K, so alocados 4 e 57 frames para P1 e P2, respectivamente, pois S = 10 + 127, e, portanto, temos que: (10 / 137 62 = 4) e (127 / 137 62 = 57). Em ambas as tcnicas (igual e proporcional), o nmero de frames dados a um processo varia de acordo com o grau de multiprogramao: se ele cresce, cada processo perde alguns frames e, se ele reduzido, os frames liberados pelo processo que terminou so redistribudos entre os processos remanescentes. Nas duas tcnicas, processos de alta prioridade so tratados da mesma forma que os de baixa prioridade (isso pode no ser desejvel). Para solucionar isto, a alocao de frames a processos pode ser feita com base na prioridade de processos ou com base na combinao tamanho e prioridade.

7.5.3) Substituio Global de Frames Substituio Local de Frames


Um outro fator importante como, durante a substituio de pginas, os frames alocados a
61

Sistemas Operacionais - 1/2008 Prof.: Leonardo Vianna

processos so tratados. Os algoritmos de substituio de pginas podem realizar: Substituio global: um frame qualquer do conjunto de frames selecionado (pode ser um frame de outro processo). Substituio local: apenas um frame alocado ao processo que provocou page fault selecionado. Na substituio global, processos de alta prioridade podem substituir suas prprias pginas e as dos de baixa prioridade. Ao contrrio da substituio global, na substituio local o nmero de frames alocados a um processo no varia (se o grau de multiprogramao no mudar). Um problema da substituio global que o processo no controla sua taxa de page fault. O conjunto das suas pginas em memria no depende exclusivamente dele, mas do comportamento de outros processos (assim, seu tempo de execuo pode variar muito entre uma execuo e outra).

7.5.4) Thrashing
Se o nmero de frames alocados a um processo em dado instante menor que o nmero mnimo exigido pela arquitetura, ento o processo page-out (swap-out). Suas pginas remanescentes so reescritas na memria de apoio, liberando seus frames (isso introduz a necessidade de um escalonador de mdio prazo). Embora seja tecnicamente possvel que um processo execute com o nmero mnimo de frames exigido pela arquitetura, existe um certo nmero de pginas do processo que, em dado instante, so acessadas juntas. Se o processo no tem esse nmero de frames, ento rapidamente provoca page fault e uma pgina que lhe necessria substituda, provocando novo page fault logo a seguir. Essa alta taxa de page fault chamada de thrashing. Um processo est em thrashing se consome mais tempo na substituio de suas pginas do que realmente executando.

A Causa do Thrashing

A localidade de um processo formada pelo conjunto de pginas que so acessadas juntas, em dado instante. Um processo tem diversas localidades ao longo da sua execuo. Se um processo no tem frames para conter sua localidade em dado instante, ento ele entra em thrashing. Se a substituio global usada, o problema fica agravado, pois processos de alta prioridade comeam a substituir pginas dos de baixa prioridade (que precisam deles), fazendo com que o thrashing se dissemine entre diversos outros processos.
62

Sistemas Operacionais - 1/2008 Prof.: Leonardo Vianna

A substituio local evita a disseminao, porm no impede que um processo entre em thrashing fazendo com que todos os outros executem mais lentamente, j que a fila para uso de memria de apoio aumenta. Se um processo tem frames suficientes para conter sua localidade, s vai provocar page faults no instante que sua localidade mudar. Resumindo, preciso evitar a ocorrncia de thrashing. Duas tcnicas so usualmente empregadas para impedir que o thrashing ocorra: Working-set onde preciso conhecer a localidade de cada processo em execuo em dado instante. Page fault frequency onde controlada a freqncia de page faults.

O Modelo Working-set
Usa o parmetro para estabelecer a janela working-set, isto , o conjunto de pginas que formam a localidade dos processos em dado momento. A idia descobrir as ltimas referncias a pginas. Essas referncias formam o working-set.
page reference table: ... 7 6 1 5 2 7 7 7 5 1 6 2 3 4 1 2 3 4 4 4 3 4 3 4 4 4 1 3 2 3 4 4 4 3 4 4 4 ...


WS (t1) = {1,2,5,6,7} WS (t1) = {1,2,5,6,7} t1


WS (t2) = {3,4} WS (t2) = {3,4} t2

No exemplo acima, escolhemos = 9 e, desse modo, o working-set no instante t1 {1,2,5,6,7} e no instante t2 {3,4}. A preciso da tcnica depende do valor de . Se for muito pequeno, no vai conter a localidade inteira; se for muito grande, poder sobrepor vrias localidades (se for infinito, engloba todas as pginas acessadas durante a execuo). Se determinarmos o tamanho do working-set de cada processo Pi (WSSi) em execuo, temos D = WSSi, onde D o nmero de frames necessrios para conter as localidades de todos os processos em execuo.
63

Sistemas Operacionais - 1/2008 Prof.: Leonardo Vianna

Se m o nmero total de frames da memria, ento se D > m, vai ocorrer thrashing (o SO escolhe um processo, faz swap-out de suas pginas e os frames liberados so alocados para os processos remanescentes). Por outro lado, se D < m, h frames sobrando e um novo processo pode ser iniciado. O modelo working-set evita a ocorrncia do thrashing e mantm o grau de multiprogramao o mais alto possvel, otimizando a utilizao da CPU. O difcil determinar o working-set de cada processo, j que ele se move ao longo do tempo. Trata-se de uma janela mvel: a cada referncia memria, uma nova referncia acrescentada a uma das extremidades da janela, enquanto na outra extremidade uma referncia jogada fora. O modelo working-set pode ser implementado aproximadamente por meio de interrupes de relgio, bits de referncia (um para cada pgina) e bits de histria.

Page Fault Frequency PFF


Com o modelo working-set, o thrashing pode ser evitado, mas requer hardware adicional. A tcnica PFF emprega uma abordagem mais direta para evitar thrashing. Thrashing provoca uma alta taxa de page fault. Ento o que precisamos controlar essa taxa. Quando ela est elevada, significa que os processos necessitam de mais frames para conter suas localidades. Por outro lado, se a taxa est baixa, os processos tm frames demais. A taxa de page fault admissvel no deve ultrapassar um limite superior, nem cair abaixo de um limite inferior. Se a taxa se mantiver na faixa aceitvel, o sistema est em equilbrio; em caso contrrio; a ao tomada a mesma da tcnica working-set (swap-out ou aumento do grau de multiprogramao).

7.6)

Outras Consideraes para a Implementao da Paginao

As duas maiores questes da paginao so a escolha dos algoritmos de substituio de pginas e de alocao de frames. Contudo, outras questes precisam ser examinadas.

7.6.1) Pr-Paginao
No incio da execuo de qualquer processo, ocorre um grande nmero de page faults (pois o swapper preguioso). A mesma situao ocorre se um processo que foi swap-out tem a sua execuo reiniciada. A pr-paginao tenta evitar essa alta taxa de page fault, trazendo para a memria, de uma s vez, as pginas que sero necessrias. Por exemplo, em um sistema onde o modelo working-set est implementado, no momento
64

Sistemas Operacionais - 1/2008 Prof.: Leonardo Vianna

de fazer swap-in de um processo, feita a carga das pginas ativas no momento do swap-out. Em alguns casos, a pr-paginao pode ser vantajosa; em outras, as pginas pr-paginadas no so mais referenciadas pelo processo. Se s pginas so pr-paginadas e (0 1) das s pginas so acessadas, ento preciso saber se o nmero de page faults evitado maior ou menor do que o custo da pr-paginao de (1 - ) que no so mais acessadas. Se prximo de 1, a pr-paginao vantajosa; se prximo de 0, ento no .

7.6.2) Tamanho da Pgina


Sabemos que o tamanho de pgina potncia de 2 e varia bastante de sistema para sistema. preciso ento que o projetista estabelea a dimenso que ser usada. Vrios fatores devem ser observados nessa deciso. Para um dado espao de endereamento, a medida que o tamanho da pgina reduzido, a TP cresce. Como cada processo tem sua TP, desejvel que ela seja pequena. Conflitando com esse fator, vemos que pginas pequenas fazem melhor uso da memria por causa da fragmentao interna (ltima pgina de cada processo). Um outro aspecto diz respeito ao tempo de E/S necessrio para ler ou escrever uma pgina (seek time + tempo de latncia + tempo de transferncia). O tempo de transferncia proporcional ao tamanho da pgina, porm o seek time e o tempo de latncia tm valores muito maiores e isso conduz concluso que as pginas devem ser grandes. Contrapondo-se a essa idia, se o tamanho da pgina pequeno, a localidade ser mais apurada e a quantidade de E/S necessria ser reduzida. Todavia, bom lembrar que se o tamanho da pgina 1 byte, poder haver um page fault a cada acesso, o que nos faz pensar em pginas grandes. Historicamente, o tamanho das pginas vem aumentando, j que a velocidade dos processadores e das memrias tem crescido mais que a dos discos, o que significa que os page faults esto se tornando mais caros para o desempenho global do sistema computacional. Em outras palavras, pginas maiores reduzem a taxa de page faults. Finalmente, outros fatores a considerar dizem respeito, por exemplo, relao entre o tamanho da pgina e o tamanho do setor da memria de apoio. Contudo, a tarefa de determinar o tamanho da pgina difcil, pois se apia em fatores antagnicos.

7.6.3) Estrutura do Programa do Usurio


de nosso conhecimento que a paginao sob demanda transparente ao usurio. Contudo, importante para o bom desempenho da tcnica que o usurio tenha conhecimento da
65

Sistemas Operacionais - 1/2008 Prof.: Leonardo Vianna

arquitetura empregada no sistema computacional.

66

Sistemas Operacionais - 1/2008 Prof.: Leonardo Vianna

Considere, por exemplo, um sistema com pginas de 128 words e um programa em Pascal que zera cada elemento de uma matriz inteira quadrada A de ordem 128. O compilador reservar rea para a matriz por linha, isto : A[1,1], A[1,2], ..., A[1,128], A[2,1], ..., A[2,128], ..., A[128,128]. Tipicamente, temos o cdigo: var A : array [1..128, 1..128] of integer; . . . for j := 1 to 128 do for i := 1 to 128 do A[i,j] := 0;

Portanto, cada linha ocupa uma pgina e o cdigo anterior zera uma palavra de cada pgina (zera colunas). Se o programa tem dois frames para executar (um para cdigo e outro para variveis), a execuo desse programa provoca 128 128 = 16384 page faults. Imagine, agora, que o mesmo programa reescrito da seguinte forma: var A : array [1..128, 1..128] of integer; . . . for j := 1 to 128 do for i := 1 to 128 do A[i,j] := 0;

Dessa forma, cada linha ter todos os seus elementos zerados antes de um novo page fault, assim, apenas 128 page faults ocorrem durante a execuo. Uma seleo cuidadosa de estruturas de dados e dos programas aumenta a localidade e reduz a taxa de page fault. Outros fatores importantes so o compilador e o loader, isto , a separao de dados e cdigo (que deve ser reentrante) permite que pginas de cdigo sejam read only e nunca so reescritas na memria de apoio. O loader evita carregar rotinas alm das fronteiras de pgina (cada rotina em uma pgina). Rotinas que chamam outras podem ser agrupadas em uma nica pgina.

67

Sistemas Operacionais - 1/2008 Prof.: Leonardo Vianna

Bibliografia:

1) Sistemas Operacionais Modernos Segunda Edio Andrew S. Tanenbaum Prentice Hall (Pearson)

2) Fundamentos de Sistemas Operacionais Sexta Edio Abraham Silberschatz, Peter B. Galvin Editora LTC

68

Anda mungkin juga menyukai