Уровень событий ядра

Уровень событий ядра

Уровень событий ядра (kernel event layer) — это подсистема, которая позволяет передавать информацию о различных событиях из ядра в пространство пользователя и реализована, как вы уже, наверное, догадываетесь, на базе объектов kobject. После выпуска ядра версии 2.6.0 стало ясно, что необходим механизм для отправления сообщений из ядра в пространство пользователя, в частности для настольных рабочих компьютеров, что позволит сделать такие системы более функциональными, а также лучше использовать асинхронную обработку. Идея состояла в том, что ядро будет помещать возникающие события в стек. Например, "Жесткий диск переполнен!", "Процессор перегрелся!", "Раздел диска смонтирован!", "На горизонте появился пиратский корабль!" (последнее, конечно, шутка).

Первые реализации подсистемы событий ядра появились незадолго до того, как эта подсистема стала тесно связанной с объектами kobject и файловой системой sysfs. В результате такой связи реализация получилась достаточно красивой. В модели уровня событий ядра, события представляются в виде сигналов, которые посылаются объектами, в частности объектами типа kobject. Так как объекты отображаются на элементы каталогов файловой системы sysfs, то источниками событий являются определенные элементы пути на файловой системе sysfs. Например, если поступившее событие связано с первым жестким диском, то адресом источника события является каталог /sys/block/hda. Внутри же ядра источником события является соответствующий объект kobject.

Каждому событию присваивается определенная строка символов, которая представляет сигнал и называется командой (verb) или действием (action). Эта строка символов содержит в себе информацию о том, что именно произошло, например изменение (modified) или размонтирование (unmounted).

Каждое событие может нести в себе некоторую дополнительную информацию (дополнительную нагрузку, payload). Вместо того чтобы передавать в пространство пользователя строку, которая содержит эту полезную информацию, данная дополнительная информация представляется с помощью атрибутов, отображаемых на файловой системе sysfs.

События ядра поступают из пространства ядра в пространство пользователя через интерфейс netlink. Интерфейс netlink — это специальный тип высокоскоростного сетевого сокета групповой передачи (multicast), который используется для передачи сообщений, связанных с сетевой подсистемой. Использование интерфейса netlink позволяет выполнить обработку событий ядра с помощью простых блокирующих вызовов функций для чтения информации из сокетов. Задача пространства пользователя — реализовать системный процесс-демон, который выполняет прослушивание сокета, считывает информацию о всех приходящих событиях, обрабатывает их и отправляет полученные сообщения в системный стек пространства пользователя. Одна из возможных реализаций такого демона, работающего в пространстве пользователя, — это D-BUS[90]. который также реализует и системную шину сообщений. Таким образом, ядро может подавать сигналы так же, как это делают все остальные компоненты системы.

Для отправки события в пространство пользователя код ядра должен вызвать функцию kobject_uevent().

int kobject_uevent(struct kobject *kobj,

 enum kobject_action action, struct attribute *attr);

Первый параметр указывает объект kobject, который является источником сигнала. Соответствующее событие ядра будет содержать элемент пути на файловой системе sysfs, связанный с объектом, сгенерировавшим сигнал.

Второй параметр позволяет указать команду или событие, которое описывает сигнал. Сгенерированное событие ядра будет содержать строку, которая соответствует номеру, передаваемому в качестве значения параметра enum kobject_action. Вместо того чтобы непосредственно передать строку, здесь используется ее номер, который имеет тип перечисления (enum). Это дает возможность более строго выполнить проверку типов, изменить соответствие между номером строки и самой строкой в будущем, а также уменьшить количество ошибок и опечаток. Перечисления определены в файле <linux/kobject_uevent.h> и имеют имена в формате KOBJ_foo. На момент написания книги были определены следующие события: KOBJ_MOUNT, KOBJ_UNMOUNT, KOBJ_ADD, KOBJ_REMOVE и КОВJ_CHANGE. Эти значения отображаются на строки "mount" (монтирование), "unmount" (размонтирование), "add" (добавление), "remove" (удаление) и "change" (изменение) соответственно. Допускается добавление новых значений событий, если существующих значений недостаточно.

Последний параметр — опциональный указатель на структуру attribute. Этот параметр можно трактовать как дополнительную информацию (payload) о событии. Если только одного значения события недостаточно, то событие может предоставить информацию о том, в каком файле файловой системы sysfs содержатся дополнительные данные.

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

int kobject_uevent_atomic(struct kobject *kobj,

 enum kobject_action action, struct attribute *attr);

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

Использование объектов kobject и их атрибутов не только дают возможность описать события в терминах файловой системы sysfs, но и стимулируют создание новых объектов и их атрибутов, которые еще не представлены через файловую систему sysfs.

Обе рассмотренные функции определены в файле lib/kobject_uevent.c и объявлены в файле <linux/kobject_uevent.h>.

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

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

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

Верхний уровень

Из книги Давайте создадим компилятор! автора Креншоу Джек

Верхний уровень Одна из самых больших ошибок людей при нисходящем проектировании заключается в неправильном выборе истинной вершины. Они думают, что знают какой должна быть общая структура проекта и поэтому они продолжают и записывают ее.Всякий раз, когда я начинаю


