segunda-feira, 6 de dezembro de 2010

Memórias x SO



Linux

Windows

Segmentação

Sim. O 2/6 versão do Linux utiliza segmentação apenas quando exigido pelo 80 x 86 arquitetura.
Todos os processos em execução no Linux usam o mesmo segmentos para abordar instruções e dados;

Sim.

Associa-se a cada área de memória um valor de base e um valor de limite base=endereço inicial, limite=endereço máximo ou tamanho.

Paginação

Sim. As primeiras versões do Unix funcionavam apenas com o swapping. Posteriormente (a partir do release 2.0, aparentemente) foi implementado o paging ao Unix System V. Os sistemas operacionais atuais não utilizam o processo de swap, apenas o Paging, mas é comum que se utilize apenas o termo Swapping (ou Swap) para a definição deste processo, sem a separação entre Paging e Swapping, tratando-os pelo mesmo nome, exceto quando se está estudando estes processos de maneira específica.

Sim. Paginação “Quebra” a memória do processo permitindo espaços de endereçamento não contíguos.

Swapping

Sim. Os sistemas operacionais atuais não utilizam o processo de swap, apenas o Paging, mas é comum que se utilize apenas o termo Swapping (ou Swap) para a definição deste processo, sem a separação entre Paging e Swapping, tratando-os pelo mesmo nome, exceto quando se está estudando estes processos de maneira específica.


Memória Virtual

Sim. Tanto no Linux quanto no Windows o conceito de memória virtual está presente.



Semelhança UCP e Segmentação




A arquitetura x86 em modo real e virtual 8086, usa um processo conhecido como segmentação de endereços de memória, não o modelo de memória plana, usado em muitos outros ambientes. Segmentação envolve a composição de um endereço de memória de duas partes, um segmento e um deslocamento; pontos do segmento até o início de um grupo de 64 KB de endereços, e o deslocamento determina o quão longe desse endereço iniciar o endereço desejado.

A unidade de gerenciamento de memória (MMU) verifica, a cada referência, se o deslocamento é menor que o tamanho do segmento. Se o limite for ultrapassado, é gerada uma exceção e o processo é terminado. Relocação e proteção são obtidas através de um só mecanismo:
if (deslocamento > limite) então { gera exceção } ;
endereço_efetivo = endereço_base + deslocamento ;

Fontes:
http://www.inf.ufpr.br/roberto/ci064/ci064a15.pdf
http://www.lac.inpe.br/~becceneri/arquivos/gerenciamento_de_memoria.ppt

domingo, 5 de dezembro de 2010

Gerenciamento de Memória: Comandos

Windows:

Na linha de comando do sistema operacional MS-DOS, o comando MEM é usado para mostrar informações sobre o uso da memória RAM.

Sintaxe

MEM

Opções
  • /p : Mostra o status dos programas que estão usando a memória.
  • /d : Mostra vários dados sobre o uso da memória pelos programas.
  • /c : Mostra o tamanho dos programas e os classifica de acordo com o uso da memória.
Exemplo:



Linux:

Comando Free

O comando free permite que você saiba o quanto de memória, cache e swap está sendo usado no momento pelo seu sistema.
Usando o comando "free -m" podemos ver os valores em Mbytes.

Neste caso temos um total de 2895MB de memoria, 2782 usados. Destes 47MB para buffer, 1388MB para cache de programas e o restante, 1347MB para cache de disco.O cache de disco nada mais é que trazer do HD para a memoria os arquivos/bibliotecas mais prováveis de serem acessadas. Funciona como um PREFETCH sobre o HD, que melhora o desempenho do sistema.


# free -m

Comando Grep

Com o grep pode-se verificar o quanto de memória total do sistema.

# grep MemTotal /proc/meminfo

Comando dmidecode

Com o dmidecode descubre-se algumas informações, como o máximo de memória que o sistema suporta.

