Использование памяти на 32-битной машине RHEL - PullRequest
1 голос
/ 28 мая 2009

Я использую 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 ГБ памяти. Но когда я запускаю top , я вижу следующее -

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

Итак, top способен просматривать все 8 ГБ памяти.

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

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

Спасибо!

Ответы [ 4 ]

3 голосов
/ 28 мая 2009

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

2 голосов
/ 28 мая 2009

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

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

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

1 голос
/ 28 мая 2009

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

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

1 голос
/ 28 мая 2009

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

...