Anda di halaman 1dari 55

1

Apostila de Sistema Operacional II


Captulo 1 - Gerncia de Memria:
1) Amarrao de Endereos (Adress Binding): Sistema Operacional pouco sofisticado executa um programa por vez e assim teremos um nico programa na memria conforme figura 1.1. Na figura 1.2 temos uma amostra de um Sistema operacional um pouco mais sofisticado. Ele controla a execuo de mais de um programa por vez. Assim, esto na memria dois ou mais processos sendo executado segundo controle do Sistema Operacional. Ainda na figura 1.2 podemos observar dois processos ocupando reas diferentes na memria: o processo 1 comea no endereo 0 at o endereo 9999, ocupando um tamanho de 10000; o processo 2 comea no endereo 10000, ocupando um tamanho de 10000 tambm. FFFF Memria SO FFFF Memria SO

Proc1

20000

Proc2

10000 Proc1 9999 0 Fig 1.1 Fig 1.2

O problema que no to simples para o Sistema Operacional controlar um programa na memria, veja o exemplo abaixo: Exemplo em Assembly: ADD AX, BX MOV AX, CX MOV AX, [1000] JNZ 2000 CALL 3000 => Adicionar um registrador com outro (de BX para AX) (1.1) => Mover o contedo de um registrador para outro (de CX para AX) => Mover o contedo do endereo 1000 para o registrador AX. => Desvia a execuo para o endereo 2000 => Chamada de Sub-rotina.

A partir do exemplo acima verificamos que o programa acima s vai servir para o processo 1, para o processo 2 no servir, pois este ltimo comea na posio 10000, e o endereo 1000 no faz parte do processo 2. Porm, o arquivo executvel no sabe onde ser armazenado na memria depende da ordem em que os processos foram chamados pelo usurio. Ento o cdigo acima no serviria para o processo 2.

2 Este problema faz parte um problema chamado de amarrao de endereos(adress binding), a amarrao entre um nome e um endereo. Geralmente, o programa tem nomes, veja exemplo abaixo: SubRot: . . . Ret CALL SubRot

(1.2)

A CPU no entende esta instruo call SubRot. Ela s entende endereos de memria, um array de byte. O montador de Assembly transforma o label SubRot em endereo, em um valor da posio de memria. Porm isto no tudo existe o outro problema anterior que o carregamento do programa na memria. O programa pode ser carregado na posio 0 ou 10000. Se o programa (1.1) for carregado na posio 10000 ele no vai funcionar. Isto pode ser resolvido no seu carregamento na memria. A seguir iremos ver as solues para resolver a amarrao de endereo permitindo que o programa seja carregado em qualquer lugar da memria. 1.1) Correo de endereos em tempo de carga: Exemplo de Sistema Operacional: MS-DOS para arquivos executveis (.exe): O montador ou compilador gera cdigo imaginando que o programa vai ser colocado em um certo lugar na memria, supondo no endereo 0, por exemplo. Com isso, simplificado o trabalho do montador ou compilador. O sistema operacional antes de colocar o arquivo na memria ele corrige o endereo. O sistema operacional sabe onde ser carregado o arquivo que sai do disco e ser colocado na memria para execuo. Ele vai a todos os endereos do programa e soma o endereo inicial daquele programa, segundo exemplo abaixo: Endereo Inicial do programa = 10000 . . . MOV AX, [11000] => 10000 + 1000 = 11000 JNZ 12000 => 10000 + 2000 = 12000 CALL 3000 => 10000 + 3000 = 13000 Agora o programa (1.1) pode ser carregado na posio 10000 que ir funcionar. O programa executvel formado por cdigo mais informaes de controle que o sistema operacional usa para a correo de endereo. Pois, o sistema operacional precisa de uma referncia de quais instrues ele precisa alterar, essas informaes de controle dizem quais so as rotinas que precisam ser alteradas. Um exemplo de sistema operacional que usa este tipo de soluo o MS-DOS e Windows 16 bits para arquivos executveis (.exe). As verses do Windows 32 bits e superiores no so mais assim. Existe uma instruo no MS-DOS e Window 16 bits chamada EXEHDR <nome do executvel> que mostra todos os endereos que precisam ser corrigidos.

3 Digamos que o programa esteja dividido na memria, como mostra a figura abaixo, em trs pedaos. Podemos observar que na memria temos o pedao 1 comeando na posio 0, o pedao 2 na posio 20000 e o pedao 3 na posio 30000: Memria 30000 20000 PEDAO 3 PEDAO 2 PEDAO 1 SO soma 30000 SO soma 20000 SO soma 0 Programa PEDAO 3 PEDAO 2 PEDAO 1

O sistema operacional ao carregar o programa na memria ir somar a cada pedao o valor do endereo inicial do pedao com o endereo da instruo. 1.2) Uso de endereos relativos: Ao invs do programa usar endereos absolutos, por exemplo, endereo 0. Ele usa endereos relativos a alguma coisa. O que acontece que a CPU durante a execuo ela soma o que a instruo tem mais um certo valor, este valor o endereo relativo. Ento esta correo no feita mais na carga, como mostra soluo 1. A correo feita pelo hardware, pela CPU. Tem dois casos, veja abaixo: 1.2.1) Relativos a uma base fixa: Nesta soluo utilizado um registrador de base fixa, localizado na CPU. Quando o registrador de base fixa tiver como contedo o valor 0 ento ser usado o valor absoluto. No caso, se o sistema operacional carregar o programa (1.1) na posio 10000 este registrador conter o valor 10000, por exemplo, ser somado a cada instruo que contenha valor de endereo absoluto o valor relativo base (10000). Exemplo: Registrador de Base: Proc 1 0 SO 10000 Proc 2

Proc 1: . . . MOV AX, [1000] JNZ 2000 CALL 3000

Proc 2: . . . MOV AX, [11000] JNZ 12000 CALL 13000

4 O sistema operacional no faz nada com relao correo de endereo, mas a cada instruo executada a CPU soma o valor do endereo absoluto da instruo mais o endereo contido no registrador de base. Por exemplo, se o processo 2 foi bloqueado e o escalonador elege o processo 1 para execuo, o valor do registrador de base passar de 10000 para 0. O responsvel pela alterao do endereo do registrador de base o sistema operacional. A vantagem desta soluo para a soluo anterior que o executvel no precisa ter nenhuma informao de controle de endereo, simplificando a carga. Quanto ao tempo de execuo em teoria seria mais lento devido a cada instruo que faa referncia a endereos absolutos ter uma soma, porm esta soma feita pelo hardware, um hardware dedicado a fazer isto. Com isso o tempo que leva esta soma irrelevante, no contribu para que CPUs que usem registrador de base sejam mais lentas que CPUs que no usem registrador de base. Se fosse uma operao feita por software poderia ficar mais lento, mas no o caso. Exemplos de sistemas operacionais que usam esta soluo: MS-DOS para programas (.COM. e .EXE). O programa .EXE do MS-DOS uma mistura da soluo 1 e 2.1, ou seja, tm endereos que so resolvidos em tempo de carga e tm endereos relativos a base. A CPU Intel tinha um problema que a distncia em relao base no podia ser muito grande, a limitao era 64Kbytes, distncia do endereo da base. Se o programa .EXE tivesse menos que 64Kbytes ento podia usar apenas a soluo 2.1. Caso o programa tivesse mais que 64Kbytes ento tinha que usar uma soluo mista. A CPU Intel (at 80186) tem quatro registradores de base que para cada tipo de instruo reservado um registrador de base diferente, veja abaixo, os registradores existentes: cs code (instrues com endereos relativos a cdigo) ds data (instrues com endereos relativos a memria, varivel global) ss stack (instrues com endereos relativos a variveis locais, pilha) es extra Observao: A Intel chamou estes registradores de base de segmento que no tem haver com a terceira soluo que a segmentao. Depois da CPU Intel 80186 que passou para a segmentao tambm. Esta soluo precisa de um suporte por hardware. 1.2.2) Relativos instruo corrente: A CPU tem que ter instrues cujo endereo no endereo que conta a partir do 0, a partir da base. So endereos que contam a partir da prpria instruo. Por exemplo, se quiser fazer um loop o que conter na instruo a distncia entre a instruo de loop e o endereo para onde se quer desviar, como mostrado abaixo: ADD AX, BX MOV AX, CX MOV AX, [1000] JNZ -20 CALL 3000

20 bytes

5 Isto um endereamento relativo a instruo corrente. Nesta soluo no importa onde o programa foi carregado na memria, pois a distncia de uma instruo desvio para o seu destino, como mostra o exemplo acima, no se altera. O cdigo que s usa este tipo de endereo chamado cdigo relocvel, porque ele pode ser mudado de posio na memria e continuar executando sem precisar fazer mais nada. A Intel tem tipo de instrues que fazem isto, por exemplo, JNZ relativo e o absoluto, o compilador escolhe um ou outro. 1.3) Segmentao: 1.3.1) Introduo de segmentao: Um processo contm: A) CDIGO: B) DADOS: B.1) variveis GLOBAIS: quando o programa comea ela passa existir e quando o programa termina ela deixa de existir; B.2) variveis LOCAIS: o problema maior que ocorre com essas variveis est dentro de funes recursivas, como mostra o exemplo abaixo: Exemplo: function FAT(n: integer): integer; begin if n = 1 then FAT := 1 else FAT := n * FAT(n-1); end; program principal; var FAT: integer; begin FAT := 1; for i := 1 to n do FAT := FAT * i; End. A remoo a complicao desta alocao de varivel local em uma funo recursiva, pois no existe uma nica varivel n na memria existem vrios ns. Para resolver este problema utilizada uma pilha de execuo. Na pilha de execuo temos o seguinte funcionamento, supondo n = 4:

6 Aloca-se no sentido de cima para baixo a varivel n. Assim existe quatro variveis de nome n na memria, criada a cada chamada da funo recursiva: n = 4, n = 3, n = 2, n = 1; Quando desaloca na ordem inversa da alocao, de baixo para cima, que sero feitos os clculos do fatorial: n = 1, n = 2, n = 3, n = 4. Pilha 4 alocando desaloca 3 2 1 B.3) variveis DINMICA: so alocadas utilizando a instruo NEW em Pascal e MALLOC em C. So variveis alocadas de acordo com a programao feita utilizando as instrues descritas acima. O fato de o programador ficar com esta responsabilidade, cria complicaes, pois, o compilador no sabe quando essas variveis sero alocadas e desalocadas. Na memria dentro reas ocupadas pelo processo tm a seguinte subdiviso: rea de dados, para as variveis globais e dinmicas, rea de pilha, reservada para variveis locais e rea de cdigo. Resumo: Cdigos, dados, variveis globais so alocados quando o processo comea a executar, dados locais que usado na pilha, vai alocando os dados conforme o programa executa, quando comeam a executar so alocados na pilha e variveis dinmicas. Ex. : Procedure X Var P,Q,R : ^real; Begin I := 5; new(P); new (Q); new (R); p^=3,8; Onde: P, Q e R no so as variveis dinmicas, so os ponteiros que apontam para as variveis dinmicas. A varivel dinmica s passa a existir depois que feito o loop. P, Q e R so variveis locais, portanto esto na pilha de execuo. Nesse programa, existem 4 variveis locais I, P, Q e R, comeando a pilha de execuo : I P Q R HEAP

3,8

Quando fazemos new P : O que pode acontecer? 1) alocado um espao real na heap;

