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 процесса, который получил сообщение из очереди.

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

Следующая глава >

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

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

Из книги Python - основные концепции автора Бройтман Олег

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


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

Из книги Архитектура операционной системы UNIX автора Бах Морис Дж

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


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

Из книги Как справиться с компьютерной зависимостью автора Краснова С В

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


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

Из книги Компьютер на 100. Начинаем с Windows Vista автора Зозуля Юрий

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


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

Из книги 3ds Max 2008 автора Верстак Владимир Антонович

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


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

Из книги Office 2007. Мультимедийный курс автора Мединов Олег

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


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

Из книги Создание электронных книг в формате FictionBook 2.1: практическое руководство [Release 1.01 от 28.II.2010 г.] автора Кондратович Михаил Иосифович

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


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

Из книги Основы информатики: Учебник для вузов автора Малинина Лариса Александровна

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


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

Из книги UNIX: взаимодействие процессов автора Стивенс Уильям Ричард

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


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

Из книги Сетевые средства Linux автора Смит Родерик В.

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


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

Из книги Веб-Самоделкин. Как самому создать сайт быстро и профессионально автора Гладкий Алексей Анатольевич

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


Пользовательский интерфейс и основные правила работы с программой

Из книги 3ds Max 2008 на 100 % автора Верстак Владимир Антонович

Пользовательский интерфейс и основные правила работы с программой После запуска программы на экране отображается ее пользовательский интерфейс, который представлен на рис. 7.1. Рис.


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

Из книги 1С: Бухгалтерия 8.2. Понятный самоучитель для начинающих автора Гладкий Алексей Анатольевич

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


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

Из книги Самоучитель работы на компьютере: быстро, легко, эффективно автора Гладкий Алексей Анатольевич

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