Распределяемая память

Тема в разделе "WASM.WIN32", создана пользователем bolt90, 21 май 2009.

  1. bolt90

    bolt90 New Member

    Публикаций:
    0
    Регистрация:
    21 май 2009
    Сообщения:
    18
    Изучал проблему. Почитал про основные способы в инете. И возник вопрос, нельзя ли просто выдилить сегмент в памяти, чтоб обращатся из любых программ?
     
  2. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    А теперь тоже самое по-русски.
     
  3. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    у меня чото сразу возникло чувство, что ТС надо про разделяемые секции/маппинг чтото
     
  4. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    У меня тоже. Но я не понял че конкретно)
     
  5. bolt90

    bolt90 New Member

    Публикаций:
    0
    Регистрация:
    21 май 2009
    Сообщения:
    18
    конкретно. допустим имеем 2 программы. у них есть разделяемая память(например изменяем значения переменой в одной, меняется и в другой). Аналог юниксовых shmget,shmat...
     
  6. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    CreateFileMapping/MapViewOfFile
    или более низкоуровнево
    ZwCreateSection/MapViewOfSection
     
  7. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    ZwMapViewOfSection*
     
  8. bolt90

    bolt90 New Member

    Публикаций:
    0
    Регистрация:
    21 май 2009
    Сообщения:
    18
    если я правильно понял описание эти функции работают с файловой системой?
     
  9. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    и с ней тоже.. но это именно то, что вам необходимо
     
  10. bolt90

    bolt90 New Member

    Публикаций:
    0
    Регистрация:
    21 май 2009
    Сообщения:
    18
    спасибо, но надо бы както без ФС, просто участок памяти ОЗУ доступный всем процессам.
    у меня была мысль создать сегмент и поместить его дискриптор в GDT, если это вообще возможно ...?
     
  11. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    bolt90
    Во первых память подкачиваемая практически вся в юзермоде, исключая разве что PEB, US. Залочивание не гарантирует отсутствие выгрузки в своп, оно лишь такую вероятность снижает. Код на первых двух IRQL обычно подкачку и не заметит, для чего вообще нужно это ?
     
  12. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    bolt90
    Не совсем. Во-первых, в винде вся виртуальная память связана с файловой системой, т.к. при необходимости любые данные могут быть сброшены на диск и загружены обратно в память. Во-вторых, если в CreateFileMapping задать hFile = INVALID_HANDLE_VALUE, то данные будут "проецироваться в файл подкачки", что на деле означает - будут сидеть в памяти пока рак на горе не свистнет ;)
     
  13. bolt90

    bolt90 New Member

    Публикаций:
    0
    Регистрация:
    21 май 2009
    Сообщения:
    18
    Clerk
    сравнение функционала с юниксом

    получается этот механизм не предусмотрен виндой вообще. только через отображения?
     
  14. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    bolt90
    Не пойму, что тебя смущает ? Отсутствие простой\красивой функции-обертки под названием shmget или факт реализации разделяемой памяти через FileMapping ? Если второе, то уже пояснили, что в винде вся виртуальная память основана на подкачке, и разделяемые системные dll проецируются в разные процессы через маппинг. Спрашивается - зачем создавать еще какой-то особый доп.механизм создания разделяемой памяти между процессами, если он уже есть.
    Ну а то, что мелкософты поленились завернуть пару функций CreateFileMapping+MapViewOfFile в красивый фантик типа shmget - считай, что это их маркетинговый "прокол", недостаточный "функционал" и т.п.;)
     
  15. bolt90

    bolt90 New Member

    Публикаций:
    0
    Регистрация:
    21 май 2009
    Сообщения:
    18
    ))))) я наоборот не люблю чтоб был красивенько выведеный интерфейс :), а смущает то что файлы это жесткий диск и латентность полюбому намного больше чем рам. вот и пытаюсь узнать если ли с чего выбирать(всмысле разные подходы). :)
     
  16. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    bolt90
    Да с чего ты взял, что "файл" - это обязательно жесткий диск. Например, виндусовый рисунок metafile - это что, файл на диске (как многие ньюбы считают) или просто структура записи с последовательным доступом ?! О понятиях "файловый\системный кэш", "упреждающее чтение", "ленивая запись" и т.п. слышал ? В описание флага FILE_FLAG_TEMPORARY CreateFile заглядывал ? Винда, несмотря на "отдельные недостатки", устроена достаточно умно, по принципу "не чеши пока не чешется" - пока есть свободная физ.память обмен с диском сводится к минимуму. Поэтому свопинг памяти, выделенной CreateFileMapping(-1,..), ничем не отличается от свопига "обычной" памяти, выделенной VirtualAlloc, т.к. в отношении них действует общий механизм работы с виртуальной памятью
     
  17. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    bolt90
    CreateFileMapping (ZwCreateSection) смотри описание. вместо hFile можно передать INVALID_HANDLE_VALUE, тогда оно спроецирует потом через MapViewOfFile(Ex)/ZwMapViewOfSection файл подкачки.
     
  18. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Great
    Если в обьекте секция FilePointer не задан, то возможно что не будет свопиться, но точно не знаю. Аналогично если промапить секцию физиклмемори. Хотя я не уверен.
     
  19. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Ему будет достаточно маппинга пейджфайла ;)
    А в любом случае потом можно сделать VirtualLock и свопиться ничего не будет
     
  20. Folk Acid

    Folk Acid New Member

    Публикаций:
    0
    Регистрация:
    23 авг 2005
    Сообщения:
    432
    Адрес:
    Ukraine
    А еще есть одна dll для разных процессов, физически находящаяся в памяти один раз, для экономии памяти