AULA7 - WordPress.com

Transcrição

AULA7 - WordPress.com
INSTITUTO MÉDIO POLITÉCNICO
CURSO: INFORMÁTICA
5º SEMESTRE
ANO LECTIVO:2013
CADEIRA: SISTEMAS OPERATIVOS
Docente: Geraldina dos Santos Castelo
Gestão manual de memória
Em modelos de gestão manual, podem ocorrer os problemas conhecidos como vazamento de memória, que acontece quando uma quantidade de
memória é alocada e não é liberada ainda que nunca seja utilizada. Isto ocorre quando objectos perdem a referência sem terem sido liberados,
mantendo o uso do espaço de memória.
Garbage Collector
É a gestão automático de memória, também conhecido como coletores, sendo conhecido em Portugal como reciclagem automática de memória.
Este serviço libera os blocos de memória que não sejam mais usados por um programa automaticamente. É oposto a gestão de memória manual,
a alocação explicita e a desalocação dos recursos de memória do computador.
As vantagens desse tipo de gestão são:



Liberdade do programador: Não é obrigado ficar atento aos detalhes da memória;
Menos bugs de gestão de memória: Por se tratar de uma técnica mais confiável;
gestão automático: Mais eficiente que o manual;
E entre as desvantagens, podemos citar:


O desenvolvedor tende a estar mais desatento em relação a detalhes de memória;
O gestor automático ainda apresenta limitações.
Quando deixam de existir referências a um objeto, este passa a ser considerado apto a ser "coletado" pelo garbage collector, que significa dizer
que será removido da memória, deixando-a livre para uso por outros objetos.
Os algoritmos de garbage collection operam de um modo que permite classificá-los em duas grandes famílias:


Identificação Direta: por contagem de referências (reference counting);
Identificação Indireta: por varrimento (tracing), que pode incluir também compactação da memória livre; cópia; ou geracional (utilizado
nas máquinas virtuais Java e .Net)
Gestão de memória no DOS
O IBM PC original foi projetado com uma memória RAM de 1024KB

640KB
o