7 2) feito com que P aponte para esse espao; Nota: Heap: local onde so armazenadas as variveis dinmicas. A mesma coisa acontece com Q e R, quando faz newQ e newR. Se (ponteiro)P = 3,8, P est referenciando o ponteiro e est usando o valor 3,8 na varivel dinmica apontada por P. Quando acabar acontecer o seguinte: O programador poder desalocar as variveis em qualquer ordem, ele no precisa fazer isso na mesma ordem que alocou. Diferena entre variveis locais e dinmicas: As Variveis locais em um sequenciamento muito claro de alocao e desalocao quando a rotina comea a rodar, so alocadas todas as variveis locais para essa rotina, quando a rotina acaba de rodar, so desalocados na mesma ordem em que foram alocadas. Nas variveis dinmicas o programador pode escolher a ordem de desalocao, no seguem a ordem de pilha como nas locais. No d para usar uma pilha para alocar variveis dinmicas. A grande diferena o sequenciamento. Obs. : O ponteiro guarda o endereo na memria. A varivel aquilo para qual o ponteiro aponta. O ponteiro contm o endereo e esse endereo aponta para a varivel dinmica alocada na heap. A varivel dinmica aquilo que foi alocado na heap. O grande ponto: a heap no uma pilha. A heap a 3 rea diferente de dados. Quatro tipos de rea diferentes de um processo: rea onde est o cdigo executado; rea onde esto os variveis globais (que mais so utilizadas); rea de variveis locais que so alocados dinamicamente; Variveis dinmicas. No caso do UNIX juntou duas e agora so trs reas: rea do cdigo executvel; rea de pilha (que contm a pilha e variveis locais); rea de dados (contm varivel global e a heap). Obs. : Juntou globais e dinmicas. A partir do conceito acima podemos concluir que o processo fica todo contido na memria e podemos ter o mesmo processo em vrias partes da memria.

8 SO ////// D1 P1 P2 C2 C1 D2 3 reas do processo P2 3 reas do processo P1

Como essas reas sofrem alterao? rea de Cdigo C1 Faz sentido ser modificado? Sim, durante a execuo do programa. Esses programas geram cdigos que so incorporados a eles mesmos. Mas isso no muito comum. Os programas automodificveis eles precisaro ter alterao na rea de cdigo, mas no caso mortal essa rea imutvel, uma vez que o programa carregado na memria e vira processo essa rea vem a ser modificada e por causa disso que desde que o hardware permita, essa rea fica inibida, impedindo que o processo faa modificao nessa rea e se o processo tentar fazer ele abortado. Ento, geralmente, a resposta pergunta acima No. rea de Pilha P1 Sofre modificao? Sim, pois as varveis locais podem ser modificadas. A rea de pilha altervel. No apenas isso. Dentro da rea de pilha tem um ponteiro que aponta para um lugar dentro da rea que esse ponteiro se chama topo da pilha e no caso da Intel que tudo que est abaixo dos outros est livre, s a parte de cima tem variveis. Quando uma rotina se inicia (o que significa alocao? Significa que descer um pouco do topo), quando a rotina acaba, solto o topo da pilha, quer dizer que a rotina acabou. A CPU de 30 anos pra c, tem uma funo especfica para manipular o topo da pilha (mais bsicas: paste e copy). Nessa rea de pilha o valor muda, muda a rea total, vai mudar o valor de dentro. Outra coisa , pode ter um programa que tenha um tempo de execuo muito grande, ou um programa que tenha variveis locais muito grandes, pode acontecer quando a rotina entra o topo desce, se uma rotina muito recursiva, cada vez que tem uma recurso o topo desce um pouco e assim por diante tem uma hora que o

9 topo da pilha vai bater no limite dela, ento aborta o processo, isso o stack overflow. Nos SOs mais sofisticados, antes de abortar um processo o SO tenta aumentar a rea da pilha, se conseguir crescer no aborta o processo se crescer no tem jeito (ex: Unix).

rea de dados /////// globais No Unix essa rea contm variveis globais e dinmicas (heap): Conforme o programa vai sendo executado vai sendo alocados e desalocados variveis dinmicas, ou seja, ser feito o new no Pascal ou malloc no C/C++, e dispose no Pascal ou free no C/C++ respectivamente. Se o programa utilizar muitas variveis dinmicas, em algum momento, possvel que no tenha mais espao para alocar essas variveis, nesse caso, pode abortar ou tentar crescer o tamanho da rea, ou seja, o SO pode tentar crescer a rea de pilha. Obs.: 1) Quem sabe se a heap tem ou no espao o processo, o SO no se envolve. 2) O Windows pode ter mais de uma heap. 3) Na rea de pilha e de dados do Unix, elas so alterveis(contedo) e o tamanho tambm. 4) P //// D C No Unix ao invs de abortar o processo, provocando o erro de stack overflow, ele aumenta a rea de pilha, caso no consiga ocorre o erro descrito anteriormente. Desse tipo de concepo foi inventada uma forma de organizar a memria, a quantidade de reas que o processo possui. Essa forma de organizar a memria chamada segmentao. Forma de organizar a memria: O que a segmentao prope? O hardware prope que ao invs da memria ser uma coisa contnua que a mesma seja bidimensional. A memria no tem mais de um endereo, a memria Processo 1 heap

10 ter dois valores que dizem onde a memria est. Ter o nmero do segmento e o deslocamento onde essa memria est. N do segmento 1 Deslocamento dentro do segmento 2500

N do segmento escolhe qual a rea e deslocamento do segmento diz o que dentro da rea vai ser. Na Intel : Ex: mov ds, 1 mov ax, [2500] => qual segmento? => qual deslocamento?

Vantagem: Com isso, o hardware conhecer as reas, e controlar melhor a memria, impede que o processo mexa em reas que no so suas, ou seja, impede que no haja invaso de segmentos.

P D C

5000 5000 10000

mov BX, [2500] => nesse caso o hardware identifica que o processo no tem acesso. Est fora
do segmento, ento aborta.

Outra vantagem que no importa para o programa onde est o segmento de memria, pois, o programa sabe que um endereo bidimensional, a memria contnua, o programa nem sabe que existe, ele s sabe o n do segmento e o deslocamento. Obs.: A segmentao possibilita a expanso da pilha. Quanto ao segmento de pilha o hardware ele capaz de perceber que o topo est no seu limite inferior. O hardware sabe o tamanho do segmento, o hardware levanta interrupo e o SO trata e testa o tamanho da pilha. A segmentao possibilita o reconhecimento do estouro da pilha. Obs.: 1) No arquivo executvel j tem um tamanho fixo para cada rea ento o SO j aloca o espao. 2) O programador tem a capacidade de escolher o tamanho que ele quer para heap e para pilha (Turbo Pascal)

11 Resumo: Controle de memria com vrias solues e ficaram pendentes duas solues: A segmentao e a paginao. 1.3.2) Aprofundando dos conhecimentos sobre Segmentao: Segmentao cria uma nova forma de ver a memria como uma coisa bidimensional. Quais os mecanismos de hardware para fazer com que a memria seja vista como bidimensional? Pois a memria fsica de um computador tem s uma dimenso, comea no endereo 0 da memria e vai at um endereo fffffff. A memria que existe em uma mquina ainda essa, apesar da segmentao mostrar para o programador, reas como uma coisa bidimensional. Memria fffff

Existe uma coisa que a que faz a intermediao entre a bidimensionalidade e a memria fsica, se chama Tabela de Segmentos. Tabela de Segmentos: Tem no mnimo dois lados, ou seja, duas informaes: O incio do segmento(memria fsica) e o tamanho do segmento. Para um programa que tenha quatro segmentos (0, 1, 2 , 3), a tabela vai estar dizendo onde esse segmento comea e qual o tamanho dele. 0 1 2 3 Incio 10000 20000 25000 35000 Tamanho 5000 2000 6000 5000 5000. 2000. 6000. 5000.

O 1 segmento comea em 10000 e acaba com 15000 ento tem tamanho O 2 segmento comea em 20000 e acaba com 22000 ento tem tamanho O 3 segmento comea em 25000 e acaba com 31000 ento tem tamanho O 4 segmento comea em 35000 e acaba com 40000 ento tem tamanho

Esta tabela de segmentos o que o hardware conhece, l dentro do chip da CPU que tem a tabela de segmentos e ele usa esses valores para validar se o deslocamento dele est fora do segmento e tambm fazer acesso de fato a memria. Por exemplo, se quiser acessar a posio 3000 do segmento 2, ento essa posio da memria vai ser 25000 + 3000 = 28000, essa posio vai estar entre o endereo 25000 e 31000, segundo figura abaixo:

12

Memria ///////
40000 35000 31000 25000 22000 20000 15000 10000

///////
3000 mov ax, [3000]

/////// /////// ///////

O hardware soma o deslocamento que voc forneceu na funo com o ndice do segmento, no caso acima 25000 + 3000 = 28000, que o endereo que vai ser utilizado na memria fsica. A tabela de segmentos fixa? No, depende do tamanho do segmento ela estar refletindo como o SO carregou o segmento na memria. O SO carrega a tabela de segmentos e o hardware utiliza para acessar a memria quando as instrues esto executando. Como o hardware executa exatamente?
N do Seg Define entrada deslocamento O tam do segmento comparado com o deslocamento da instruo maior que 2000 Gera Interrupo O SO tratar

2500 0 +300 0

2800 0

3000

A tabela de segmentos para cada processo. Se tiver outro processo com dois segmentos e um dos dois segmentos est ativo em um certo instante de execuo, quando tiver executando o processo 2 estar sendo usado a tabela abaixo. Se eu fizer mov ds, 2 ,no consegue acessar, pois no h segmentos, no processo 2 ento ser gerado interrupo. Se usar deslocamento 6000 no segmento 0, vai abortar tambm. O processo s consegue mexer nos prprios segmentos. Isso evita que um bug no programa faa com que outro processo pare de executar. 0 1 Incio 5000 15000 Tam 5060 3000

13 Para compartilhar teria que ser feito com que dois processos apontem para o mesmo endereo inicial. O SO v quantas reas so e qual tamanho de cada rea, ento procura espao na memria para cada segmento, pode ser junto ou separado. O benefcio final que um processo no veja a rea de outro processo, no consiga alterar outro. Infelizmente a Microsoft quando criou o Windows 3.1 ela no fez assim, ela no d uma tabela de segmento por processo, ela cria uma tabela de segmentos para todos os processos, isso muito ruim, pois permite que um processo entre em um segmento de memria do outro, utiliza segmentao, mas no protege a memria. Alm dos campos acima poderemos ter campos de proteo como permisso, alterao, leitura e executvel. Vai dizer se aquele segmento permite alterao no dado. Por exemplo, em um segmento de cdigo, no altervel o contedo, mas poder ser executado. Se o programador tentasse executar uma instruo de alterao em um segmento que no permite alterao tambm gera interrupo, ento o processo abortado. No caso da Intel que tem segmentao, quando altero o segmento que vamos utilizar, a CPU da Intel no s carrega o valor 2 de ds como carrega todos os dados de controle do segmento 2, isso faz com que no seja necessrio ter a tabela de segmentos contida dentro da CPU, no precisar consultar memria, isso otimizao. Outra soluo carregar a tabela de segmentos na CPU, mas a tabela pode ser grande, tornando-se invivel. A tabela de segmentos definida pelo SO, mas o programador define o tamanho do segmento, s vezes o compilador. O SO pode deslocar o segmento de lugar se fizer isso e alterar a tabela de segmentos, o processo no ir perceber que o segmento mudou de lugar. O segmento de pilha tem o tamanho, tem um incio e um incio real, quando feito um push, esse push pode alcanar o incio real, ento ocorre interrupo que o SO trata, baixando um pouco do incio real. Se for rea de dados, vai abortar. Nos dois casos acontece interrupo, o que muda o tratamento. O Windows permite a criao de outra rea de dados. A tabela de segmentos fica onde? Os dados que ela contm apontam para PCB, a cada instruo que o PCB muda de endereo a CPU tem que validar se o acesso vlido, e alm disso tem que somar o incio do segmento ao deslocamento, isso feito a cada instruo que executa, isso feito de forma rpida, mas para ser rpido, a tabela de segmentos tem que estar dentro do chip da CPU. O problema de fazer isso que a tabela pode ser grande. A Intel coloca na memria, s que ficando na memria ficaria muito lento para fazer as validaes e os clculos a cada instruo que executada pela CPU, ento a Intel quando o programador indica que quer usar um certo segmento a CPU carrega o registrador dela (a parte escondida do registrador de segmento, o incio, o tamanho) ficam contidos dentro da CPU ,ento a validao feita sem precisar ir a memria, portanto a execuo de uma instruo vai ser rpida. Problema da alocao de memria: Tenho uma memria disponvel tem que alocar a memria dentro dessa memria disponvel e o pedao alocado tem que ficar indisponvel. Com isso, cria situaes que podem gerar o impedimento do surgimento de processos. Se tiver muitas alocaes e desalocaes o que pode acontecer que ter muitas reas

