Memória virtual

format_list_bulleted Contenido keyboard_arrow_down
ImprimirCitar
A memória virtual combina memória RAM ativa e inativa no DASD para formar uma grande variedade de endereços contíguos.

na computação, Memória virtual , ou armazenamento virtual , é uma técnica de gerenciamento de memória que fornece uma abstração idealizada dos recursos de armazenamento que estão realmente disponíveis em uma dada máquina " que cria a ilusão para os usuários de uma memória muito grande (principal) ".

O sistema operacional do computador, usando uma combinação de hardware e software, mapeia endereços de memória usados por um programa, chamado endereços virtuais , em endereços físicos em Memória do computador. O armazenamento principal, como visto por um processo ou tarefa, aparece como um espaço de endereço contíguo ou coleta de segmentos contíguos. O sistema operacional gerencia espaços de endereço virtual e a atribuição de memória real à memória virtual. O hardware de tradução de endereços na CPU, geralmente chamado de unidade de gerenciamento de memória (MMU), traduz automaticamente endereços virtuais em endereços físicos. O software dentro do sistema operacional pode estender esses recursos, utilizando, por exemplo, armazenamento em disco, para fornecer um espaço de endereço virtual que pode exceder a capacidade da memória real e, assim, referenciar mais memória do que está presente fisicamente no computador.

Os principais benefícios da memória virtual incluem a liberação de aplicativos de ter que gerenciar um espaço de memória compartilhado, capacidade de compartilhar memória usada pelas bibliotecas entre processos, maior segurança devido ao isolamento da memória e ser capaz de usar conceitualmente mais memória do que pode ser fisicamente Disponível, usando a técnica de paginação ou segmentação.

Propriedades

A memória virtual facilita a programação do aplicativo, ocultando a fragmentação da memória física; Delegando ao núcleo o ônus de gerenciar a hierarquia da memória (eliminando a necessidade de o programa lidar com sobreposições explicitamente); e, quando cada processo é executado em seu próprio espaço de endereço dedicado, evitando a necessidade de realocar o código do programa ou acessar a memória com a endereçamento relativo.

A virtualização da memória pode ser considerada uma generalização do conceito de memória virtual.

Uso

A memória virtual é parte integrante de uma arquitetura moderna de computadores; As implementações geralmente exigem suporte de hardware, normalmente na forma de uma unidade de gerenciamento de memória embutida na CPU. Embora não seja necessário, os emuladores e máquinas virtuais podem empregar suporte de hardware para aumentar o desempenho de suas implementações de memória virtual. Os sistemas operacionais mais antigos, como os dos mainframes da década de 1960, e os de computadores pessoais de início da década de 1980 (por exemplo, DOS), geralmente não têm funcionalidade de memória virtual, embora exceções notáveis para os mainframes da década de 1960 incluam:

  • o supervisor de Atlas para o Atlas
  • O sistema de multiprogramação para o Electrologica X8 (memória virtual baseada em software sem suporte a hardware)
  • MCP para os Burroughs B5000
  • MTS, TSS/360 e CP/CMS para o IBM System/360 Modelo 67
  • Multics para o GE 645
  • O sistema operacional de compartilhamento de tempo para o espectro RCA 70/46

Durante a década de 1960 e o início dos anos 70, a memória do computador era muito cara. A introdução da memória virtual forneceu uma capacidade de sistemas de software com grandes demandas de memória para executar em computadores com memória menos real. A economia disso proporcionou um forte incentivo para mudar para a memória virtual para todos os sistemas. A capacidade adicional de fornecer espaços de endereço virtual adicionou outro nível de segurança e confiabilidade, tornando assim a memória virtual ainda mais atraente para o mercado.

Os sistemas operacionais mais modernos que suportam a memória virtual também executam cada processo em seu próprio espaço de endereço dedicado. Assim, cada programa parece ter acesso exclusivo à memória virtual. No entanto, alguns sistemas operacionais mais antigos (como OS/VS1 e OS/VS2 SVs) e até os modernos (como o IBM I) são sistemas operacionais de espaço de endereço único que executam todos os processos em um único espaço de endereço composto por memória virtualizada.

