ВУЗ:
Составители:
99
4.1.6. Работа с разделяемой памятью
Для работы с разделяемой памятью используются системные вызовы:
• shmget создает новый сегмент разделяемой памяти или находит
существующий сегмент с тем же ключом;
• shmat подключает сегмент с указанным описателем к виртуаль-
ной памяти обращающегося процесса;
• shmdt отключает от виртуальной памяти ранее подключенный к
ней сегмент с указанным виртуальным адресом начала;
• shmctl служит для управления разнообразными параметрами,
связанными с существующим сегментом.
Прототипы перечисленных системных вызовов описаны в файлах
#include <sys/ipc.h>
#include <sys/shm.h>
После того как сегмент разделяемой памяти подключен к вирту-
альной памяти процесса, этот процесс может обращаться к соответст-
вующим элементам памяти с использованием обычных машинных ко-
манд чтения и записи.
Системный вызов
int shmid = shmget (key_t key, size_t size, int flag)
на основании параметра size определяет желаемый размер сегмента в
байтах. Если в таблице разделяемой памяти находится элемент, содер-
жащий заданный ключ, и права доступа не противоречат текущим ха-
рактеристикам обращающегося процесса, то значением системного вы-
зова является идентификатор существующего сегмента, причем пара-
метр size должен быть в этом случае равен 0. В противном случае созда-
ется новый сегмент с размером не меньше установленного в системе
минимального размера сегмента разделяемой памяти и не больше уста-
новленного максимального размера. Живучесть объектов разделяемой
памяти определяется живучестью ядра. Создание сегмента не означает
немедленного выделения под него основной памяти, и это действие от-
кладывается до выполнения первого системного вызова подключения
сегмента к виртуальной памяти некоторого процесса. Флаги IPCCREAT
и IPCEXCL аналогичны рассмотренным выше.
Подключение сегмента к виртуальной памяти выполняется путем
обращения к системному вызову shmat:
void *virtaddr = shmat(int shmid, void *daddr, int flags).
Параметр shmid – это ранее полученный идентификатор сегмента, a
daddr – желаемый процессом виртуальный адрес, который должен соот-
Страницы
- « первая
- ‹ предыдущая
- …
- 97
- 98
- 99
- 100
- 101
- …
- следующая ›
- последняя »
