Ограничения памяти в 16, 32 и 64-битных системах

17

Теоретические пределы памяти в 16, 32 и 64-битных машинах следующие:

  • 16 бит = 65 536 байт (64 килобайта)

  • 32 бита = 4 294 967 296 байт (4 гигабайта)

  • 64 бита = 18 446 744 073 709 551 616 (16 эксабайт)

Я помню из DOS / Windows 3.11 дней, что 16-битная память могла быть разделена на сегменты, так что 16-битная машина могла получить доступ к большему объему памяти, чем 64 килобайта.

У меня есть машина с 16 ГБ памяти, и я загружаю 32-битную операционную систему и 64-битную операционную систему. Я могу получить доступ ко всем 16 ГБ из 64-битных, но только 3,21 ГБ в 32-битных.

Итак, мой вопрос: если 16-битные операционные системы допускают больший, чем 64-килобайтный доступ к памяти из-за сегментирования памяти, почему 32-битные машины не следуют одному и тому же тарифу?

Мэтью Лейтон
источник

Ответы:

15

Да, система называется расширением физического адреса (PAE) . Вот список операционных систем Windows и их максимального объема памяти. Любая 32-битная система, которая позволяет использовать более 4 ГБ ОЗУ, использует PAE для доступа к памяти (например, 32-битный Windows 2003 R2 Datacenter позволяет использовать 128 ГБ ОЗУ).


Фактически, для Windows 8 требуется процессор с поддержкой PAE и минимальные требования .


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

Скотт Чемберлен
источник
Ах, я слышал о PAE раньше, но никогда не исследовал это. Похоже, что он широко используется в серверной архитектуре, поэтому не относится к 32-битной установке Windows 7, поскольку в списке указано, что W7x86 допускает только до 4 ГБ
Мэтью Лейтон,
1
@ 0xC0000022L, если честно, я добавил лицензионную часть в качестве правки после его комментария, но из-за 4-минутного окна редактирования, похоже, я разместил его до того, как он оставил комментарий.
Скотт Чемберлен
1
PAE требует переключения таблиц страниц для работы, и это дорого с точки зрения производительности.
vonbrand
3
Это миф. Накладные расходы из-за PAE крошечные. И если вам не нравится PAE, вам действительно следует ненавидеть x64, потому что структура таблицы страниц на x64 выглядит точно так же, как PAE, просто с еще одним уровнем таблицы, добавленным сверху и большим количеством битов для PFN в PxE.
Джейми Ханрахан
1
PAE не был «удален в Windows 7, потому что он больше не нужен», он все еще присутствует в Windows 7 x86 - он просто присутствует по умолчанию, вместо того, чтобы включать его.
Джейми Ханрахан,
13

Вместо того, чтобы объяснять это сам, я позволю кому-то, кто должен поддерживать ядро ​​с поддержкой PAE, говорить своим очаровательным образом, Линус Торвальдс

Также имейте в виду, что поддержка PAE в 32-битных версиях Windows стоит больших денег. XP даже не сможет нормально использовать полные 4 ГБ ОЗУ, потому что MS решила не включать в нее функции PAE. Ядро, которое тесно связано, Windows 2003 Server, поддерживает PAE. Однако даже в этом случае ваша «Стандартная версия» будет поддерживать только до 4 ГиБ (но обходя дыру в памяти BIOS), в то время как более дорогие версии будут поддерживать до 64 ГБ ОЗУ. То же самое относится и к 32-битной Vista .

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


Просто примечание: ни один из существующих 64-битных процессоров на базе x86 не может даже физически обращаться ко всему диапазону 64-битного адресного пространства (для справки см. Этот вопрос и ответы).

0xC0000022L
источник
Хм, почему у меня создалось впечатление, что Линус действительно ненавидит HIGHMEM.SYS и PAE? : P
Каран
2
Я понимаю, что PAE будет неприятностью для любого кода, для которого требуется более пары гигабайт рабочего набора, и для кода системного уровня, который должен управлять несколькими задачами по 2 гигабайта или около того, но если только одному приложению не требуется более 2 концерты я бы ожидал, что PAE будет прозрачным. Кроме того, я думаю, что PAE также будет лучше, чем глобальное использование 64-битных указателей в случаях, когда требуется 3 гигабайта оперативной памяти общего назначения плюс большой дисковый кэш или диск временного хранения.
суперкат
Комментарии Линуса странные. Нет никакой связи между тем, как работает himem.sys и как работает PAE. Очень забавно видеть, как люди спорят за x64 и против адресации PAE ... когда режим x64 long просто берет схему PAE и добавляет еще один уровень таблицы страниц!
Джейми Ханрахан
@JamieHanrahan: ... по крайней мере два на более новых системах (из-за виртуализации), что открывает некоторые захватывающие возможности. Его (Линус) сравнения не совсем верны, но если это чужая концепция, метафоры могут помочь :) ... Я думаю, именно поэтому он выбрал это, чтобы высказать свою точку зрения.
0xC0000022L
2

8-битные процессоры обычно имели 16-битную адресную шину. (У Motorola была унифицированная адресная шина, ОЗУ и периферийные устройства ввода-вывода использовали одно и то же адресное пространство, Intel решила разделить их. В случае Intel пределы адресов ввода-вывода 8088 и 8086 перенесли ограничения с 8080 8085 процессоров.)

