Почему объем оперативной памяти, используемой компьютером, ограничен битами процессора?
Недавно я думал о том, как 32-разрядные процессоры могут поддерживать только до 4 ГБ памяти, и я не мог понять, почему количество бит, которое имеет процессор, ограничивает его память. Как и другие вопросы, я понимаю, что двоичное число из 32 цифр может адресовать только до 4 ГБ. Но почему компьютер не может использовать две переменные для ссылки на память и эффективно "действовать", как будто она 64-битная (вроде как 32-битные процессоры могут использовать 64-битные целые числа)?
Возможно ли это и приведет ли это к снижению производительности? Если это снизит производительность, что, если операционная система использует "поддельные" 64-битные ссылки на память с некоторыми программами, а не в масштабе всей системы?
3 ответа
Статья в Википедии о PAE: "В первоначальных выпусках Windows XP и Windows XP SP1 использовался режим PAE, позволяющий расширять объем ОЗУ за пределы адреса в 4 ГБ. Однако это привело к проблемам совместимости со сторонними драйверами, из-за которых Microsoft удалила эту возможность в Windows XP с пакетом обновления 2 ". Некоторые "версии 32-битной Windows (Windows XP SP2 и более поздние версии, Windows Vista, Windows 7) ограничивают физическое адресное пространство первыми 4 ГБ для совместимости драйверов с помощью механизма ограничения лицензирования". "Microsoft Windows поддерживает PAE, если загружается с соответствующей опцией, но, по словам Джеффа Чаппелла, Microsoft может ограничить 32-разрядные версии Windows 4 ГБ в соответствии со своей политикой лицензирования".
Блог, приписываемый Марку Руссинову: "32-битная Windows будет продолжать игнорировать память над ней, потому что все еще есть некоторые трудно измеримые риски, а OEM-производители (или, по крайней мере, должны) переходить на 64-битную Windows, где это не проблема".
Windows 2000 DataCenter поддерживает 32-разрядные версии до 32 ГБ и более новые версии до 64 ГБ.
Позже в статье в Википедии обсуждается FreeBSD и говорится: "Не все драйверы поддерживают более 4 ГБ физической памяти; эти драйверы не будут корректно работать в системе с PAE". Таким образом, проблема совместимости драйверов преследует больше, чем Microsoft Windows.
So, in conclusion, there is no technical reason why it would be absolutely impossible for software to refer to more than 32 bits of address space. Advancements/workarounds, like what you theorize, could exist, but such support has not been widely deployed, apparently due to compatibility and concerns of stability.
Почему объем оперативной памяти, используемой компьютером, ограничен битами процессора? Это не так. Исторически это не было с примерами, где размер адреса был больше или меньше, чем "разрядность" процессора.
Посмотрите на 8-битные процессоры, такие как 6502 и Z80, которые адресовали 64 КБ. 16-битный 8086 адресован 20 битам, а 16-битный 80286 24 битам.
С другой стороны, 32-битная Motorola 68000 имела 32-битную адресацию, но работала только с 24-битными проводами, ограничивая ее до 16 МБ. Каков подход к 64-разрядным чипам, о которых я знаю, они не используют 64 линии для внешнего мира.
Когда создавались 32-битные архитектуры, объем памяти 4 ГБ был намного выше понимания. 80386 был представлен в 1985 году. В 1996 году Microsoft выпускает MS-DOS 3.2, которая по-прежнему ограничивает максимальный размер раздела жесткого диска 32 МБ. Мало кто задумывался о жестких дисках GiB, не говоря уже о памяти. SPARC был представлен в 1987 году. PowerPC 601 в 1992 году, сейчас мы приближаемся к жестким дискам GiB, если их еще нет. Рабочие станции Unix могут иметь двухзначный объем оперативной памяти MiB. Потребность в более чем 4 ГБ была еще далека. Добавление оборудования и сложности поддержки более чем 32-разрядных адресов не стоило того.
После того, как архитектура заложена и используется, вы не можете легко изменить основы, такие как размер адреса. Можно добавить, например, PAE на x86 или контроллеры внешней памяти на 6502.
Отредактировано, чтобы добавить И произошло и обратное. IBM 360, представленная в 1964 году, была 32-битной машиной с 24-битной адресацией. CRAY-2, представленный в 1985 году, представлял собой 64-битную машину с 32-битной адресацией. (Если я правильно читаю эту брошюру, см. "Архитектура и дизайн", начальная страница 6.) Обратите внимание, что CRAY-2, по-видимому, адресуется с 64-битным словом, поэтому 32-битная адресация даст адресное пространство 8 * 4 Ги или 32 ГиБ.
Еще одна заметка
Я говорил о адресном пространстве. Название вопроса о RAM. Объем ОЗУ без внешнего контроллера памяти, который перераспределяет память, будет ограничен количеством проводов адресной линии, идущих от ЦП. Некоторые процессоры имели меньше адресных строк, чем битов в их адресном пространстве. Известным примером является Motorola 68000, который имел 32-разрядное адресное пространство с 24 адресными строками. Другим примером является Intel 80386SX, опять же 32-битная адресация и 24 адресные линии.
Процессор спроектирован так, чтобы использовать одну переменную для указателя инструкций и одну переменную для указателя стека. Весь код написан в предположении, что если вы начали играть с двумя переменными, вы бы разбили каждый бит кода там.
Что вы можете сделать, так это изменить, какой объем памяти 4 ГБ вы используете одновременно. Это PAE, о которой говорит TOOGAM. Любая программа по-прежнему будет ограничена 4 ГБ, если она не перепрыгнет через много циклов, чтобы получить доступ к дополнительной памяти (и ни один программист приложений не сделал бы этого в наши дни - если вы делаете что-то, что действительно требует более 4 ГБ, у вас есть Достаточно трудная задача, вы можете диктовать пользователю условия: 64 бита или я не запускаюсь), и вы вводите головную боль в межпроцессное взаимодействие. Совместное использование фрагмента чистых данных - это нормально, совместное использование фрагмента данных, содержащего указатель, вызовет проблемы, поскольку указатель будет указывать на неправильное место в адресном пространстве второй программы. Это является причиной головной боли водителя, которую упоминает TOOGAM.