Удлинить базовый адрес в селекторе 386, чтобы превысить лимит памяти 4 ГБ в 32-битной ОС? - PullRequest
0 голосов
/ 02 августа 2010

Поскольку требования к памяти быстро растут, сегодня все больше систем требует 64-битных машин для доступа к еще большему объему оперативной памяти.

FWIK в защищенном режиме 386, указатель памяти состоит из двух частей: базовый адрес (32-разрядный), указанный селектором сегмента, и адрес смещения (32-разрядный), добавленный к базовому адресу.

Чтобы перекомпилировать все программы в 64-битной среде, нужно проделать большую работу, например, для программ на C / C ++, машинно-зависимый тип int (32-битный в 32-битноммашина, и 64-битная на 64-битной машине) вызовет проблемы, если она не используется правильно.Даже без проблем перестраивается, так как требования к памяти постоянно растут, например, когда-нибудь мы будем использовать 128-битные машины, и нужно ли нам заново перестраивать все программы, чтобы соответствовать новому размеру слова?

Если мы просто расширим базовый адрес до 64-битного, сделав таким образом сегмент, например, окно 4 ГБ во всей ОЗУ, нам даже не понадобится 64-битная ОС, не так ли?Большинству приложений / процессов не потребуется доступ к памяти 4G + на стороне сервера, например, если файловый сервер использует 20 ГБ ОЗУ для целей кэширования, он может быть разделен на 10 процессов с каждым доступом 2 ГБ, таким образом, 32-разрядный указательдовольно.И поместите каждый в другой сегмент, чтобы покрыть 20 ГБ памяти.

Расширение предела сегмента прозрачно для программ верхнего уровня, что нужно сделать только для процессора и ОС, если мы можем позволить Linux поддерживать выделение памяти на разных 64-битных сегментах (хотя в настоящее время сегментбазовый адрес еще 32-разрядный), мы можем легко использовать 1 ТБ ОЗУ на 32-разрядной машине, не так ли?

Я прав?

Ответы [ 2 ]

3 голосов
/ 02 августа 2010

Доступ к памяти осуществляется на CPU с использованием инструкций по сборке.Если для адресации сегмента памяти у процессора есть 32 бита, он может адресовать до 4 ГБ, но не более.Чтобы расширить это поведение, процессору требуется 64-битный регистр.

32-битная ОС имеет то же ограничение.64-разрядная ОС может выполнять 32-разрядные программы и получать от них доступ к базовому адресу, превышающему 4 ГБ, но для этого требуется 64-разрядный процессор.

Как заключение, ограничение окна памяти, доступного для ОС (и косвенно)процесс, запущенный в этой ОС), ограничены шириной регистра процессора в битах.

Итак, вы не правы.

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

0 голосов
/ 03 августа 2010

Сегодня вы можете получить именно этот эффект, запустив 32-битные процессы в 64-битном ядре. Каждый 32-разрядный процесс имеет только 4 ГБ виртуального адресного пространства, но эти адреса могут быть сопоставлены в любом месте физической памяти, доступной для ядра. Это не сделано с использованием сегментации, хотя; это просто делается с помощью пейджинга.

...