14 disponveis pequenas e separadas umas das outras, se eu precisar alocar uma nova rea que seja maior que qualquer rea dessa eu no vou conseguir, apesar da soma de cada rea ser maior do que a rea que eu quero alocar. Esse problema se chama Fragmentao de Memria. Como se resolve esse problema? 1) Resolvendo com a utilizao da compactao; 2) Evitar que acontea. Como resolver (1) ? Deslocamento de todas as reas para acabar com os buracos; Juntaria todas as reas e formaria um espao livre maior capaz de ser alocado para um novo processo. Isso chamado de compactao. Exemplo: A memria contm cinco processos(P1, P2, P3, P4 e P5) e entre eles tem uma rea livre. A compactao vai juntar essas reas. Na tabela de segmento o nicio do processo P5, que antes era 40000 passa a ser 32000, o seu tamanho permanece em 5000, assim como se trata do ltimo processo alocado na memria, o endereo inicial da rea livre 37000. Memria SO
45000 40000

Memria SO

Tabela de Segmento antes da Compactao

P5 P4 P3 P2 P1 Compactao
37000 32000

nicio 40000

Tamanho 5000

P5 P4 P3 P2 P1

Tabela de Segmento depois da Compactao

nicio 32000

Tamanho 5000

o hardware que permite a compactao da memria. E esta compactao acionada quando um processo deseja ocupar a memria e no tem rea disponvel, o SO toma a iniciativa da compactao da memria. O mesmo problema ocorre para alocao de variveis dinmicas dentro de rea de heap de um processo. E como soluo compactar a memria. Neste caso, para correo dos endereos tem que ser possvel saber onde esto os ponteiros das variveis dinmicas. O Java consegue fazer isto, mas o C, Pascal no conseguem.

15 Heap Pilha

Dados Cdigo A vantagem da segmentao poder fazer a compactao e apenas trocar o endereo inicial do segmento na tabela de segmento, pois o deslocamento e o tamanho so os mesmos. Observao: Para se chegar ao endereo final da posio da memria o hardware tem somar o incio do segmento mais deslocamento; Problemas da compactao: 1) Mover memria; 2) Depende do hardware mover a posio que a rea de determinado processo ocupa sem que o processo saiba que isso aconteceu, nem sempre possvel de ser feito. No caso de segmentao possvel, desde que todas as tabelas de segmentos reflitam a nova posio de cada segmento. A outra forma tentar evitar (2) que a fragmentao ocorra e para isso existem algoritmos, e cada um tem seu objetivo, para a escolha de rea livre, que uma rea que minimize a fragmentao. Algoritmos para evitar a Fragmentao da Memria: 1) Best Fit : Tenta alocar na rea de tamanho mais prximo ao se quer inserir na memria 2) Worst Fit : Tenta alocar na rea de tamanho mais afastado do que se quer inserir na memria. Faz o worst se no existir espao de tamanho exato. Comea a procurar rea livre no incio da memria. 3) First Fit ou Next Fit (circular Fit): Aloca o bloco na primeira rea livre que encontrar. No procura reas livres na memria. Assim mais rpido. Porm gera reas livres de tamanho variado na memria. Comea a procurar no espao seguinte a ltima alocao.

16

Memria SO
2000

4000 8000 5000

3000

No esquema acima tm cinco reas livres, cada uma com os seguintes tamanhos: 3000, 5000, 8000, 4000, 2000 respectivamente. Se o processo alocar uma rea de 4000 na memria no haveria fragmentao, pois ele ocuparia a rea livre de tamanho 4000. O problema se tentar alocar um bloco de 3500, pois sobrar um espao de 500, pequeno demais para poder ser alocado por um outro bloco, o que o algoritmo Best Fit faz. O que pode ser feito tentar alocar em um bloco maior e assim sobrar um pedao maior para que possa ser alocado por outro bloco, por exemplo, alocar no bloco de 8000 sobrando 4500, que o que o algoritmo Worst Fit faz. Mas, agora se quiser alocar um processo de 6000, por exemplo, no tem mais rea com tamanho maior ou igual para este processo, o que vai ter que fazer a compactao. No existe um algoritmo prtico para alocao. Pode ser uma coisa custosa procurar o espao que melhor se adapta. Por isso, existe um outro algoritmo que coloca o processo no primeiro espao livre encontrado que couber este processo. Este algoritmo o First Fit. Dentro do sistema operacional existe uma lista encadeada com os espaos livres da memria para controlar esses espaos livres. Como mostra o esquema abaixo: O endereo de incio 0 e tamanho 3000 aponta para o endereo inicial 10000 de tamanho 5000 e este aponta o endereo inicial 25000 de tamanho 8000 e este aponta para o endereo inicial 40000 de tamanho 4000 e por ltimo o endereo inicial 60000 de tamanho 2000.
Incio 0 Tamanho 3000 Prximo Incio 1000 0 Incio 2500 0 Tamanho 8000 Prximo Tamanho 5000 Prximo

Incio 4000 0

Tamanho 4000

Prximo

Incio 0

Tamanho 3000

Prximo

Incio Tamanho Prximo 6000 2000 0 Incio Tamanho Prximo 1000 0 5000

17 Resumo: Os problemas e as solues da alocao de memria so utilizados tanto para processos como para variveis dinmica, onde quem controla isto o sistema operacional e a biblioteca padro, e nesta ltima contm as informaes sobre o que foi alocados na heap e etc. 1.4) Paginao: Para micro o primeiro chip da Intel que tinha este mecanismo foi o 386 e o primeiro sistema operacional que comeou a usar a paginao foi o Windows 3.0. O que esse mecanismo? Resposta: Passa a existir duas formas diferentes de olhar a memria: espao do endereamento lgico e o espao do endereamento fsico. Existe um mapeamento das pginas lgicas e das pginas fsicas. A ordem do endereamento lgico diferente da ordem do endereamento fsico. E os espaos do endereamento lgicos podem refletir no espao do endereamento fsico. Cada processo tem o seu espao de endereamento lgico. Como mostra o exemplo abaixo que possui processos (1, 2 e 3) cada um com o seu espao de endereamento lgico. E cada processo acha que est sozinho na memria, e s v o seu espao de endereamento lgico. Enquanto existir espao disponvel na memria poder se alocado um espao de endereamento lgico para outros processos ou aumentar o tamanho da pilha. Tem endereos lgicos que correspondem fisicamente e tm outros que no. Hoje em dia mecanismo mais sofisticado, mas exige muito do hardware. Hardwares antigos no so capazes de fazer a paginao. O chip da Intel desde 1985 j tem este recurso. A Microsoft comeou a usar a paginao em 1994, com Windows NT, no Windows 3.1 era bem primria. Em 1995, o Windows 95.
Espao de Endereamento Lgico ou virtual processo 3

SO Pilha
Espao de Endereamento Lgico ou virtual processo 1 Espao de Endereamento Fsico

FFFF

SO Pilha

SO

Dados Cdigo

Espao de Endereamento Lgico processo 2

SO Pilha

Dados Cdigo

Dados Cdigo

18 Na paginao no existe mais o problema de carregamento do processo na memria, pois todo processo comea no endereo 0. O grande problema que no basta mover memria o endereo tem que acompanhar. A segmentao fcil com relao ao processo, j com variveis dinmicas no fcil, porque tem que saber quais so os ponteiros que apontam para as variveis e corrigir os valores destes ponteiros. Na segmentao fcil porque ao mover o processo da memria o valor do deslocamento permanece o mesmo e para obter endereo final tem continuar somando com o valor do deslocamento, mas agora com outro valor do segmento.
Espao de Endereamento Lgico ou virtual Espao de Endereamento Fsico

1 5 1 4 1 3 1 2 1 1 1 0 9 8 7 6 5 4 3 2 1 Instruo: Mov AX,[4100]


Em binrio (divide por 4096 = 212)

Tabela de Paginao
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Vlido 0 0 0 0 1 1 0 0 0 0 0 0 0 1 1 1

1 3 1 0

6 2 3

1 5 1 4 1 3 1 2 1 1 1 0 9 8 7 6 5 4 3 2 1

001 000 000 000 100


Div Resto da Diviso

Onde:

Div Resto da diviso

= diviso por 4096 (n da pgina) Parte Alta dos bits acima; = resto da diviso por 4096 (deslocamento da pgina) Parte Baixa.

19 Logo: N da Pgina 1 00001 Deslocamento 4 000 000 000 100

Quem preenche a tabela de pgina o sistema operacional quando aloca o processo. Cada processo tem uma tabela de pgina diferente. O que o hardware faz l a tabela acima e pegar o mapeamento da posio real na memria a cada instruo executada. Em outras palavras, quem executa a converso de virtual para real na tabela de pgina o hardware. A tabela contm o mapeamento de virtual para real. Endereo Lgico: ... 000 000 001 000 000 000 1000 20 bits 1 N Pgina
Converso

12 bits = 32 bits 4 Desloc. na Pg

Endereo Fsico: ... 000 000 010 000 000 000 100 20 bits 1 N Pgina 12 bits 4 Desloc. na Pg

O grande problema da paginao a ida duas vezes memria: uma para fazer a converso do endereo fsico para o lgico e vice-versa e a outra para acessar o dado e jogar para o registrador. Por exemplo, se tenho 40000 Mb , ento tenho 10 Kbytes para cada pgina. Isso deixa a CPU duas vezes mais lenta. A tabela de pgina fica no endereo fsico, fica em memria e pode ocupar mais de uma pgina. Como esta tabela muito grande para ficar dentro do chip da CPU ento ela fica na memria no endereo fsica. Existe um mecanismo que torna o acesso a memria mais rpido que TLB(Translation Look Aside Buffer). Translation Look Aside Buffer(TLB) resolve o problema descrito acima, que uma tabela reduzida com as pginas mais acessadas. Esta tabela localiza-se internamente no chip da CPU. Estrutura da TLB: N da Pgina Lgica 1 2 N da Pgina Fsica 2 6 Vlido 0 1 1

20 O hardware antes de fazer a converso ele vai TLB buscar o mapeamento caso exista da tabela de pgina. Exemplo de outras Instrues: 1) MOV [5000], BX 2) MOV CX, [9000] => j est na TLB; => no est na TLB, ento busca a informao da sua localizao e atualiza a TLB. Neste caso, o hardware vai Tabela de Pgina na memria e busca o mapeamento, faz a converso e guarda na TLB este mapeamento; => j est na TLB, pois a instruo anterior j havia atualizado a mesma. Ento o hardware no precisa acessar a Tabela de Pgina na memria

3) MOV [10000], DX

O sistema operacional ao escalonar outro processo zera a TLB. Tem uma instruo que faz isso. 1 problema : Perda de Velocidade Soluo : TLB Vamos fazer um clculo para saber a perda de performance que a paginao pode ter utilizando a TLB: Exemplo : Tempo de acesso a memria = 100ns Tempo de acesso a TLB = 10 ns Duas situaes podem ocorre para instrues que vai a memria: 1) O acesso tem que passar pela tabela de pginas; 2) No precisa da tabela de pginas, pois a informao esta contida na TLB. Tempo de acesso a memria em = (10+100)*p + (10+100+100) Converso via Converso via Tabela TLB de Pginas Converso via TLB: 10ns para consultar a TLB + 100ns para acessar o banco de dados depois de convertido, p a probabilidade de acontecer a converso via TLB. Converso via Tabela de Pginas: dois acessos a Tabela de Pginas (100ns + 100ns) e outro a memria para trazer o dado que o programador quer, tambm se gasta o tempo de acesso da TLB (10ns), pois s ser sabido que a informao est na TLB, depois do acesso mesma. Outra situao: Quando a converso no est na TLB tem como ocupar a TLB primeiro. Gasta mais 100ns para consultar a Tabela de Pgina para fazer a converso do endereo lgico para o endereo fsico e depois se gasta mais 100ns para pegar o dado que o programador quer e coloc-lo no registrador:
Instruo similar a mov reg [end] = 110p+210 210p = 210 100p =210 90 =120 => perda de 20% Onde: p = 0,9.

