Como dividir a RAM: metade para o Linux, a outra metade para um aplicativo

0

Temos um sistema com 1 GB de memória. Fora disso, eu gostaria de restringir apenas 512MB para o linux e gostaria de acessar o resto 512MB diretamente de um aplicativo que roda no linux.

Quais são os meios sugeridos para alcançar isso em 2.6.x?

respeita Prab.

    
por Jeff Clayton 19.02.2011 / 03:20

5 respostas

0

Você está rodando linux - toda a memória em sua máquina estará disponível para o linux para que o linux possa fornecê-los ao seu programa.

Se o sistema tiver 512Mb disponível gratuitamente, ele será entregue ao seu programa, caso contrário, não será possível.

Existem métodos extras que você pode usar para garantir que o 512Mb esteja bloqueado em ram (não pode ser trocado para disco), mas eu suspeito que isso esteja além do que você precisa fazer.

    
por 19.02.2011 / 03:34
0

A única coisa que posso pensar é ter seu aplicativo malloc () os 512 megas quando ele é iniciado e depois subdividir a memória manualmente dentro do programa. E garoto, oh garoto, isso é feio.

    
por 19.02.2011 / 05:16
0

Eu realmente não entendi a pergunta; você terá que explicar seu propósito mais claramente.

O Linux aloca sua memória para aplicativos, portanto, se o Linux tiver memória, ele será transmitido para o seu aplicativo.

Se você quiser definitivamente ter a memória, AGORA, você deve

  • aloque-o (por exemplo, malloc ou mmap)
  • Toque em todas as páginas (por exemplo, escrevendo algo em cada página)
  • mlock () - para ter certeza de que não será trocado. Ou simplesmente não tenha a opção de swap configurada (NB: as páginas limpas por arquivos ainda podem ser descartadas se a troca estiver desabilitada).

Se você realmente precisa de todas as páginas que seu programa usa, use o mlockall.

    
por 19.02.2011 / 09:23
0

Aloque um mapeamento anônimo de 512 MB com mmap() e MAP_POPULATE e bloqueie-o com mlock() .

    
por 19.02.2011 / 13:45
0

Seu aplicativo não pode falar com "DIMM 2, chip 3, 42nd byte". Ele precisa das outras partes do sistema, incluindo o Linux, para atribuir um número simples (endereço) a cada byte de memória. Se você excluísse 512 MB do Linux, nem mesmo teria um endereço. Isso significa que seu aplicativo não poderia nem falar sobre a memória, muito menos usá-la.

Haveria mais problemas; por exemplo. a função de hibernação não restauraria a memória ao acordar. Mas isso é tudo teórico, já que a memória não contém nada - sem endereços, não há como escrever na memória.

    
por 31.05.2011 / 14:20

Tags