# dmidecode -t 16
dmidecode 2.9 SMBIOS 2.31 present.
Handle 0×0009, DMI type 16, 15 bytes
Physical Memory Array
Location: System Board Or Motherboard
Use: System Memory
Error Correction Type: None
Maximum Capacity: 4 GBError Information Handle: Not Provided
Number Of Devices: 2

Comando Top

O comando "top" nos mostra informações gerais do sistema e um detalhamento da quantidade de memoria que cada processo está utilizando, alem de informações sobre a quantidade de memoria de todo sistema e da swap.


Fontes: http://pt.wikibooks.org/wiki/MS-DOS/Lista_de_comandos#MEM
http://diegofucitalo.blogspot.com/2008/11/alguns-comandos-para-verificar-memria.html

Tipos de Gerenciamento de Memória do Linux e Windows

Windows:
  • Paginação
  • Memória Virtual

O Linux usa exclusivamente a paginação
  • Em geral é implementada usando-se um único tamanho de página.
  • Em sistemas de 32 bits, o núcleo pode endereçar 4 GB de dados.
  • Em sistemas de 64 bits, o núcleo suporta no máximo 2 petabytes de dados.
  • Três níveis de tabelas de páginas.
  • Diretório global de páginas.
  • Diretório intermediário de páginas
Tabela de páginas
Em sistemas que suportam apenas dois níveis de tabelas de páginas, o diretório intermediário de páginas contém exatamente uma entrada.
O espaço de endereço virtual é organizado dentro de áreas de memória virtual para reunir informações com as mesmas permissões (semelhante aos segmentos).

Memória Virtual: Paginação por demanda e Algorítimos de Substituição de páginas

Paginação Sob Demanda:

É baseada na paginação simples:
– a memória lógica é dividida em páginas que podem ser
colocadas em qualquer quadro da memória física;
– a TP é usada para conversão de endereços lógicos em físicos

Na paginação por demanda apenas as páginas que o processo acessa são carregadas para a memória física. O bit de válido/inválido indica se a página já está presente na memória ou se ainda está no disco.

Na conversão de endereço lógico a MMU testa o bit de válido/inválido e se o bit for válido o endereço é
convertido e o acesso é executado normalmente
• caso contrário a MMU gera uma interrupção de proteção e aciona o SO
– o SO verifica se o acesso é a uma inválida (o processo deve ser abortado) ou a uma página que está no disco
– se o acesso é a uma página que está no disco (falta de página ou page fault), o SO:
• coloca o processo numa fila de processos esperando por página
• localiza um quadro livre
• localiza a página no disco
• agenda uma operação de leitura da página no disco

Enquanto um processo espera por uma página, a UCP é passada para outro processo
• quando a leitura da página for concluída, o SO:
– atualiza a tabela de páginas do processo
– recoloca o processo na fila de prontos
• quando o processo reassumir a UCP ele deverá reiniciar a execução que gerou a falta de página
• na paginação por demanda pura, uma página só é carregada para a memória quando é referenciada
• a parte do SO que carrega as páginas do disco para a memória é chamada de pager


Os algoritmos de substituição de páginas são políticas definidas para escolher qual(is) página(s) da memória dará lugar a página que foi solicitada e que precisa ser carregada. Isso é necessário quando não há espaço disponível para armazenar a nova página. Devemos ressaltar que se a página a ser removida sofreu alterações enquanto esteve na memória, a cópia virtual existente em disco deverá ser atualizada. Por outro lado, se a página não foi modificada significa que sua cópia está atualizada e, portanto, não é necessário reescrevê-la. Políticas de substituição de páginas devem ser utilizadas em sistemas que fazem uso de memória virtual paginada com o objetivo de melhorar o desempenho do sistema computacional.
Os algoritmos de substituição de páginas podem ser classificados, basicamente, em: algoritmos com espaço fixo e algoritmos com espaço variável. A diferença entre estes dois tipos de algoritmos é que o de espaço fixo trabalha sobre uma área de memória sempre constante, enquanto que os de espaço variável podem modificar o tamanho da memória alocada dinamicamente [CAS03].

