Почему ОС не может использовать целые 64-битные адресации? Почему только 48 бит? - PullRequest
17 голосов
/ 10 июля 2010

Я читаю "Понимание ядра Linux".

Пейджинг для 64-битных архитектур

Как мы видели в предыдущем разделы, двухуровневый пейджинг обычно используется 32-битными микропроцессорами. Двухуровневый пейджинг, однако, не подходит для компьютеров, которые принимают 64-битная архитектура. Давайте использовать мысленный эксперимент, чтобы объяснить, почему:

Начните с предположения о стандартном размере страницы из 4 кб. Потому что 1 КБ охватывает диапазон из 2 10 адресов, 4 КБ охватывает 2 12 адреса, поэтому поле смещения 12 биты. Это оставляет до 52 бит линейный адрес для распределения между таблицей и справочником поля. Если мы сейчас решим использовать только 48 из 64 бит для адресации (это ограничение оставляет нас с удобное 256 ТБ адресного пространства!) , остальные 48-12 = 36 бит будут должны быть разделены между таблицей и Справочные поля. Если мы сейчас решим зарезервировать 18 бит для каждого из этих двух поля, как каталог страницы и Таблицы страниц каждого процесса должны включает 2 18 записей, то есть более 256 000 записей.

  1. «Если мы сейчас решим использовать только 48 из 64 битов для адресации». Зачем? & Почему только 48 бит? Почему не какой-то другой номер?

  2. Ну, я обычный пользователь ПК и программист. Мне просто трудно поверить, что 32-битная адресация, то есть 4 ГБ (2 ГБ / 3 ГБ, чтобы быть более правильным) адресного пространства на процесс, является пределом. Если вы действительно столкнулись с этим ограничением. Пожалуйста, дайте мне пример.

  3. Что это за предел для Windows?

  4. Я знаю, что виртуальная память! = Контакты физической памяти и адреса процессора не имеют ничего общего с виртуальной памятью. Это совершенно другой вопрос. Как узнать количество контактов адреса (= размер шины адреса) для процессора. http://ark.intel.com характеристики процессора не включают эту спецификацию.

Ответ:

См. Ответ Пола Беттса для разумного ответа на 1-й вопрос.

Ответы [ 7 ]

8 голосов
/ 10 июля 2010

Ни один из этих ответов не является правильным, причина того, что ОС не используют полные 64-битные версии, заключается в том, что таблицы страниц были бы намного больше (64-битные уже имеют до 3 уровней таблиц страниц), и нетпричина, чтобы заплатить дополнительное косвенное обращение, достаточно 48 бит.48 битов также удобно, потому что вы получаете дополнительные биты для хранения флагов (тегирование указателя)

6 голосов
/ 10 июля 2010

"Если мы сейчас решим использовать только 48 из 64 битов для адресации".Зачем?И почему только 48 бит?Почему не какой-то другой номер?

Системные архитекторы делают компромиссы.256 ТБ кажется более чем достаточным пространством для адресного пространства 1 процесса.Запомните виртуальный адрес! = Физический адрес, и, вообще говоря, каждый процесс имеет свое собственное адресное пространство.

Поскольку указатели являются 64-битными, это больше относится к производительности, чем к чему-либо еще.Если & когда 48 бит становится ограничением, ОС может быть настроена на использование большего количества бит 64-битного адресного пространства без нарушения несовместимости приложений.На данный момент архитекторы просто покупают себе очень удобное время.

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

Как узнать количество выводов адреса (= размер шины адреса) для процессора.http://ark.intel.com характеристики процессора не включают эту спецификацию.

Это по большей части не имеет значения.Это способ для процессора реализовать различные схемы физической адресации.64-разрядный процессор может получить шины внешнего адреса / данных для своего полного адресного пространства с 64, 32, 16, 8, 4, 2 или 1 контактом адреса, если шина является синхронной и биты адреса мультиплексируются во времени.Опять же, виртуальный адрес! = Физический адрес;64-битная виртуальная адресация может быть реализована с 48-битными или 32-битными физическими адресами (только если вы будете ограничены 2 48 или 2 32 словами памяти).

обновление: если вы действительно хотите знать, вы должны взглянуть на таблицу данных каждого рассматриваемого процессора.Например, Intel Core 2 Duo - в разделе 4.2 таблицы данных говорится о сигналах - адресная шина имеет ширину 36 бит (но на самом деле это 33 сигнальных линии; ширина данных составляет 64 бита = 8 байтов)поэтому остальные 3 строки, вероятно, не нужны при правильном выравнивании данных)

