2009-07-13 2 views
22

Просто читать некоторые заметки в purdue lecture about OSs, и он говорит:Почему 32-разрядная ОС поддерживает 4 ГБ оперативной памяти?

программа видит память как массив байтов который идет от адреса 0 до 2^32-1 (0 до 4GB-1)

Почему 4 ГБ?

+2

4 ГБ - теоретический максимум памяти, который вы можете использовать с 32-разрядной ОС. Практически вы не можете использовать полную память объемом 4 ГБ (может быть, всего 3,5 ГБ), потому что вам также нужно некоторое пространство-адрес для других аппаратных компонентов, таких как: CPU, HDD, графическая карта и т. Д. – Alexander

+2

Вопрос из темы неправильный. 32-разрядная ОС может поддерживать больше оперативной памяти; он будет видеть только 4 ГБ за раз. – liori

+0

Технически, PAE может дать вам больше 4GiB –

ответ

53

Поскольку 32 бит может представлять числа до 2 - 1 = 4294967295 = 4 ГиБли - 1 и, следовательно, адресовать до 2 отдельных байт, которые были бы 4 ГиБли тогда.

Есть способы обойти это. Например, с помощью PAE даже 32-разрядная операционная система может поддерживать больше памяти. Исторически это чаще всего использовалось на серверах. Кроме того, не серверные Windows SKU не поддерживают его. В настоящее время все это спорный вопрос, хотя, учитывая, что 64-битные процессоры, операционные системы и поддержка драйверов являются обычным явлением.

+13

+1 для gibibytes, а не для гигабайтов –

+4

Я думаю, что эта вещь gibibyte так же бессмысленна, как утверждать, является ли Pluto планетой (это, кстати) –

+25

GiB принадлежит к slashdot и wikipedia , Остальная часть мира использует GB (независимо от того, что говорит комитет). –

8
2^32 = 4 * 1024 * 1024 * 1024 

Это определение в байтах 4 ГБ. Другими словами, 32-разрядный регистр в качестве указателя памяти может обращаться к 4 ГБ памяти и не более.

23

Поскольку каждый байт памяти должен иметь адрес. В 32-разрядной операционной системе адрес имеет длину 32 бита; Таким образом, существует 2^32 возможных адреса, что означает, что есть 2^32 байта = 4 ГБ.

+5

«Потому что каждый байт памяти должен иметь адрес». - только в байтовой адресной системе, конечно. На одноплатной платформе у вас может быть вдвое больше памяти ... – Vicky

+1

или больше, в зависимости от того, какой размер ваших слов машин – tialaramex

2

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

Но на самом деле это не всегда так (в большинстве случаев это не так), ОС может обрабатывать больше физической памяти, чем это (с PAE), и приложения могут использовать менее 4 ГБ виртуальной памяти (потому что часть этой виртуальной памяти сопоставляется с ОС, 1 ГБ в Linux и 2 ГБ в Windows, например).

Другой сценарий, в котором это не применяется, - это то, что память была адресована словами вместо байтов, тогда общая адресуемая память будет 16 ГБ, например.

0

4 GB = 2^32 байт. Но помните его максимальный 4gb, выделенный 32-разрядной ОС. В действительности, ОС будет видеть меньше, например, после выделения VRAM.

21

Все говорят 2^32 = 4GiB, что правильно. На всякий случай, вот как мы добрались туда:

32-разрядная машина использует 32 бита для адресной памяти. Каждый бит имеет значение 0 или 1. Если у вас 1 бит, у вас есть два возможных адреса: 0 или 1. Двухбитовая система (отбросить в сторону) имеет четыре возможных адреса: 00 = 0, 01 = 1, 10 = 2, 11 = 3. 2^2 = 4. Три бита имеют 8 возможных адресов: 000 = 0, 001 = 1, 010 = 2, 011 = 3, 100 = 4, 101 = 5, 110 = 6 и 111 = 7.

Каждый бит удваивает потенциальное адресное пространство, поэтому 2^n сообщает вам, сколько адресов вы используете для заданного количества бит. 2^1 = 2, 2^2 = 2 * 2 = 4, 2^3 = 2 * 2 * 2 = 8 и т. Д.

