Интегрированные сети ISDN


Сообщения



Сообщения



Очереди сообщения являются составной частью UNIX System V. Процесс, заносящий сообщение в очередь, может не ожидать чтения этого сообщения каким-либо другим процессом. Сообщения имеют следующие атрибуты:

  • Тип сообщения
  • Длина данных в байтах
  • Данные (если длина ненулевая)

Очередь сообщений имеет вид списка в адресном пространстве ядра. Для каждой очереди ядро формирует заголовок(msqid_ds), где размещаются данные о правах доступа к очереди (msg_perm), о текущем состоянии очереди (msg_cbytes – число байтов msg_qnum – число сообщений в очереди), а также указатели на первое и последнее сообщение. Создание новой очереди сообщений осуществляется посредством системного вызова msgget:

#include <sys/types.h>

#include <sys/ipc.h>

#include e <sys/ipc.h>

int msgget( key_t key, int msgflag );

Эта функция выдает дескриптор элемента очереди, или –1 - в случае ошибки. Процесс может с помощью оператора msgsnd поместить сообщение в очередь, получить сообщение из очереди посредством msgrcv и манипулировать сообщениями с помощью msgctl.

Семафоры

Для управления доступом нескольких процессов к разделяемым ресурсам используются семафоры. Семафоры являются одной из форм IPC (Inter-Process Communication). Для обеспечения работы нужно обеспечить выполнение следующих условий:

  • Семафор должен быть доступен разным процессам и, по этой причине, находиться в адресной среде ядра.
  • Операция проверки и изменения семафора должна быть реализована в режиме ядра.

Помимо значения семафора в структуре sem записывается идентификатор процесса, вызвавшего последнюю операцию над семафором, число процессов, ожидающих увеличения значения семафора.

Разделяемая память

Активное использование каналов, FIFO и очередей сообщений может привести к снижению производительности машины. Это сопряжено с тем, что передаваемые данные сначала из буфера передающего процесса в буфер ядра, и только затем в буфер принимающего процесса. Техника разделяемой памяти позволяет избавиться от этих потерь, предоставив доступ двум или более процессам доступ общей зоне памяти.




Начало  Назад  Вперед