shm_ctl_special()

Задать специальные атрибуты для объекта в разделяемой области памяти

Прототип:

#include <sys/mman.h>
int shm_ctl_special( int fd,
int flags,
uint64_t paddr,
uint64_t size,
unsigned special );

Аргументы:

fd
Дескриптор файла, связанный с объектом в разделяемой области памяти, возвращаемый функцией shm_open().
flags
Один или комбинация из следующих битов, определенных в <sys/mman.h>. Для получения дополнительной информации см. shm_ctl().
paddr
Физический адрес для назначения объекту, если был установлен SHMCTL_PHYS в flags.
size
Новый размер объекта в байтах, независимо от флага ANON/PHYS.
special
Флаги, специфичные для процессора. См. ниже разделы:

Библиотека:

libc

Описание:

Функция shm_ctl_special() изменяет атрибуты объекта в разделяемой области памяти, идентифицированного файловым дескриптором fd. Этот дескриптор - значение, возвращаемое функцией shm_open().

Функция shm_ctl_special() похожа на shm_ctl(), но имеет дополнительный аргумент special, зависящий от архитектуры процессора. Вызов shm_ctl_special() со значением 0 для special эквивалентен вызову shm_ctl().


Note:
  • Комбинация SHMCTL_ANON | SHMCTL_PHYS имеет тот же эффект, что и вызов mmap(): это указывает на необходимость выделения физически непрерывной оперативной память.

  • На целевых устройствах ARM, после вызова shm_ctl(), размер объекта разделяемой памяти изменить нельзя. Для этого необходимо отменить отображение и пересоздать объект.

  • При указании SHMCTL_PHYS во флагах, paddr и size должны быть кратны размеру страницы (sysconf( _SC_PAGE_SIZE )).

ARM-специфичные флаги

Для платформ ARM аргумент special задает биты записи таблицы страниц (PTE), которые должны быть установлены при отображении объекта. Эти биты и их значение обычно зависят от процессора:

Для процессоров ARMv5 используются расширенные небольшие страницы (например, SoC на основе xscale), можно указать следующее:

Для процессоров ARMv6 (например, SoC на базе ARM11) можно указать следующее:

PPC-специфичные флаги

Эти специальные флаги для PPC относятся к битам в записях таблицы страниц, которые отображают объект:

Флаг Определение Если бит равен 0: Если бит равен 1:
PPC_SPECIAL_E (порядок байтов, который доступен только на некоторых чипах) Относится к порядку битов, используемому для представления данных. Доступ к странице осуществляется с обратным порядком байтов. Доступ не осуществляется с обратным порядком байтов.
PPC_SPECIAL_G (защищенная память) Предотвращает выполнение упреждающего, непоследовательного доступа к области (т.е. предварительной выборки инструкций для упреждающего доступа). Доступ к странице не защищается и может быть осуществлен до того, как об этом станет известно, если это требуется для последовательного выполнения. Все загрузки и сохранения на страницу выполняются без прогнозирования (они обязательны).
PPC_SPECIAL_I (блокировка кэша) Помечает страницу как некэшируемую, что означает, что кэш всегда игнорируется, а все загрузки и сохранения обращаются к основной памяти. Страница кэшируется. Страница заблокирована кэшированием, и данные не должны кэшироваться после процессора.
PPC_SPECIAL_M (требуется когерентность памяти) Относится к согласованности системной памяти. Транзакция игнорируется, что означает, что память не когерентна или что это транзакция, которую не нужно просматривать; когерентность памяти не требуется. Требуется когерентность памяти.
PPC_SPECIAL_W (писать через кеш) Операции обновляют основную память, а также кэш. Страница является обратной записью (для согласованности) в системе, и данные должны быть перенаправлены по крайней мере на один уровень кэша в память. Все сохранения, выполняемые на этой странице, записываются в основную память, что означает, что данные для транзакции записи пересылаются в системную память или на отображаемое в память устройство.

Дополнительные сведения об значениях этих битах см. в руководстве по архитектуре PPC.

Возвращаемое значение:

0
Успешное завершение.
-1
Возникла ошибка. Код ошибки записан в errno.

Коды ошибок:

EINVAL
Была указана недопустимая комбинация флагов или объект в разделяемой области памяти уже является «специальным».

Классификация:

ЗОСРВ «Нейтрино»

Точка остановки потока
Да
Обработчик прерываний
Нет
Обработчик сигналов
Да
В потоке
Да

Тематические ссылки:

mmap(), munmap(), mprotect(), shm_ctl(), shm_open(), shm_unlink(), ThreadCtl()




Предыдущий раздел: Описание API системной библиотеки