Gerência de Memória
Autor: Cios Informática | Publicado: 2011-06-27T19:42:00-07:00

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 &nbsp;cachê, muito rápida, &nbsp;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
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Os que não realizam paginação ou troca entre disco e memória&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 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. 
&nbsp;O que se ve são varios tipos de memoria trabalhando paralelamente com os recursos computqacionais.

Assim,&nbsp; devido a suas similariedade e caracteristicas distintas, as melhorias precisam de um meio para que possoam ser gerenciadas da melhor forma possivel.&nbsp;
 
É uma estrutura que possui uma hieraquia devido suas caracteirsticas e atividades desenvolvidas.


Cache (rapida e pequena, volatil, custo alto)
RAM (velocidade media, tamanho medio e volatil, custo medio)
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.

&nbsp;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 porteA 2ª esta presente nos palmtops e outros computadores de mãoE 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.

&nbsp;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 ProcessosEm 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 BitsCom 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 EncadeadasNeste 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 VirtualQuando 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çãoEm 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?

















&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;