Intel 8088 и 8086 имели 20-битную адресную шину памяти (1 МБ), а Motorola 68000 - 24-битную адресную шину (16 МБ). IIRC, [80] 286 перешел на 24-битную адресную шину. Позднее обе расширились до 32-битной адресной шины с [80] 386 и 68020 соответственно.) С чипами Pentium адресная шина расширилась до 64-битной. (Я думаю, что чипы Motorola / IBM для венчурного PowerPC также используют 64-битную адресную шину.)

Объем памяти, доступный ниже и вплоть до максимума, к которому напрямую может обращаться ЦП, ограничивался только поддерживаемыми аппаратными чипами (чипсетами) и ОС. В прошлом Билл Гейтс был известен тем, что заявлял, что никому не нужно больше 640 КБ ОЗУ, поэтому DOS никогда не развивался для прямого доступа к большему объему ОЗУ. С HiMem.sys и EMM386 DOS был расширен для доступа к большей «верхней» памяти, а EMM386 использовался для прямого доступа ко всей доступной оперативной памяти. HiMem.sys обладал меньшей гибкостью и мог в основном использовать дополнительную память для хранения.

Для памяти, превышающей этот предел, требуется MMU (модуль управления памятью), чтобы разбить память на сегменты и отобразить ее в адресуемую область памяти ЦП. Именно так CoCo 3, Commodore 128 и другие 8-битные компьютеры могут получить доступ к более чем 64 КБ ОЗУ.

Более выгодным сейчас является использование виртуальной памяти для расширения пределов физической памяти, хотя и с учетом ограничений, установленных ОС.

Уильям
источник
1

Потому что нет практической причины для этого. Расширения физических адресов предоставляют практически те же функциональные возможности, и их использование по-прежнему очень ограничено среди пользователей. В дни Windows 3.1 были ограничения, которых сегодня просто нет.

OCDtech
источник
1
Это действительно не достаточно информации для резервного копирования ваших заявлений. Windows 3.1 - это 16-разрядная операционная система. Надо помнить, что в 1992 году 2 МБ памяти было более 300 долларов.
Ramhound
Вы комментируете 22 февраля, и объяснения Скотта Чемберлина в значительной степени охватывают то, к чему я клонил. Они опускают описания того, почему расширяемая сегментированная нумерация страниц использовалась в DOS / Win16, но не в более поздних версиях Windows. Я не включил это, потому что это не способствовало бы прямому ответу на вопрос ОП.
OCDtech
Это мое мнение, что ответы должны стоять в одиночку. Ваш комментарий добавляет достаточно информации, чтобы решить мои проблемы с вашим ответом.
Ramhound
1
@OCDtech: Сегментированная модель 8086 позволила бы объектно-ориентированному языку использовать 2-байтовые ссылки на объекты для идентификации объектов, выровненных по 16-байтовым границам, но языки не были хорошо оснащены для эффективного использования сегментов. Модель 80286 накладывает чудовищно большие накладные расходы на такие программы, и то, как она была расширена на 80386, сделает схему сегмент на объект совершенно бесполезной.
суперкат
0

Теоретические пределы памяти в 16, 32 и 64-битных машинах следующие ...

Принципиальным недостатком здесь является представление о том, что «битовая ширина» процессора, которая обычно равна размеру регистров общего назначения машины, обязательно равна ширине адресов ОЗУ.

В x86 с включенной подкачкой, но без PAE, адреса, которые используют программный код и код операционной системы, называются Intel «линейными адресами» - мы обычно называем их «виртуальными адресами». Их ширина 32 бита. Это позволяет виртуальное адресное пространство 4 ГиБ.

Но это более или менее совпадение, просто артефакт формата записей таблицы страниц, что размер физического (RAM) адреса также составляет 32 бита.

С PAE последний составляет 36 бит (сначала ... шире в последующих реализациях). Таким образом, то, что это, например, «32-разрядный компьютер», не означает, что адреса физической памяти ограничены 32-разрядными.

В отрасли существует длинная история машин, чья «битовая ширина» не соответствует их максимальному размеру физического адреса. Например, архитектура VAX определяет 32-разрядную машину, а виртуальные адреса (которые являются адресами, используемыми кодом после включения преобразования адресов) действительно имеют ширину 32 бита ... но физические адреса VAX имеют ширину всего 30 бит - и половина физического адресного пространства отводится регистрам устройств ввода-вывода, поэтому максимальный объем оперативной памяти составил всего 512 МБ.

Даже без аппаратного обеспечения преобразования адреса не обязательно, что «битовая ширина» машины определяет максимальный адрес ОЗУ. Пример: CDC серии "upper 3000" были 36-битными машинами. Как вы думаете, они могли бы адресовать 64 ГиБ оперативной памяти? Не вряд ли! Эти машины появились в середине 60-х! Черт, в те дни у нас не было даже 64 ГБ дискового пространства . (Серия CDC 6000 была 60-битной машиной. Нужно ли продолжать?)

Джейми Ханрахан
источник
И не забывайте о системах, которые не используют 8 бит на ячейку RAM. (EG: 16/16 = максимум 128K, 32/32 = максимум 16G, 32/64 = максимум 32G)
SkyCharger