sistemas incorporados e outros sistemas de computadores de uso especial que requerem tempos de resposta muito rápidos e/ou muito consistentes podem optar por não usar a memória virtual devido à diminuição do determinismo; Os sistemas de memória virtual desencadeiam armadilhas imprevisíveis que podem produzir atrasos indesejados e imprevisíveis em resposta à entrada, especialmente se a armadilha exigir que os dados sejam lidos na memória principal da memória secundária. O hardware para traduzir endereços virtuais em endereços físicos geralmente requer uma área de chip significativa para implementar, e nem todos os chips usados em sistemas incorporados incluem esse hardware, o que é outro motivo pelo qual alguns desses sistemas não usam memória virtual.

História

Na década de 1950, todos os programas maiores tiveram que conter lógica para gerenciar o armazenamento primário e secundário, como a sobreposição. A memória virtual foi, portanto, introduzida não apenas para estender a memória primária, mas para facilitar o uso de uma extensão tão fácil para os programadores. Para permitir a multiprogramação e a multitarefa, muitos sistemas iniciais dividiram a memória entre vários programas sem memória virtual, como os primeiros modelos do PDP-10 por meio de registros.

A afirmação de que o conceito de memória virtual foi desenvolvido pela primeira vez pelo físico alemão Fritz-Rudolf Güntsch na Technische Universität Berlin em 1956 em sua tese de doutorado, o design lógico de um computador digital com múltiplos tambores rotativos assíncronos e alta automática A operação de memória de velocidade não resiste a um escrutínio cuidadoso. O computador proposto por Güntsch (mas nunca construído) tinha um espaço de endereço de 10 palavras sic ) pelo qual se pode programar como se houvesse apenas um armazenamento. " Esta é exatamente a situação em computadores com a memória de cache, um dos primeiros exemplos comerciais dos quais foi o IBM System/360 Modelo 85. No modelo 85, todos os endereços eram endereços reais referindo -se à loja principal principal. Uma loja de cache semicondutores, invisível para o usuário, mantinha o conteúdo de partes da loja principal em uso pelo programa atualmente em execução. Isso é exatamente análogo ao sistema de Güntsch, projetado como um meio para melhorar o desempenho, em vez de resolver os problemas envolvidos na programação multipro.

A Universidade de Manchester Atlas Computer foi o primeiro computador a apresentar verdadeira memória virtual.

O primeiro sistema de memória virtual verdadeiro foi o implementado na Universidade de Manchester para criar um sistema de armazenamento de um nível como parte do computador Atlas. Ele usou um mecanismo de paginação para mapear os endereços virtuais disponíveis para o programador na memória real que consistia em 16.384 palavras de memória principal primária com 98.304 palavras adicionais de memória secundária. A adição de memória virtual no ATLAS também eliminou um problema de programação iminente: planejamento e agendamento de transferências de dados entre os programas de memória principal e secundária e recompilação para cada mudança de tamanho da memória principal. O primeiro atlas foi encomendado em 1962, mas os protótipos de paginação de trabalho foram desenvolvidos em 1959. Em 1961, a Burroughs Corporation divulgou independentemente o primeiro computador comercial com memória virtual, o B5000, com segmentação em vez de pagar.

A IBM desenvolveu o conceito de hipervisores em seu CP-40 e CP-67 e, em 1972, o forneceu para o S/370 como instalação de máquinas virtuais/370. A IBM introduziu a instrução Start Interpretive Execution ( sie ) como parte do 370-XA nas versões 3081 e VM/XA da VM para explorá-lo.

