Задать специальные атрибуты для объекта в разделяемой области памяти
#include <sys/mman.h>int shm_ctl_special( int fd,int flags,uint64_t paddr,uint64_t size,unsigned special );
<sys/mman.h>
. Для получения дополнительной информации см. shm_ctl().SHMCTL_PHYS
в flags.libc
Функция shm_ctl_special() изменяет атрибуты объекта в разделяемой области памяти, идентифицированного файловым дескриптором fd. Этот дескриптор - значение, возвращаемое функцией shm_open().
Функция shm_ctl_special() похожа на shm_ctl(), но имеет дополнительный аргумент special, зависящий от архитектуры процессора. Вызов shm_ctl_special() со значением 0
для special эквивалентен вызову shm_ctl().
![]() |
|
Для платформ ARM аргумент special задает биты записи таблицы страниц (PTE), которые должны быть установлены при отображении объекта. Эти биты и их значение обычно зависят от процессора:
Для процессоров ARMv5 используются расширенные небольшие страницы (например, SoC на основе xscale), можно указать следующее:
ARM_PTE_C
) ARM_PTE_B
) ARM_PTE_V5_SP_TEX( x )
) Для процессоров ARMv6 (например, SoC на базе ARM11) можно указать следующее:
ARM_PTE_C
) ARM_PTE_B
) ARM_PTE_V6_SP_XN
) ARM_PTE_V5_SP_TEX( x )
) ARM_PTE_V6_S
)
Эти специальные флаги для PPC относятся к битам в записях таблицы страниц, которые отображают объект:
Флаг | Определение | Если бит равен 0 : | Если бит равен 1 : |
---|---|---|---|
PPC_SPECIAL_E (порядок байт, который доступен только на некоторых чипах) | Относится к порядку битов, используемому для представления данных. | Доступ к странице осуществляется с обратным порядком байт. | Доступ не осуществляется с обратным порядком байт. |
PPC_SPECIAL_G (защищенная память) | Предотвращает выполнение упреждающего, непоследовательного доступа к области (т.е. предварительной выборки инструкций для упреждающего доступа). | Доступ к странице не защищается и может быть осуществлен до того, как об этом станет известно, если это требуется для последовательного выполнения. | Все загрузки и сохранения на страницу выполняются без прогнозирования (они обязательны). |
PPC_SPECIAL_I (блокировка кэша) | Помечает страницу как некэшируемую, что означает, что кэш всегда игнорируется, а все загрузки и сохранения обращаются к основной памяти. | Страница кэшируется. | Страница заблокирована кэшированием, и данные не должны кэшироваться после процессора. |
PPC_SPECIAL_M (требуется когерентность памяти) | Относится к согласованности системной памяти. | Транзакция игнорируется, что означает, что память не когерентна или что это транзакция, которую не нужно просматривать; когерентность памяти не требуется. | Требуется когерентность памяти. |
PPC_SPECIAL_W (писать через кеш) | Операции обновляют основную память, а также кэш. | Страница является обратной записью (для согласованности) в системе, и данные должны быть перенаправлены по крайней мере на один уровень кэша в память. | Все сохранения, выполняемые на этой странице, записываются в основную память, что означает, что данные для транзакции записи пересылаются в системную память или на отображаемое в память устройство. |
Дополнительные сведения об значениях этих битах см. в руководстве по архитектуре PPC.
ЗОСРВ «Нейтрино»
mmap(), munmap(), mprotect(), shm_ctl(), shm_open(), shm_unlink(), ThreadCtl()
Предыдущий раздел: Описание API системной библиотеки