вторник, 16 июня 2009 г.

А почему это размер виртуального адресного пространства равен 4 Гб?

Это перевод Why is the virtual address space 4GB anyway? Автор: Реймонд Чен. Альтернативный перевод.

Размер адресного пространства ограничен числом уникальных значений указателей. Для 32-х битного процессора 32-х битное целое может представлять 232 различных значений. Если вы позволите каждому такому значению адресовать свой байт в памяти, то вы получите 232 байт или 4 Гб.

Если вы хотели отбросить плоскую модель памяти и работать с селекторами, тогда вы могли бы комбинировать 16-ти битный селектор с 32-х битным смещением, чтобы получить комбинированный 48-ми битный указатель. Это созаёт теоретический максимум в 248 различных значений указателя, что даёт вам 256 Тб памяти.

Однако, этот теоретический максимум не может быть достигнут на процессорах класса Pentium. Одной из причин является то, что младшие биты в значении сегмента кодируют информацию о типе селектора. В результате, из 65536 возможных значений у вас остаётся только 8191 из них, которые доступны в режиме пользователя. Это отбрасывает вас на 32 Тб.

Но действительное ограничение на адресное пространство при использовании модели селектор:смещение - это то, что каждый селектор просто описывает подмножество плоского 32-х битного адресного пространства. Так что даже если бы вы использовали все 8191 селекторов, они все были бы просто представлениями одного и того же 32-х битного адресного пространства.

(Кроме того, я серьёзно сомневаюсь, что люди захотят вернуться к былым дням использования сегментной модели памяти).

Ограничение в 2 Гб больше не существует в 64-х битных Windows; пользовательское виртуальное адресное пространство - теперь неимоверные 8 Тб. Даже если бы вы выделяли мегабайт памяти в секунду, у вас бы ушло 3 месяца, чтобы исчерпать такое адресное пространство. Заметьте, однако, вы можете установить флаг /LARGEADDRESSAWARE:NO для вашей 64-х битной программы, чтобы сообщить операционной системе, что программа будет жить ниже границы в 2 Гб. Не очень ясно, зачем вообще вы захотите сделать это, поскольку вы теряете бонусы 64-х битного адресного пространства, но при этом используете 64-х битные указатели. Это как если вы платите за кабельное телевидение, но не смотрите его.

Вооружённые тем, что вы уже узнали к этому моменту, может быть, вы сможете ответить на следующий запрос от одного из наших клиентов:
В одном из наших файлов boot.ini есть ключ /7GB. Наш консультант сказал нам, что мы должны установить его на 1 Гб меньше, чем у нас есть системной памяти. Поскольку у нас установлено 8 Гб, 8 Гб - 1 Гб = 7 Гб. Консультант сказал, что эта настройка позволит приложениям выделать больше чем 2 Гб памяти. Мы бы хотели, чтобы Microsoft прокомментировала этот анализ.

Комментариев нет:

Отправить комментарий

Можно использовать некоторые HTML-теги, например:

<b>Жирный</b>
<i>Курсив</i>
<a href="http://www.example.com/">Ссылка</a>

Вам необязательно регистрироваться для комментирования - для этого просто выберите из списка "Анонимный" (для анонимного комментария) или "Имя/URL" (для указания вашего имени и ссылки на сайт). Все прочие варианты потребуют от вас входа в вашу учётку (поддерживается OpenID).

Пожалуйста, по возможности используйте "Имя/URL" вместо "Анонимный". URL можно просто не указывать.

Ваше сообщение может быть помечено как спам спам-фильтром - не волнуйтесь, оно появится после проверки администратором.