Essa uma soluo razovel, porque se no houvesse nada teria uma perda de 100%, se no tivesse a TLB para fazer a converso todo acesso a uma instruo como essa faria dois acessos a

21 memria, ento ao invs de gastar 100ns, gastar 200ns ia ser uma perda de 200%. Usando a TLB a perda de 20%. Justifica-se ento que a TLB uma soluo razovel para perda de velocidade. 2 problema: Tamanho da Tabela de pginas Depende do chip que tenha na Placa me, poder ser colocado 500MB ou 1GB, depende de quanto o usurio decidiu colocar em sua mquina. Mas, o espao de endereamento lgico no real ele virtual, ento existem pginas de espao lgico que no tem correspondentes no mundo real. Como no exemplo abaixo, somente 3 pginas tm correspondentes no mundo real, ento se o programador faz um acesso a uma das pginas que no tem correspondentes no mundo real, por exemplo, um acesso a pgina lgica 6 e no houver informao, ento quando o hardware tentar fazer a converso do endereo lgico para o endereo fsico ele ter antes que testar se a converso pode ser feita ou no, ou seja, o hardware verifica se o bit vlido, se no for vlido ele no far a converso e gerar uma interrupo abortando o programa em seguida. J que assim no ter um limite do tamanho do espao lgico, j que eu posso ter muitas pginas que no tem correspondentes, o que acontece que normalmente o tamanho do espao lgico o tamanho mximo que a mquina permite. E qual o tamanho mximo? o maior endereo que ela pode usar. Por exemplo, na CPU Intel o maior endereo que ela pode usar 32 bits, ou seja, 2-1 = 4GB. o caso em que todos os bits so 1, j que no tem limite para o tamanho do espao lgico, ento os Sistemas Operacionais podem escolher que o espao lgico 4GB, geralmente isso que acontece, por exemplo, no Windows o espao de endereamento virtual de um processo qualquer de 4GB. No interior da CPU poder ter um outro valor de tamanho mximo que pode ser usado, o valor de 32bits pode ser 64bits, por isso, vai ser muito maior o tamanho do espao lgico. Se o espao de endereamento lgico 4GB, no ter problemas colocar cdigo de dados na parte de baixo e colocar a pilha em cima, neste espao ter milhares de pginas. Ento o SO poder ter pilha para baixo e cdigo para cima vontade. Assim, digamos que a pgina lgica 0 seja mapeada pela pgina fsica 1 e a pgina lgica 1 seja pela 3, o SO preencher na tabela de pginas como descrito acima, enquanto houver memria real para ser usada, podendo aumentar o tamanho da pilha. interessante que o espao seja grande, pois no existir problema de dados para cima e pilha para baixo, enquanto existir memria fsica. Se o dado crescer e bater na pilha, a tem que abortar o processo mesmo que exista memria fsica. vantagem colocar bem longe essas reas para evitar o encontro delas. Acaba com o problema da fragmentao em que no poderia usar a memria porque estavam separados. Afinal, desde que exista uma pgina fsica livre no importando onde esteja pode ser mapeado uma pgina lgica. Obs.: A pilha nunca bate no cdigo, porque muito grande. Quantas pgina lgicas de 4KB existe em um espao lgico de 4 GB? 1M (1 milho). Veja a frmula abaixo:
N de pginas lgicos = tamanho do espao lgico / tamanho da pgina. Exemplo: N de pginas lgicos = 4GB/4Kb = 1M (1 milho)

Onde fica a Tabela de Pginas? Resposta: Na memria.

22 Espao de Endereamento lgico Tabela de Pginas


N da pgina fsica 11 10 9 8 7 6 5 4 3 2 1 0 0 0 0 0 0 0 0 0 0 1 1 1

Espao de Endereamento Fsico


vlido

Pilha

4GBG 3 2 1 0

0 4 2

Dados Cdigo

4 3 2 1 0

Qualquer pgina do espao de endereamento lgico, o programa pode tentar usar, erradamente, ento o hardware tem condio de perceber isso e gerar uma interrupo e abortar o processo. Para o hardware perceber isso, tem que existir na tabela de pginas um nmero de entradas que igual ao nmero de pgina lgica que existe. Uma pgina lgica qualquer que acessada faz com que o hardware olhe na tabela de pginas e veja se aquela pgina pode ser usada ou no. Isso ser um problema da paginao, pois, ter 1 milho de entradas, se cada entrada tiver, por exemplo, 4 bytes ento a tabela de pginas com 1 milho de entradas, ser igual a 4MB por processo, ento um problema complicado pois se fossem 100 processos seriam 400MB. Esse o tamanho da tabela de pginas como descrito acima, a tabela de pginas seria muito grande e ocuparia muito espao na memria s para constru-la. 1 Soluo: Tabela de Pginas em nveis: Implementado pelo hardware, mais precisamente pela Intel. Estruturas esparsas contm informaes irrelevantes, onde a maioria de seus valores so nulos, por exemplo, uma tabela de pgina que tem 1 milho de entradas, a maior parte delas ter o bit de validade igual zero, poucas tem bit de validade igual a 1. Se nessa matriz a maior parte dos elementos for igual a 0 e se algum for diferente de 0, ento existe uma jogada que resolve esse problema da memria, ao invs de fazer a matriz como um array direcional, far um array de ponteiros para o array, nas poucas linhas que tem espao relevante essas linhas tem um array de linhas alocadas. As demais linhas que tem sempre 0 no precisam de um array para guardar.

23 Estruturas Esparsas linhas


0 0 3 4 0 0

10000

0 0 0 0

0 0 0 0 1

3 0 0 2 0

4 0 0 0

0 0 0 0 1 2 0 0 0 3

10000 Fuction getElem (i,j : Integer) : byte; Begin If linhas [i] = nil then getElem:=vazio Else getElem = linhas[i]^[j]; End A funo acima verifica se a linha existe ou no. Se no existir fica com valor 0, isso acontece nos casos em que a linha igual a nil. Se existe, ou seja, linha diferente de nil, ento ser obrigado a percorrer o ponteiro que aponta para esse array. O espao ser muito menor. Esse um mecanismo que existe no Windows NT. Ao invs de gastar 100MB, devido o array ter 1000 linhas e 1000 colunas (1000 x 1000 igual a 100MB), estar gastando 70KB. A tabela de pginas dividida em partes iguais e s iro existir as que tiverem pginas vlidas. Para isso haver uma tabela que chamada de diretrio de pginas que essas partes iguais e s conter as informaes de pginas vlidas. As demais pginas da tabela voltam para o nil. A estrutura desta tabela ser o mesmo que o array de array mostrado acima. Diretrio de pginas 0 0 1 1 1

1 K entradas

1002 504 1001 502 1000 500

2 1 0

0 4 2

0 0 1 1 1

1 K entradas

24 S duas pginas vlidas, representadas pelos dois arrays acima, tero espao fisicamente, os demais no iro existir, no caso da Intel ter 1K entradas e em cada pedao de pgina tambm tem 1000 entradas. De 4 MB (1MB X 4bytes) teremos 12 KB, j a tabela de pginas ser maior se tiver vrias pginas com valor vlido, mas nunca ser to grande quanto 4 MB. uma soluo que funciona, pois a tabela de pginas fica muito menor, porm a conta do comeo invlida, quando a converso de virtual para real feita via tabela de pginas, so gastos dois acessos a tabela de pginas, um para acesso ao diretrio e outro para a operao da tabela de pginas. Quando a converso no est na TLB ter dois acessos a tabela de pginas, deixando o acesso bem maior. Clculo: Acesso a memria via TLB Via Tabela de pginas = 10+100*p = (10 + 100 + 100 +100)*(1-p) = 210p + 310 (1-p) = 310 200p= 310-180=130. Considerando 90% de perda, pois so dois acessos a tabela de pginas, um para o diretrio de pginas e o 2 acesso o pedao da tabela de pginas. 2 soluo: Tabela de pginas invertidas: Com uma tabela to grande a soluo em nveis no funciona porque o diretrio de pginas fica muito grande, a soluo colocar mais nveis, mas isso deixaria mais lento o tempo de converso via tabela de pginas, isso no muito bom. Quando a mquina tenta fazer um mapeamento to grande o que normalmente se adota a tabela de pginas invertidas. uma derivao da tabela de pginas. O que a tabela de pginas? Tm mais bits de controle, n da pgina fsica e o ndice da tabela de pginas, no so armazenas pois so ndices de arrays, mais o ndice da pgina lgica. A tabela de pginas muito grande pois o espao lgico muito grande, por exemplo, com 32 bits de endereamento como o caso da Intel.

25
N da pgina lgica N da pgina fsica Executvel Altervel

13 12 11 10 9 8 7 6 5 4 3 2 1 0

11 10 9

7 0 4 2

1 1 1 1

0 0 1 1

1 1 0 0 Espao Real 12 11 10 9 8 7 6 5 4 3 2 1 0 Espao Virtual 2 12 11 SO 10 9 8 7 6 5 4 3 2 1 0

Espao Virtual 12 11 10 9 8 7 6 5 4 3 2 1 0 SO

dados cdigo

No tem mais a questo da quantidade de tabelas de pginas por processo, mas tem um PID que identifica o processo. Tenho uma tabela s para todos os processo. Ocupa muito menos espao para armazenar a tabela. Poderia se pensar que essa uma soluo excelente, pois, gasta muita 12 menos memria, porque no memria lgica memria fsica e, alm disso, uma tabela s para 11 todos os processos, mas tem 10 grande problema: O que feito pelo hardware quando executa a um seguinte instruo: mov ax, [4100], tem que converter o endereo que lgico para o endereo 9 correspondente, divide o hardware em dois pedaos, o pedao que o deslocamento da pgina e faz 8 a converso para o n da pgina lgica para o nmero da pgina fsica. Na tabela de pgina normal 7 j se sabe qual o endereo lgico, pois, est no array, neste caso no, ter que procurar, no s ir 6 direto na posio e saber qual 5 nmero que est l. Por exemplo: Qual a pgina fsica onde est a o pgina lgica 1 do processo 4 Ao invs de fazer um acesso a memria, tem que fazer vrios 1? 3 2 1 0

ncleo

26 acessos para saber qual a pgina fsica. Essa converso tem que ser feita para cada instruo que est na memria. A procura feita atravs da tabela Hash, para ganhar velocidade de acesso. Por causa disso, a TLB bem mais eficiente, ou seja, a converso ser melhor se for feita via TLB ao invs da tabela de pginas invertida.
N da pgina fsica Tabela de pgina invertida

2 3 0 1 1 0 2 Vantagem : Desvantagem :

2 1 2 1 2 1 2

Eficiente por gastar pouca memria Ficar mais lento

3 soluo: Gerao de uma interrupo (Sem Sparc): A converso entre o endereo lgico e fsico tem que ser feito, mas quem faz o software, ento na 3 soluo ela a gerao de uma interrupo o HW faz a converso do endereo lgico para o endereo fsico, antes passa pela TLB para ganhar velocidade, todo o hardware de paginao tem TLB para ganhar velocidade, no caso dessa soluo eles tentam fazer a converso na TLB se conseguir timo, se a converso no tiver na TLB ento o hardware gera uma interrupo. Essa converso de lgico para fsico uma coisa complicada ento as estruturas de controle esto amarradas ao hardware. A idia dessa soluo deixar livre a escolha da estrutura de controle. Quem vai decidir qual o melhor mecanismo ser o programador do SO. Onde est o SO? 1) Em outro espao de endereamento lgico 2) Nos espaos de endereamento de todos os processos

