Главная » Ядро Linux » Объекты VFS и их структуры данных

0

Виртуальная  файловая  система  (VFS)  объектно-ориентированна3 . Общая  файловая  модель  представлена  набором  структур  данных.  Эти  структуры  данных  очень похожи  на объекты.  Так  как ядро  программируется строго  на языке  С,  то,  при  отсутствии  возможностей  прямой  поддержки  парадигм  ООП  в языке  программирования,  структуры данных  представляются  структурами  языка  С.  Структуры  содержат как указатели  на элементы  данных,  так и указатели  на функции, которые  работают с этими данными.

Существуют  следующие  четыре основных  типа  объектов  VFS.

• Объект суперблок (superblock), который представляет определенную смонтированную файловую  систему.

• Объект  файловый индекс (inode), который  представляет  определенный файл.

• Объект элемент каталога (denlry), который  представляет  определенный элемент каталога.

• Объект файл (file), который  представляет  открытый  файл,  связанный с процес сом.

Следует обратить  внимание, что поскольку  подсистема  VFS рассматривает  каталоги как  обычные  файлы,  то не существует специальных  объектов  для каталогов.  Как рассказывалось ранее,  объект  dentry  представляет  компонент  пути,  который  может содержать  обычный  файл.  Другими  словами,  deniry — это не то же самое,  что каталог, а каталог — это то же, что и файл.  Все понятно?

Каждый  из рассмотренных  основных  объектов  содержит  объект  operations (операции).  Эти объекты  описывают  методы,  которые  ядро может применять  для основных объектов.

3   Част о многи е этого  не  замечают  и даже  отрицают, но  тем не  менее  в ядре  много  примеро в объектно-ориентированног о программирования . Хотя разработчик и ядр а и сторонятс я язык а C++ и других явн о объектно-ориентированных языков  программировании (ООП) , иногда  очен ь полезно мыслить  в терминах  объектов.  Подсистема VFS— это  хороши й приме р того,  как  прост о и эффективн о объектно-ориентированное программирование реализуется  на языке  С,  в котором  нет объектно-ориентированных конструкций.

В частности, существуют  следующие объекты  операций.

• Объект  super_operation s (операции с суперблоком файловой системы)  содержит  методы, которые ядро  может  вызывать для  определенной  файловой системы, как, например, read_inode ()  или  sync_fs ().

• Объект  inodeoperation s (операции с файловыми индексами) содержит методы, которые ядро может вызывать для определенного файла, как, например, create d   или  lin k () .

• Объект  dentry_operation s  (операции с элементами каталогов)  содержит методы, которые ядро  может  вызывать для определенного элемента каталога, как, например, d_compare ()  или d_delet e () .

• Объект  f ile_operation s (операции с файлами) содержит методы, которые процесс может вызывать для открытого файла, как например, read ()  и wri te ().

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

И еще раз повторимся, что под объектами мы будем понимать структуры, которые явно  не являются объектными типами (в отличие  от языков программирования C++ и Java).  Однако эти  структуры  представляют определенные экземпляры объектов, данные  связанные с объектами, и методы, которые ими  оперируют. Это практически то же, что и объектные типы.

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

По теме:

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