Использование памяти на 32-битной машине RHEL

StackOverflow https://stackoverflow.com/questions/920247

  •  06-09-2019
  •  | 
  •  

Вопрос

Я использую 32-битный RHEL 4.4 на оборудовании на базе AMD64.Вот результат команды uname -a

$ uname -a
Linux zulu 2.6.9-42.0.10.ELsmp #1 SMP Fri Feb 16 17:17:21 EST 2007 i686 athlon i386 GNU/Linux

В этой системе установлено 8 ГБ памяти, 32-разрядная ОС. Я предполагаю, что моя система не сможет использовать всю память объемом 8 ГБ.Но когда я бегу вершина, я вижу следующее -

Mem:   8309168k total,  8292028k used,    17140k free,     7096k buffers

Так, вершина способен просматривать все 8Гб памяти.

Если я устанавливаю 32-разрядную версию WinXP на тот же компьютер, диспетчер задач просто показывает 3 ГБ как доступные.

Мой вопрос: как 32-битная ОС может видеть 8 ГБ памяти?Означает ли это, что мои приложения смогут использовать большее адресное пространство?И в чем разница между 32-битным Linux и 32-битным WinXP?

Спасибо!

Это было полезно?

Решение

Ваша система Linux поддерживает Расширение физического адреса.

Другие советы

Существуют разные «уровни» памяти.Что невозможно, независимо от ОС, так это адресовать более 4 ГБ в одном процессе, поскольку ваши указатели слишком малы для большего - это фундаментальное ограничение 32-битной памяти.Я предполагаю, что в Linux и Windows, а также в большинстве «традиционных» ОС 32-битное виртуальное адресное пространство разделено на одну часть для ядра и одну часть для процесса, поэтому вы получаете менее 4 ГБ адресуемого контента для каждого процесса.

Но всё равно ОС могла использовать более 4 Гб — например, имея 2-3 процесса, потребляющих по 2 Гб памяти каждый.Даже 32-битный процессор может адресовать более 4 ГБ памяти (на аппаратном уровне), но в виртуальном адресном пространстве вы всегда ограничены 32-битными указателями.

В старой новой вещи есть хорошее объяснение различий между физическим адресным пространством, виртуальным адресным пространством и со: http://blogs.msdn.com/oldnewthing/archive/2004/08/18/216492.aspx

Метод, позволяющий это сделать, называется «PAE» (расширение физического адреса).Ваш процессор может использовать 36-битные адреса внутри себя, и ваша ОС поддерживает это.К сожалению, Windows XP использует PAE только для поддержки бита NX (нет бита eXecution, вызывает исключение, когда процессор пытается выполнить код со страницы, отмеченной этим битом).32-битные ядра Linux поддерживают PAE.

Новые процессоры, совместимые с i386, могут адресовать более 4 ГБ в режиме PAE.Windows XP искусственно ограничивает адресное пространство до 4 ГБ, поскольку существует слишком много плохо написанных драйверов оборудования, которые предполагают, что весь DMA будет выполняться для памяти ниже 4 ГБ.Таким образом, около 1 ГБ из адресного пространства в 4 ГБ отображается в аппаратном обеспечении, а остальная часть — в физической оперативной памяти.Серверные версии Windows не имеют этого ограничения.Ядра Linux, поддерживающие PAE, также не ограничивают память.Оба они поддерживают до 32 ГБ, если я правильно помню.

Ваше приложение ограничено 2–3 ГБ адресного пространства, в зависимости от опций ОС.Одно приложение может эффективно использовать больше физической оперативной памяти, чем, например, путем разделения частей памяти в адресном пространстве и из него, используя, например, расширения оконного управления адресами или файлы, отображаемые в памяти.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top