27 Tabela (SPARC) N da pgina lgica 1 3 0 N da pgina fsica 4 7 5 Validade 1 1 1 Id do Espao lgico 1 1 2

Diferenas entre tabela de pgina normal e tabela de pgina invertida: Estado Civil 1 Solteiro 2 Casado 3 Viuvo 4 Divorciado var Est_Civil: array[1..4] of String; begin Est_Civil[1] := Solteiro; . . . Function StringEstCivil(i: integer) : String;

// ISTO UM LOOK UP TABLE,ou // seja tabela de pgina normal, que //mais eficiente que uma tabela de //pgina invertida

begin StringEstCivil := Est_Civil[i]; End; Function GetNomePai( s: String) : String; // Exemplo de uma tabela de pgina invertida,
// pois possui procura e tem perda de // performance devido a esta procura.

var i: integer; begin for i = 1 to 100 do if A[i].Nome = s then return A[1].NomePai; end; Type Pessoa = Record; Nome, NomePai End; var Pessoas: array[1..100] of Pessoa; begin

// ISTO UMA PROCURA! Devido ao teste //de igualdade que se repete.

: String;

28 Pessoa[1].Nome Pessoa[1].NomePai Pessoa[2].Nome Pessoa[2].NomePai end. 2 Problema: Tamanho da Tabela A) Tabela de pginas em nveis (Intel 80386, 80486, Pentium): O problema desta soluo que a cada chamada externa tiver trocar o espao do processo tem que zerar a TLB. B) Tabela de pginas invertidas (IBM: Power PC). uma tabela para todos os processos, para no ocupar muito espao. No precisa zerar a TLB quando faz uma chamada ao sistema operacional sob a forma de uma interrupo, porque o espao do endereamento lgico o mesmo. A interrupo ou chamada ao sistema ocorre e o espao do processo tambm tem no sistema operacional, eles compartilham o espao. Ento a vantagem desta soluo de no zerar a TLB; Observao: O Solaris com processador Intel usam esta soluo. C) Gerao de Interrupo (Sun: UltraSparc): no implementado em hardware, quando a traduo endereo lgico e endereo fsico no pode ser feito via TLB. Neste caso, o hardware gera uma interrupo e o sistema operacional trata esta interrupo, fazendo a converso, usando estrutura de dados feita em software e no hardware, o programador do software que escolhe a estrutura de dados usada para converso. Diferente das duas solues acima que utiliza estrutura de dados que o hardware conhece, ento o hardware consulta a estrutura de dados e faz a converso. Localizao do Sistema Operacional: A) O SO tem seu prprio espao de endereo lgico. B) O SO est presente no espao lgico de todos os processos(Windows 95, NT, Linux); Otimizao utilizando Paginao: - Compartilhamento de Memria (entre dois processos): A paginao e outros mecanismos permitem o compartilhamento de memria. Quanto a paginao da forma descrita abaixo: Tem uma rea comum para compartilhar dados e pode ter dois propsitos: 1) Comunicao entre processos. Um processo escreve na memria e outro l desta. 2) Economia rea de memrias no mutveis, que basicamente rea de cdigo, pois, o cdigo no se altera. No esquema abaixo o cdigo ocupa trs pginas, pilha duas pginas e os dados uma pgina. O sistema operacional verifica no PCB se o que est sendo carregado o mesmo processo, ou seja, com o mesmo cdigo, neste caso, a rea de cdigo de cada processo aponta para a mesma rea no espao de endereamento fsico. No o que est representado no esquema abaixo. Toda esta parte de compartilhamento de memria descrita at agora para paginao pode ser usada na segmentao, o que muda a unidade que no lugar da pgina seria o segmento. Ento voc pode compartilhar um segmento de cdigo ou um segmento de dados compartilhado para comunicao, um segmento de dados normal no pode ser compartilhado. := Joao; := Antonio; := Maria; := Pedro;

29 Repare que tanto na paginao representada no esquema abaixo e na segmentao existem os dados normais e os dados compartilhados, na paginao cada um ocupa uma pgina diferente e na segmentao eles iro ocupar segmentos diferentes tambm.
Espao de Endereamento Fsico

Processo 1

Processo 2

SO Pilha Dados Compar

SO

SO Pilha Dados Compar

Dados Cdigo

rea livre Dados rea livre Cdigo

A segmentao gera a fragmentao ou fragmentao externa que a rea livre entre os processos. A paginao no gera fragmentao, pois a pgina ficando livre poder ser utilizada para alocao. Porm apesar da pgina ser de 4Kb (4096 bytes), nem sempre os valores alocados nas pginas so mltiplos deste valor. Desta forma, existem pequenas reas na pgina que no podem ser alocadas, que chamada de fragmentao interna, que fica dentro do processo. No esquema acima entre a rea de cdigo e a rea de dados. A menor unidade de alocao no mecanismo de paginao uma pgina de 4kb No DOS, se um processo cpia de outro processo, ou seja, processo filho, ento este pode compartilhar as pginas do endereamento fsico do processo pai. Mas, a pilha e dados no podem ser compartilhados, pois cada processo tem as suas variveis locais e seus prprios dados. Como mostra o esquema acima. A rea de cdigo compartilhada sempre que o cdigo se repetir. No Unix, a rea de dados e de pilha compartilhada quando o processo for cpia de outro. Mas, isto um problema, pois como ficaria a varivel global dos processos, iria conflitar, e o sistema operacional abortaria o processo. O Unix resolve isto com um bit que indica se pode ser altervel ou no (read only), o hardware no sabe de nada e gera a interrupo, o software, sistema operacional, verifica que um caso especial e no aborta o processo, este caso especial chamado de Copy on Write.

30

Exemplo de criao de processo no Unix: fork() if (fork() != 0) { // cdigo que o pai executa } else { // cdigo que o filho executa execve(word ...); // coloca a imagem do programa na memria }

Processo Pai

Espao de Endereamento Fsico

Processo Filho

1 SO 5 1 Pilha Pilha 4 1 3 1 2 1 Dados Dados 1 Cdigo Cdigo 1 0 9 8 7 6 5 4 Definio de Copy on Write: Quando esta estrutura criada, todas as pginas so marcadas como read only. Na tentativa de qualquer um dos processos tentar escrever na pgina, o hardware gera uma interrupo, que tratada pelo SO. Este identifica a situao e faz uma cpia da pgina pretendida para outra rea livre fazendo o processo chamador apontar para a nova pgina. No esquema acima, o pai tenta alterar a pgina fsica 2, o hardware verifica que est read only e gera interrupo, em seguida, o sistema operacional trata esta interrupo, verificando que um copy on write, a o so faz a cpia da pgina lgica 2 para a pgina fsica 3 e agora a pgina no mais read only, ou seja, uma pgina altervel. Agora a alterao da varivel global feita na pgina fsica 3. SO um mecanismo genrico que no usado apenas em sistemas operacionais, exemplo disso, so as Strings em Delphi. Por exemplo, quando atribumos uma varivel em outra

31 do tipo String no feito cpia desta varivel, simplesmente os endereos destas variveis apontam para o mesmo lugar na memria (s1 e s2), mas quando parte de uma desta varivel alterada (s1), a sim feito a cpia para um outro lugar na memria, desta forma s2 passa a apontar para este outro lugar. Como mostra o exemplo de um programa em Delphi abaixo: (1) s1, s2 (2) s1 (3) s2 (4) s1[3] : String; := alo; :=s1; := a;

Endereos na memria at a instruo 3: s1 Memria at a instruo 3: s2 a l o

Endereos na memria na instruo 4: s1 s2 Memria at a instruo 4: a l a

Memria at a instruo 4: a l o

A tentativa de alterao da pgina read only foi feita pelo pai na pgina no endereo lgico 2.
Tabela de Pgina Processo Pai Tabela de Pgina Processo Filho

Vlido Altervel 2 1 0 4 -> 3 1 0 -> 1 2 1 0 4

Vlido Altervel 1 0

- Carregamento sob Demanda: Digamos que temos um programa de 80Mbytes, o so vai criar um processo para executar este programa. Porm, ir demorar a ler, o so faz a otimizao, ele no carrega o programa todo ele vai carregando aos poucos. O so carrega uma pgina por vez, as demais pginas medida que for necessitando desta o hardware gera uma interrupo. Por exemplo, as pgina lgicas 1, 2, 3 no

32 foram carregadas. Se na pgina 0 tem uma subrotina que chama uma outra subrotina fazendo um call, que est na pgina 2, endereo 9000, o hardware vai gerar uma interrupo. Porm, neste caso, o so tem uma outra estrutura de dados que indica que a pgina 1, 2, 3 so vlidas, desta forma, o so no aborta o processo, ele vai no disco e pega o pedao que falta correspondente a pgina 2, carregando a pgina lgica 2 na pgina fsica 3. O programa volta a executar, pois o cdigo que faltava j foi carregado. Importante: O so tem uma estrutura de controle que diz que estas pginas no so invlidas elas apenas no foram carregadas ainda. O hardware conhece apenas o que vlido ou invlido, ele no conhece tabela de pgina, apenas o so conhece. Com este mecanismo o so no precisa l um programa de uma vez 100Mbytes, por exemplo. Mas, o so l um conjunto de pginas de uma vez, pois mais lento l dez vezes xbytes do que uma nica vez 10xbytes, ou seja, mais lento 1Kbytes do que 10Kbytes. Ento, os sos no lem pgina a pgina eles lem um conjunto de pginas, pois l muito aos pouquinhos acaba sendo muito lento, quanto mais voc junta para l mais rpido fica.
Espao de Endereamento Lgico ou virtual Espao de Endereamento Fsico

1 Tabela de Pginas 1 5 5 1 lgica fsica Vlido 1 15 0 4 4 14 0 1 1 pilha 13 8 1 3 12 7 1 3 1 11 0 1 2 10 0 2 1 9 0 1 8 0 1 1 7 0 1 1 6 0 0 5 4 1 0 9 4 2 1 9 8 3 0 8 2 3 1 7 7 1 0 6 0 0 1 6 5 5 4 4 dados 3 3 Disco 2 2 Esse mecanismo tem apenas a ida no tem a volta, diferente do mecanismo de paginao 1 1 cdigo sob demanda, para solucionar o problema de falta de memria, que possui a ida e a volta.

- Preenchimento de zeros sob Demanda (Zero-Fill):

33 Esse mecanismo no para rea de cdigo, mas sim para rea de dados. A rea de dados no Unix tem duas partes: a heap (variveis dinmica) e as variveis globais. A heap preenchida medida que o programa vai alocando variveis dinmicas. As variveis globais podem ter valores iniciais ou no. Quando elas no tm valores iniciais, as mesmas so inicializadas com zero, tanto no Windows quanto no Unix. Quando elas tm valores iniciais, tanto no Windows quanto no Unix, antes do programa principal comear a rodar, roda uma rotina que anexada pelo compilador para inicializar essas variveis, mas esta no a soluo mais usada. Normalmente estas variveis so preenchidas em tempo de compilao e so anexadas ao arquivo executvel (tem rea de controle, cdigo e as variveis globais inicializveis), e quando o programa comea a rodar o so carrega na rea de dados esses valores das variveis globais inicializveis . Variveis Heap Iniciam com 0 Inicializao <> 0

Globais

/* Globais */ int s = 10; int i; void main(...) { . . . } A rea de heap vai sendo preenchida a cada alocao de varivel dinmica. As variveis globais so preenchidas em tempo de compilao e anexado ao arquivo executvel. Variveis Globais Inicializadas Cdigo Executvel rea de Controle

34 Por exemplo, a rea de dados est alocada nas pginas lgicas 4 e 5, onde est variveis globais inicializadas e variveis no completas respectivamente, a otimizao feita pelo so a seguinte no zerar e no alocar essas pginas, apenas as deixa invlidas, a primeira vez que estas forem usadas o hardware verifica que estas esto invlidas e gera uma interrupo, o so o verifica que as pginas 4 e 5 so do processo, ento neste momento o so zera a pgina e aloca as mesmas. Outro exemplo, a pgina 13 no foi zerada e alocada e est invlida, e faz parte da rea de pilha, ento quando o processo precisar desta o hardware verifica que esta est invlida e gera uma interrupo, o so verifica que esta faz parte do processo, ento ele zera e aloca a mesma. Assim, o so que tem paginao apenas adia o processo de zerar e alocar rea de dados e pilha. Vantagem deste mecanismo: economiza tempo e memria.

2) Falta de Memria: Um outro problema a falta de memria, ou seja, quando o usurio quer executar processos que no cabem na memria da mquina. Isto pode acontecer ou quando for executado um processo maior do que a memria da mquina ou quando a soma dos tamanhos de cada processo que se quer executar na mquina maior que a memria desta mquina. Solues: 2.1) Overlay: a mais simples de todas. Exemplo: Temos um processo muito grande que no cabe na memria ento o programa dividido em quatro reas (A, B, C, D) e cada rea com 20Kbytes. Ao invs de ter essas quatro reas carregadas na memria cada mdulo ir se preocupar em carregar na memria o mdulo chamado que estar em disco. Ento se o mdulo A precisa de uma rotina que est no mdulo C ento o mdulo A se preocupa em carregar antes o mdulo C para a memria. Ento esse programa ao invs de ocupar 80 Kb na memria ele ocupar apenas 40Kb. Assim todo o controle de qual o mdulo deve est na memria em determinado instante fica sob responsabilidade do programa e no mais do sistema operacional. Programa A B C D