К тому времени, когда вы доберетесь до 32 бит, вы находитесь в 4GiB.

+0

Право! 2^32-1 - сумма геометрических последовательностей. – Life

5

На самом деле это не так просто, как 2^32 = 4294967296 байт.Вы видите в защищенном режиме x86, с включенным пейджингом (то есть тем, что вы получаете, когда используете какую-либо современную ОС), вы не адресуете ячейки памяти напрямую, даже если механизм перевода поискового вызова прозрачен для клиентских приложений.

логического 32 бит адреса памяти, при использовании 4K страниц:

  • биты 22-31 см каталога страниц
  • биты 12-21 относятся к таблице страниц
  • бит 11- 0 ссылаются на смещение на 4096 байт.

Как вы можете видеть, у вас есть каталоги на 2^10 (1024) страниц, в каждом каталоге страниц у вас есть 2^10 таблиц страниц, а каждая страница - 2^12 (4096) байтов, следовательно 2^32 = 4294967296 b ytes. Ширина шины памяти обычно такая же, как длина слова процессора, но совсем необязательно быть таким. Фактически, более современные процессоры x86 поддерживают PAE, который позволяет адресовать более 4 ГБ (или GiB) даже в 32-битном режиме.

+1

PAE не разрешает _you_ обращаться к более чем 4GiB, если только этот вопрос не запущен в режиме супервизора, и считает, что переписывание таблицы страниц между доступами по-прежнему представляет собой «адресацию», после чего вы можете почти утверждать, что можете «адресовать» данные на диске тоже ... PAE - это аккуратный хак, но это всего лишь взломать. – tialaramex

1

Главным образом из-за 32-разрядной ОС, поддерживающей только 2^32-1 адреса.

Если у процессора имеется более 32 адресных линий на FSB, тогда 32-разрядная ОС может выбрать механизм пейджинга для доступа к более чем 4GiB. (Например, выпуски Windows 2000 Advanced Server/Data Center на PAE поддерживали чипы Intel/AMD)

0

Как уже указывалось другими пользователями, 32-разрядные ОС Windows используют 32-разрядные слова для хранения адресов памяти.

На самом деле, большинство 32-разрядных чипов используют 36-разрядную адресацию с использованием модели расширения физического адреса Intel (PAE). Некоторые операционные системы поддерживают это напрямую (например, Linux).

Как отмечает Раймонд Чэнь, в Windows a 32-bit application can allocate more than 4GB of memory, and you don't need 64-bit Windows to do it. Или даже PAE.

В этом случае 64-разрядные чипы не поддерживают все 64-разрядное пространство памяти. Я считаю, что в настоящее время они ограничены 42-битным пространством ... 36-битное пространство, которое использует PAE, плюс верхние 8-битные адреса,

+0

Даже если вы можете выделить более 4 ГБ памяти, вы не сможете использовать более 4 ГБ ОЗУ без 64-битного или PAE. – ephemient

+0

Вы можете проверить, сколько физических и виртуальных битов адреса фактически работает на вашем CPU с CPUID (на x86) или аналогичными функциями в других семействах процессоров. Вы также можете увидеть его в каталоге Linux/proc/cpuinfo Мой дешевый карманный магазин для хранения углов содержит 40 бит физических адресов и 48 бит виртуального. У старых Xeons на нашей серверной стойке есть только 36 бит физических адресов (неважно, они могут принимать только 16 ГБ модулей DIMM) – tialaramex

5

Если у вас есть 4-разрядная система, это означает адрес для каждый байт составляет 4 двоичных разряда, вероятность того, что весь ваш адрес будет находиться в диапазоне от до 1111, который равен 2^4 = 16 (2 из-за наличия 0 или 1), с четырьмя битами можно создать 16 различные значения нулей и единиц, если у вас есть 16 различных addr. каждый означает byte то вы можете иметь максимум из 16 bytes

4-битная система будет выглядеть следующим образом:

enter image description here

Для 32-битной системы, ваш максимальный является 2^32 = 4294967292 bytes

Смежные вопросы