Algoritmo de substituição de páginas FIFO O FIFO (First-in, First-out) é um algoritmo de substituição de páginas de baixo custo e de fácil implementação que consiste em substituir a página que foi carregada há mais tempo na memória (a primeira página a entrar é a primeira a sair). Esta escolha não leva em consideração se a página está sendo muito utilizada ou não, o que não é muito adequado pois pode prejudicar o desempenho do sistema. Por este motivo, o FIFO apresenta uma deficiência denominada anomalia de Belady: a quantidade de falta de páginas pode aumentar quando o tamanho da memória também aumenta.
Por estas razões, o algoritmo FIFO puro é muito pouco utilizado. Contudo, sua principal vantagem é a facilidade de implementação: uma lista de páginas ordenada pela “idade”. Dessa forma, na ocorrência de uma falta de página a primeira página da lista será substituída e a nova será acrescentada ao final da lista.

Algoritmo de substituição de páginas LRU
O LRU (Least Recently Used) é um algoritmo de substituição de página que apresenta um bom desempenho substituindo a página menos recentemente usada. Esta política foi definida baseada na seguinte observação: se a página está sendo intensamente referenciada pelas instruções é muito provável que ela seja novamente referenciada pelas instruções seguintes e, de modo oposto, aquelas que não foram acessadas nas últimas instruções também é provável que não sejam acessadas nas próximas. Apesar de o LRU apresentar um bom desempenho ele também possui algumas deficiências [CAS03] quando o padrão de acesso é sequencial (em estruturas de dados do tipo vetor, lista, árvore), dentro de loops, etc. Diante dessas deficiências foram propostas algumas variações do LRU, dentre eles destacamos o LRU-K. Este algoritmo não substitui aquela que foi referenciada há mais tempo e sim quando ocorreu seu k-último acesso. Por exemplo, LRU-2 substituirá a página que teve seu penúltimo acesso feito há mais tempo e LRU-3 observará o antepenúltimo e assim por diante.
A implementação do LRU também pode ser feita através de uma lista, mantendo as páginas mais referenciadas no início (cabeça) e a menos referenciadas no final da lista. Portanto, ao substituir retira-se a página que está no final da lista. O maior problema com esta organização é que a lista deve ser atualizada a cada nova referência efetuada sobre as páginas, o que torna alto o custo dessa manutenção.

Algoritmo de substituição de páginas Ótimo
O algoritmo ótimo, proposto por Belady em 1966, é o que apresenta o melhor desempenho computacional e o que minimiza o número de faltas de páginas. No entanto, sua implementação é praticamente impossível. A idéia do algoritmo é retirar da memória a página que vai demorar mais tempo para ser referenciada novamente. Para isso, o algoritmo precisaria saber, antecipadamente, todos os acessos à memória realizados pela aplicação, o que é impossível em um caso real. Por estes motivos, o algoritmo ótimo só é utilizado em simulações para se estabelecer o valor ótimo e analisar a eficiência de outras propostas elaboradas.

Algoritmo de substituição de páginas MRU
O algoritmo MRU (Most Recently Used) faz a substituição da última página acessada. Este algoritmo também apresenta algumas variações, semelhante ao LRU. Por exemplo, o MRU-n escolhe a n-última página acessada para ser substituída. Dessa forma, é possível explorar com mais eficiência o princípio de localidade temporal apresentada pelos acessos.

Algoritmo de substituição de páginas CLOCK
Este algoritmo mantém todas as páginas em uma lista circular (em forma de relógio). A ordem mantida segue a seqüência em que elas foram carregadas em memória. Além disso, é adicionado um bit de uso que indica se a página foi referenciada novamente depois de ter sido carregada. Ao precisar substituir uma página o algoritmo verifica se a página mais antiga está com o bit zerado (o que significa que a página não foi mais referenciada) para ser substituída. Se ela não estiver o bit é zerado e a próxima página da fila mais antiga será verificada. Esse processo continua até que uma página antiga com o bit zerado seja encontrada para ser substituída.

