Соотношение между размером регистров процессора и основной памяти

1338
Michael

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

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

0
Вы знаете, как работают инструкции по сборке? «Так что любая инструкция в этом регионе может быть получена за один такт?» - Вы понимаете, что это не гарантировано, верно? Ramhound 8 лет назад 0
Я изменил свой пост. Спасибо Michael 8 лет назад 0
Расширение физического адреса (PAE) или другие подобные приемы можно использовать для адресации более 4G памяти на 32-разрядном чипе. thrig 8 лет назад 0
Что именно вы имеете в виду, когда спрашиваете: «Значит ли это, что это более чем необходимо?» 32-разрядный процессор, а также 32-разрядная операционная система не может обрабатывать более 4 ГБ памяти. Ramhound 8 лет назад 0

1 ответ на вопрос

2
Jamie Hanrahan

каждый из которых может содержать до 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, чтобы использовать всю вашу оперативную память.

Похожие вопросы