Обзор архитектуры ядра

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

В создании OS X Apple полностью повторно спроектировал операционную систему ядра Mac OS. Формирование основы OS X является ядром. Рисунок 3-1 иллюстрирует архитектуру OS X.

  Архитектура OS X рисунка 3-1

Ядро обеспечивает много улучшений для OS X. Они включают вытеснение, защита памяти, улучшенная производительность, улучшила сетевые средства, поддержку и Macintosh (Расширенный и Стандарта) и не-Macintosh (UFS, ISO 9660, и т.д.) файловые системы, объектно-ориентированный APIs и т.д., Две из этих функций, вытеснения и защиты памяти, приводят к более устойчивой среде.

В Mac OS 9, приложения сотрудничают для совместного использования процессорного времени. Точно так же все приложения совместно используют память компьютера среди них. Mac OS 9 является средой кооперативной многозадачности. Если даже отдельное приложение не сотрудничает, скорость отклика всех процессов поставилась под угрозу. С другой стороны, приложения реального времени, такие как мультимедиа должны быть уверены в предсказуемых, строго ограниченных во времени, поведении.

Напротив, OS X является средой вытесняющей многозадачности. В OS X ядро обеспечивает осуществление сотрудничества, планируя процессы для совместного использования времени (вытеснение). Это поддерживает поведение в реальном времени в приложениях, требующих его.

В OS X процессы обычно не совместно используют память. Вместо этого ядро присваивает каждый процесс его собственное адресное пространство, управляя доступом к этим адресным пространствам. Это управление гарантирует, что никакое приложение не может непреднамеренно получить доступ или изменить память другого приложения (защита). Размер не является проблемой; с системой виртуальной памяти, включенной в OS X, каждое приложение имеет доступ к своему собственному адресному пространству на 4 ГБ.

Просматриваемый вместе, все приложения, как говорят, работают в пространстве пользователя, но это не подразумевает, что они совместно используют память. Пространство пользователя является просто сроком для объединенных адресных пространств всех приложений пользовательского уровня. Само ядро имеет свое собственное адресное пространство, названное пространством ядра. В OS X никакое приложение не может непосредственно изменить память системного программного обеспечения (ядро).

Несмотря на то, что пользовательские процессы не совместно используют память по умолчанию как в Mac OS 9, коммуникация (и даже память, совместно использующая) между приложениями, все еще возможна. Например, ядро предлагает богатый набор примитивов для разрешения некоторого обмена информацией среди процессов. Эти примитивы включают совместно использованные библиотеки, платформы и общую память POSIX. Мах, обменивающийся сообщениями, обеспечивает другой подход, вручая память от одного процесса до другого. В отличие от Mac OS 9, однако, память, совместно использующая, не может произойти без явного действия программистом.

Дарвин

Ядро OS X является проектом С открытым исходным кодом. Ядро, вместе с другими базовыми частями OS X коллективно упоминаются как Дарвин. Дарвин является полной операционной системой на основе многих из тех же технологий, лежащих в основе OS X. Однако Дарвин не включает собственную графику Apple или уровни приложений, такие как Кварц, QuickTime, Какао, Углерод или OpenGL.

Рисунок 3-2 показывает отношение между Дарвином и OS X. Оба полагаются на то же ядро, но OS X добавляет Core Services, Прикладные службы и QuickTime, а также Классику, Углерод, Какао и Java (JDK) среды приложения. И Дарвин и OS X включают среду приложения командной строки BSD; однако, в OS X, использование среды не требуется, и таким образом это скрыто от пользователя, если они не принимают решение получить доступ к нему.

Рисунок 3-2  Дарвин и OS X

Дарвинская технология основывается на BSD, Мах 3.0, и технологии Apple. Лучший из всех, Дарвинская технология является технологией С открытым исходным кодом, что означает, что у разработчиков есть полный доступ к исходному коду. В действительности сторонние разработчики OS X могут быть частью Дарвинской группы разработчиков системного программного обеспечения ядра. Разработчики могут также видеть, как Apple делает вещи в базовой операционной системе, и примите (или адаптируйтесь), код для использования в их собственных продуктах. Обратитесь к Apple Public Source License (APSL) для подробных данных.