Algoritmo de substituição de páginas NRU
O algoritmo NRU (Not Recently Used) procura por páginas que não foram referenciadas nos últimos acessos para serem substituídas. Tal informação é mantida através de um bit. Este algoritmo também verifica, através de um bit de modificação, se a página teve seu conteúdo alterado durante sua permanência em memória. Esta informação também vai ajudar a direcionar a escolha da página. As substituições das páginas seguem a seguinte prioridade: páginas não referenciadas e não modificadas, páginas não referenciadas, páginas não modificadas e páginas referenciadas e modificadas.

Algoritmo de substituição de páginas LFU
O LFU (Least Frequently Used) escolhe a página que foi menos acessada dentre todas as que estão carregas em memória. Para isso, é mantido um contador de acessos associado a cada página (hit) para que se possa realizar esta verificação. Esta informação é zerada cada vez que a página deixa a memória. Portanto, o problema desse algoritmo é que ele prejudica as páginas recém-carregadas, uma vez que por estarem com o contador de acessos zerado a probabilidade de serem substituídas é maior. Qual uma possível solução para este problema? (Estabelecer um tempo de carência) Só páginas fora desse tempo é que podem ser substituídas. Tal estratégia deu origem ao algoritmo FBR (Frequency-Based Replacement).

Algoritmo de substituição de páginas MFU
O MFU (Most Frequently Used) substitui a página que tem sido mais referenciada, portanto, o oposto do LFU. O controle também é feito através de contadores de acesso. O maior problema deste algoritmo é que ele ignora o princípio de localidade temporal.

Algoritmo de substituição de páginas WS
O algoritmo WS (Working Set) possui a mesma política do LRU. No entanto, este algoritmo não realiza apenas a substituição de páginas ele também estabelece um tempo máximo que cada página pode permanecer ativa na memória. Assim, toda página que tem seu tempo de permanência esgotado ela é retirada da memória. Portanto, o número de páginas ativas é variável. O WS assegura que as páginas pertencentes ao working set processo permanecerão ativas em memória.
Os algoritmos apresentados são alguns dos disponíveis na literatura. Outras implementações ou variações dos destacados aqui podem ser encontradas também [CAS03].

Fontes:

[CAS03] CASSETTARI, H. H. Análise da Localidade de Programas e Desenvolvimento de
Algoritmos Adaptativos para Substituição de Páginas. Qualificação de Mestrado. Escola
Politécnica da Universidade de São Paulo. Departamento de Engenharia de Computação e
Sistemas Digitais. 2003.

Memória com Paginação: Diferença entre endereço lógico e endereço físico

A memória física é dividida em blocos de tamanho fixos denominados molduras de páginas (page
frames). Já a memória lógica é dividida em blocos de tamanho fixos denominados páginas
(pages). As páginas e as molduras de páginas são sempre do mesmo tamanho.

Quando um programa tenta usar uma página virtual que não está mapeada é gerada uma interrupção da CPU para o sistema operacional a fim de buscar esta página na memória. Esta interrupção (trap) é denominada falta de página (page fault). As ações desencadeadas são: o sistema operacional escolhe uma moldura de página (page frame) pouco usada e a salva em disco. Em seguida, carrega a página virtual referenciada pela instrução na moldura de página que foi liberada. Feito isso o sistema operacional pode reinicializar a instrução causadora da interrupção.

Swap: Criação na instalação de um S.O.

Sobre a memória Swap no momento da instalação de um Sistema Operacional:

No Windows, o usuário nem tem como modificar a memória swap.

No Linux, a instalação é obrigatória, caso você não faça, o Linux por default faz e define os valores para tal e isso é importante pois no Linux conforme mais e mais memória física vai sendo ocupada, o sistema vai abrindo mão do cache de disco para liberar memória para os aplicativos. Com o passar o tempo, alguns dados relacionados a programas que estão ociosos a muito tempo começam a lentamente serem movidos para a memória cache, fazendo com que o sistema recupere parte do espaço e volte a fazer cache de disco.
Related Posts Plugin for WordPress, Blogger...