Ну, я обычный пользователь ПК и программист.Мне просто трудно поверить, что 32-битная адресация, т.е. 4 ГБ (2 ГБ / 3 ГБ, чтобы быть более правильным) адресного пространства на процесс, является пределом.Если вы действительно столкнулись с этим пределом.Пожалуйста, дайте мне пример.

Два слова: файлы с отображением в памяти .

5 голосов
/ 10 июля 2010

В настоящее время в архитектуре x86-64 для этого не используется более 48 бит - так что это удобное число для выбора, и оно автоматически равно для Windows.

2 голосов
/ 10 июля 2010

Я думаю, что самый простой ответ - закон Мура.

Закон Мура в основном гласит, что стоимость микросхем уменьшается вдвое каждые 18 месяцев. Есть несколько способов интерпретировать это: объем памяти, установленной на ПК, имеет тенденцию удваиваться каждые 18 месяцев. Эффективная скорость удваивается (по крайней мере, если взять ядра * МГц, а не только МГц).

В любом случае, у нас просто действительно не хватает 32-битного адресного пространства, поэтому скачок с 32 до 48 означает, что на аппаратной стороне мы выделили пространство расширения примерно для 16 итераций закона Мура, что составляет около 20 года.

Я совершенно уверен, что, хотя некоторые ПК могут быть поставлены на 10-летнюю отметку, 20-летний запас расширения кажется достойным компромиссом: компьютеры через 20 лет будут другими - они не будут использовать одни и те же процессоры и Шины RAM, как и 20 лет назад. Проектирование запаса мощности на интерфейс более 20 лет просто глупо из-за разработки, которая никогда не будет использоваться.

И это не так уж и мало, так как существующее оборудование рискует слишком быстро устареть.

2 голосов
/ 10 июля 2010

Мне просто трудно поверить, что 32-разрядная адресация, то есть 4 ГБ (2 ГБ / 3 ГБ, чтобы быть более правильным) адресного пространства на процесс, является пределом.Если вы действительно столкнулись с этим пределом.Пожалуйста, приведите мне пример.

Более эффективно (быстрее) получать данные из ОЗУ, чем с диска.

Скорость работы SQL-сервера частично зависит от объема данных (например, сколько его индекса и страниц данных) он может хранить в оперативной памяти, а не на диске.

Таким образом, базы данных SQL (например) могут работать быстрее на машинах с ОЗУ более 4 ГБ.

То же самое верно для других типов серверов (например, файловых серверов, HTTP-прокси и т. Д.), Которые могут быть быстрее, если они могут иметь больший кэш ОЗУ.

1 голос
/ 11 июля 2010

Мне просто трудно поверить, что 32-битная адресация, т.е. 4 ГБ (2 ГБ / 3 ГБ, чтобы быть более правильным) адресного пространства на процесс, является пределом. Если вы действительно столкнулись с этим пределом. Пожалуйста, дайте мне пример.

Его больше не существует (за исключением некоторых старых персональных компьютеров сотрудников), но я работал над набором программного обеспечения под названием RealiMation еще в конце 1990-х - начале 2000-х годов. Это был 3D-движок реального времени для визуализации и симуляции. Один из наших клиентов регулярно создавал высокодетализированные модели с пределом памяти 2 ГБ. Мы загружали текстуры «на лету» по мере необходимости и должны были добавлять код для проверки ошибок выделения памяти, чтобы мы могли продолжить отображение модели, хотя и без текстур.

0 голосов
/ 04 февраля 2014

С точки зрения аппаратного обеспечения, еще одним соображением является выравнивание.

Если вам нужен тип данных длиной более 4 байтов, скажем 6, вам нужно поместить их в 8-байтовые границы, чтобы получить их в одной инструкции. Если вы не выравниваете, вам нужно выполнить битовую маскировку и сдвиг и добавить проверки для этого в коде (сборки).

Многие люди были недовольны переходом на 64-разрядную версию, что их программы потребляли гораздо больше памяти. Они бы имели требуемых 48-битных указателей, и если бы не было ограничений на выравнивание, производители ЦП, вероятно, сделали бы 48-битную архитектуру.

Обратите внимание, что если вы так жаждете памяти, что хотите, чтобы ваши указатели составляли 6 байтов, есть способы сделать это. Но есть штраф за время выполнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...