У нас есть система с 1 ГБ памяти. Исходя из этого, я хотел бы ограничить только 512 МБ для Linux и хотел бы получить доступ к остальным 512 МБ непосредственно из приложения, работающего на Linux.

Каковы предлагаемые средства для достижения этого на 2.6.x?

С уважением, Праб

5 ответов5

0

Вы используете linux - вся память на вашем компьютере должна быть доступна для linux, чтобы linux мог передать их вашей программе.

Если в системе доступно 512 МБ свободного места, она выдаст ее вашей программе, если нет, то не сможет.

Есть дополнительные методы, которые вы можете использовать, чтобы гарантировать, что 512Mb заблокирован в оперативной памяти (не может быть подключен к диску), но я подозреваю, что это выходит за рамки того, что вам нужно сделать.

0

Единственное, о чем я могу думать, это иметь 512 мегабайт вашего приложения malloc() при его первом запуске, а затем вручную разделить память внутри программы. И мальчик, о мальчик, это так уродливо.

0

Я не очень понимаю вопрос; вам придется объяснить свою цель более четко.

Linux выделяет свою память приложениям, поэтому, если у Linux есть память, она передает ее вашему приложению.

Если вы хотите определенно иметь память, СЕЙЧАС, вы должны

  • выделить его (например, с помощью malloc или mmap)
  • Коснитесь всех страниц (например, написав что-то для каждой страницы)
  • mlock () это - чтобы убедиться, что он не будет заменен. Или просто не настроен подкачка (Примечание: чистые страницы с файловой поддержкой все еще могут быть отброшены, если подкачка отключена).

Если вам действительно нужны все страницы, которые ваша программа использует в ядре, используйте mlockall.

0

Выделите 512 МБ анонимного сопоставления с помощью mmap() и MAP_POPULATE , а затем заблокируйте его с помощью mlock() .

0

Ваше приложение не может общаться с "DIMM 2, чип 3, 42-й байт". Требуется, чтобы другие части системы, включая Linux, назначали простой номер (адрес) каждому байту памяти. Если вы исключите 512 МБ из Linux, у него не будет даже адреса. Это означает, что ваше приложение не может даже говорить о памяти, не говоря уже о ее использовании.

Там будет больше проблем; например, функция гибернации не будет восстанавливать память при пробуждении. Но это все теоретически, поскольку память не будет содержать ничего - без адресов нет способа записи в память.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .