Главная » Ядро Linux » Множества объектов kse t

0

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

Поле kse t объекта kobjec t указывает на связанное с данным объектом множество kset . Множество объектов kse t представляется с помощью структуры kset , которая определена в файле <linux/koject.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, которая определяет тип всех объектов данного множества, поле lis t список всех объектов kobjec t данного множества, поле kobj — объект kobject , который представляет базовый класс для всех объектов данного множества, а поле hotplug_op s  указывает на структуру, которая определяет поведение объектов kobjec t при горячем подключении устройств, связанных с данным множеством.

Наконец, поле sybsys указывает на структуру struc t  subsystem, которая связана с данным множеством kset .

Подсистемы

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

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

struct subsystem {

struct kset              ksot;

struct rw_semaphore       rwsem;

};

Структура subsystem содержит только одно множество  kset , тем не менее несколько множеств kse t могут указывать на общую структуру subsystem с помощью

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

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

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

Источник: Лав,  Роберт. Разработка ядра  Linux, 2-е  издание. : Пер.  с англ.  — М.  : ООО  «И.Д.  Вильяме» 2006. — 448 с. : ил. — Парал. тит. англ.

По теме:

  • Комментарии