Интерфейс vnode/vfs создан на основе концепций объектно-ориентированного программирования (ООП).
Также может иметь смысл заглянуть на сайт colortone.ru, ведь именно там можно узнать много нового на тему http://colortone.ru/index.php/arkhitekturnaya-plenka. Тема архитектурные пленки может показаться на первый взгляд незначительной и даже не тематичной. Но стоит посетить сайт colortone.ru, и тема архитектурные пленки начинает проявлять себя с неожиданной стороны и вызывает всё больший интерес. Дело в том, что тема архитектурные пленки очень подробно представлена на сайте colortone.ru. Трудно найти более детальное освещение темы архитектурные пленки чем это сделано на сайте colortone.ru. Спасибо сайту colortone.ru за такое доскональное преподнесение темы архитектурные пленки.
Позже такой подход был использован и для других участков ядра UNIX, таких как управление памятью, коммуникации при помощи сообщений и планирование процессов. Ознакомимся вкратце с основами ООП в части применения для разработки ядра систем UNIX.
Такие технологии обычно реализуются при помощи объектно-ориентированных языков программирования типа C++, но разработчики UNIX выбрали для этого язык С из соображений единообразия с кодами остальной части ядра.
Объектно-ориентированный подход основан на понятиях класса и объекта. Класс является сложным типом данных, состоящим из полей данных членов класса и набора их функций. Объект — это элемент класса. Функции членов класса оперируют с индивидуальными объектами этого класса. Обобщенно каждый член класса (данные или функция) бывает либо открытым (public), либо закрытым (private). Внешние пользователи класса видят только общедоступные его элементы. Закрытые данные или методы могут быть доступны только другим функциям того же класса.
На основе любого класса можно создать один или более порожденных классов, называемых классами-наследниками
Класс-наследник сам по себе может являться базовым для последующих классов, порожденных от него.
Так формируется иерархия классов. Наследник приобретает все атрибуты (данные и функции) своего базового класса. Более того, в нем могут быть изменены некоторые функции базового класса, — таким образом, класс-потомок может обладать собственными реализациями этих функций.
Так как порожденный класс обладает всеми атрибутами базового класса, объект такого типа также является и объектом типа базового класса. Например, класс directory (каталог) может являться порожденным классом file (файла). Это означает, что любой каталог является и файлом. Конечно, обратное утверждение не будет верным: не каждый файл представляет собой каталог. Точно так же указатель на объект каталога является и указателем на объект файла. Атрибуты, добавленные в класс-наследник, невидимы базовым классом. Следовательно, указатель на базовый объект нельзя использовать для доступа к данным или функциям, специфичным для порожденного класса.
Часто базовый класс используется для задания основных абстракций и определения интерфейса.
Специфичные реализации функций для каждого члена класса оформляются в порожденных классах.
Таким образом, в классе file можно определить функцию create(), но при вызове ее пользователем для произвольного файла загрузятся различные процедуры в зависимости оттого, является ли файл обычным, каталогом, символической ссылкой, файлов устройства и т. д.
Мы вправе вообще не определять функцию
create()
для произвольного файла. Такая функция называется виртуальной функцией. Реализовать вышеописанные объекты можно при помощи языков ООП. Например, на C++ можно определить абстрактный базовый класс как класс, содержащий как минимум одну виртуальную функцию. Так как базовый класс не будет иметь реализации для этой функции, она не может быть вызвана. Она используется только для порожденных классов, в которых предлагаются различные реализации виртуальных функций. Все объекты являются представителями одного или другого кпасса-потомка, но пользователь волен управлять ими при помощи указателя базового класса, не обладая знаниями, к какому конкретному классу-наследнику они относятся. Если для объекта вызывается виртуальная функция, то определение, какую из специфических функций необходимо вызвать, происходит автоматически, в зависимости от класса-наследни- ка данного объекта.
Как уже упоминалось ранее, языки, такие как C++ или SmallTalk, обладают встроенными конструкциями для описания таких понятий, как классы или виртуальные функции. В языке С эти элементы приходится реализовывать самостоятельно. В следующем разделе мы расскажем об интерфейсе vnode/vfs, в основу которого положен объект- но-ориентированный подход.
Опубликовал katy
July 08 2015 08:51:18 ·
0 Комментариев ·
2525 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.