Вход/Регистрация
Разработка ядра Linux
вернуться

Лав Роберт

Шрифт:

 struct kset_hotplug_ops *hotplug_ops;

};

Указатель

ktype
указывает на структуру
ktype
, которая определяет тип всех объектов данного множества, поле
list
— список всех объектов
kobject
данного множества, поле
kobj
— объект
kobject
, который представляет базовый класс для всех объектов данного множества, а поле
hotplug_ops
указывает на структуру, которая определяет поведение объектов
kobject
при горячем подключении устройств, связанных с данным множеством.

Наконец, поле

subsys
указывает на структуру
struct subsystem
, которая связана с данным множеством
kset
.

Подсистемы

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

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

Несмотря на их важную роль, подсистемы представляются с помощью очень простой структуры данных —

struct subsystem
.

struct subsystem {

 struct kset kset;

 struct rw_semaphore rwsem;

};

Структура

subsystem
содержит только одно множество
kset
, тем не менее несколько множеств
kset
могут указывать на общую структуру
subsystem
с помощью поля
subsys
. Такие однонаправленные взаимоотношения означают, что нет возможности определить все множества подсистемы, только имея ее структуру
subsystem
.

Поле

kset
, которое содержится в структуре
subsystem
, — это множество
kset
подсистемы, которое используется по умолчанию, чтобы зафиксировать положение этой подсистемы в иерархии объектов.

Поле

rwsem
структуры
subsystem
— это семафор чтения-записи (см. главу 9, "Средства синхронизации в ядре"), который используется для защиты подсистемы и ее множеств
kset
от конкурентного доступа. Все множества
kset
должны принадлежать какой-нибудь подсистеме, поскольку они используют семафор подсистемы для защиты своих данных от конкурентного доступа.

Путаница со структурами

Те несколько структур, которые только что были описаны, приводят к путанице не потому, что их много (только четыре) или они сложные (все они достаточно просты), а потому что они сильно друг с другом переплетаются. При использовании объектов

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

Самым важным является объект

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

С каждым объектом

kobject
связан один определенный тип данных —
ktype
, который представляется с помощью структуры
struct kobj_type
. На экземпляр такой структуры указывает поле
ktype
каждого объекта
kobject
. С помощью типов
ktype
определяются некоторые общие свойства объектов: поведение при удалении объекта, поведение, связанное с файловой системой sysfs, а также атрибуты объекта.

Объекты

kobject
группируются в множества, которые называются
kset
. Множества
kset
представляются с помощью структур данных
struct kset
. Эти множества предназначены для двух целей. Во-первых, они позволяют использовать встроенный в них объект
kobject
в качестве базового класса для группы других объектов
kobject
. Во-вторых, они позволяют объединять вместе несколько связанных между собой объектов
kobject
. На файловой системе sysfs объекты
kobject
представляются отдельными каталогами файловой системы. Связанные между собой каталоги, например все подкаталоги одного каталога, могут быть включены в одно множество
kset
.

Подсистемы соответствуют большим участкам ядра и являются набором множеств kset. Подсистемы представляются с помощью структур

struct subsystem
. Все каталоги, которые находятся в корне файловой системы sysfs, соответствуют подсистемам ядра.

На рис. 17.1 показаны взаимоотношения между этими структурами данных.

Рис. 17.1. Взаимоотношения между объектами

kobject
, множествами
kset
и подсистемами

  • Читать дальше
  • 1
  • ...
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: