каждый из которых может содержать до 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-версия клиента - это все, что не имеет названия «Сервер» в своем названии.) Они также ограничены адресами ОЗУ, умещающимися в 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, чтобы использовать всю вашу оперативную память.