Para o sistema operacional e programas
384KB - área de memória superior (Upper Memory Area) ou UMA
o Para os adaptadores diversos como EGA & VGA, MDA, adaptadores CGA, e de redes.
o ROM BIOS e Shadow RAM.
o E mais tarde, área de paginação de expansão de memória (EMS) vista mais adiante.
Logo depois, foi provado que esta quantidade de memória se tornaria insuficiente para as necessidades futuras.
Entretanto, os sistemas operacionais e aplicativos desenvolvidos até então não seriam capazes de reconhecer um endereço de memória superior
aos 640KB originais, o que levou os projetistas a desenvolverem ferramentas que executariam esta tarefa.
Emm386.exe
O nome "EMM" vem do inglês Extended Memory Manager.
É o dispositivo de instalação da memória expandida (Expanded Memory) ou EMS. A EMS consistia em toda a memória acima dos 1024KB
(1MB) original, em computadores baseados nas tecnologias dos processadores 80286, 80386, i486 ou Pentium. A capacidade máxima de
endereçamento fica limitada a 32MB e seu acesso é através de uma paginação de 64KB na área UMA. Os programas deveriam ser escritos de
forma a poderem reconhecer a área EMS.
Himem.sys
O nome Himem vem do inglês High Memory.
É o dispositivo de instalação da área de memória alta (High Memory Area), conhecida também como HMA. Sua principal função é controlar o
uso da memória estendida do computador, de modo que dois ou mais aplicativos ou dispositivos não utilizem o mesmo endereço de memória ao
mesmo tempo. Para as primeiras versões do Windows, o Himem.sys fornecia suporte para que este fosse executado em modo protegido.
Smartdrv.exe
É gestor de memória cache de disco (no Novell DOS 7, é chamado de Nwcache.exe). Ambos possuem a mesma função que é a de minimizar o
acesso ao disco, carregando um bloco de informações na memória para processamento, ao invés de ir buscar aos poucos no disco. Existiram
também placas de expansão chamadas de Disk Accelerator, que possuem um hardware próprio para esta tarefa, como por exemplo o 'Disk
Accelerator PROMISE DC4030VL. Atualmente, esta técnica é desempenhada por memórias localizadas na placa principal do sistema (cache onboard) resultando, portanto, dois modos de gerenciamento de memória cache de disco: por software e por hardware.
O nome Smartdrv é uma abreviação do inglês Smart Drive.
HIERARQUIA DA MEMÓRIA
Se refere a uma classificação de tipos de memória em função de desempenho. Esta hierarquia é tradicionalmente representada por uma pirâmide.
A base da pirâmide representa dispositivos de armazenamento de massa, de baixo custo por byte e, comparativamente, baixa velocidade de
acesso. O preço baixo faz com que esse tipo de armazenamento esteja disponível em grandes volumes. Um exemplo é o DVD.
No topo da pirâmide encontram-se dispositivos extremamente velozes e, ao mesmo tempo, de custo elevado. Exemplo são células de memória 6T
usadas na construção de memória cache. Devido ao alto preço, esse tipo de memória aparece em máquinas em pequenas quantidades
As restrições de projeto de uma memória podem ser resumidas em três questões: capacidade, velocidade e custo. A questão referente à
capacidade é, de certo modo, indefinida. Qualquer que seja a capacidade disponível, provavelmente serão desenvolvidas novas aplicações que a
utilizem integralmente. A questão relativa à velocidade tem, de certa maneira, uma resposta mais fácil. Para obter um melhor desempenho, a
velocidade da memória deve ser compatível com a do processador. Ou seja, o processador não deve ficar ocioso esperando que instruções ou
operandos sejam buscados na memória durante a execução de instruções. A questão sobre o custo também deve ser considerada. Para que um
sistema seja comercialmente viável, o custo da memória deve ser compatível com o dos demais componentes. Como se poderia esperar, as três
características principais da memória – custo, capacidade, tempo de acesso – são conflitantes. Uma variedade de tecnologias é utilizada para a
implementação de sistemas de memória. Ao longo desse espectro de tecnologias, valem as seguintes relações:



Tempo de acesso mais rápido, custo por bit maior.
Capacidade maior, custo por bit menor.
Capacidade maior, tempo de acesso menor.
As características usadas para classificar diferentes tipos de memória são basicamente sua capacidade de armazenamento, tempo de acesso, taxa
de transferência, custo, etc. Outros fatores também podem ser analisados, como por exemplo seu consumo de energia e sua durabilidade, e
finalmente para se fazer uma comparação entre memórias, é preciso ter em mente que aplicação a memória terá.
Usando como exemplo uma comparação de tempo de acesso, poderíamos organizar a seguinte sequência: Registrador ←> Cache ←> Memória
RAM ←> Memória secundária
Sendo:





