RTX – расширение реального времени для Windows NT

Использование разделяемой памяти


RTSS-объект разделяемая память представляет собой область непэйджируемой (non-paged) физической памяти, которая может быть спроецирована на виртуальное адресное пространство процесса. Когда известно имя разделяемой памяти, другой процесс может спроецировать ее на свое адресное пространство. Для доступа к объекту разделяемая память надо знать его хэндл и виртуальный адрес. Для того, чтобы отсоединить процесс от разделяемой памяти, процесс должен закрыть хэндл объекта. Когда все процессы отсоединятся от объекта разделяемая память, произойдет следующее:

  • Участок памяти вернется в область непэйджируемой (non-paged) физической памяти
  • Объект прекратит существование

Обмен данными между процессами посредством Shared Memory

RTSS-объекты разделяемая память позволяет разделять блоки данных между несколькими процессами, включая RTSS и Win32 процессы. Для этого поток в каждом процессе должен иметь собственный уникальный для процесса хэндл RTSS-объекта разделяемая память и собственный уникальный для процесса указатель на адрес проекции разделяемой памяти на адресное пространство процесса. Эти хэндлы и адреса могут быть получены путем вызова функций RtCreateSharedMemory и RtOpenSharedMemory.

Использование RtCreateSharedMemory

Для того, чтобы несколько процессов использовали объект разделяемая память, он сначала должен быть создан вызовом RtCreateSharedMemory. Другие процессы могут использовать разделяемую память, если им известно ее имя. RtCreateSharedMemory возвращает хэндл и адрес разделяемой памяти.

Вызов RtCreateSharedMemory заканчивается неудачей, если затребовано памяти больше, чем может быть выделено или если объект разделяемая память с таким именем уже существует. Тогда память не проецируется и хэндл не возвращается. RtCreateSharedMemory не преобразуется автоматически в RtOpenSharedMemory, если разделяемая память с таким именем уже существует. Только один процесс может успешно создать объект разделяемая память.

Использование RtOpenSharedMemory

RtOpenSharedMemory проецирует уже созданный объект разделяемая память на адресное пространство вызывающего процесса. Вызов RtOpenSharedMemory заканчивается неудачей, если такого именованного объекта разделяемая память не существует.
RtOpenSharedMemory возвращает хэндл разделяемой памяти и ее базовый адрес. Когда процесс заканчивает работу с объектом разделяемая память, он должен закрыть его хэндл.

Объект разделяемая память всегда принадлежит RTSS подсистеме. Однако, Win32 процесс может создавать и открывать RTSS-объекты разделяемая память.

При создании объекта разделяемая память RTSS обеспечивает его блокированной памятью соответствующего размера.



Содержание раздела