Я прочитал этот пост, но у меня все еще есть вопрос.

Я понимаю, что выражение 32-битный процессор подразумевает регистры размером 32 бита, каждый из которых может содержать до 2^32 данных. Что значит сказать, что 32-битный процессор поддерживает 4 ГБ адресуемой памяти? Что если у меня 8 ГБ ОЗУ, значит ли это, что это больше, чем нужно?

1 ответ1

2

каждый из которых может содержать до 2 ^ 32 данных

Нет. 32-битный регистр может содержать 32 бита данных. Одним из возможных применений этого будет целое число, которое может находиться в диапазоне от 0 до (2 ^ 32)-1, то есть от 0 до 4 294 967 295 включительно.

Что значит сказать, что 32-битный процессор поддерживает 4 ГБ адресуемой памяти?

"Память" - это слишком расплывчатый термин в наши дни. Когда кто-то говорит о "памяти", он должен уточнить, идет ли речь о физической памяти (обычно ОЗУ) или виртуальной памяти. Для обоих из них существует дополнительная концепция "адресного пространства" - таким образом, у нас есть физическое адресное пространство (набор физических адресов, в который должна помещаться вся оперативная память на машине) и виртуальное адресное пространство (набор виртуальных адресов со всеми определенная виртуальная память существует).

Когда трансляция адресов включена - и она включена очень скоро после загрузки в любой современной ОС, и остается такой до отключения - все адреса, на которые ссылается ЦП, интерпретируются как виртуальные адреса. 32-разрядный процессор x86 ограничен только 4 ГБ виртуального адресного пространства. Есть несколько причин для этого. Во-первых, в x86 существует много контекстов, в которых для хранения адресов используются различные регистры. Два важных примера - указатель инструкций (EIP) и указатель стека (ESP). С 32-разрядным регистром на x86, виртуальные адреса могут быть только до (2 ^ 32) -1. Это 4 ГиБ. Другая причина ограничения 32-битного виртуального адреса состоит в том, что 32-битный виртуальный адрес - это все, что поддерживает механизм преобразования адресов (таблицы страниц и все такое). То же самое относится и к дескрипторам сегментов, хотя современные ОС их мало используют, они все еще находятся в пути "преобразования адресов" и не могут быть проигнорированы.

В Windows это обычно означает, что каждый процесс имеет до 2 ГиБов для своего кода и данных, а в ОС есть еще 2 ГБ для своего кода и данных. Каждый процесс, тем не менее, получает еще один экземпляр этих 2 ГиБ, поэтому общий объем VAS, используемый в системе во всех процессах, может быть намного выше, чем 4 ГиБ.

Тем не менее, ваш вопрос, кажется, сосредоточен на оперативной памяти. Если мы говорим о x86, и если под "памятью" писатель имел в виду ОЗУ, это означает, что писатель не знает о событиях, которые произошли в 1995 году (Pentium Pro, который первым реализовал расширение физических адресов - PAE и предшественник Xeons).

В целом, это означает, что они не знают, как работает виртуальная память. Они предполагают, что адреса ОЗУ ограничены регистрами общего назначения процессора, но это не так, если на процессоре включена подкачка - что всегда есть в любой современной ОС. Когда подкачка включена, каждый адрес, заявленный работающим кодом, преобразуется в физический адрес через набор таблиц, называемых таблицами страниц. Поэтому максимальный размер физического адреса ограничен размером «записи таблицы страниц», а не регистрами в ЦП.

В исходной схеме пейджинга, реализованной Intel на ia32, физические адреса ограничены 32-разрядными, как и виртуальные адреса. Однако, если ОС переводит ЦП в режим "PAE", физические адреса могут иметь ширину от 36 до 52 бит (в зависимости от семейства процессоров - в первой реализации PAE, на Pentium Pro и первых Xeon было 36 бит),

(Это не что-то новое. История отрасли заполнена процессорами, в которых размер физического адреса отличается от ширины регистра машины. Например, PDP-11 представляет собой 16-разрядный процессор, но поддерживает до 4 МБ ОЗУ. )

Таким образом, почти все современные 32-разрядные процессоры x86 могут адресовать до 64 ГБ ОЗУ (2 ^ 36 байт).

Однако обратите внимание, что платформа (чипсет и материнская плата) должна взаимодействовать в этом - многие материнские платы имеют ограничение ОЗУ ниже, чем может поддерживать ЦП. Проверьте руководство по mobo или спецификации.

Чтобы использовать более 4 ГБ ОЗУ, вам также потребуется операционная система, которая поддерживает это. 32-разрядные "клиентские" версии Windows XP SP2 и более поздних версий этого не делают - они ограничены 4 ГБ ОЗУ. (Windows-версия клиента - это все, что не имеет названия "Сервер" в своем названии.) Они также ограничены адресами RAM, которые умещаются в 32 бита.

Но дело не в том, что чип или ОС 32-битные, а из-за искусственного ограничения, скомпилированного в Windows Microsoft. Они сделали это потому, что обнаружили, что драйверы устройств некоторых производителей, в частности драйверы для видеокарт, вызывали сбои при использовании на машинах с ОЗУ более 4 ГБ:

[...] проблемная экосистема драйверов клиентов привела к тому, что [32-разрядные] клиентские выпуски решили игнорировать физическую память объемом более 4 ГБ, хотя теоретически они могут ее решить. - Руссинович, Соломон и Ионеску: Windows Internals, 6-е издание, часть 2, раздел "Ограничения памяти клиента Windows", стр. 321 (добавлено emph.)

Обратите внимание, что существуют 32-разрядные версии Windows Server, которые могут использовать более 4 ГБ ОЗУ. ДАЛЕЕ больше. Таким образом, 32-разрядная ОС не обязательно означает, что объем оперативной памяти ограничен 4 ГиБ (как часто утверждается). Ограничение 4 ГБ ОЗУ в клиентских выпусках Windows (на самом деле оно составляет чуть более 3 ГБ, если ваши устройства ввода-вывода занимают много физического адресного пространства) не является архитектурным ограничением. Это искусственное устройство, вставленное в систему для защиты от плохо написанных драйверов устройств сторонних производителей.

Что если у меня 8 ГБ ОЗУ, значит ли это, что это больше, чем нужно?

Если ваш BIOS определяет наличие 8 ГБ ОЗУ, то некоторые ОС смогут использовать все это. Но если вы используете 32-битную Windows, отличную от более дорогих версий Сервера, тогда да; ОС не будет использовать более 4 ГБ ОЗУ. В этом случае вам следует установить либо Linux, либо 64-разрядную версию Windows, чтобы использовать всю вашу оперативную память.

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