Antes que a memória virtual pudesse ser implementada nos sistemas operacionais convencionais, muitos problemas precisavam ser abordados. A tradução dinâmica de endereço exigia hardware especializado caro e difícil de construir; As implementações iniciais diminuíram um pouco o acesso à memória. Havia preocupações de que novos algoritmos em todo o sistema utilizassem armazenamento secundário seriam menos eficazes do que os algoritmos específicos de aplicativos usados anteriormente. Em 1969, o debate sobre a memória virtual para computadores comerciais terminou; Uma equipe de pesquisa da IBM liderada por David Sayre mostrou que seu sistema de sobreposição de memória virtual funcionava consistentemente melhor do que os melhores sistemas controlados manualmente. Ao longo da década de 1970, a série IBM 370, executando seus sistemas operacionais baseados em armazenamento virtual, forneceu um meio para os usuários empresariais migrarem vários sistemas mais antigos para mainframes menos, mais poderosos que melhoraram o preço/desempenho. O primeiro minicomputador a introduzir a memória virtual foi o NORD-1 norueguês; Durante a década de 1970, outros minicomputadores implementaram a memória virtual, principalmente os modelos VAX executando VMs.

A memória virtual foi introduzida na arquitetura x86 com o modo protegido do processador Intel 80286, mas sua técnica de troca de segmento escalou mal para tamanhos de segmento maiores. O Intel 80386 introduziu o suporte de paginação sob a camada de segmentação existente, permitindo a exceção da falha da página à corrente com outras exceções sem falha dupla. No entanto, os descritores do segmento de carregamento foram uma operação cara, fazendo com que os designers de sistemas operacionais confiem estritamente na paginação, em vez de uma combinação de paginação e segmentação.

Memória virtual paginada

Quase todas as implementações atuais da memória virtual dividem um espaço de endereço virtual em páginas, blocos de endereços de memória virtual contígua. As páginas dos sistemas contemporâneas geralmente têm pelo menos 4 quilobytes de tamanho; Sistemas com grandes faixas de endereço virtual ou quantidades de memória real geralmente usam tamanhos de página maiores.

tabelas de página

As tabelas de página são usadas para traduzir os endereços virtuais vistos pelo aplicativo em endereços físicos usados pelo hardware para processar instruções; Esse hardware que lida com essa tradução específico é frequentemente conhecido como unidade de gerenciamento de memória. Cada entrada na tabela de páginas contém um sinalizador indicando se a página correspondente está na memória real ou não. Se estiver na memória real, a entrada da tabela de páginas conterá o endereço de memória real no qual a página é armazenada. Quando uma referência é feita a uma página pelo hardware, se a entrada da tabela da página para a página indicar que ela não está atualmente em memória real, o hardware aumentará uma exceção de falha de página, invocando o componente supervisor de paginação do sistema operacional.

Os

sistemas podem ter, por exemplo, uma tabela de página para todo o sistema, as tabelas de página separadas para cada espaço de endereço ou processo, separar tabelas de página para cada segmento; Da mesma forma, os sistemas podem ter, por exemplo, nenhuma tabela de segmento, uma tabela de segmento para todo o sistema, tabelas de segmento separadas para cada espaço de endereço ou processo, separar tabelas de segmento para cada região em uma árvore de tabelas de região para tabelas para a região para cada espaço de endereço ou processo. Se houver apenas uma tabela de páginas, aplicativos diferentes em execução usam ao mesmo tempo usam diferentes partes de uma única gama de endereços virtuais. Se houver várias tabelas de página ou segmento, existem vários espaços de endereço virtuais e aplicativos simultâneos com tabelas de página separadas redirecionam para diferentes endereços reais.

Alguns sistemas anteriores com tamanhos de memória reais menores, como o SDS 940, usados registros de página em vez de tabelas de página na memória para tradução de endereço.

Supervisor de paginação

