Diferenças entre edições de "Memória virtual"

56 bytes adicionados ,  03h09min de 24 de maio de 2015
sem resumo de edição
m (Reversão de uma ou mais edições de 177.132.212.42 para a versão 41525968 de Vitor Mazuco, com Reversão e avisos.)
 
== História ==
Todos os computadores modernos de uso genérico utilizam memória virtual para executar a mais simples das aplicações, tais como [[Processador de texto|processadores de texto]], [[Folha de cálculo|folhas de cálculo]], [[Videogames|jogos]], [[Leitor multimídia|leitores multimídia]], etc. Os [[SO|sistemas operacionais]] mais antigos, como o [[DOS]] e o [[Microsoft Windows]] de 1980,<ref>{{Citar web|url=http://support.microsoft.com/kb/32905 |título=Windows Version History |acessodata=2008-12-03 |publicado=Microsoft |data=Last Review: July 19, 2005 }}</ref> ou os [[mainframe]]s da década de 1960, geralmente não tinham a funcionalidade da memória virtual, com as excepções notáveis do [[Atlas B5000]] e o [[Apple Lisa]].
 
A memória virtual foi inicialmente criada para possibilitar a um programa ser executado em um [[computador]] com uma quantidade de memória principal (física) menor que o tamanho de todo o espaço utilizado pelo próprio programa.<ref name="denning">{{cite journal| authorlink = Peter J. Denning| last = Denning| first = Peter| title = Before Memory Was Virtual| journal = In the Beginning: Recollections of Software Pioneers| year = 1997| url = http://cs.gmu.edu/cne/pjd/PUBS/bvm.pdf |format=PDF}}</ref> Ou seja, o espaço ocupado pelas instruções, dados e pilha de execução de um programa pode ser maior que o espaço em memória principal disponível. Por exemplo, um programa que ocupa um total de 64 [[MebiByte|MiB]] pode ser executado em um computador com apenas 32 MiB disponíveis para o programa, bastando que o sistema operacional se encarregue de manter sempre na memória principal as partes adequadas à execução naquele momento.<ref>TANENBAUM, Andrew S.; WOODHULL, Albert S. '''Sistemas operacionais: projeto e implementação'''. Porto Alegre: Bookman. 1999.</ref>
 
A memória virtual foi desenvolvido por volta de [[1959]]-[[1962]], na [[Universidade de Manchester]] para o [[Computador Atlas]], terminado em 1962.<ref>{{citar web
Na paginação a memória física é dividida em blocos de ''[[byte]]s'' contíguos denominados '''molduras de páginas''' (''page frames''), geralmente com tamanho de 4 [[KiB]] (arquiteturas x86 e x86-64) ou 8 KiB (arquiteturas [[RISC]]) de tamanho. Por sua vez, o espaço de memória de um processo (contendo as instruções e dados do programa) é dividido em páginas que são fisicamente armazenadas nas molduras e possuem o mesmo tamanho destas.
 
Na segmentação existem vários espaços de endereçamento para cada aplicação (os segmentos). Neste caso, o endereçamento consiste em um par ordenado [[segmentoSegmentação_(memória)|deslocamento]], onde o deslocamento é a posição do byte dentro do segmento.
 
Na arquitetura x86 (32 e 64 bits), são usadas a segmentação e a paginação.<ref>INTEL.'''Intel 64 and IA-32 architectures software developer’s manual - volume 3A: system programming guide, part 1'''. Cap. 3. Disponível em [http://www.intel.com/products/processor/manuals/index.htm Intel - Manaul de processadores]. Acesso em 14 maio 2010</ref> O espaço de endereçamento de uma aplicação é dividido em segmentos, onde é determinado um ''endereço lógico'', que consiste no par [segmento:deslocamento]; o dispositivo de segmentação converte esse endereço para um ''endereço linear'' (virtual); finalmente, o dispositivo de paginação converte o endereço virtual para físico, localizando a moldura de página que contém os dados solicitados.
As tabelas de páginas descrevem cada página da aplicação (num sistema em execução, existe pelo menos uma tabela de páginas por processo). Cada tabela é indexada pelo endereço virtual e contém o endereço físico da moldura correspondente ou a indicação de que a página está em um dispositivo de armazenamento secundário (normalmente um [[disco rígido]]).
 
Como o acesso à tabela de páginas é muito lento, pois está em memória, a MMU possui uma ''[[cache]]'' associativa chamada ''[[Buffer_(ciência_da_computação)|buffer]]'' de tradução de endereços ([[TLB]] - ''Translation Lookaside Buffer'') que consiste em uma pequena tabela contendo os últimos endereços virtuais solicitados e seus correspondentes endereços físicos.
 
=== [[Linux (núcleo)|Linux]] em 32 bits ===