segunda-feira, 27 de junho de 2011

Gerência de Memória

Devido aos Sistemas Operacionais apresentarem características variadas, determinados procedimentos tornam-se por vezes semelhantes ou próprios de cada Sistema. O gerenciamento de memória é um procedimento fundamental na objetividade de todos os Sistemas Operacionais.


A maioria dos computadores trabalha com o conceito de hierarquia de memória, possuindo uma pequena quantidade de memória  cachê, muito rápida,  uma quantidade de memória principal (RAM) e uma quantidade muito grande de memória de armazenamento em disco (HD), considerada lenta.

A memória é um dos itens mais importantes dentro de um computador, por isso a importância de um bom gerenciamento.

Gerenciamento (ou gestão) de memória é um complexo campo da ciência da computação e são constantemente desenvolvidas várias técnicas para torná-la mais eficiente. Em sua forma mais simples, está relacionado em duas tarefas essenciais:
  • Alocação: Quando o programa requisita um bloco de memória, o gerenciador o disponibiliza para a alocação;
  • Reciclagem: Quando um bloco de memória foi alocado, mas os dados não foram requisitados por um determinado número de ciclos ou não há nenhum tipo de referência a este bloco pelo programa, esse bloco é liberado e pode ser reutilizado para outra requisição.
ou melhor

      Os que não realizam paginação ou troca entre disco e memória
      O que não realizam este processo

O ideal seria, uma memoria que não precisasse deste artificios, uma memoria rapida, de grande capacidade e a um custo pequena. o que não acontece.

 O que se ve são varios tipos de memoria trabalhando paralelamente com os recursos computqacionais.

Assim,  devido a suas similariedade e caracteristicas distintas, as melhorias precisam de um meio para que possoam ser gerenciadas da melhor forma possivel. 

É uma estrutura que possui uma hieraquia devido suas caracteirsticas e atividades desenvolvidas.


  1. Cache (rapida e pequena, volatil, custo alto)
  2. RAM (velocidade media, tamanho medio e volatil, custo medio)
  3. Memorias Secundarias (velocidade lenta, tamanho grande e não volatil, custo baixo)
Tambem quando discutimos sobre gerencimento de memoria(GM), vimos que, apesar de seu crecimento exponencial com o tempo, cada vez temos mais memorias nos computadores modernos, temos do outro lado os programas cada vez mais exigentes com espaço, ou seja, cada vez temos programas maiores que a memoria disponivel.

A tendencia é que, com as interfaces graficas, os programas ocupem ainda mais as memorias. É um problema para os projetistas de Sistemas Operacionais que devem prever mecanismo de Gerenciamento de memoria mais eficientes possiveis.

 Outra questão esta realcionada as modalidades de programação distinta, tais como:

Monoprogramação sem troca de processos ou paginação

Um esquema mais simples de gerenciamento de memoria, onde a memoria é compartilhada entre o SO e os programas.

Podemos neste caso, possui tre configurações:


A 1ª configurações esteve presente nos Mainframes ou computadores de grande porte
A 2ª esta presente nos palmtops e outros computadores de mão
E a 3ª configuração esteve presente nos sistemas MS-DOS


Multiprogrmação com partições fixas


Atualmente, a monoprogramação não é mais utilizada, hoje, se um processo fica bloqueado esperando um recurso de E/S, outro processo podera esta utilizando a CPU naquele instante. Em sistemas Operacionais de rede, com varios usuários startando processos, isto bem evidente.

Esta habilidade presente somente neste sistemas operacionais rede, agora tambem faz parte dos sistemas dos usuários.

Como isso acontece, é realizado a divisão da memoria em n partições que pode ser feita manualmente. Quando um job chega, há duas possibilidades: ele é colocado em uma fila de entrada da menor partição capaz de armazená-lo ou ele é colocado em uma fila de entrada única.

 Como o tamanho das partições são fixas, se um job não ocupar todo o espaço da partição, este é pedido

Troca de Processos

Em sistemas computacionais modernos, usualmente, não há memória principal suficiente para armazenar os processos atualmente ativos. Desta forma, os processos excedentes são mantidos em disco e trazidos para a RAM quando necessário. Há duas formas de resolver este problema: troca e memória virtual, (sendo a última explicada posteriormente).

