Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
vovk.doc
Скачиваний:
2
Добавлен:
01.04.2025
Размер:
456 Кб
Скачать
☆

45. Розподіл загальної пам'яті між процесами (розповісти про shm_open, mmap, shm_unlink).

Наличие механизмов синхронизации доступа к разделяемым ресурсам – одно из основных функциональных требований к ОС РВ. Память – это также ресурс, который может быть общим для нескольких процессов. Для распределение общей памяти между процессами в QNX-6 используются функции shm_open, mmap, shm_unlink. Рассмотрим подробней каждую из этих функций и их параметры.

shm_open () – открывает объект общей памяти процессов.

#include <fcntl.h>

#include <sys/mman.h>

Int shm_open (const char * name, int oflag, mode_t mode);

Name – открываемый объет общей памяти процессов.

Oflag – комбинация следующих бит, определенных в библиотеке <fcntl.h>:

O_RDONLY – открыть только для чтения;

O_RDWR – открыть для чтения и записи;

O_CREATE – создать файл, если файл не существует;

O_EXCL – проверить существование файла.

Mode – режим работы с открытым объектом.

Функция shm_open() возвращает дескриптор файла, который ассоциируется с объектом памяти, разделяемы процессами с именем name. Этот дескриптор в дальнейшем используется другими функциями работы с памятью (mmap(), mprotect()). Режим работы с открытым объектом, установленный функцией сохраняется все время, пока объект не отсоединен (unlinked) и любые ссылки на него отсутствуют. При неудачном открытии файла функции возвращает -1. Причины ошибки при открытии файла могут быть разными: закрыт доступ к файлу, открытие файла было прервано прерыванием, файл уже существует – невозможно создать файл с тем же именем, слишком много файловых дескрипторов используется текущим процессом, недостаточно места для создания объекта общей памяти и т.д.

mmap() – отображение области памяти в адресное пространство процесса.

#include <sys/mman.h>

void *mmap (void * addr, size_t len, int prot, int flags, int fildes, off_t off);

addr – NULL или указатель на адресное пространство процесса, куда будет помещен объект.

Len – количество помещаемых байт.

Prot – уровень доступа к области памяти.

Fildes – файловый дескриптор разделенного объекта памяти.

Off – смещение внутри разделяемой памяти.

Mmap() – функция, которая помещает область памяти, представляемую объектом разделямой памяти, в адресное просторанство процесса, начиная со смещения off и продолжаясь количество байт len. Функция возвращает адресс вставленного объекта или MAP_FAILED в случаи ошибки.

shm_unlink() – удаляет объект памяти, разделяемый процессами.

#include <sys/mman.h>

Int shm_unlink(const char * name);

Name – имя удаляемого объекта памяти.

Функция shm_unlink() удаляет имя объекта памяти с именем name. После удаления имени, объект не сможет быть открыт при помощи функции shm_open(), доступ к этому объекту памяти невозможен. Данная функция не влияет на ссылки на объект памяти, так что фактически объект не считается удаленным, пока не закрыты все ссылки на него. Функция возвращает 0 при удачном удалении имени, -1 – если произошла ошибка.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]