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

24 bytes adicionados ,  13h01min de 21 de dezembro de 2016
m
corr. LI, test, removed: ░ utilizando AWB
m (+correções semiautomáticas (v0.50/3.1.38))
m (corr. LI, test, removed: ░ utilizando AWB)
 
A '''memória virtual''' consiste em recursos de ''[[hardware]]'' e ''[[software]]'' com três funções básicas:<ref>HENESSY, John L.; PATTERSON, David A. '''Arquitetura de computadores: uma abordagem quantitativa'''. Cap. 5. Rio de Janeiro: Campus, 2003.</ref><ref name="tanenbaum">TANENBAUM, Andrew S. '''Sistemas operacionais modernos'''. Cap. 3. Rio de Janeiro: LTC. 1999.</ref>
* (i) '''realocação''' (ou recolocação), para assegurar que cada processo ([[Software_aplicativoSoftware aplicativo|aplicação]]) tenha o seu próprio espaço de endereçamento, começando em zero;
* (ii) '''proteção''', para impedir que um processo utilize um endereço de memória que não lhe pertença;
* (iii) '''paginação''' (''paging'') ou '''troca''' (''[[swapping]]''), que possibilita a uma aplicação utilizar mais memória do que a fisicamente existente (essa é a função mais conhecida).
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 [[Segmentação_Segmentaçã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_Buffer (ciência_da_computaçãociê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 em 32 bits ===
 
== Espaços virtuais ==
Um [[sistema operacional]] convencional separa a [[memória virtual]] em espaço do núcleo e espaço do usuário, onde podem ser implementados ''threads''.<Refref>[http://ctd.ifsp.edu.br/~marcio.andrey/images/Implementacao-processos-threads.pdf Sistema Operacional Implementação de Processo e Threads] Prof. Dr. Márcio Andrey Teixeira – Sistemas Operacionais</ref>
 
=== Espaço de usuário ===
O espaço do [[núcleo (informática)|núcleo]] é estritamente reservado para o núcleo, extensões do núcleo e alguns [[driver de dispositivo|drivers de dispositivos]]. Em muitos sistemas operacionais, o espaço de memória ocupada pelo núcleo nunca é [[memória paginada|paginada]] no disco. De outro lado, o espaço de memória do usuário (no qual funcionam todos os aplicativos de [[modo usuário]]) pode ser paginada no disco sempre que necessário.
 
Cada [[processo (informática)|processo]] no espaço de usuário executa no seu próprio espaço de [[memória virtual]] e, exceto se requisitado, não pode acessar a memória de outro processo. Essa é a base de proteção de memória nos principais sistemas operacionais de hoje. Dependendo do privilégio, os processos podem requisitar ao núcleo o mapeamento de parte de outros espaços de memória de processos para os seus próprios como é o caso de [[depuração|depuradores]]. Os programas podem, inclusive, requisitar áreas de memória compartilhadas com outros processos.
 
Uma outra abordagem de sistemas operacionais experimentais é ter um único espaço de endereços para todo software e invocar a [[linguagem de programação]] da [[máquina virtual]] para certificar-se de que memória arbitrária não possa ser acessada - os aplicativos simplesmente não podem adquirir nenhuma referência dos objetos os quais não são permitidos o acesso. Essa abordagem tem sido implementada no [[JXOS]], [[Unununium]] bem como no projeto de pesquisa da [[Microsoft]] [[Singularity (sistema operativo)|Singularity]].
 
{{Referências}}
145 330

edições