20Kb 20kb 20kb 20kb

Memria A C
A B C D

Disco

35 Esta soluo tem pouco suporte do sistema operacional. O nico suporte o de carregar o mdulo. No precisa de nenhum suporte especial de hardware, exigindo mais do programa. Observao: - O primeiro sistema operacional que existia para micro era o CPM, que no tinha o suporte para falta de memria. Ento nesta poca usava-se esta soluo (overlay) para o problema de falta de memria. Esta soluo exige muito dos programas.

2.2) Swap de processos: O sistema operacional fica com todo o trabalho. Se tentar executar um processo maior que tamanho da memria da mquina, o sistema operacional tira um processo da memria e o coloca em disco para que outro processo solicitado pelo usurio seja executado. Por exemplo, ser executado um processo 5 que no cabe na memria, o sistema operacional tira um processo da memria e o coloca em disco liberando uma espao na memria para o processo 5. O grande problema desta soluo qual o processo o sistema operacional deve escolher para retirar da memria. O importante escolher um processo que no traga nenhum prejuzo para o usurio. Sabemos que os processos podem estar nos seguintes estados: 1) Executando: aquele que est na CPU sendo executado; 2) Pronto: no est executando, est esperando a vez para executar; 3) Bloqueado: est esperando que alguma coisa acontea, por exemplo, trmino de operao de I/O para que possa voltar a executar, ou seja, v para a fila de pronto esperando a sua vez de executar; 4) Bloqueado em Disco: o processo bloqueado na memria e est agora no disco devido ao swap de processo. 5) Pronto em Disco: o processo que j concluiu a operao e est aguardando ir para fila de prontos na memria para em seguida continuar execuo. Um processo executando no seria o escolhido pelo sistema operacional. Um processo pronto estar executando em um curto espao de tempo, ento este processo no seria o mais indicado para que o sistema operacional retire-o da memria e o coloque no disco. Assim, o mais indicado para que o sistema operacional retire da memria seria o processo em estado bloqueado, que no tem perspectiva de ser desbloqueado em um espao curto de tempo. Por exemplo, processos bloqueados a mais de 10 segundos seria um bom critrio de escolha pelo sistema operacional. Um processo bloqueado devido uma leitura em disco no so os mais indicados, pois uma leitura em disco dura um curto espao de tempo. Desta forma, processos bloqueados por algum tempo so os mais indicados para sofrem swap para disco. Quando isto acontece teremos um novo estado para o processo que seria o estado bloqueado em disco. Agora quando um processo que sofreu swap (ou seja, est em disco) se desbloqueia ento o sistema operacional ter que escolher um outro processo bloqueado para que este passe para memria, ficando no estado de pronto, esperando a sua vez para ser executado. Por exemplo, se o processo P1 que est bloqueado se desbloqueia, ento o sistema

36 operacional far a transio inversa, vai escolher outro processo bloqueado, o processo P3, para colocar este processo em disco, para pode trazer o P1 de volta. Ir demorar um pouco para que o usurio veja o resultado do processo que foi desbloqueado at a sua execuo. Essa demora o prejuzo que existe, essa perda de desempenho, pois o sistema operacional tem que trazer o processo de disco para memria. O benefcio existente poder executar mais processos do que cabe na memria. Transio entre os estados: 1) Um processo passa do estado pronto para executando quando ele escalonado.; 2) Um processo passa do estado bloqueado para pronto quando a causa pela qual fez o processo ficar bloqueado foi concluda. Exemplo: um clique do mouse, quando o usurio clica o processo passa para o estado de pronto; 3) Um processo passa do estado executando para bloqueado quando o mesmo solicita alguma coisa ao sistema operacional, e este fica aguardando uma resposta desta solicitao. Exemplo: uma solicitao de leitura em disco; 4) Um processo passa do estado executando para pronto: a) em um sistema preemptivo: quando ocorre o fim do timelive do processo que est em execuo ou a chegada de um processo com mais prioridade. Na preempo o sistema operacional tira o processo de execuo pelo dois motivos descritos acima, sem que o processo tenha pedido nada ao sistema operacional, o processo sai involutariamente; b) em um sistema operacional no preemptivo: existe uma chamada que o processo (principalmente, os processos que usam muito a CPU CPU bound) sede o lugar para outro processo. No preempo, pois o processo sede o seu lugar na CPU voluntariamente. Este tipo de sistema operacional chamado de sistema operacional cooperativo. Este tipo de mecanismo que o processo sede sua vez na CPU para um outro processo existe hoje no Windows e chamado de yield, em sistema operacionais antigos era chamado de liberao de CPU. 5) Um processo passa do estado bloqueado em memria para bloqueado em disco quando um outro processo solicitado pelo usurio e no tem espao em memria para carregar este processo ento o sistema operacional faz um swap para disco de um processo bloqueado algum tempo na memria, e este fica bloqueado em disco. 6) Um processo passa do estado bloqueado em disco para pronto em disco quando a operao que este processo estava aguardando termina ento vai para fila de prontos em disco. Ou seja, quando a causa do que o colocou em estado bloqueado no existe mais. 7) Um processo passa do estado pronto em disco para pronto em memria quando libera espao em memria. Isto pode ocorre quando um processo libera a memria por ir para o estado de executando ou o sistema operacional pode escolher outro processo bloqueado para fazer o swap e liberar espao para este processo pronto em disco.

37

Executando

Bloqueado

Pronto

Bloqueado em Disco

Pronto em Disco

Observao: 1) Pergunta: Faz sentido existir o caminho de pronto para bloqueado? Resposta: No, porque a causa para ele bloquear um processo ele solicitar alguma coisa ao sistema operacional. E para que o processo solicite alguma coisa o mesmo tem que est em execuo. 2) Pergunta: Faz sentido existir o caminho de executando para pronto? Resposta: Sim, porque pode ter acabado o timelive. Mas, o trmino do timelive no a nica causa. Outra causa seria a sada do processo devido a um outro processo de alta prioridade entrando na fila de prontos, assim o sistema operacional ir retirar o processo de baixa prioridade de execuo e colocar o de alta prioridade para executar. 3) Pergunta: Como o sistema operacional sabe que acabou o timelive? Resposta: uma interrupo que ocorre de tempos em tempos. 4) Dentro do Windows tem uma chamada ao sistema operacional que chamada de GetMessage, o sistema operacional bloqueia o processo at que o usurio responda esta chamada e a o sistema operacional responde ao processo. A biblioteca Dephi esconde esta chamada, ele tem um case(swith) interno, condio, prevendo cada ao que o usurio vai fazer, em C o programador obrigado a fazer esta chamada, este swith em C o programador que faz. Concluso: O swap de processos utilizado como soluo da falta de memria. Exemplo: Passo 1) Depois de uma solicitao de execuo do processo P5 pelo usurio, o sistema operacional verifica a falta de memria para carregamento deste processo, este ento retira processo P1 da memria, por est bloqueado algum tempo e o coloca em disco, ocorre ento o swap do processo P1. Com isso, se abre espao em memria para o processo P5.

38 Passo 2) Quando o que o processo P1 estava aguardando termina ele vai para fila de prontos em disco. Caso a memria no seja liberada devido a um processo que passou de pronto para executando, o sistema operacional escolhe outro processo para sofrer swap, neste exemplo, o processo P3, liberando espao para que o P1 v para fila de prontos em memria. A ele poder ser escalonado para rodar. Memria SO P4 P3 P2 P1 P5 Memria SO P4 P3 P2 Passo 1 P5 P2 P1 Disco Nessa soluo precisa de soluo de software e um pouco de hardware, que o carregamento de processos em diferentes endereos de memria. Esta soluo s por software muito difcil. Por hardware fcil dar suporte ao programa voltar para a memria, porque, ele usa o registrador de base para controlar os endereos diferentes na memria. A grande vantagem que o programa no precisa fazer nada, fica tudo na responsabilidade do sistema operacional. O programa no se preocupa o problema da falta de memria. 2.3) Biblioteca compartilhada: Ela no resolve o problema ela evita que o problema ocorra, pois diminui a memria necessria aos processos e conseqentemente evita que a falta de memria ocorra. Esta soluo chamada de biblioteca compartilhada. Exemplo:Temos o arquivo fonte 1 ele passa pela fase de compilao e gera o arquivo objeto 1 e o mesmo acontece com o arquivo fonte 2 que tambm passa pela fase compilao e gera o arquivo objeto 2. Na fase da linkedio esses dois arquivos (arquivo objeto 1 e arquivo objeto 2) so unidos para gerar o arquivo executvel. E nesta fase da linkedio o arquivo objeto da biblioteca padro (rotinas disponibilizadas pela linguagem (C, Pascal)) tambm adicionado, e um pedao deste arquivo fica adicionado no executvel tambm. Mas, no mecanismo de biblioteca compartilhada o arquivo executvel no Memria SO

P4 P1 P2

Passo 2

P1 Disco

39 incorpora o cdigo da biblioteca padro, no replicando este cdigo no executvel. Um exemplo disso, tem-se no Windows, que so as DLLs(Dynamic Link Library).

Arquivo Fonte 1

Compilao

Arquivo Objeto 1 LinkEdio


Arquivo Executvel

Arquivo Fonte 2

Compilao

Arquivo Objeto 2

Pedao da Biblioteca Padro

Arquivo Biblioteca Padro

O sistema operacional carrega uma nica vez esta biblioteca padro na memria, disponibilizando-a para que os processos possam encontrar a rotina solicitada.. Por exemplo, quando o primeiro processo que usa biblioteca padro carregado, o sistema operacional carrega o processo e a biblioteca padro, neste nosso exemplo, P1 est sendo iniciado e precisa da biblioteca padro ento o sistema operacional carrega na memria P1 e a biblioteca padro e quando um segundo processo, P2, for carregado na memria e solicitar uma rotina da biblioteca padro esta j estar carregada na memria e ser compartilhada pelos processos P1 e P2. Com isso, o cdigo da biblioteca padro no replicado em todos os processos que usam a biblioteca padro. Este mecanismo o que chamamos de biblioteca compartilhada, um mecanismo que usa um link dinmico e no mais esttico como antigamente que acoplava uma parte da biblioteca padro no executvel. Memria SO P2 BP P1

