OSDev
http://osdev.su/

Как из режима SMM получить доступ к памяти > 4Gb
http://osdev.su/viewtopic.php?f=5&t=566
Страница 1 из 1

Автор:  Golan [ 29 май 2012, 10:22 ]
Заголовок сообщения:  Как из режима SMM получить доступ к памяти > 4Gb

Теоретически код SMM должен иметь доступ ко всем аппаратным ресурсам, это подразумевется по определению. Тем не менее, документация Intel четко говорит о том, что сегменты в этом режиме имеют лимиты = 0xFFFFFFF. Выходит, что этот режим не такой уж и "привилегированный"? Или есть какие-то обходные пути?

Автор:  SII [ 29 май 2012, 11:26 ]
Заголовок сообщения:  Re: Как из режима SMM получить доступ к памяти > 4Gb

SMM появился в 80386SL, когда о выходе за пределы 32-разрядного физического адреса и мыслей не было. Где-то слышал, что современные BIOSы при необходимости адресации за пределами этой памяти временно переключаются из SMM в длинный режим, а потом возвращаются обратно (естественно, делается это с полностью запрещёнными прерываниями).

Автор:  pavia [ 29 май 2012, 11:51 ]
Заголовок сообщения:  Re: Как из режима SMM получить доступ к памяти > 4Gb

SMM нужен в основном для управления электро питанием, до тех пор покан не включиться драйвер ACPI. Плюс эмуляция железа. Пока нет железа которое работает выше 4ГБ поэтому не актуально и ещё лет 10-20 будут не актуаьно. А там глядишь квантовые компьютеры пойдут.

Автор:  grindars [ 29 май 2012, 12:06 ]
Заголовок сообщения:  Re: Как из режима SMM получить доступ к памяти > 4Gb

SMI-обработчики BIOS-ов вполне успешно переходят в защищенный режим из режима SMM (который есть подвид реального). Причем выходить обратно не нужно: инструкция RSM сбрасывает режим сама. Попробуйте перейти из обработчика в 64-битный режим, по идее должно отработать нормально. Небольшая заморочка может быть со страничной адресацией, но можно поставить 1 ГБ страницы, тогда таблиц будет меньше.

Автор:  418ImATeapot [ 29 май 2012, 22:33 ]
Заголовок сообщения:  Re: Как из режима SMM получить доступ к памяти > 4Gb

А зачем вам SMM (если не секрет)?

Если для личных нужд, тогда понятно. А если хотите разобраться:
информация к размышлению: в английской вики написано что отдельные SMBIOSы имеют проблемы с Long Mode:
http://wiki.osdev.org/%228042%22_PS/2_Controller#USB_Legacy_Support писал(а):
The SMM BIOS that's providing the PS/2 USB Legacy Support may not support extended memory techniques or Long Mode and may cause system crashes.

Т. е. архитектура ПК построена так, что память выше 4Гб BIOSу и не нужна. И потом, если ОС поддерживает Long Mode, вряд ли она будет использовать Legacy Support.

Автор:  Golan [ 02 июн 2012, 15:28 ]
Заголовок сообщения:  Re: Как из режима SMM получить доступ к памяти > 4Gb

grindars писал(а):
SMI-обработчики BIOS-ов вполне успешно переходят в защищенный режим из режима SMM (который есть подвид реального). Причем выходить обратно не нужно: инструкция RSM сбрасывает режим сама. Попробуйте перейти из обработчика в 64-битный режим, по идее должно отработать нормально.

Мне не совсем ясно, что вы имеете в виду. Как я понял вы предлагаете следующую схему:
1)обработчик SMI создает в "обычной" памяти некий код, предназначенный для получения доступа к адресам выше 4 ГБ, назовем его "хэндлер64"
2)Куда-то сохраняет текущее содержимое State Save Map
3)Заполняет State Save Map значениями, необходимыми для передачи управления "хэндлер64"
4)Выполняет RSM
5) "хэндлер64" копирует данные из памяти старше 4ГБ по адресам ниже 4ГБ (т.к. в режиме SMM процессор может адресовать только нижние 4ГБ)
6)Генерирует SMI
7)SMI-хандлер обрабатывает скопированные данные
8) Шаги 4-7 повторяются, пока не будет обработана вся память выше 4ГБ
9) Восстанавливает сохраненное состояние State Save Map
10) Выполняет RSM.
Я правильно понял? Теоретически это работать может, но по-моему жутко извращенное решение.
Или вы имеете в виду, что процессор переходит в защищенный режим (и далее в 64-битный), не выходя из SMM? По-моему это не будет работать в принципе. Так как для переходя в 64-битный режим необходимо включение PAE, а в мануалах четко сказано:
The addressable SMRAM address space ranges from 0 to FFFFFFFFH (4 GBytes).
(The physical address extension — enabled with the PAE flag in control register
CR4 — is not supported in SMM.)

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/