Работа с памятью напрямую

Тема в разделе "WASM.ASSEMBLER", создана пользователем VerhoLom, 11 фев 2011.

  1. VerhoLom

    VerhoLom New Member

    Публикаций:
    0
    Регистрация:
    11 фев 2011
    Сообщения:
    6
    Я тут недавно в "ЧИПе" прочитал о способе ускорить работу ОС (Вын) путем установки на компьютер 8 и более (если позволяет материнская плата) гигабайт памяти. Ось при этом должна грузится с ключом /3ГБ (ПАЕ, если не ошибаюсь). В этом случае приложениям будет доступно 3 гб памяти, а Оська затянет 1 гб. Это понятно. А вот остальную память берет под себя некая программа (RAM Disk?), которая делает виртуальный диск на основе оставшихся 5 Гб памяти и журнал советует переносить на этот диск файл подкачки.

    Так вот, вопрос: Как программно можно обратиться к памяти напрямую, чтобы, к примеру, сделать то же самое? Есть же какие-то порты в/в, адреса и т. д.
     
  2. c4m310t

    c4m310t New Member

    Публикаций:
    0
    Регистрация:
    19 дек 2008
    Сообщения:
    237
    imho бред.
    в 32х битном режиме выше 4х Гб не получится увидить ничего.
     
  3. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    В режиме PAE кажется доступно 64 гига памяти. Хотя количество одновременно адресуемой памяти равно 4 гигам и даже меньше с учетом отображаемой в адресное пространство памяти устройств. /PAE и /3GB - это разные ключи. Логично предположить, что режим PAE включает первый из них. Вот только разные версии ОС имеют различную поддержку данных опций.
     
  4. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Нужно активировать режим PAE и отобразить физические страницы, лежащие за отметкой 4 гб, в пределах первых 4 гиг виртуального адресного пространства.
     
  5. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    Да, да.
    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 не поддерживают.
     
  6. VerhoLom

    VerhoLom New Member

    Публикаций:
    0
    Регистрация:
    11 фев 2011
    Сообщения:
    6
    Да, но вряд-ли ExAllocatePoolWithTag даст мне память именно от тех самых 5 Гб. Как то надо обращаться к памяти за пределами 4 гб. Получается, что непосредственно к железу через порты? Или достроить свои таблицы страниц? Так виндовс не даст этого сделать...
     
  7. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    Какие порты?
    I/O порты это одно адресное пространство, память - другое.
    Они не связаны никак.
    Да, модифицировать таблицы страниц надо.
    Драйвер пиши, всё даст если правильно сделать.
     
  8. asmlamo

    asmlamo Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    1.734
    Садись двойка. Даже Pentium PRO умел "видеть" более 4 Гиг.

    Весь фокус в том что шина адреса не 32 бита а 36 бит что позволяет прыгать за 4 гига
     
  9. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    asmlamo
    Только как уже отметил cppasm далеко не все оси позволяют этим воспользоваться ;)

    VerhoLom
    Пример программного обращения ищи у Рихтера про функции AllocateUserPhysicalPages, MapUserPhysicalPages. Для этого делается окно в памяти за пределы 4Гб в которое подставляются свободные страницы (всё из юзермода, никаких "портов", собственных менеджеров страниц и т.п. не нужно). Функции доступны начиная с win 2000, хотя их использование изрядно заморочно и доступ за 4Гб будет работать только в виндах версии server.

    Или используй для создания окна Filemapping, система за счёт кеширования сама возьмёт память за пределами 4Гб, если конечно она в принципе способна её там видеть ;)

    ЗЫ: А если win32 не серверная, то готовый драйвер ram-диска пожалуй единственное из простых и доступных решений по использованию памяти за пределами 4Гб ;)
     
  10. VerhoLom

    VerhoLom New Member

    Публикаций:
    0
    Регистрация:
    11 фев 2011
    Сообщения:
    6
    Не, тут самому разобраться охота: спортивный интерес, знаете ли... Интересно! Хотя по готовым исходникам порыться придется...