Мобильное программирование приложений реального времени в стандарте POSIX

       

Объекты в памяти


Механизм объектов в памяти служит цели минимизации времени и унификации доступа. Стандартом POSIX-2001 предусмотрено три вида таких объектов:

  • файлы, отображенные в память;
  • объекты в разделяемой памяти;
  • объекты в типизированной памяти.

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

Отображаться могут обычные файлы, а также объекты в разделяемой и типизированной памяти.

Отображение объектов в адресное пространство процессов осуществляется функцией mmap().

Стандарт POSIX-2001 предусматривает возможность динамической смены разрешенных видов доступа к отображенным страницам посредством вызова функции mprotect().

Для отмены отображений в адресное пространство процессов служит функция munmap().

При работе с объектами в памяти полезны функции truncate() и ftruncate(), позволяющие установить размер объекта равным заданной величине.

Еще одна возможность, полезная в связи с отображением объектов в адресное пространство процессов, – синхронизация (согласование состояния) оперативной и долговременной памяти. Эту возможность реализует функция msync().

Стандартизованный программный интерфейс к объектам в разделяемой памяти включает функции shm_open() для открытия (возможно, с созданием) подобного объекта и получения его дескриптора, а также shm_unlink() для удаления ранее созданного объекта.

Объекты в типизированной памяти – это конфигурируемые реализацией именованные пулы памяти, доступные одному или нескольким процессорам системы через один или несколько портов.

Каждая допустимая комбинация пула памяти и порта идентифицируется именем, определяемым при конфигурировании системы способом, зависящим от реализации. Используя это имя, объект в типизированной памяти можно открыть при помощи функции posix_typed_mem_open(), а затем отобразить в адресное пространство процесса.

После того, как объект в типизированной памяти открыт, посредством функции posix_typed_mem_get_info() можно выяснить максимальный объем памяти, доступной для резервирования.

Функция posix_mem_offset() позволяет выяснить адрес (смещение от начала), длину и дескриптор объекта (блока) в типизированной памяти, отображенного в адресное пространство процесса.



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