Чтение онлайн

на главную

Жанры

Разработка ядра Linux
Шрифт:

Указатель

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

Указатель

dentry
содержит адрес структуры
struct dentry
, которая представляет этот объект в файловой системе sysfs.

Поля

kref
,
ktype
и
kset
указывают на экземпляры структур, которые используются для поддержки объектов
kobject
. Поле
entry
используется совместно с полем
kset
. Сами эти структуры и их использование будут обсуждаться ниже.

Обычно структуры

kobject
встраиваются в другие структуры данных и сами по себе не используются. Например, такая важная структура, как
struct cdev
, имеет поле
kobj
.

/* структура cdev - объект для представления символьных устройств */

struct cdev {

 struct kobject kobj;

 struct module *owner;

 struct file_operations *ops;

 struct list_head list;

 dev_t dev;

 unsigned int count;

};

Когда структуры

kobject
встраиваются в другие структуры данных, то последние получают те стандартизированные возможности, которые обеспечиваются структурами
kobject
. Еще более важно, что структуры, которые содержат в себе объекты
kobject
, становятся частью объектной иерархии. Например, структура
cdev
представляется в объектной иерархии с помощью указателя на родительский объект
cdev->kobj->parent
и списка
cdev->kobj->entry
.

Типы

ktype

Объекты

kobject
могут быть связаны с определенным типом, который называется
ktype
. Типы
ktype
представляются с помощью структуры s
truct kobj_type
, определенной в файле
<linux/kobject.h>
следующим образом.

struct kobj_type {

 void (*release)(struct kobject*);

 struct sysfs_ops *sysfs_ops;

 struct attribute **default_attrs;

};

Тип

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

Поле

release
содержит указатель на деструктор, который вызывается, когда количество ссылок на объект становится равным нулю. Эта функция отвечает за освобождение памяти, связанной с объектом, и за другие операции очистки.

Поле

sysfs_ops
указывает на структуру
sysfs_ops
. Эта структура определяет поведение файлов на файловой системе
sysfs
при выполнении операций записи и чтения. Более детально она рассматривается в разделе "Добавление
файлов на файловой системе sysfs".

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

default_attrs
указывает на массив структур
attribute
. Эти структуры определяют атрибуты, которые связаны с объектом
kobject
и используются но умолчанию. Атрибуты соответствуют свойствам данного объекта. Если некоторый объект
kobject
экспортируется через файловую систему sysfs, то атрибуты экспортируются как отдельные файлы. Последний элемент этого массива должен содержать значению
NULL
.

Множества объектов

kset

Множества

kset
представляют собой коллекции объектов
kobject
. Множество
kset
работает как базовый контейнерный класс для объектов, например, "все блочные устройства". Множества
kset
очень похожи на типы
ktype
, и возникает вопрос: "Для чего нужны два разных обобщения?" Множество
kset
объединяет несколько объектов
kobject
, а типы
ktype
определяют общие свойства, которые связаны с объектами
kobject
одного типа. Существует возможность объединить объекты одного типа
ktype
в различные множества
kset
.

Поле

kset
объекта
kobject
указывает на связанное с данным объектом множество
kset
. Множество объектов
kset
представляется с помощью структуры
kset
, которая определена в файле
<linux/kobject.h>
следующим образом.

struct kset {

 struct subsystem *subsys;

 struct kobj_type *ktype;

 struct list_head list;

 struct kobject kobj;

 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
одной подсистемы могут иметь только наиболее общие объединяющие факторы.

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

Возвращение Безумного Бога 5

Тесленок Кирилл Геннадьевич
5. Возвращение Безумного Бога
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Возвращение Безумного Бога 5

Холодный ветер перемен

Иванов Дмитрий
7. Девяностые
Фантастика:
попаданцы
альтернативная история
6.80
рейтинг книги
Холодный ветер перемен

Кровь, золото и помидоры

Распопов Дмитрий Викторович
4. Венецианский купец
Фантастика:
альтернативная история
5.40
рейтинг книги
Кровь, золото и помидоры

Наследник павшего дома. Том I

Вайс Александр
1. Расколотый мир
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Наследник павшего дома. Том I

Книга 5. Империя на марше

Тамбовский Сергей
5. Империя у края
Фантастика:
альтернативная история
5.00
рейтинг книги
Книга 5. Империя на марше

Генерал Скала и сиротка

Суббота Светлана
1. Генерал Скала и Лидия
Любовные романы:
любовно-фантастические романы
6.40
рейтинг книги
Генерал Скала и сиротка

Мимик нового Мира 14

Северный Лис
13. Мимик!
Фантастика:
юмористическое фэнтези
постапокалипсис
рпг
5.00
рейтинг книги
Мимик нового Мира 14

Стрелок

Астахов Евгений Евгеньевич
5. Сопряжение
Фантастика:
боевая фантастика
постапокалипсис
рпг
5.00
рейтинг книги
Стрелок

Безумный Макс. Поручик Империи

Ланцов Михаил Алексеевич
1. Безумный Макс
Фантастика:
героическая фантастика
альтернативная история
7.64
рейтинг книги
Безумный Макс. Поручик Империи

Сержант. Назад в СССР. Книга 4

Гаусс Максим
4. Второй шанс
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Сержант. Назад в СССР. Книга 4

Третий. Том 2

INDIGO
2. Отпуск
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
Третий. Том 2

Боксер 2: назад в СССР

Гуров Валерий Александрович
2. Боксер
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Боксер 2: назад в СССР

Вопреки судьбе, или В другой мир за счастьем

Цвик Катерина Александровна
Любовные романы:
любовно-фантастические романы
6.46
рейтинг книги
Вопреки судьбе, или В другой мир за счастьем

Кротовский, сколько можно?

Парсиев Дмитрий
5. РОС: Изнанка Империи
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Кротовский, сколько можно?