Registrador: Memória temporária usada pelo processador no processamento das instruções.
Eprom/Rom: Memória onde se guardam as instruções de inicialização dos computadores.
Cache: Armazena partes da memória principal que são usados frequentemente pelos programas.
Memória RAM: Memória principal do computador, sendo diretamente endereçavel pelo processador.
Memória secundária: Memória de armazenamento permanente.
Multiprogramação com Partições Fixas
É usada em sistemas embarcados simples. Muitos dos programas modernos permitem que múltiplos processos executem simultâneamente, ou
seja, quando um processo for bloqueado, outro poderá usar a CPU aumentando a sua utilização. O melhor jeito de realizar a multiprogramação
consiste em dividir a memória em n partições de tamanhos diferentes que podem ser criadas manualmente ao iniciar o sistema. Ao chegar no
sistema, um job é colocado em uma fila de entrada juntamente associada à menor partição existente, porém que seja grande o suficiente para
armazená-lo e, como o tamanho dessas devidas partições são fixas, todo espaço que não é usado pelo job na partição será perdido. Quando jobs
estão chegando torna-se evidente quando a fila para uma grande partição está vazia, mas a fila para uma pequena partição está cheia, nesse caso
os jobs pequenos terão que esperar para que a memória seja liberada, mesmo que exista memória disponível. O modo correto é manter uma fila
única, sempre que a partição se torna disponível, o job que se encontra mais próximo do início da fila e que caiba na partição pode ser nela
executado. Para que não haja um total desperdício de grandes partições com jobs pequenos, o ideal seria pesquisar em toda a fila de entrada e
alocar a partição disponível ao maior job que nela possa ser carregado. Para que os jobs pequenos possam também serem executados sem
desperdiçar partições maiores, seria necessária a criação de ao menos uma partição pequena.
Troca de Processos
Em sistemas em lote, a memória é organizada em partições fixas. Em cada partição cada job ou processo é carregado ao alcançar o inicio da fila
permanecendo até a conclusão de sua execução. Para garantir que a CPU esteja ocupada todo tempo é executado um determinado número de
jobs, assim não necessitando utilizar uma outra técnica mais complicada. Há uma diferença em sistemas com compartilhamento de tempo ou
computadores gráficos pessoais, pois nesses casos pode ocorrer é insuficiente a quantidade memória principal para todos os processos ativos,
sendo necessário armazenar o excedente em discos e trazidos dinâmicamente para a memória quando precisarem ser executados.
Troca de Processos e Memória Virtual
São dois métodos usados para gerenciamento de memória utilizados conforme os recursos de hardware disponíveis . Troca de Processos (também
chamado swaping) : Esse método trabalha trazendo cada processo para memória, e executa durante um tempo determinado e então devolve ao
disco.


Alocação de espaço para uma área de dados em expansão.
Alocação de espaço para uma pilha e uma área de dados, ambos em expansão.
Memória Virtual
Já esse método permite que programas sejam executados mesmo que estejam apenas parcialmente carregados na memória principal.
Partições fixas e Partições variáveis: As principais diferenças são o tamanho e a localização das partições que variam conforme os processos
entram e saem da memória nas partições variáveis, enquanto que nas partições fixas os parâmetros são fixos. Nas trocas de processos quando
deixam muitos espaços vazios na memória, há a possibilidade aglutiná-los em único espaço contíguo de memória, movendo-os o máximo
possível para os endereços mais baixos. Técnica denominada compactação de memória. No entanto não é muito utilizada pelo tempo de
processamento necessário considerado alto. Algo que deve ser dado uma devida importância é a quantidade de memória que deve ser alocada a
um processo, quando for criado ou trazido do disco para memória. Se o processo possuir tamanho fixo, inalterável, então o processo de alocação
torna-se simples: o sistema operacional alocará o espaço necessário. No entanto, na área de dados que o processo puder crescer, é alocado uma
área temporária denominada (heap). Se houver espaço disponível ao processo, ele poderá ser alocado a esse determinado processo. Quando os
processos puderem ter duas área de expansão, a área de dados sendo usada como área temporária (heap) para variáveis dinamicamente alocadas e
liberadas, e uma área de pilha para variáveis locais e para endereços de retorno.
Multiprogramação com partições variáveis
O espaço de endereçamento de cada processo precisa ser contíguo (i.e. contínuo) para que se possa implementar o mecanismo de proteção
descrito acima usando os registradores base e limite.
A tendência é de que a memória apresente vários espaços vazios (buracos) ao longo do tempo. Compactação de memória: lento (ainda que em
memória RAM). A quantidade de memória exigida por um processo pode crescer durante a sua execução:


Malloc = memória "heap".
Pilha do programa = ao executar funções, os endereços de retorno e as variáveis locais são armazenadas na pilha do programa.
O SO reserva espaço extra para expansão a cada processo ao seu carregado na memória. Se o espaço previsto for insuficiente:



O processo é abortado;
O processo é deslocado para outro espaço livre maior;
Outro processo é enviado ao disco para liberar a memória para o processo originário da demanda.
Gestão de memória com Mapa de bits
O SO mantém um 1 bit para indicar se cada bloco da memória (ou unidade de alocação) está ocupado (1) ou livre (0). A Memória é dividida em
unidades de alocação Considerações sobre o tamanho do bloco de memória:


Quanto menor a unidade de alocação, maior será o mapa de bits.
Pequeno: necessidade de muitos bits ⇒ uso ineficiente da memória.
Exemplo: se tamanho do bloco = 1 byte, 1/9 da memória serão utilizados para o mapa de bits.

Grande: memória sub-utilizada, pois se o tamanho do processo não for múltiplo do tamanho da unidade de alocação, uma quantidade de
memória considerável será desperdiçada no último bloco.
Vantagens do uso de mapa de bits:

simplicidade: o tamanho do mapa depende apenas do tamanho da memória e das unidades de alocação.
Desvantagens:

Quanto um processo necessita de k unidades de alocação, o gerenciador de memória deve encontrar uma sequência de k bits 0, o que se
constitui um processo lento.
Gestão com Listas Encadeadas
É mantido uma lista encadeada de segmentos alocados e livres, sendo que cada segmento é um processo ou um buraco entre dois processos. A
lista apresenta-se em ordem de endereços, e quando um processo termina ou é enviado para o disco, e a atualização da lista ocorre da seguinte
maneira: cada processo, desde que não seja nem o primeiro nem o último da lista, apresenta-se cercado por dois segmentos, que podem ser
buracos ou outros processos, o que nos dá as quatro possibilidades . O SO mantém uma lista ligada para indicar os segmentos de memória
(sequência de blocos) livres (L) ou ocupados (P). Cada nó contém os seguintes campos:




Segmento de memória livre (L) ou ocupado (P);
Início do segmento;
Tamanho do segmento (em número de blocos);
Próximo segmento.
A lista ligada pode estar ordenada pelo campo início do segmento (vantagem da atualização rápida da lista quando um processo termina):




AXB ⇒ A_B
AX_ ⇒ A__
_XB ⇒ __B
_X_ ⇒ ___
Os buracos adjacentes devem ser combinados num único. Para escolher o ponto em que deve ser carregado um processo recém criado ou que
veio do disco por uma troca, vamos utilizar alguns algoritmos assumindo que o gerenciador de memória sabe quanto espaço alocar no processo:
- First Fit (primeiro encaixe): percorrer a fila até encontrar o primeiro espaço em que caiba o processo. É um algoritmo rápido.
- Next Fit (próximo encaixe): o mesmo que o algoritmo anterior, só que ao invés de procurar sempre a partir do início da lista, procura a partir do
último ponto em que encontrou. Desempenho próximo ao anterior.
- Best Fit (melhor encaixe): consiste em verificar toda a lista e procurar o buraco que tiver espaço mais próximo das necessidades do processo. É
mais lento, e desempenho pior que o First Fit.
- Worst Fit (pior ajuste): pega sempre o maior buraco disponível. Desempenho ruim.
Esses algoritmos podem ter sua velocidade aumentada pela manutenção de duas listas separadas, uma para processos e outra para buracos.
Quando temos duas listas separadas, outro algoritmo é possível. É o Quick Fit (ajuste rápido), que consiste em manter listas separadas para
alguns dos tamanhos mais comuns especificados (ex. uma fila para 2k, outra para 4k, outra para 8k etc). Neste caso, a busca de um buraco com o
tamanho requerido, é extremamente rápido, entretanto, quando um processo termina, a liberação de seu espaço é complicada, devido à
necessidade de reagrupar os buracos e modificá-los de fila.

Documentos relacionados