Показать сообщение отдельно
Старый 31.10.2012, 23:39   #2267
Карполя
Техподдержка
Медаль пользователю. ЗОЛОТОМедаль автору. ЗОЛОТО Форумчанин
Аватар для Карполя
Регистрация: 25.01.2008
Адрес: Санкт-Петербург
Сообщения: 1,314
Репутация: 298
Quaker сказал(a):
Вот тут и вспоминается старый добрый ДОС.
Загрузил драйверочек emm386.exe или himem.sys и вуаля... получил доступ к верхней памяти
Почему нечто похожее не сделают для win86?

Потому что 4 ГБ - это системное ограничение адресации 32-битных систем. Последний гигабайт был отведен под драйвера. Поскольку шина памяти едина для системной памяти и для драйверов, т.е. адресное пространство едино, то каждый конкретный адрес (например, равный 3,5 ГБ) может принадлежать только одному устройству - либо оперативке, либо аппаратному устройству. Соответственно, в Винде при установке драйверов адресация к оперативе с теми же адресами, что используются драйверами отключено. Конкретные адреса устройств заложены производителями аппаратных устройств. Анализировать каждый раз занятые железом адреса, чтобы, к примеру, от 3,1 до 3,2 ГБ отдать некоему аппаратному устройству, от 3,2 до 3,3 - оперативке, от 3,3 до, скуажем, 3,45 - другому аппаратному устройству и т.д - сложно. Поэтому ОС определяет самый нижний адрес аппаратных устройств и блокирует для памяти всё, что выше.

Кстати, в DOS было аналогично: 384 кБ было отведено для ПЗУ (БИОСа) и картриджей (в первых IBM PC можно было устанавливать картриджи с программами, записанными в ПЗУ, например, аппаратный Бейсик; впоследствии это позволило использовать видеоадаптеры с EGA и VESA: ПЗУ видеокарт с БИОСом для EGA подключались с использованием механизма подключения картриджей). В результате даже с himem.sys и emm386.exe для оперативки могли использоваться только первые 640 кБ и область свыше 1 МБ - 384 кБ, отведенные для драйверов, использовать было невозможно (только отдельными окнами по 64 МБ, отображавшими логические адреса на другие физические.

И, т.к. архитектура IBM PC не менялась, то даже при современной гигабайтной памяти если и можно использовать "дыры" в 4-м гигабайте, то также окнами по 64 МБ. А, учитывая, что для современных программ 64 МБ - это ничто, потребовалось бы для отображения верхней памяти использовать слишком много окон, получалась бы сильная дефрагментация памяти и, как следствие, тормоза.

Тем более, как и в эпоху IBM PC XT, когда Билл считал, что:

"Билл Гейтс сказал(a):
640K ought to be enough for anybody

при разработке Windows 95 и Windows NT также посчитали, что «3 ГБ должно быть достаточно для каждого» и с отображением в верхнюю память (от 3 до 4 ГБ) заморачиваться не стали.

Еще раз отмечу, что 4 ГБ - это лимит 32-битовой версии, он такой же и в Windows 7 (и Windows 8).