Поскольку то же программное обеспечение формирует ядро и OS X и Дарвина, разработчики могут создать низкоуровневое программное обеспечение, работающее и на OS X и на Дарвине с немногими, если таковые имеются, изменениями. Единственная разница, вероятно, будет в способе, которым программное обеспечение взаимодействует со средой приложения.

Дарвин основывается на доказанной технологии из многих источников. Значительная часть этой технологии получена из FreeBSD, версии 4.4BSD, который предлагает усовершенствованные сети, производительность, безопасность и функции совместимости. Другие части системного программного обеспечения, такие как Мах, основываются на технологии, ранее используемой в проекте MkLinux Apple в Сервере OS X, и в технологии, полученной от NeXT. Большая часть кода независима от платформы. Весь базовый код операционной системы доступен в исходной форме.

Базовые технологии были выбраны по нескольким причинам. Мах обеспечивает чистый набор абстракций для контакта с управлением памятью, межпроцессным (и межпроцессорный) коммуникация (IPC) и другие низкоуровневые функции операционной системы. В сегодняшней быстро изменяющейся аппаратной среде это обеспечивает полезный уровень изоляции между операционной системой и используемым оборудованием.

BSD является тщательно спроектированной, зрелой операционной системой со многими возможностями. Фактически, большая часть сегодняшнего коммерческого UNIX и подобные UNIX операционные системы содержат много кода BSD. BSD также обеспечивает ряд промышленного стандарта APIs.

Новые технологии, такие как Набор I/O и Сетевые Расширения ядра (NKEs), были разработаны и спроектированы Apple для использования в своих интересах усовершенствованных возможностей, таких как предоставленные моделью объектно-ориентированного программирования. OS X комбинирует эти новые технологии с испытанными промышленными стандартами для создания операционной системы, которая стабильна, надежна, гибка, и расширяема.

Архитектура

Уровень основы Дарвина и OS X составлен из нескольких архитектурных компонентов, как показано на рисунке 3-3. Взятый вместе, эти компоненты формируют среду ядра.

  Архитектура ядра OS X рисунка 3-3

“Ядро, в традиционной терминологии операционной системы, является маленьким ядром программного обеспечения, предоставляющего только минимальные услуги, необходимые для реализации дополнительных служб операционной системы”. — от Разработки и реализации 4,4 Операционных систем BSD, Маккузика, Бостика, Кэрелса и Куартермена, 1996.

Точно так же в традиционных основанных на Махе операционных системах, ядро относится к микроядру Маха и игнорирует дополнительный низкоуровневый код, без которого Мах делает очень мало.

В OS X, однако, среда ядра содержит намного больше, чем само ядро Маха. Среда ядра OS X включает ядро Маха, BSD, Набор I/O, файловые системы и сетевые компоненты. Они часто именуются коллективно как ядро. Каждый из этих компонентов описан кратко в следующих разделах. Для получения дальнейшей информации обратитесь к определенным главам компонента или к ссылочному материалу, перечисленному в библиографии.

Поскольку OS X содержит три основных компонента (Мах, BSD и Набор I/O), существует также часто целые три APIs для определенных ключевых операций. В целом выбранный API должен соответствовать часть ядра, где это используется, который поочередно диктуют тем, что Ваш код пытается сделать. Остаток от этой главы описывает Маха, BSD и Набор I/O и обрисовывает в общих чертах функциональность, которая предоставлена теми компонентами.

Мах

Мах управляет ресурсами процессора, такими как использование CPU и память, планирование дескрипторов, обеспечивает защиту памяти и обеспечивает центрируемую обменом сообщениями инфраструктуру для остальной части уровней операционной системы. Компонент Маха обеспечивает

  • невведенное межпроцессное взаимодействие (IPC)

  • вызовы удаленной процедуры (RPC)

  • поддержка планировщика симметричной мультипроцессорной обработки (SMP)

  • поддержка служб в реальном времени

  • поддержка виртуальной памяти

  • поддержка пейджеров

  • модульная архитектура

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

