Использование памяти на 32-битной машине RHEL
Вопрос
Я использую 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 ГБ адресного пространства, в зависимости от опций ОС.Одно приложение может эффективно использовать больше физической оперативной памяти, чем, например, путем разделения частей памяти в адресном пространстве и из него, используя, например, расширения оконного управления адресами или файлы, отображаемые в памяти.