40 Hoje em dia este mecanismo muito comum. O problema da biblioteca compartilhada a robustez. Isto porque, tem que ter carregado na memria todas as bibliotecas compartilhadas que o processo usa. Na linkagem da biblioteca padro esttica no ocorria a incorporao completa da biblioteca padro, o compilador reconhecia o que era utilizado de rotina da biblioteca padro e incorporava apenas essas rotinas utilizadas. Ento, esse mecanismo no chegava a ser completamente burro. 2.4) Paginao Sob Demanda: Permite uma forma melhor de evitar a falta de memria fsica. tambm chamada de memria virtual, mas a memria virtual j existia antes deste mecanismo. Digamos que faltou memria fsica para carregar um novo processo, ento o so pode escolher uma pgina fsica j alocada em memria e coloc-la em disco e carregar o processo novo nesta pgina que ficou disponvel. Por exemplo: Encheu a pgina fsica, o sistema operacional pega a pgina real nmero 2 e pode salvar esta pgina em disco e dizer que esta pgina agora est invlida. Assim, conseguiu abrir espao na memria fsica. A pgina disponvel ser alocada com o novo processo. Se esses mesmo processo precisar de uma parte que est na pgina lgica 4, o hardware vai tentar converter e verificar que esta est invlida e vai gerar uma interrupo, o so verifica que esta pgina lgica 4 vlida, mas ele acabou de salvar em disco, ento o so tem que trazer esta pgina de volta para memria. Ento se a memria esta cheia, ele escolhe uma outra pgina para salvar em disco, por exemplo, a pgina fsica 7, e o so carrega a pgina lgica 4 na pgina fsica 7 Esse mecanismo possui trs momentos: 1) O so abre espao na memria salvando a cdigo correspondente da pgina fsica 2 em disco; 2) O processo precisa desta pgina, o so escolhe uma outra pgina para salvar em disco, por exemplo, a pgina fsica 7; 3) Por ltimo, o so carrega o cdigo correspondente da pgina 2 na pgina 7 que estava em disco.

41

Espao de Endereamento Fsico

1 5 1 4 1 3 1 2 1 1 1 0 9 8 7 6 5 4 3 2 1

Tabela de Paginas
lgica 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 fsica Vlido 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1

2=>7 3 0

O fato da pgina est invlida chama-se falta de pgina.

2 3 1

Disco

A pgina escolhida para ser retirada da memria chamada de pgina vtima, no exemplo anterior a pgina de nmero 2 e 7. importante que o so escolha bem as pginas vtimas de forma que elas no sejam usadas no futuro pelo processo, essa seria a escolha ideal. A troca constante de disco para a memria pode deixar a mquina lenta, sendo que hoje esse mecanismo funciona bem. Esse mecanismo transparente tanto para o usurio quanto para o prprio processo. Outro Exemplo: A partir do seguinte cenrio, temos: Dois processos alocados P1 e P2. No P1 alocado a pgina lgica 0 e 1 para cdigo correspondente a pgina fsica 1 e 3, 2 para dados correspondendo a pgina fsica 0 e por ltimo 5 e 6 para pilha correspondendo a pgina fsica 5 e 7.

42 No P2 alocado a pgina lgica 0 para cdigo correspondendo a pgina fsica 2, 1 e 2 para dados correspondendo a pgina fsica 4 e 6 e por ltimo 7 e 8 correspondendo a pgina fsica 8 e 9. Segue abaixo os passos seguidos pelo so ao detectar falta de pgina: 1 Passo) O processo P2 obteve um aumento na rea de dados, como no tem mais pgina fsica, pois as 9 pginas existente neste exemplo j foram alocadas. O so salva em disco a pgina fsica 3 que corresponde a pgina lgica 1 do P1. Na tabela de pgina do processo P1 a pgina fsica 3 de invlida (1) passa para vlida (0) e na tabela de pgina do processo P2, adicionado a pgina fsica 3 correspondente a pgina lgica 3. 2 Passo) A pgina fsica 3 correspondendo a pgina lgica 3 do processo P2 fica invlida (1), ou seja, indisponvel. 3 Passo) A pgina colocada em disco, pgina lgica 1 de P1 foi solicitada por outra parte do processo P1, assim o so salva outra pgina em disco, e foi escolhida a pgina lgica 7 correspondendo a pgina fsica 9 do processo P2 para liberar espao na memria fsica. Na tabela de pgina a pgina lgica 7 correspondente a pgina fsica 9 fica vlida(0), disponvel para ser ocupada. 4 Passo) O so pega a pgina fsica 1 de P1 e coloca na pgina fsica 9 que est disponvel, e em seguida, na tabela de pgina ele coloca esta pgina como invlida(1). Veja o que foi descrito acima no esquema abaixo:

Cenrio do exemplo:
Espao de Endereamento Lgico ou virtual P1 Memria Real Espao de Endereamento Lgico ou virtual P2

9 8 7 6 5 4 3 2 1 0

pilha

dados cdigo

9 8 7 6 5 4 3 2 1 0

9 8 7 6 5 4 3 2 1 0

pilha

dados cdigo

43 1 Passo)
Memria Real

9 8 7 6 5 4 3 2 1 0

Tabela de Pginas P1
lgica 2 1 0 fsica 0 3 1 Vlido 1 1 => 0 1

Tabela de Pginas P2
lgica 3 2 1 0 fsica 0 -> 3 0 3 1 Vlido 0 1 1 1

44 2 Passo)
Memria Real

Espao de Endereamento Lgico ou virtual P2

9 8 7 6 5 4 3 2 1 0

9 8 7 6 5 4 3 2 1 0

pilha

dados cdigo

Tabela de Pginas P2
lgica 3 2 1 0 fsica 0 -> 3 0 3 1 Vlido 0->1 1 1 1

3 Passo)
Memria Real

9 8 7 6 5 4 3 2 1 0

Tabela de Pginas P2
lgica 7 fsica Vlido 0

Pgina lgica 1 de P1 Pgina lgica 7 de P2

4 Passo)
Memria Real

45

9 8 7 6 5 4 3 2 1 0

Tabela de Pginas P2
lgica 1 fsica 9 Vlido 1

Pgina lgica 1 de P1 Pgina lgica 7 de P2

Otimizaes: 1) No salvar pginas de cdigo: quando a pgina vtima for uma pgina de cdigo, ela no salva em disco, quando da sua retirada da memria fsica, pois ela j est no programa executvel (em disco); 2) O SO mantm um nmero mnimo de pginas livres: O SO ao identificar que vai ocorrer a falta de pgina ele pr-salva a pgina vtima liberando espao na memria. Se uma pgina vtima, por exemplo pgina lgica 7 de P2 foi salva em disco e em outro momento ela for escolhida novamente, desde que no houve alterao ento o SO no salva esta novamente em disco, pois a mesma j est salva; Exemplo: (1) O so salva pela primeira vez a pgina vtima 7; (2) A pgina vtima 7 voltou para memria agora em outra pgina memria fsica 5; (3) O so no salva a pgina vtima 7, pois a mesma no foi alterada. Como mostra a seqncia no esquema abaixo:

46 (1)
Memria Real

9 8 7 6 5 4 3 2 1 0

Espao de Endereamento Lgico ou virtual P2

Tabela de Pginas P2
lgica fsica Vlido 0 7

9 8 7 6 5 4 3 2 1 0

pilha

dados cdigo

Memria Real

(2)

9 8 7 6 5 4 3 2 1 0

Espao de Endereamento Lgico ou virtual P2

9 8 7 6 5 4 3 2 1 0

pilha

dados cdigo

47
Memria Real

(3)

9 8 7 6 5 4 3 2 1 0

Tabela de Pginas P2
lgica 7 fsica 5 Vlido 1 Alterada (ou sujo) 0

3) No salvar pginas que j foram vtimas e no foram alteradas

Tempo de Acesso a Memria = 100 ns Tempo de Acesso a Disco = 10 ms Tempo Mdio de Acesso a Memria = 10ms p + 100ns(1-p) 10 000 000 ns p + 100 (1-p) 100 + 10 000 000 p; onde: p = 0,000001 100 + 10 = 110 p = probabilidade de ocorrncia de falta de pgina. A escolha ideal para a pgina vtima pelo so a pgina vtima que no ser usada no futuro. Isso vai gerar pouca falta de pginas. A idia bsica olhar o passado para tentar prever o futuro. Princpio da Localidade: os processos tendem a usar as mesmas pginas em um determinado instante de tempo. Explicado pela estrutura em que o cdigo montado (rotinas com suas variveis locais). Assim, o so tenta manter em memria as pginas usadas a pouco tempo no passado,pois a tendncia de se usar estas pginas maior do que aquelas usadas num passado distante. - Algoritmos para escolha das pginas vtimas, ou seja, pginas que so escolhidas para serem salvas em disco: FIFO : A primeira pgina que entra na fila a primeira a sair timo : Escolhe a pgina que no ser usada em futuro prximo. No usado na prtica;

48 LRU (Least Recently Used): usado na prtica. escolhida a pgina usada mais recentemente para ir para o disco. Respeita o princpio da localidade 2 chance: Exemplo: Pginas Lgicas Usadas ao Longo do Tempo: 70120304230321201701 - FIFO:
Memria Fsica

04

21201701

2 1 0

7 0

7 0 1

2 0 1

2 3 1

2 3 0

4 3 0

4 2 0

4 2 3

0 2 3

0 1 3

0 1 2

7 1 2

7 0 2

7 0 1

12 Faltas de Pginas timo: 2 0 1 2 0 3 2 4 3 2 0 3 2 0 1 7 0 1

6 Faltas de Pginas LRU: 2 0 1 2 0 3 4 0 3 4 0 2 4 3 2 0 3 2 1 3 2 1 0 2 1 0 7

9 Faltas de Pgina - Passos percorridos pelo SO para utilizao de um dos algoritmos descritos acima: 1) O HW tenta fazer a converso de pgina lgica para pgina fsica, mas a pgina no vlida. HW gera interrupo; 2) SO identifica se a pgina pertence a alguma das reas do processo; 3) O SO encontra uma pgina fsica livre; 4) O SO envia ordem ao disco para ler a pgina; 5) O SO bloqueia o processo que gerou a falta e escalona outro processo (o que causou o bloqueio do processo? Tentar usar uma varivel que est numa pgina que no est na memria. Esse um tipo de bloqueio que no existia); 6) Quando a pgina for lida do disco gera interrupo; 7) O SO muda o estado do processo para pronto; - Finalizao dos passos descritos acima: A) SO escolhe uma pgina vtima; B) SO verifica se a pgina foi alterada; C) Caso tenha sido, o SO envia ordem ao disco para salvar a pgina;

49

Tabela de pginas
Valido Alterado Acessado

N pgina fsica

0 0 0 0 0 0 1 0 0

O LRU um algoritmo que no fcil de implementar, porque, o LRU significa uma ordem de quem vai usar por mais tempo, isso difcil de manter, pois, qualquer execuo faz com que a pgina seja a pgina mais recentemente usada, ento qualquer coisa que rode muda a ordem de uso da pgina. Existe uma alternativa de verificar o tempo de uso das pginas que no exatamente o LRU, uma forma de aproximar a idia do uso recente, mantendo a ordem exata de como a pgina foi usada. Como funciona? A tabela de pginas tem um campo a mais que o acessado, toda vez que uma pgina lgica acessada o hardware vai ao campo e muda o bit, por exemplo, se a pgina 8 for usada o hardware vai ao campo acessado e desliga o bit. Qual a idia bsica do uso do LRU? De tempos em tempos uma rotina executada e zera todos os bits de todas as pginas. Digamos que falte memria e o SO tenha que escolher uma pgina vtima, que tipo de pgina que o SO vai escolher? A pgina que est com o bit 0 em acessado ou a pgina com bit 1 em acessado? A pgina que est com bit 0, pois a pgina com bit 0 no foi acessada recentemente. Sabe-se, com isso, quem teve acesso recente, e quem no teve acesso recente. Ento, escolhe uma das pginas que no teve acesso recente. - Algoritmo da 2 chance: Problema: Tem muita pgina e se zerar todos os bits de tempo em tempo ter desperdcio de tempo. Tem outro mecanismo que mais eficiente: Para comear esto todos zerados ento, tem um ponteiro que vai passando e s anda quando tem falta de pgina. O ponteiro vai zerando os que no estiverem zerados. Divide pginas em pginas que tiveram acessos recentes e pginas que no tiveram recentes. Se a pgina no foi executada desde a ltima vez que o ponteiro passou por ela porque no teve uso recente. Se a pgina no foi acessada no teve uso recente. Escolhe um tempo de passagem e considera recente se no passou nesse tempo. Assim, se for um processo antigo ento pode ser vtima. O que acesso recente? De tempos em tempos o algoritmo zera tudo, ento o acesso recente o tempo que ele zerou desde a ltima vez que ele zerou todo mundo. o

