Роберт Лав - Разработка ядра Linux

Тут можно читать онлайн Роберт Лав - Разработка ядра Linux - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-programming, издательство Издательский дом Вильямс, год 2006. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Разработка ядра Linux
  • Автор:
  • Жанр:
  • Издательство:
    Издательский дом Вильямс
  • Год:
    2006
  • Город:
    Москва
  • ISBN:
    5-8459-1085-4
  • Рейтинг:
    3.67/5. Голосов: 91
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 80
    • 1
    • 2
    • 3
    • 4
    • 5

Роберт Лав - Разработка ядра Linux краткое содержание

Разработка ядра Linux - описание и краткое содержание, автор Роберт Лав, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

В книге детально рассмотрены основные подсистемы и функции ядер Linux серии 2.6, включая особенности построения, реализации и соответствующие программны интерфейсы. Рассмотренные вопросы включают: планирование выполнения процессов, управление временем и таймеры ядра, интерфейс системных вызовов, особенности адресации и управления памятью, страничный кэш, подсистему VFS, механизмы синхронизации, проблемы переносимости и особенности отладки. Автор книги является разработчиком основных подсистем ядра Linux. Ядро рассматривается как с теоретической, так и с прикладной точек зрения, что может привлечь читателей различными интересами и потребностями.

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

Разработка ядра Linux - читать онлайн бесплатно полную версию (весь текст целиком)

Разработка ядра Linux - читать книгу онлайн бесплатно, автор Роберт Лав
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

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

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

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

Несмотря на их важную роль, подсистемы представляются с помощью очень простой структуры данных — 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, а также атрибуты объекта.

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Роберт Лав читать все книги автора по порядку

Роберт Лав - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Разработка ядра Linux отзывы


Отзывы читателей о книге Разработка ядра Linux, автор: Роберт Лав. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x