26.5.1. Основные структуры ядра для работы с очередями

26.5.1. Основные структуры ядра для работы с очередями

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

Структура ядра msgbuf (описана в файле /usr/src/linux/include/linux/msg.h) является буфером сообщений:

struct msgbuf {

 long mtype; /* тип сообщения */

 char mtext[1]; /* текст сообщения */

};

Тут все ясно: тип сообщения и само сообщение. Используя тип сообщения, вы можете помещать в одну очередь разные сообщения, а не создавать еще одну очередь. Например, у нас есть два приложения — клиент и сервер. Вы можете использовать для них одну и ту же очередь: сообщения клиента будут с номером 1 (mtype = 1), а сообщения сервера — с номером 0 (mtype = 0).

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

struct my_buf {

 long mtype;

 char mtext[128];

}

Вы также можете добавлять новые поля в эту структуру (но только в своей программе! Код ядра модифицировать не нужно):

struct my_buf {

 long mtype;

 char mtext[128];

 char info[50];

 int status;

}

He бойтесь создавать свои структуры: ядру все равно, с какими данными работать, вам нужно учитывать только максимальный размер сообщения, который определен в файле /usr/src/linux/include/linux/msg.h:

#define MSGMAX 4056

4056 байтов — это максимальный размер не ваших данных, а всей структуры. включая тип сообщения. Размер типа long равен 4 байтам.

Сами сообщения хранятся ядром в структуре msg, которая также определена в файле msg.h:

struct msg {

 struct msg *msg_next; /* указатель на след. сообщение

                          в очереди */

 long msg_type;  /* тип сообщения */

 char *msg_spot; /* адрес самого сообщения (текста) */

 short msg_ts;   /* размер сообщения (текста) */

};

Сообщения хранятся в виде односвязного списка. Первый член структуры msg_next — это указатель на следующее сообщение в очереди. Второй член msg_type — это тип сообщения, такой же, как в структуре msg_buf.

Следующий член структуры — это указатель на начало текста сообщения, а последний член msg_ts — размер текста сообщения.

Каждый тип объекта IPC представляется в ядре определенной структурой. Для очередей сообщений это структура msqid_ds (описана в файле /usr/src/linux/include/linux/msg.h).

struct msqid_ds {

 struct ipc_perm msg_perm; /* информация о правах

                              доступа */

 struct msg *msg_first; /* указатель на первое сообщение

                           в очереди */

 struct msg *msg_last; /* указатель на последнее сообщение

                          в очереди*/

 time_t msg_stime; /* время последнего вызова msgsnd */

 time_t msg_rtime; /* время последнего вызова msgrcv */

 time_t msg_ctime; /* время последнего изменения */

 struct wait_queue *wwait;

 struct wait_queue *rwait;

 ushort msg_cbytes;

 ushort msg_qnum;

 ushort msg_qbytes; /* максимальное число байтов на очередь */

 ushort msg_lspid;  /* pid последнего испустившего msgsnd */

 ushort msg_lrpid;  /* последний полученный pid */

};

? msg_perm

Это структура типа ipc_perm (ipc_perm определена в файле linux/ipc.h). Данная структура содержит информацию о владельце и правах доступа:

struct ipc_perm {

 key_t key;

 ushort uid;  /* uid и gid владельца */

 ushort gid;

 ushort cuid; /* uid и gid создателя */

 ushort cgid;

 ushort mode; /* режим доступа */

 ushort seq;  /* системное поле. Вас оно не касается. */

};

? msg_ftrst

Указатель на первое сообщение в очереди.

? msg_last

Указатель на последнее сообщение в очереди.

? msg_stime

Время отправки последнего сообщения из очереди,

? msg_rtime

Время последнего изъятия сообщения из очереди.

? msg_ctime

Время последнего изменения очереди.

? wwait и rwait

Указатели в очередь ожидания ядра, которые используются, когда очередь переполнена и процесс вынужден ждать из-за этого.

? msg_cbytes

Суммарный объем всех сообщений в очереди.

? msg_qnum

Количество сообщений в очереди.

? msg_qbytes

Максимальный размер очереди.

? msg_lspid

PID процесса, который послал последнее сообщение в очереди.

? msg_lrpid

PID процесса, который получил сообщение из очереди.

