Я тут недавно в "ЧИПе" прочитал о способе ускорить работу ОС (Вын) путем установки на компьютер 8 и более (если позволяет материнская плата) гигабайт памяти. Ось при этом должна грузится с ключом /3ГБ (ПАЕ, если не ошибаюсь). В этом случае приложениям будет доступно 3 гб памяти, а Оська затянет 1 гб. Это понятно. А вот остальную память берет под себя некая программа (RAM Disk?), которая делает виртуальный диск на основе оставшихся 5 Гб памяти и журнал советует переносить на этот диск файл подкачки. Так вот, вопрос: Как программно можно обратиться к памяти напрямую, чтобы, к примеру, сделать то же самое? Есть же какие-то порты в/в, адреса и т. д.
В режиме PAE кажется доступно 64 гига памяти. Хотя количество одновременно адресуемой памяти равно 4 гигам и даже меньше с учетом отображаемой в адресное пространство памяти устройств. /PAE и /3GB - это разные ключи. Логично предположить, что режим PAE включает первый из них. Вот только разные версии ОС имеют различную поддержку данных опций.
Нужно активировать режим PAE и отобразить физические страницы, лежащие за отметкой 4 гб, в пределах первых 4 гиг виртуального адресного пространства.
Да, да. A Windows Server 2003 R2 x86 или Windows Server 2008 x86 до 64Гб поддерживают посредством магии. http://msdn.microsoft.com/en-us/library/aa366778(v=vs.85).aspx Про PAE почитайте, знатоки. 4Гб - это лимит виртуальных адресов, а физической памяти в них отображать можно больше. Можно вообще взять одну страницу в 4Кб и её отображать на разную физическую память по мере необходимости. Чтобы сделать то же самое надо драйвер писать который включит PAE и будет страницами управлять. А к памяти обращаться надо как обычно. Десктопные ОС ключ /PAE не поддерживают.
Да, но вряд-ли ExAllocatePoolWithTag даст мне память именно от тех самых 5 Гб. Как то надо обращаться к памяти за пределами 4 гб. Получается, что непосредственно к железу через порты? Или достроить свои таблицы страниц? Так виндовс не даст этого сделать...
Какие порты? I/O порты это одно адресное пространство, память - другое. Они не связаны никак. Да, модифицировать таблицы страниц надо. Драйвер пиши, всё даст если правильно сделать.
Садись двойка. Даже Pentium PRO умел "видеть" более 4 Гиг. Весь фокус в том что шина адреса не 32 бита а 36 бит что позволяет прыгать за 4 гига
asmlamo Только как уже отметил cppasm далеко не все оси позволяют этим воспользоваться VerhoLom Пример программного обращения ищи у Рихтера про функции AllocateUserPhysicalPages, MapUserPhysicalPages. Для этого делается окно в памяти за пределы 4Гб в которое подставляются свободные страницы (всё из юзермода, никаких "портов", собственных менеджеров страниц и т.п. не нужно). Функции доступны начиная с win 2000, хотя их использование изрядно заморочно и доступ за 4Гб будет работать только в виндах версии server. Или используй для создания окна Filemapping, система за счёт кеширования сама возьмёт память за пределами 4Гб, если конечно она в принципе способна её там видеть ЗЫ: А если win32 не серверная, то готовый драйвер ram-диска пожалуй единственное из простых и доступных решений по использованию памяти за пределами 4Гб
Не, тут самому разобраться охота: спортивный интерес, знаете ли... Интересно! Хотя по готовым исходникам порыться придется...