50 momento que o ponteiro passou pela pgina pela ltima vez, se no teve uso nesse intervalo de tempo por que no teve uso recente.
A vtima que o ponteiro percorre O ponteiro esta passando pela pgina

recente

agora

- Algoritmo do relgio de 2 ponteiros: Cada ponteiro tem uma funo diferente, nessa verso existe um ponteiro que desce zerando o bit de validade. Digamos agora que vamos escolher uma pgina vtima o algoritmo vai rodando, a pgina pode ser vtima? No, pois o byte de validade 1(1 linha da tabela de pgina), ento o algoritmo vai rodando e desce o ponteiro, a linha de baixo pode ser vtima? Sim, ento essa vira vtima. O tempo recente o intervalo de tempo de passagem entre os ponteiros, com isso consegue-se medir o que recente, quanto mais distantes estejam os ponteiros, mais perto fica do que recente.
Percorre o ponteiro que o bit Passou o ponteiro que procura acessado a vtima

recente

Existe uma questo agora que a seguinte: Onde eu posso escolher a pgina vtima? Qual o conjunto de pginas que podem ser vtimas? Alocao de pginas fsicas: global (escolha de pgina vtima de qualquer processo) e local(escolha de pgina vtima de um nico processo) Difcil implementao: Local: Quantidade de pginas fsicas que sero reservadas a cada processo. Cada processo ter um n x de pginas fsicas reservada a ele, se um processo gera falta de pgina, incluir a pgina vtima entre as pginas fsicas reservadas a este processo. A maior dificuldade saber qual nmero de pginas fsicas que devem ser reservadas. Como o SO sabe quanto de pginas tem que reservar para cada processo, usando o princpio da localidade? O nmero de pginas que o processo esta usando chamado de working set, que constante em um certo intervalo de tempo, baseado no princpio da localidade. A idia definir com o n de pginas reservadas ao processo, o tamanho o tamanho do working set reservado a esse processo de forma que enquanto o processo estiver usando aquelas pginas, no haver falta de pginas. Existe um mecanismo que verifica se est sendo reservado o n de pginas maior ou menor que o working-set daquele processo. Esse mecanismo observa o n de falta de pginas que o processo gera. Se uns processos geram poucas falta de pginas porque est reservado para este processo um n de pginas que maior que o tamanho do working set, pois a falta de pgina s vai acontecer quando o working-set mudar. Por exemplo, uma rotina A, com m working set, so as pginas locais a rotina e a pgina da rea de cdigo da rotina, se esse processo da rotina A , chama um processo da rotina B, poucas pginas vo ser usadas, as pginas usadas

51 so as de cdigo e as de pilha da rotina B, ento mudou o working set. Quando o working set muda? Quando a rotina for chamada. - Alocao de pginas fsicas: - Global (Unix); - Local (Alocar um n de pginas fsicas maior ou igual do que tem o Working Set do processo NT); A alocao de pginas fsicas pode ser global ou local. Na Alocao global, no existe nmero de pginas por processo, qualquer pgina de qualquer processo pode ser escolhida como vtima, o processo pode receber pginas fsicas de outros processos que foram escolhidas como vtima. J na alocao local, existe um nmero de pginas por processo, ou seja, cada processo s pode receber como pgina vtima, pginas entre aquelas que foram destinadas a ele. Falta de pginas de um processo que necessite de pgina vtima, a pgina vtima tem que ser entre as destinadas a esse processo. O Windows NT tem um nmero mnimo e um nmero mximo de pginas, o processo no pode ter menos que o mnimo e mais que o mximo. A dificuldade do algoritmo para saber o nmero de pginas fsicas que devem ser alocadas para cada processo. Este nmero tem que ser maior ou igual ao working set do processo, nmero de pginas fsicas que o processo est usando em um certo instante de tempo. Se o SO conseguir alocar um nmero de pginas maior ou igual ao workingset do processo, a falta de pgina quase no vai existir, vai existir falta de pgina quando trocar o workingset do processo. Se o nmero de pginas fsicas for menor que o workingset do processo, vai ocorrer falta de pgina o tempo todo, pois uma pgina que foi escolhida como vtima dever ser usada logo em seguida, como no est na memria vai gerar falta de pgina. No tem como o SO saber o workingset do processo, o que ele faz observar o nmero de falta de pgina do processo, se esse nmero for grande, ele fica sabendo que o workingset do processo maior que o nmero de pginas fsicas que o processo tem. Para resolver isso, ele aumenta o nmero de pginas fsicas desse processo. Com isso, enquanto esse workingset no mudar e se j estiver todo na memria, no vai ocorrer falta de pgina para esse processo. A falta de pgina s ocorre quando trocar o workingset. Por outro lado, se o SO observar que o processo tem mais pginas fsicas que o workinkset, ele pode diminuir o nmero de pginas fsicas alocadas ao processo. O SO acompanha o nmero de falta de pgina dos processos. Exemplo: Tamanho do working set = 5 pginas lgicas, o so tem que alocar mais que isso: Pginas do working set = {3,4,8,9,12} 3 8 9 4 12

52 Como resolver a falta de pgina desse processo? Resposta: Aumentar o n de pginas fsica. Como saber o tamanho do working set ? Resposta: O so acompanha o n de pginas usadas por este processo. O que pode acontecer a mquina ficar muito lenta devido o n muito grande de falta de pgina. O que fazer? Resposta: Usar o Swap de Processos. Ele baixa o nmero de processo na memria. Um exemplo disso um processo comedor de memria, ou seja, um processo que aloque muita memria. Este tipo de processo acaba roubando pginas fsicas de outros processos. Isso chamado de trashing. Uma causa do trashing o processo comedor de memria, como descrito anteriormente, outra causa quando tem muitos processos (obs: 1% de falta de pgina j um nmero muito grande e o suficiente para acontecer isso).
Uso de CPU 100

1 2 3...

N DE PROCESSOS EM EXECUO

Uso de CPU 100

1 2 3 M M+ 1

N DE PROCESSOS EM EXECUO

Na alocao global, as pginas dele acabam roubando pginas de outros processos, j que no tem nmero de pginas de memria fsica reservada a cada processo.Como conseqncia, vai acontecer dos outros processos gerar falta de pgina tambm. Esta situao da mquina ficar lenta devido falta de pgina chamada de thrash, como descrito acima, as causas disso tambm j foram descritas acima: sendo a primeira quando um processo que necessita de muita memria, ou seja, o processo comedor de memria. A segunda so muitos processos em execuo, tendo muitos processos que alocam e usam, acaba acontecendo de ocupar toda a memria da mquina. Processos tpicos no usam a CPU o tempo todo (trocam de estado entre executando e bloqueado), quanto mais processos em execuo, mais vai ocupar a CPU, at chegar a 100% do uso da CPU com o aumento do nmero de processos. O descrito acima no se aplica a processos que ocupam a CPU o tempo todo, neste caso basta um processo para usar a CPU 100%.Isso ocorre se no considerar a existncia de falta de pgina. Com a

53 ocorrncia de falta de pgina, existe um nmero mximo de processos em execuo, passando desse nmero, como a memria no grande o suficiente, os processos vo ficar mais tempo paginando e conseqentemente o uso da CPU cai. Com a falta de pgina a CPU nunca usada 100%. Nesse ponto que o uso da CPU cai onde fica caracterizado o Thrash, onde a mquina comea a ficar lenta. Nesse ponto, quando coloca mais processo, mais a mquina fica lenta, menos CPU usada. O thrash pode acontecer nas duas formas de alocao, mas mais comum na alocao global de pginas fsicas, pois nesse tipo de alocao, pode acontecer de ter um nico processo que use muita memria. Se ele usar toda memria fsica da mquina, os outros processos no vo ter memria e vo ocasionar o thash. Com alocao local, isso no acontece to facilmente, pois cada processo tem o seu nmero de pginas fsicas reservado. Cada processo, normalmente, tem o nmero mnimo e mximo de pginas reservadas, se o processo alcanar o mximo, ele fica lento, mas os outros no. Com o tempo acaba provocando thrash, pois o SO vai dar mais pginas para esse processo, mas uma coisa mais controlada. O thrash ocorre mais facilmente em alocao global. O UNIX resolve o problema do thrash com swap de processo, ou seja, ele tira completamente o processo da memria, com isso, liberando pginas fsicas para os demais processos baixando o nmero de processos da memria, como descrito anteriormente. Quando se tm n processos, mas nenhum pronto para executar, o uso da CPU no total. Basta um processo estar em execuo para o uso da CPU ser total. Para o uso da CPU ser total o ideal que tenha sempre processos prontos para execuo. A falta de pgina provoca thrash porque bloqueia o processo, poucas faltas no afetam muito, mas se as faltas forem muitas podem provocar pouco uso da CPU. 2.5) Segmentao Sob Demanda: Tabela de Segmentao
Incio tamanho Vlido

O hardware passa a ter um novo bit, o bit de vlido. Quando ocorre falta de memria, o SO pega um segmento e salva em disco deixando ele como invlido. Se o processo tentar usar o segmento invlido, o hardware vai gerar uma interrupo para o SO, ento, o SO pega o segmento em disco e coloca outra vez na memria e seta o bit para vlido. conhecido como primo pobre da paginao, pois apesar de salvar em disco, os segmentos so bem maiores que as pginas, logo o tempo para salvar em disco e trazer do disco ser grande, bem maior que na paginao. Devido a isso bem menos eficiente que a paginao. O Windows 3.1x e o OS2 1.x usam segmentao sobre demanda.

54 2.6) Segmentao com Paginao: Tabela de Segmentao


Incio 0 1 2 3 tamanho

N Seg

Desloc Seg > +

Endereo
N da Pg Fsica Desloc na Pgina

Muito pouca vantagem. A vantagem poder rodar processos que gaste mais de 4GBytes de memria lgica.

Captulo 2 Entrada e Sada:


Intel; Interrupes de E/S; IN; OUT; Portas de E/S; Porta Serial - 2F8H 2FFH; Porta Paralela - 378H 37FH; Dispositivo de Disquete 3F0H 3F7H;

A idia mandar dados e o dispositivo faz alguma coisa com esses dados, por exemplo, o disco grava, a impressora imprime. Apenas o so que roda em modo ncleo pode mandar o dispositivo parar de funcionar ou no. Ou seja, apenas o so se comunica diretamente com o dispositivo.

SO Device Driver

55 No DOS os devices drivers fica configurado no arquivo de sistemas chamado CONFIG.SYS, por exemplo: Device = C:\DOS\KEYBORD.SYS -> configura o teclado. Exemplo fictcio: OUT 3F0H, 80H; ler algo do disco, ou seja, envio uma ordem a um dispositivo de sada. VOLTA: IN 3F1H AX; AX=0 no lido e AX0 lido; JZ VOLTA; enquanto for zero Onde: 3F0H porta de comando; 3F1H porta de status; A grande vantagem de fazer isso que a CPU fica pressa enquanto aguarda o dispositivo, no muda o estado. Esse tipo de E/S chamada de Espera Ocupada, serve apenas para mudar o estado.

Anda mungkin juga menyukai