BSD

Выше уровня Маха уровень BSD обеспечивает “индивидуальность OS” APIs и службы. Уровень BSD основывается на ядре BSD, прежде всего FreeBSD. Компонент BSD обеспечивает

  • файловые системы.

  • сети (за исключением уровня устройства)

  • Модель обеспечения безопасности UNIX

  • syscall поддержка

  • модель процесса BSD, включая процесс IDs и сигналы

  • Ядро FreeBSD APIs

  • многие из POSIX APIs

  • поддержка ядра pthreads (потоки POSIX)

Компонент BSD описан более подробно в главе Обзор BSD.

Сети

Сети OS X используют в своих интересах расширенные сетевые возможности BSD’s для оказания поддержки для современных функций, таких как Преобразование сетевых адресов (NAT) и брандмауэры. Сетевой компонент обеспечивает

  • 4.4BSD штабель TCP/IP и сокет APIs

  • поддержка и IP и DDP (транспорт AppleTalk)

  • размещение в разных сетях

  • маршрутизация

  • многоадресная поддержка

  • настройка сервера

  • пакетная фильтрация

  • Поддержка Классики Mac OS (через фильтры)

Больше информации о сетях может быть найдено в главе Сетевая архитектура.

Файловые системы.

OS X предоставляет поддержку для многочисленных типов файловых систем, включая HFS, HFS +, UFS, NFS, ISO 9660 и другие. Тип файловой системы по умолчанию является HFS +; начальные загрузки OS X (и «корни») от HFS +, UFS, ISO, NFS и UDF. Расширенные функции файловых систем OS X включают улучшенный проект Виртуальной файловой системы (VFS). VFS предусматривает многоуровневую архитектуру (файловые системы являются наращиваемыми). Компонент файловой системы обеспечивает

  • UTF-8 (Unicode) поддержка

  • увеличенная производительность по предыдущим версиям Mac OS.

Больше информации может быть найдено в Обзоре Файловых систем главы.

Набор I/O

Набор I/O служит основой для упрощенной разработки драйвера, поддерживая много категорий устройств. Опции I/O Kit объектно-ориентированная архитектура I/O реализованы в ограниченном подмножестве C++. Платформа Набора I/O является и модульной и расширяемой. Компонент I/O Kit обеспечивает

  • истинный Plug and Play

  • динамическое управление устройствами

  • динамичный («по требованию») загрузка драйверов

  • управление питанием для настольных систем, а также портативных устройств

  • многопроцессорные возможности

Набор I/O описан более подробно в главе Обзор Набора I/O.

Расширения ядра

OS X обеспечивает механизм расширения ядра как средние значения разрешения динамической загрузки частей кода в пространство ядра без потребности перекомпилировать. Эти части кода известны в общем как плагины или, в среде ядра OS X, как расширения ядра или KEXTs.

Поскольку KEXTs обеспечивают и модульный принцип и динамический loadability, они - естественный выбор для любой относительно автономной службы, требующей доступа к интерфейсам, не экспортирующимся в пространство пользователя. Многие компоненты поддержки сред ядра этот дополнительный механизм, хотя они делают так по-разному.

Например, некоторые новые сетевые функции включают использование сетевых расширений ядра (NKEs). Они обсуждены в главе Сетевая архитектура.

Возможность динамично добавить новую реализацию файловой системы основывается на VFS KEXTs. Драйверы устройств и семейства устройства в Наборе I/O реализованы с помощью KEXTs. KEXTs делают разработку намного проще для разработчиков, пишущих драйверы или тех, которые пишут код для поддержки нового формата объема или сетевого протокола. KEXTs обсуждены более подробно в Обзоре Расширения ядра главы.