A operação de troca consiste em manter na memória alguns processos por um determinado período e, a seguir, trocar estes processos pelos demais que estão esperando em disco. A partição utilizada para cada processo pode ser fixa ou definida dinamicamente (de acordo com o tamanho do processo). Durante a operação de troca, é possível surgirem lacunas de memória que podem ser reunidas em um espaço maior através da técnica de compactação de memória.

No entanto, a atribuição dinâmica de memória conduz a um problema adicional: o gerenciamento de memória em relação a quais parcelas estão em uso e/ou quais estão livres. Existem duas formas de resolver este problema.

Gerenciamento de Memória com Mapas de Bits

Com mapas de bits, a memória é dividida em unidades de alocação. Cada bit do mapa representa uma unidade de alocação, sendo que se o bit for 0, a unidade está livre; caso contrário, a unidade está ocupada. Quanto menor for a unidade de alocação, maior será o mapa de bits e vice-versa. O maior problema com os mapas de bits é que procurar uma lacuna (seqüência de 0s) suficientemente grande para um determinado processo pode ser uma operação muito lenta.

Gerenciamento de Memória com Listas Encadeadas

Neste caso, é mantida uma lista encadeada com os segmentos de memória livres e encadeados. Uma possível configuração seria manter, em cada entrada, o endereço em que inicia, o seu comprimento e, evidentemente, o ponteiro para a próxima entrada.

Memória Virtual

Quando os programas excedem o espaço de memória física disponível para eles, é possível dividir o programa em pedaços chamados overlays. No entanto, isto exige que o programador seja responsável por esta divisão. De forma a facilitar o desenvolvimento de programas, passando esta tarefa para o Sistema Operacional, foi criado o método conhecido como Memória Virtual.

A idéia básica da memória virtual é que o tamanho combinado do programa, dos seus dados e da pilha pode exceder a quantidade de memória física disponível para ele, ou seja, neste caso, a simples troca, vista anteriormente, não resolveria o problema. O Sistema Operacional, então, mantém partes do programa atualmente em uso na memória principal e o restante em disco.

Paginação

Em qualquer computador, existe um conjunto de endereços que um programa pode produzir. Estes endereços gerados por programas são chamados endereços virtuais e formam o espaço de endereço virtual.

A MMU (Memory Management Unit) é responsável por mapear os endereços virtuais para endereços físicos de memória, sendo que consiste de um chip ou uma coleção de chips.
O espaço de endereço virtual é dividido em unidades chamadas páginas. As unidades correspondentes na memória física são chamadas molduras de página. As páginas e as molduras têm sempre exatamente o mesmo tamanho.

No espaço físico (memória) tem-se várias molduras de página. Por exemplo, podem existir 05 páginas situadas no espaço de endereço virtual que são mapeadas na memória física. No entanto, o espaço de endereço virtual é maior que o físico. As outras páginas não são mapeadas. No hardware real, um bit presente/ausente em cada entrada monitora se a página é mapeada ou não
.
Quando um programa tenta utilizar uma página não mapeada em uma moldura, a MMU detecta o acontecimento (que a página não está mapeada) e gera uma interrupção, passando a CPU para o Sistema Operacional. Tal interrupção é chamada falha de página. O S.O., então, seleciona uma moldura de página pouco utilizada e grava o seu conteúdo de volta ao disco, substituindo-a pela página requisitada.

Exercicio

1) Quais as duas principais funções de um Sistema Operacional?
2) O que é multiprogramação? Cite duas razões para se ter multiprogramação?
3) O que é Spooling?
4) Defina as propriedades essenciais dos seguintes tipos de Sistemas Operacionais:
a. Batch
b. Time-Sharing
c. Tempo-real
d. Distribuído
6) Porque sistemas distribuídos são desejáveis?
7) Qual é o propósito das chamadas de sistema?
8) O modelo cliente-servidor é popular em sistemas distribuídos. Ele pode ser usado em um sistema single-computer?
















      











    Nenhum comentário:

    Postar um comentário