Открыть сервис

IOStorageFamily

IOStorageFamily — это семейство фреймворков и драйверов в операционной системе macOS (ранее OS X), разработанное компанией Apple Inc., которое обеспечивает программную абстракцию и управление подсистемой хранения данных. IOStorageFamily входит в состав I/O Kit — объектно-ориентированной платформы для разработки драйверов устройств в ядре XNU. Данное семейство предоставляет унифицированный интерфейс для взаимодействия с различными типами накопителей (жёсткие диски, твердотельные накопители, оптические приводы, RAID-массивы, виртуальные диски) и реализует стек протоколов для работы с файловыми системами, шифрованием (например, FileVault) и сетевым хранением (iSCSI, NFS).

История

Разработка IOStorageFamily началась в конце 1990-х годов в рамках создания I/O Kit для операционной системы Mac OS X, которая была анонсирована в 1998 году. Первая публичная версия I/O Kit, включающая IOStorageFamily, появилась в Mac OS X 10.0 (Cheetah), выпущенной 24 марта 2001 года. До этого в классической Mac OS (до версии 9) управление хранением осуществлялось через устаревшие механизмы, такие как SCSI Manager и ATA Manager, которые не обеспечивали должной модульности и поддержки современных интерфейсов.

С выходом Mac OS X 10.4 (Tiger) в 2005 году IOStorageFamily получила поддержку технологии Core Storage — логического менеджера томов, который позволил реализовать программные RAID-уровни (0, 1, JBOD) и шифрование на уровне блоков. В 2011 году, с выпуском Mac OS X 10.7 (Lion), IOStorageFamily была расширена для поддержки FileVault 2 — полноценного шифрования дисков на основе XTS-AES-128. В 2016 году, в macOS 10.12 (Sierra), Apple внедрила поддержку Apple File System (APFS), что потребовало значительной модификации IOStorageFamily для работы с новыми механизмами клонирования, снапшотов и сжатия.

Архитектура

IOStorageFamily построена на принципах объектно-ориентированного программирования и наследуется от класса IOService в I/O Kit. Основные компоненты семейства включают:

  • IOStorage — абстрактный базовый класс, представляющий устройство хранения. Он определяет методы для чтения, записи, синхронизации и управления питанием.
  • IOBlockStorageDevice — подкласс для блочных устройств (диски, SSD), работающих с фиксированными блоками данных.
  • IOStorageProtocolCharacteristics — интерфейс для описания свойств протокола (например, SCSI, ATA, NVMe).
  • IOMedia — класс, представляющий раздел диска или том. Он содержит информацию о размере, типе файловой системы, загрузочных записях и т.д.
  • IOStorageStack — механизм для построения цепочек драйверов, где каждый слой может модифицировать или перенаправлять запросы (например, шифрование, RAID, кэширование).

Модель драйверов

Драйверы в IOStorageFamily реализуются как объекты, которые регистрируются в I/O Registry. Каждый драйвер соответствует конкретному устройству или протоколу. Например, драйвер AppleAHCI управляет контроллерами AHCI для SATA-дисков, а AppleNVMe — для NVMe-накопителей. Драйверы могут быть написаны на C++ с использованием I/O Kit API, который предоставляет Apple.

Классификация

IOStorageFamily можно классифицировать по функциональному назначению:

  • Физические драйверы — обеспечивают прямое взаимодействие с аппаратным обеспечением (SATA, SAS, NVMe, USB Mass Storage, FireWire, Thunderbolt).
  • Логические драйверы — реализуют программные абстракции: RAID (AppleRAID), шифрование (CoreStorage, FileVault), виртуальные диски (DMG, VHD).
  • Сетевые драйверы — поддерживают протоколы iSCSI, Fibre Channel (через сторонние KEXT) и NFS (на уровне VFS, но с интеграцией через IOStorageFamily).
  • Фильтрующие драйверы — модифицируют или контролируют поток данных (например, кэширование, мониторинг, антивирусные сканеры).

Устройство и характеристики

Основные компоненты

  1. I/O Kit Registry — древовидная база данных, в которой регистрируются все устройства и драйверы. IOStorageFamily использует её для поиска подходящих драйверов и установления связей между ними.
  2. Команды ввода-вывода — запросы на чтение/запись передаются через объекты IOStorageCompletion. Каждый запрос содержит буфер данных, смещение, длину и флаги (например, синхронность, приоритет).
  3. Планировщик запросов — встроенные механизмы для оптимизации порядка выполнения операций (например, объединение смежных запросов, сортировка по номеру блока).
  4. Поддержка горячего подключения — IOStorageFamily автоматически обнаруживает новые устройства через шины (USB, Thunderbolt) и загружает соответствующие драйверы.