Esta parte do sistema operacional cria e gerencia tabelas de página e listas de quadros de página gratuitos. Para garantir que haja quadros de página gratuitos suficientes para resolver rapidamente falhas de página, o sistema pode roubar os quadros de página alocados periodicamente, usando um algoritmo de substituição de página, por exemplo, um algoritmo menos recentemente usado (LRU). Os quadros de página roubados modificados são gravados de volta ao armazenamento auxiliar antes de serem adicionados à fila gratuita. Em alguns sistemas, o supervisor de paginação também é responsável pelo gerenciamento de registros de tradução que não são carregados automaticamente nas tabelas de página.

Normalmente, uma falha de página que não pode ser resolvida resulta em uma terminação anormal do aplicativo. No entanto, alguns sistemas permitem que o aplicativo tenha manipuladores de exceção para esses erros. O supervisor de paginação pode lidar com uma exceção de falha de página de várias maneiras diferentes, dependendo dos detalhes:

  • Se o endereço virtual for inválido, o supervisor de paging trata-o como um erro.
  • Se a página for válida e as informações da página não forem carregadas no MMU, as informações da página serão armazenadas em um dos registros da página.
  • Se a página é uninitializada, um novo quadro de página pode ser atribuído e limpo.
  • Se houver um frame de página roubado contendo a página desejada, esse quadro de página será reutilizado.
  • Para uma falha devido a uma tentativa de gravação em uma página protegida por leitura, se é uma página de cópia em gravação, então um frame de página livre será atribuído e o conteúdo da página antiga copiada; caso contrário, é tratado como um erro.
  • Se o endereço virtual for uma página válida em um arquivo de memória ou um arquivo de paging, um frame de página gratuito será atribuído e a página lida.

Na maioria dos casos, haverá uma atualização para a tabela de páginas, possivelmente seguida pela eliminação do Buffer de Lokaside de Tradução (TLB), e o sistema reinicia a instrução que causa a exceção.

Se a fila do quadro de página gratuita estiver vazia, o supervisor de paginação deverá liberar um quadro de página usando o mesmo algoritmo de substituição de página para roubar a página.

Páginas fixadas

Sistemas operacionais possuem áreas de memória que estão (nunca trocadas para o armazenamento secundário). Outros termos usados são bloqueados , corrigidos ou páginas com fio . Por exemplo, os mecanismos de interrupção dependem de uma variedade de indicadores para seus manipuladores, como conclusão de E/S e falha na página. Se as páginas que contêm esses ponteiros ou o código que eles invocarem fossem pagáveis, o manuseio de interrupções se tornaria muito mais complexo e demorado, principalmente no caso de interrupções de falhas de página. Portanto, alguma parte das estruturas da tabela de páginas não é paga.

Algumas páginas podem ser fixadas por curtos períodos de tempo, outros podem ser fixados por longos períodos de tempo, e outros ainda precisam ser fixados permanentemente. Por exemplo:

  • O código de controle de paging e os drivers para dispositivos de armazenamento secundários em que as páginas residem devem ser permanentemente fixados, pois a paginação de outra forma nem funcionaria porque o código necessário não estaria disponível.
  • Os componentes dependentes de tempo podem ser fixados para evitar atrasos de paginação variáveis.
  • Os buffers de dados que são acessados diretamente por dispositivos periféricos que usam acesso de memória direta ou canais de E/S devem residir em páginas pintadas enquanto a operação de E/S está em andamento porque esses dispositivos e os ônibus para os quais eles estão conectados esperam encontrar buffers de dados localizados em endereços de memória física; independentemente de se o ônibus tem uma unidade de gerenciamento de memória para I/O, as transferências não podem ser interrompidas se ocorrer uma falha de página e então reiniciada. Por exemplo, os dados podem vir de uma unidade de sensor de medição e perder dados em tempo real que foram perdidos por causa de uma falha de página não pode ser recuperado.

