Теоретические пределы памяти в 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-битные машины не следуют одному и тому же тарифу?
Вместо того, чтобы объяснять это сам, я позволю кому-то, кто должен поддерживать ядро с поддержкой 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-битного адресного пространства (для справки см. Этот вопрос и ответы).
источник
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 КБ ОЗУ.
Более выгодным сейчас является использование виртуальной памяти для расширения пределов физической памяти, хотя и с учетом ограничений, установленных ОС.
источник
Потому что нет практической причины для этого. Расширения физических адресов предоставляют практически те же функциональные возможности, и их использование по-прежнему очень ограничено среди пользователей. В дни Windows 3.1 были ограничения, которых сегодня просто нет.
источник
Принципиальным недостатком здесь является представление о том, что «битовая ширина» процессора, которая обычно равна размеру регистров общего назначения машины, обязательно равна ширине адресов ОЗУ.
В 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-битной машиной. Нужно ли продолжать?)
источник