Статья: Механизмы межпроцессных взаимодействий в операционной системе Unix

откладывается до выполнения первого системного вызова подключения сегмента к виртуальной памяти некоторого процесса

при выполнении последнего системного вызова отключения сегмента от виртуальной памяти соответствующая основная память освобождается

virtaddr = shmat(id, addr, flags);

id - это ранее полученный дескриптор сегмента

addr - желаемый процессом виртуальный адрес, который должен соответствовать началу сегмента в виртуальной памяти

virtaddr - реальный виртуальный адрес начала сегмента

не обязательно совпадает со значением прямого параметра addr

если addr == 0, ядро выбирает наиболее удобный виртуальный адрес начала сегмента

shmdt(addr);

addr - виртуальный адрес начала сегмента в виртуальной памяти, ранее полученный от системного вызова shmat

shmctl(id, cmd, shsstatbuf);

cmd идентифицирует требуемое конкретное действие

важна функция уничтожения сегмента разделяемой памяти

Семафоры

Обобщение классического механизма семафоров общего вида Диекстры

Целесообразность обобщения сомнительна

Обычно использовался облегченный вариант двоичных семафоров

Известен алгоритм реализации семафоров общего вида на основе двоичных

Семафор в ОС UNIX:

значение семафора

идентификатор процесса, который хронологически последним работал с семафором

число процессов, ожидающих увеличения значения семафора

число процессов, ожидающих нулевого значения семафора

Три системных вызова:

semget для создания и получения доступа к набору семафоров

semop для манипулирования значениями семафоров

semctl для выполнения управляющих операций над набором семафоров

id = semget(key, count, flag);

key, flag и id - обычный смысл

К-во Просмотров: 367
Бесплатно скачать Статья: Механизмы межпроцессных взаимодействий в операционной системе Unix