Por que a RAM parcialmente cheia (digamos 80%) faz com que o dispositivo fique muito atrasado, mesmo havendo espaço disponível para armazenar mais dados? O que eu espero é que continue funcionando bem até 99%.
Percebo que, no celular, mais do que no PC, pois possui menor RAM, por exemplo, meu celular tem 2 GB de RAM; quando tenho menos de 1 GB de RAM livre, fica muito tempo! Por que isso acontece, mesmo que ainda tenha ~ 1 GB para usar?
Respostas:
Há muita coisa envolvida aqui, mas tentarei explicá-la da maneira mais simples possível e de uma maneira aplicável a praticamente qualquer sistema operacional.
Existem 2 princípios básicos aqui:
A soma total de tudo o que precisa estar na RAM e daquelas coisas que se beneficiariam de estar na RAM é quase sempre maior que o tamanho da RAM. As coisas que se beneficiariam de estar na RAM incluem conjuntos de trabalho de processos e a lista de espera. O último contém dados e código que estavam em uso ativo, mas que entraram em inatividade. Muito disso será usado novamente, alguns deles em breve, portanto, é benéfico mantê-lo na RAM. Essa memória atua como um tipo de cache, mas não é realmente essencial, assim como na categoria de memória disponível. Como a memória livre, ela pode ser entregue rapidamente a qualquer programa que precise. No interesse do desempenho, a memória em espera deve ser grande.
A frequência de uso de blocos de memória está longe de ser aleatória, mas pode ser prevista com considerável precisão. A memória é dividida em blocos, geralmente 4K bytes. Alguns blocos são acessados muitas vezes por segundo, enquanto outros não são acessados por muitos minutos, horas, dias ou até semanas, se o sistema já estiver em funcionamento por tempo suficiente. Há uma ampla gama de uso entre esses dois extremos. O gerenciador de memória sabe quais blocos foram acessados recentemente e aqueles que não foram. É uma suposição razoável de que um bloco de memória acessado recentemente será necessário novamente em breve. A memória que não foi acessada recentemente provavelmente não será necessária tão cedo. A longa experiência provou que este é um princípio válido.
O gerenciador de memória aproveita o segundo princípio para mitigar amplamente as consequências indesejáveis do primeiro. Para fazer isso, é um ato equilibrado de manter os dados acessados recentemente na RAM, enquanto mantém os dados raramente usados nos arquivos originais ou no arquivo de paginação.
Quando a RAM é abundante, esse ato de equilíbrio é fácil. Muitos dos dados usados não tão recentemente podem ser mantidos na RAM. Esta é uma boa situação.
As coisas ficam mais complicadas quando a carga de trabalho aumenta. A soma total de dados e código em uso é maior, mas o tamanho da RAM permanece o mesmo. Isso significa que um subconjunto menor disso pode ser mantido na RAM. Alguns dos dados usados menos recentemente não podem mais estar na RAM, mas devem ser deixados no disco. O gerenciador de memória tenta muito manter um bom equilíbrio entre a memória em uso ativo e a memória disponível. Porém, à medida que a carga de trabalho aumenta, o gerenciador de memória será forçado a fornecer mais memória disponível aos processos em execução. Esta não é uma boa situação, mas o gerenciador de memória não tem escolha.
O problema é que mover dados de e para a RAM à medida que os programas são executados leva tempo. Quando a RAM é abundante, isso não acontece com muita frequência e nem será notado. Mas quando o uso da RAM atingir altos níveis, isso acontecerá com muito mais frequência. A situação pode se tornar tão ruim que se gasta mais tempo movendo dados de e para a RAM do que se gasta realmente usá-los. Isso é impressionante, algo que o gerente de memória tenta evitar, mas com uma carga de trabalho alta, muitas vezes não pode ser evitado.
O gerenciador de memória está do seu lado, sempre tentando o melhor para manter o desempenho ideal, mesmo em condições adversas. Porém, quando a carga de trabalho é grande e a memória disponível é insuficiente, é preciso fazer coisas ruins para continuar funcionando. Essa é de fato a coisa mais importante. A prioridade é primeiro manter as coisas funcionando e torná-las o mais rápido possível.
fonte
memory manger
faz parte do meuOS
direito? então, se eu estivesse lidando com ponteiros e essas coisas de nível muito baixo, ainda será capaz de fazer paginação?Todos os sistemas operacionais modernos usam memória não utilizada para armazenar dados em cache, para que possam ser acessados a partir de RAM rápida, em vez de armazenamento mais lento. Eles geralmente relatam isso como memória livre, pois os aplicativos podem limpar o cache e usá-lo se necessário, mas ele ainda está sendo usado. Quanto menos houver, menos dados poderão ser armazenados em cache e mais lento será o computador.
fonte
A paginação é um esquema de gerenciamento de memória através do qual blocos de memória de tamanho fixo têm processos atribuídos a eles. Quando o uso da memória aumenta para um nível alto (ou seja, 80% da capacidade), a paginação começa a se estender da RAM para a vRAM (RAM virtual).
O vRAM está localizado no armazenamento do sistema, geralmente em um disco rígido ou em outros locais de armazenamento consideráveis.
Os processos são designados como parte do seu disco rígido para serem executados como memória e tratarão a seção deles como RAM. Esse é um processo perfeitamente normal, no entanto, quando o tempo gasto para transferir dados de e para a vRAM aumenta, o desempenho do sistema diminui.
Enquanto a RAM dedicada é acessada diretamente através da placa-mãe a partir da CPU, que fornece uma conexão rápida, a RAM virtual precisa de cabos transversais entre a placa e o local da vRAM.
No entanto, isso causa apenas um leve impacto no desempenho. Quando a taxa da qual a paginação para o vRAM ocorre aumenta drasticamente (quando a RAM dedicada se aproxima da capacidade), ocorre a debulha.
Thrashing é a prática de transferir rápida e rapidamente páginas de memória para sua memória virtual. Isso causa um enorme impacto no desempenho, pois é necessário mais tempo na busca e tratamento de dados.
Digamos que você queira anotar um número com 30 dígitos. Você pode sentar-se ao lado da tela com o seu bloco de notas e escrevê-lo (usando a memória dedicada) ou se lembrar de partes de 5, correr para a próxima sala e anotá-lo no seu bloco de notas (usando memória virtual). Ambos fazem o trabalho, mas qual será mais rápido?
Saiba mais sobre o thashing aqui !
fonte
É porque o sistema operacional precisa fazer muita paginação (carregando partes de programas ativos) e trocando (movendo dados da RAM para HD e vice-versa) para manter o software em execução. Quando novas páginas precisam ser carregadas, o que pode exigir mais espaço do que os 20% disponíveis, o sistema operacional precisará trocar as páginas existentes na RAM, que considera menos provável que sejam usadas em breve. Especialmente no início de outros programas. Trocar e voltar nas páginas leva muito tempo e diminui drasticamente o desempenho do seu PC, porque agora você trabalha na velocidade do HD, não da RAM.
Isso ajuda um pouco em um HDD a criar uma partição especial no seu HD e atribuí-la como espaço dedicado "swap" (não use para arquivos "reais"), para que a troca seja menos afetada pela fragmentação dos HDs.
fonte
Lembre-se de que os discos rígidos são uma ordem de magnitude mais lenta que a RAM, e a própria RAM não é tão rápida para começar (na arquitetura geral). Em ordem de velocidade de acesso (onde cada degrau é uma ordem de magnitude mais lenta que a acima), você tem
O Virtual Memory Manager é um jogador. Está apostando que você não precisa de toda a sua RAM o tempo todo, por isso faz um palpite e lança os dados que o seu programa de documentos (que está em segundo plano nos últimos 10 minutos enquanto você lê isso) não está realmente importante e empurra-o para o disco rígido.
Mas então você clica novamente no documento! Agora o VMM precisa carregar todos esses dados do disco rígido. Pior, se você tem pouca memória RAM, agora ele precisa enviar outros dados (mais jogos) para o HDD para liberar espaço utilizável. O Linux gosta de viver no limite aqui. Ele preencherá a grande maioria da RAM com dados usados com freqüência (ótimo para servidores com poucos processos).
fonte
As respostas surradas praticamente acertam em cheio. Se puder, você pode minimizar a rapidez com que isso acontece, reduzindo a troca (quanta memória RAM o sistema permitirá que seja usada antes de mover as coisas para trocar espaço). Eu gosto de configurar os sistemas para ficarem fora de troca até que a ram atinja 99% para aplicativos de servidor, pois o padrão significaria efetivamente que eu precisaria codificar coisas para utilizar apenas 80% da ram para aproveitar o cache sem ser penalizado por empurrar o sistema no espaço de troca.
fonte