Данный текст является ознакомительным фрагментом.



Поделитесь на страничке

Похожие главы из других книг:

Основные системные функции для работы с файлами

Из книги автора

Основные системные функции для работы с файлами В табл. 2.7 приведены основные системные функции работы с файлами, являющиеся образами системных вызовов в программе С.Функции более высокого уровня, предлагаемые стандартной библиотекой ввода/вывода, которые в конечном


2.3 СТРУКТУРЫ ДАННЫХ ЯДРА

Из книги автора

2.3 СТРУКТУРЫ ДАННЫХ ЯДРА Большинство информационных структур ядра размещается в таблицах фиксированного размера, а не в динамически выделенной памяти. Преимущество такого подхода состоит в том, что программа ядра проста, но в ней ограничивается число элементов


Конфигурация ядра для работы с iptables

Из книги автора

Конфигурация ядра для работы с iptables Для того чтобы использовать iptables, необходимо активизировать соответствующие средства ядра. В версии ядра 2.4 все необходимые для этого опции сосредоточены в меню Networking Options и некоторых его подменю. Опции, которые необходимо


Б.2. Основные функции для работы с потоками: создание и завершение

Из книги автора

Б.2. Основные функции для работы с потоками: создание и завершение В этом разделе мы опишем пять основных функций для работы с потоками.Функция pthread_createПри запуске пpoгрaммы вызовом exec создается единственный поток, называемый начальным потоком, или главным (initial thread).


Глава 2 Основные приемы работы

Из книги автора

Глава 2 Основные приемы работы • Объекты в 3ds Max 2008• Создание объектов сцены• Модификаторы геометрии• Моделирование лофт-объектов• Создание волосПодобно огромному зданию, построенному из маленьких кирпичиков, программа 3ds Max позволяет создавать разноплановые сцены,


Основные структуры управления

Из книги автора

Основные структуры управления Python - вполне обычный, можно сказать, "традиционный" язык программирования. Все привычные конструкции в языке есть - условный оператор if, циклы for и while, функции, классы, модули, пакеты (иерархические совокупности модулей). Нет цикла do-while и


Основные режимы работы

Из книги автора

Основные режимы работы В этом разделе мы рассмотрим наиболее востребованные режимы работы и возможности программы Excel 2007. Более подробно возможности Excel проиллюстрированы в видеоуроках, которые имеются на прилагаемом к книге


Основные приемы работы с базой данных

Из книги автора

Основные приемы работы с базой данных В данном разделе мы рассмотрим основные принципы и приемы работы с базами данных в Microsoft Access 2007. Описание будет построено на примере базы данных Контакты (см. рис.


Глава 2 Основные приемы работы

Из книги автора

Глава 2 Основные приемы работы ? Объекты в 3ds Max 2008? Создание объектов сцены? Модификаторы геометрии? Практическое задание. НатюрмортПодобно огромному зданию, построенному из маленьких кирпичиков, программа 3ds Max позволяет создавать разноплановые сцены, используя в


5.2. Основные приемы работы, элементы текстового редактора

Из книги автора

5.2. Основные приемы работы, элементы текстового редактора При создании документа для эффективной работы необходимо научиться нескольким основным приемам:1. Выбор команд из строки меню, контекстных меню и панели инструментов, как мышью, так и с клавиатуры.Контекстные


§ 4.2 Описание функций и основные приемы работы

Из книги автора

§ 4.2 Описание функций и основные приемы работы Как нетрудно догадаться, FB Editor позволяет редактировать файлы в формате FB2. Довольно скромный набор функций частично компенсируется возможностью прямого редактирования XML-файла книги.Механизм работы редактора не так прост,


Урок 7.2. Основные приемы работы с данными

Из книги автора

Урок 7.2. Основные приемы работы с данными Просмотр и редактирование таблиц Для открытия любой таблицы базы данных для просмотра или редактирования найдите ее в области переходов и дважды щелкните кнопкой мыши на ее значке. Для просмотра содержимого таблицы используйте


Основные правила работы за компьютером

Из книги автора

Основные правила работы за компьютером Многие родители, родственники, руководители учебных заведений задаются не праздным вопросом о том, существуют ли правила работы с компьютером, позволяющие сохранить здоровье и продуктивно работать? Разные исследователи и научные