Разработка для VFS
Q: Apple поддерживает разработку внешних файловых систем (плагины VFS) на Mac OS X? Где я могу найти информацию о разработке такой файловой системы?
A: Apple поддерживает разработку внешних файловых систем (плагины VFS) на Mac OS X? Где я могу найти информацию о разработке такой файловой системы?
Ответ зависит от того, какую файловую систему Вы разрабатываете.
Листовые файловые системы
Листовая файловая система работает независимо от других файловых систем. Листовые файловые системы включают:
локальные файловые системы — Они говорят прямо с устройством блочной системы хранения, которое обычно присоединено к компьютеру непосредственно (например, жесткий диск ATA). HFS Плюс является примером локальной файловой системы.
сетевые файловые системы — сетевая файловая система переводит каждую операцию файловой системы в соответствующие сетевые команды и передает тех к файловому серверу. Mac OS X поддерживает много сетевых файловых систем, включая AFP, NFS и SMB/CIFS.
кластерные файловые системы — кластерная файловая система комбинирует предыдущие два подхода, с помощью сетевых команд для операций метаданных и команд блочной системы хранения для передачи данных (обычно через Сеть хранения данных или SAN). Xsan является кластерной файловой системой Apple.
Apple поддерживает разработку листовых файловых систем для всех версий Mac OS X. Однако правила изменились существенно, и к лучшему, в Mac OS X 10.4 Тайгера.
До введения Mac OS X 10.4 Тигров части BSD ядра Mac OS X не были спроектированы для совместимости на уровне двоичных кодов. Реализация плагина VFS потребовала глубоких знаний внутренностей ядра, и получающийся продукт встроил то знание, делая его очень хрупким. Малейшее изменение в ядре (переупорядочивающий поля в структуре, например) повредило бы все плагины VFS.
С Mac OS X 10.4 Тигров Apple решил эту проблему путем представления Kernel Programming Interface (KPI) VFS. Этот KPI изолирует Ваш плагин VFS от изменений ядра. Например, Вы больше поля доступа в структурах ядра непосредственно; скорее Вы вызываете функции средства доступа, предоставляющиеся KPI. При помощи этого KPI можно разработать плагин VFS с ожиданием, что это будет совместимо с будущими системами.
Это походит на нирвану файловой системы, правильно? Увы, существует все еще несколько вещей волноваться о.
Нет никакой совместимости на уровне двоичных кодов для плагинов VFS между пред10.4 системами и 10.4. Если Ваш продукт должен поддерживать пред10.4 систем, необходимо разработать и поставить два плагина VFS: один для пред10.4, и один для 10,4 и вне. Существуют способы минимизировать боль (например, можно создать внутренний уровень абстракции, изолирующий объем кода от этих различий), но никакой способ устранить его полностью.
При портировании плагина VFS на Mac OS X 10.4 KPI с другой платформы UNIX Вы заметите что определенные известные структуры ядра UNIX (такой как
struct uio) теперь непрозрачны. Т.е. Вы не можете непосредственно получить доступ к полямstruct uio; необходимо вызвать надлежащие функции средства доступа вместо этого.Это изменение является прямым следствием нашего требования совместимости на уровне двоичных кодов, но это может вызвать проблемы, если у Вас есть кросс-платформенная кодовая база. Единственное хорошее решение должно изменить весь Ваш код для использования некоторой формы макросов, чтобы получить доступ к этим полям, и затем определить макросы соответственно для платформы.
Документация для VFS KPI является все еще довольно элементарной. Apple исправит это в будущем (r. 3524590); тем временем это Вопросы и ответы включает список ссылок на документацию и другие ресурсы.
При разработке плагина VFS можно счесть следующие ресурсы полезными.
Архитектура Mac OS X VFS получена из 4.4BSD. «Разработка и реализация 4.4BSD Операционная система» (ISBN: 0-201-54979-4), включает хороший обзор VFS в той системе. Как существуют основные отличия между 4.4BSD и Mac OS X (KPIs, Объединенный Буферный Кэш, изменения в поддержке семантика HFS, и больше), Вы не должны считать эту книгу авторитетной.
Для получения общей информации о программировании ядра Mac OS X, см. документацию относительно веб-сайта разработчика Apple.
Существует много DTS Q&As то покрытие VFS. Эти Q&As покрывают глюки, с которыми наиболее часто встречаются, разработкой VFS на Mac OS X, и они хорошо достойные внимания.
Следующие плагины VFS были записаны в частности как пример кода:
Пример кода 'EmptyFS' является очень простым плагином VFS; его объемы абсолютно пусты (за исключением корневого каталога). Цель этой выборки состоит в том, чтобы создать минимальный плагин VFS, создающий и работающий. Можно использовать EmptyFS для исследования поведения VFS, или как шаблона для собственного плагина VFS.
Пример кода 'MFSLives' является демонстрационным плагином VFS, реализующим доступ только для чтения к формату объема Macintosh File System (MFS). MFS является превосходным форматом объема для примера кода, потому что это очень просто, но это позволяет, Вы для осуществления путей выполнения кода связались со специфичными для Macintosh метаданными (в частности, информация Средства поиска, файлы мультиветвления и волки).
Источник для многих существующих файловых систем доступен в Дарвине (основы с открытым исходным кодом Mac OS X). Я рекомендую файловую систему DOS/FAT («msdosfs» проект) и файловую систему WebDAV («webdavfs» проект).
Если у Вас есть технические вопросы, существует множество списков рассылки для свободной основанной на сообществе поддержки (я рекомендую список рассылки дарвинского ядра), и Техническая поддержка Разработчика Apple для оплаченной поддержки.
Укладка файловых систем
Файловая система укладки (иногда называемый файловой системой фильтра) находится поверх другой файловой системы и изменяет свое поведение в некотором роде. Каноническим примером файловой системы укладки является файловая система шифрования. Вы могли сложить эту файловую систему поверх любой существующей файловой системы для обеспечения поддержки шифрования.
Apple не поддерживает разработку укладки плагинов VFS на Mac OS X (r. 4383626). Мы заняли эту позицию, потому что по нашему мнению не возможно создать укладку плагин VFS что:
работы надежно
сильно не посягает на производительность системы
имеет любую надежду на двоичный файл (или даже исходный уровень) совместимость с будущими системами
Если у Вас есть проблема, которая может только быть решена через файловую систему укладки, сообщите нам путем отправки по почте Технической поддержки Разработчика. В то время как мы не можем поддерживать Вашу разработку, мы интересуемся сбором информации о том, в чем разработчики нуждаются и почему. Эта обратная связь будет вести наш долгосрочный подход к этому вопросу. Мы можем также быть в состоянии предложить альтернативный проект, не требующий укладки.
Наконец, существует много сторонних разработчиков, работающих в этой области. Если Вы будете абсолютно полны решимости разработать неподдерживаемую укладку плагин VFS, то Вы найдете некоторую справку в Интернете.
Альтернативы
Разработка плагина VFS для Mac OS X трудна. Существует много факторов, способствующих трудности:
Файловые системы по сути сложны.
Файловые системы должны быть очень надежными.
Ваш код выполняется в ядре, которое является более трудной средой программирования, чем пространство пользователя.
К Вашей файловой системе могут получить доступ все приложения, делающие разработку совместимости и тестирование трудного.
В целом, если можно избежать разрабатывать файловую систему, намного лучше. Кроме того, если необходимо разработать файловую систему, лучше, если можно продвинуть как можно больше той разработки в пространство пользователя.
Существует два известных метода для минимизации суммы кода ядра, который необходимо записать.
Сервер NFS — можно избежать писать любой код ядра путем записи локального сервера NFS, выполнения его на компьютере пользователя, и затем использования встроенного клиента NFS Apple, чтобы смонтировать что сервер в иерархии файловой системы. В то время как это могло бы казаться замысловатым, этот подход является относительно простым и эффективным: Apple использует его для реализации файловых систем FTP и автомонтирования.
Из-за многократных циклов обработки в и из ядра, этот подход не является подходящим для данных - или интенсивная метаданными файловая система.
гибрид ядра/пользователя — Этот подход помещает объем кода в демоне пространства пользователя с тупиковой файловой системой в ядре, перенаправляющей запросы демону. Это - то, как работает файловая система WebDAV Apple. Это имеет преимущество, что Вы получаете полный контроль над тем, как Ваша файловая система появляется пользователю при хранении большей части кода в пространстве пользователя.
Гибридный подход также больше подходит для производительности чувствительные приложения, потому что Вы выбираете, какие данные (или метаданные) сгенерированы (или кэшируются) ядром, и который оставляют до демона. Файловая система WebDAV имеет особенно интересное взятие на этом: в WebDAV данные кэшей демона в файлах на локальном жестком диске и тупик ядра могут обслужить чтение и записать запросы непосредственно из тех файлов.
Наконец, Mac OS X обеспечивает определенный APIs для решения проблем, которые могли бы иначе потребовать файловой системы укладки.
Драйверы схемы фильтра Носителей I/O могут использоваться для реализации шифрования блочного уровня. В то время как это не точная замена для сложенной файловой системы шифрования (у каждого есть ее собственные преимущества и недостатки), это имеет большое значение для удовлетворения цели пользовательского уровня.
Посмотрите Пример кода 'SampleFilterScheme' для примера того, как сделать это.
Mac OS X 10.4 представляет новый KPI, Авторизация Ядра (или Kauth), который может использоваться для реализации антивирусного сканера файла. Kauth документируется в Техническое примечание TN2127, 'Авторизация Ядра', с ее связанным Примером кода 'KauthORama'.
История версии документа
| Дата | Примечания |
|---|---|
| 22.12.2006 | Добавленные ссылки к EmptyFS и MFSLives, и документации Kauth и примеру кода. Добавленный число ошибки для документации VFS. |
| 16.03.2006 | Добавленное число ошибки для отслеживания укладки требование VFS. |
| 24.05.2005 | Обновление для Mac OS X 10.4 тигров. |
| 26.03.2003 | Новый документ, описывающий позицию Apple при разработке внешних файловых систем (плагины VFS) для Mac OS X. |