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

67799
series0ne

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

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

  • 32 бита = 4, 294, 967, 295 байтов (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-битные машины не следуют одному и тому же тарифу?

10

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

11
0xC0000022L

Вместо того, чтобы объяснять это сам, я позволю кому-то, кому нужно поддерживать ядро ​​с поддержкой 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-битного адресного пространства (для справки см. Этот вопрос и ответы).

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

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


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


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

Ах, я слышал о PAE раньше, но никогда не исследовал это. Похоже, что он широко используется в серверной архитектуре, поэтому не относится к 32-битной установке Windows 7, так как в списке указано, что W7x86 допускает только до 4 ГБ series0ne 11 лет назад 0
@ series0ne: это * проблема * лицензирования. Скотт даже упоминает об этом в своем ответе. 0xC0000022L 11 лет назад 0
@ 0xC0000022L, если честно, я добавил лицензионную часть в качестве правки после его комментария, но из-за 4-минутного окна редактирования, похоже, я разместил его до того, как он оставил комментарий. Scott Chamberlain 11 лет назад 1
@ series0ne PEA также применяется для 32-битной Windows XP, а не только для серверных ОС. Он был удален в Windows 7 (и, возможно, уже в Vista), потому что он больше не нужен. 64-битные процессоры используются с ~ 1979 года, и теперь они настолько распространены, что можно с уверенностью предположить, что каждый вновь установленный компьютер имеет один, и, таким образом, версию X64 можно использовать с гораздо меньшими хлопотами. Hennes 11 лет назад 0
PAE требует переключения таблиц страниц для работы, и это дорого с точки зрения производительности. vonbrand 11 лет назад 1
Ищите 32-битные тесты производительности по сравнению с PAE, и вы увидите, что PAE не является хорошим решением. http://www.phoronix.com/scan.php?page=article&item=ubuntu_32_pae&num=1 phuclv 11 лет назад 0
Это миф. Накладные расходы из-за PAE крошечные. И если вам не нравится PAE, вам действительно следует ненавидеть x64, потому что структура таблицы страниц на x64 выглядит точно так же, как PAE, просто с еще одним уровнем таблицы, добавленным сверху и большим количеством битов для PFN в PxE. Jamie Hanrahan 9 лет назад 3
PAE не был «удален в Windows 7, потому что он больше не нужен», он все еще присутствует в Windows 7 x86 - он просто присутствует по умолчанию, а не включен в опцию. Jamie Hanrahan 9 лет назад 1
Что насчет Linux? SaidbakR 8 лет назад 0
1
OCDtech

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

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

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 КБ ОЗУ.

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

0
Jamie Hanrahan

Теоретические ограничения памяти в 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. (Например: 16/16 = максимум 128 КБ, 32/32 = максимум 16 ГБ, 32/64 = максимум 32 Г) SkyCharger 7 лет назад 0

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