Nos sistemas operacionais da IBM para sistemas System/370 e sucessores, o termo é corrigido ", e essas páginas podem ser fixadas a longo prazo ou podem ser fixadas a curto prazo, ou pode não ser fixado (ou seja, pagável). As estruturas de controle do sistema são frequentemente fixas de longo prazo (medidas no tempo de encomenda da parede, isto é, tempo medido em segundos, em vez do tempo medido em frações de um segundo), enquanto os buffers de E/S geralmente são fixos a curto prazo (geralmente medidos em significativamente menos do que o tempo de parede, possivelmente para dezenas de milissegundos). De fato, o sistema operacional possui uma instalação especial para a fixação rápida " Esses buffers de dados fixos de curto prazo (fixação que são realizados sem recorrer a uma instrução de chamada de supervisor demorada).

Multics usou o termo " Wired ". OpenVMs e Windows se referem às páginas tornadas temporariamente não pagáveis (como para os buffers de E/S) como " bloqueado ", e simplesmente " não paga " Para aqueles que nunca são pagáveis. A única especificação do UNIX também usa o termo " bloqueado " Na especificação para mlock () , assim como o mlock () Páginas de homem em muitos sistemas do tipo Unix.

Operação de Real Virtual

No OS/VS1 e nos OS similares, algumas partes da memória de sistemas são gerenciadas em real virtual " modo, chamado " v = r ". Nesse modo, todo endereço virtual corresponde ao mesmo endereço real. Este modo é usado para mecanismos de interrupção, para o supervisor de paginação e as tabelas de página em sistemas mais antigos e para programas de aplicativos usando gerenciamento de E/S não padrão. Por exemplo, os z/OS da IBM possuem 3 modos (virtual-virtual, real virtual e virtual).

debulhando

Ao pagar e roubar a página são usados, um problema chamado " Throunds " Pode ocorrer, no qual o computador gasta uma quantidade inadequada de tempo transferindo páginas de e para uma loja de apoio, diminuindo a velocidade do trabalho útil. O conjunto de trabalho de uma tarefa é o conjunto mínimo de páginas que devem estar na memória para que ele faça progressos úteis. A surra ocorre quando há memória suficiente disponível para armazenar os conjuntos de trabalho de todos os programas ativos. Adicionar memória real é a resposta mais simples, mas melhorar o design, o agendamento e o uso da memória de aplicativos pode ajudar. Outra solução é reduzir o número de tarefas ativas no sistema. Isso reduz a demanda da memória real, trocando todo o conjunto de trabalho de um ou mais processos.

Um sistema que surge geralmente é resultado de um pico repentino na demanda de páginas de um pequeno número de programas em execução. O Swap-Token é um mecanismo de proteção de debulhagem leve e dinâmico. A idéia básica é definir um token no sistema, que é concedido aleatoriamente a um processo que possui falhas de página quando acontecem. O processo que possui o token tem um privilégio para alocar mais páginas de memória física para criar seu conjunto de trabalho, que deve terminar rapidamente sua execução e liberar as páginas de memória para outros processos. Um carimbo de hora é usado para entregar o token um por um. A primeira versão do Swap-Token foi implementada no Linux 2.6. A segunda versão é chamada de swap-token de presa e também está no Linux 2.6. Nesta implementação atualizada de troca, um contador de prioridades é definido para cada processo rastrear o número de páginas de troca. O token é sempre dado ao processo com uma alta prioridade, que possui um grande número de páginas de troca. O comprimento do carimbo de hora não é constante, mas é determinado pela prioridade: quanto maior o número de páginas de troca de um processo, maior o carimbo de hora para ele.

Memória virtual segmentada

Alguns sistemas, como o Burroughs B5500, usam segmentação em vez de pagar, dividindo os espaços de endereço virtual em segmentos de comprimento variável. Um endereço virtual aqui consiste em um número de segmento e um deslocamento dentro do segmento. O Intel 80286 suporta um esquema de segmentação semelhante como uma opção, mas raramente é usado. Segmentação e paginação podem ser usadas juntas dividindo cada segmento em páginas; Os sistemas com essa estrutura de memória, como o Multics e o IBM System/38, geralmente são o Paging-Predominante, a segmentação que fornece proteção à memória.

Nos processadores Intel 80386 e posteriormente IA-32, os segmentos residem em um espaço de endereço linear e linear de 32 bits. Os segmentos podem ser movidos para dentro e fora desse espaço; As páginas de lá podem "Página"; dentro e fora da memória principal, fornecendo dois níveis de memória virtual; Poucos ou algum sistema operacional o fazem, em vez disso, usando apenas a paginação. As soluções de virtualização X86 não assistidas por não-hardware combinaram paginação e segmentação porque o X86 PAGING oferece apenas dois domínios de proteção, enquanto um VMM, OS convidado ou pilha de aplicativos de convidado precisa de três. A diferença entre sistemas de paginação e segmentação não é apenas sobre a divisão de memória; A segmentação é visível para os processos do usuário, como parte da semântica do modelo de memória. Portanto, em vez de memória que se parece com um único espaço grande, ela é estruturada em vários espaços.

Essa diferença tem consequências importantes; Um segmento não é uma página com comprimento variável ou uma maneira simples de alongar o espaço de endereço. A segmentação que pode fornecer um modelo de memória de nível único no qual não há diferenciação entre a memória do processo e o sistema de arquivos consiste em apenas uma lista de segmentos (arquivos) mapeados no espaço de endereço potencial do processo.

Isso não é o mesmo que os mecanismos fornecidos por chamadas como MMAP e MapViewOffile do Win32, porque os ponteiros entre arquivos não funcionam ao mapear arquivos em locais semi-arbitrários. No Multics, um arquivo (ou um segmento de um arquivo de vários segmentos) é mapeado para um segmento no espaço de endereço, para que os arquivos sejam sempre mapeados em um limite de segmento. A seção de ligação de um arquivo pode conter ponteiros para os quais uma tentativa de carregar o ponteiro em um registro ou fazer uma referência indireta através dele causa uma armadilha. O ponteiro não resolvido contém uma indicação do nome do segmento ao qual o ponteiro se refere e um deslocamento dentro do segmento; O manipulador para a armadilha mapeia o segmento no espaço de endereço, coloca o número do segmento no ponteiro, altera o campo de tags no ponteiro para que ele não cause mais uma armadilha e retorne ao código em que a armadilha ocorreu, reexecutionando a instrução que causou a armadilha. Isso elimina completamente a necessidade de um ligante e funciona quando diferentes processos mapeiam o mesmo arquivo em diferentes locais em seus espaços de endereço privados.

SPACE DE ENDEREÇO SPACE SPACO

Alguns sistemas operacionais fornecem trocar espaços de endereço inteiros, além de quaisquer instalações que tenham para pagar e segmentação. Quando isso ocorre, o OS escreve essas páginas e segmentos atualmente em memória real para trocar arquivos. Em uma troca, o sistema operacional lê os dados dos arquivos de troca, mas não leu automaticamente as páginas de volta que foram pagas no momento da operação de troca.

IBM ' s MVs, da versão 2 a z/os z/OS, fornece marcação de um espaço de endereço como inútil; Fazer isso não fixa nenhuma página no espaço de endereço. Isso pode ser feito durante um trabalho, inserindo o nome de um programa principal elegível na tabela Propriedades do programa com um sinalizador inadequado. Além disso, o código privilegiado pode tornar temporariamente um espaço de endereço inocente usando uma instrução de chamada de supervisor Sysevent (SVC); Certas alterações nas propriedades do espaço de endereço exigem que o SO a trocasse e depois a troque de volta, usando o Sysevent Transwap.

A troca não exige necessariamente hardware de gerenciamento de memória, se, por exemplo, vários trabalhos forem trocados dentro e fora da mesma área de armazenamento.

Más resultados...
Tamaño del texto:
undoredo
format_boldformat_italicformat_underlinedstrikethrough_ssuperscriptsubscriptlink
save