2.1.1. Уровень 1 — начальный уровень

Из книги Модель зрелости процессов разработки программного обеспечения автора Паулк Марк

2.1.1. Уровень 1 — начальный уровень Находясь на начальном уровне, организация обычно не может обеспечить устойчивый процесс разработки и сопровождения ПО. Когда в организации отсутствует культура управления, преимущества применения хороших решений в процессе


2.1.2. Уровень 2 — повторяемый уровень

Из книги Язык программирования С# 2005 и платформа .NET 2.0. [3-е издание] автора Троелсен Эндрю

2.1.2. Уровень 2 — повторяемый уровень На повторяемом уровне установлены политики управления проектом разработки и процедуры их применения. Планирование и управление новым проектом базируется на опыте работы с подобными проектами. Целью достижения уровня 2 является


2.1.3. Уровень 3 — определенный уровень

Из книги Основы AS/400 автора Солтис Фрэнк

2.1.3. Уровень 3 — определенный уровень На определенном уровне, стандартный процесс разработки и сопровождения ПО в рамках организации надежно документирован, включая как процессы программной инженерии, так и управления, и эти процессы интегрированы в единое целое. Этот


2.1.4. Уровень 4 — управляемый уровень

Из книги TCP/IP Архитектура, протоколы, реализация (включая IP версии 6 и IP Security) автора Фейт Сидни М

2.1.4. Уровень 4 — управляемый уровень На управляемом уровне организация устанавливает количественные показатели качества как для программных продуктов, так и для процессов их разработки. Для важных работ производственных процессов всех проектов выполняются измерения


2.1.5. Уровень 5 — оптимизирующий уровень

Из книги Добавьте в корзину. Ключевые принципы повышения конверсии веб-сайтов автора Айзенберг Джеффри

2.1.5. Уровень 5 — оптимизирующий уровень Находясь на оптимизирующем уровне, вся организация полностью сосредоточена на непрерывном усовершенствовании производственного процесса. Организация обладает средствами профилактического выявления слабых мест процесса и его


ГЛАВА 8. УРОВЕНЬ 2: ПОВТОРЯЕМЫЙ УРОВЕНЬ

Из книги Linux: Полное руководство автора Колисниченко Денис Николаевич

ГЛАВА 8. УРОВЕНЬ 2: ПОВТОРЯЕМЫЙ УРОВЕНЬ 8.1. Управление требованиями Группа ключевых процессов для уровня 2: повторяемый уровень.Цель управления требованиями состоит в том, чтобы заказчик и разработчики смогли полностью согласовать требования, выдвигаемые к проекту


ГЛАВА 9. УРОВЕНЬ 3: ОПРЕДЕЛЕННЫЙ УРОВЕНЬ

Из книги Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ автора Борри Хелен

ГЛАВА 9. УРОВЕНЬ 3: ОПРЕДЕЛЕННЫЙ УРОВЕНЬ 9.1. Координация производственного процесса организации Группа ключевых процессов для уровня 3: определенный уровеньЦель группы ключевых процессов «Координация производственного процесса организации» заключается в установлении


Связный уровень ADO.NET

Из книги UNIX — универсальная среда программирования автора Пайк Роб

Связный уровень ADO.NET Напомним, что связный уровень ADO.NET позволяет взаимодействовать с базой данных, используя объекты соединения, команд и чтения данных вашего поставщика данных. Вы уже использовали эти объекты в предыдущем примере DataProviderFactory, но давайте рассмотрим


Защита ОС (уровень 40)

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

Защита ОС (уровень 40) Уровень 40 появился в версии V1R3 OS/400. Сегодня все новые AS/400 поставляются именно с этим уровнем защиты, а не 10, как ранее. Но старые версии OS/400 и при модернизации сохраняют текущий уровень, установленный заказчиком. Теперь пароль начальника защиты


3.2.1 Физический уровень

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

3.2.1 Физический уровень Физический уровень (physical layer) имеет дело с физическими носителями, разъемами и сигналами для представления логических нулей и единиц. Например, адаптеры сетевого интерфейса Ethernet и Token-Ring и соединяющие их кабели реализуют функции физического


Средний уровень

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

Средний уровень Системы веб-аналитики предлагают три уровня анализа: базовый, средний и продвинутый. Эти уровни зависят от знаний клиента и от того, какое воздействие на эффективность сайта будут иметь результаты анализа. Давайте рассмотрим эти уровни на примере


Продвинутый уровень

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

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


27.1.1.4. Уровень приложений

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

27.1.1.4. Уровень приложений Этот уровень является вершиной модели TCP/IP. На этом уровне работают практически все распространенные утилиты и службы: DNS, Telnet, WWW. Gopher, WAIS. SNMP, FIT, TFTP, SMTP, POP, IMAP.Таблица 27.3 показывает соответствие уровней стека протокола TCP/IP семиуровневой модели


Уровень изоляции

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

Уровень изоляции Firebird предоставляет три уровня изоляции транзакций для определения "глубины" согласованности требований транзакции. В одном крайнем случае транзакция может получить исключительный доступ по записи ко всей таблице, в то время как в другом крайнем случае