Характеристики

  • Типы поддерживаемых устройств: HDD, SSD, NVMe, оптические приводы (CD/DVD/BD), флеш-накопители, RAID-массивы (0, 1, 10, JBOD).
  • Максимальный размер тома: ограничен файловой системой (для APFS — до 8 эксабайт, для HFS+ — до 8 терабайт).
  • Шифрование: XTS-AES-128 (FileVault 2), программное шифрование через CoreStorage.
  • Производительность: IOStorageFamily поддерживает асинхронные операции, DMA (прямой доступ к памяти) и TRIM для SSD.
  • Безопасность: Sandbox для драйверов (начиная с macOS 10.15 Catalina), подпись кода (KEXT должны быть подписаны Apple).

Применение

IOStorageFamily используется в macOS для всех операций, связанных с хранением данных:

  • Загрузка системы: драйверы IOStorageFamily загружаются на ранних этапах загрузки (в рамках I/O Kit) для доступа к корневому разделу.
  • Управление дисками: приложение «Дисковая утилита» (Disk Utility) использует IOStorageFamily для создания, удаления и изменения разделов, а также для настройки RAID.
  • Шифрование: FileVault 2 полагается на CoreStorage (часть IOStorageFamily) для шифрования всего диска.
  • Виртуализация: в Parallels Desktop и VMware Fusion IOStorageFamily используется для создания виртуальных дисков.
  • Сетевое хранение: iSCSI-инициаторы (например, сторонние KEXT) работают через IOStorageFamily, предоставляя блочный доступ к удалённым хранилищам.

Примеры

  • AppleAHCI.kext — драйвер для контроллеров AHCI (SATA), обеспечивающий работу с SSD и HDD.
  • AppleNVMe.kext — драйвер для NVMe-накопителей, используемый в MacBook Pro и Mac Pro после 2016 года.
  • CoreStorage.kext — модуль для управления логическими томами, шифрованием и программным RAID.
  • IOHDIXController.kext — драйвер для работы с образами дисков (DMG, ISO, VHD).
  • AppleRAID.kext — реализация программных RAID-уровней.

Критика и ограничения

IOStorageFamily, как часть закрытой экосистемы Apple, имеет ряд недостатков:

  • Закрытость исходного кода: в отличие от Linux, где драйверы хранения открыты, IOStorageFamily является проприетарным. Это затрудняет разработку сторонних драйверов и отладку.
  • Ограниченная поддержка устаревшего оборудования: начиная с macOS 10.15 Catalina, Apple прекратила поддержку 32-битных KEXT, что сделало невозможным использование некоторых старых драйверов.
  • Проблемы с совместимостью: при переходе на процессоры Apple Silicon (M1, M2) многие сторонние KEXT, включая драйверы для RAID-контроллеров, перестали работать, так как Apple требует переписывания драйверов под новую архитектуру (DriverKit).
  • Отсутствие гибкости: IOStorageFamily не предоставляет низкоуровневого доступа к аппаратному обеспечению, что ограничивает возможности для тонкой настройки производительности (например, приоритеты запросов, кэширование).

Интересные факты

  • IOStorageFamily является частью I/O Kit, который был написан на C++ и впервые представлен в Mac OS X 10.0. В 2020 году Apple объявила о постепенном отказе от I/O Kit в пользу DriverKit — новой платформы, работающей в пользовательском пространстве.
  • В macOS 10.13 (High Sierra) IOStorageFamily была модифицирована для поддержки APFS, что позволило реализовать функции, такие как клонирование файлов и снапшоты, без изменения драйверов хранения.
  • IOStorageFamily используется не только в macOS, но и в iOS (через XNU), хотя в мобильной версии она значительно упрощена и не включает RAID и сетевые протоколы.

Источники

  • Apple Inc. «I/O Kit Fundamentals» (2012). Документация разработчика.
  • Singh, Amit. «Mac OS X Internals: A Systems Approach». Addison-Wesley, 2006.
  • Apple Inc. «Technical Note TN2087: Using I/O Kit to Access Storage Devices» (2008).
  • «IOStorageFamily.h» — заголовочный файл из SDK macOS (версия 10.15).
  • «OS X: About Core Storage» — статья базы знаний Apple (2015).

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →