Когда Mac OS была впервые представлена в 1984
году, это было само совершенство
современного программирования.
Операционные системы для других платформ,
которые появились несколько лет спустя,
предлагали такие вещи как защищенная
память и вытесняющая многозадачность, что в
конечном итоге давало лучший
пользовательский опыт. Apple не встраивала
этих вещей в Mac OS потому, что
микропроцессоры, доступные во время
разработки Mac OS, не были достаточно мощными.
Позднее добавление таких вещей, как
защищенная память и вытесняющая
многозадачность в Mac OS стало трудной и
ресурсоемкой задачей, потому что эти вещи
должны находиться в ядре системы. Apple
пыталась сделать это несколько раз, то так
до конца дело и не довела. В конце концов
компания решила, что приобретение
современной операционной системы и
последующая подготовка ее для работы на
Маке - более разумное решение. Apple
рассматривала как вариант покупку BeOS у Be,
Inc., но в конечном итоге в 1997 году
остановилась на NEXTSTEP от NeXT, Inc, компании,
которую основал Стив Джобс
NEXTSTEP преподнесла Apple современную систему,
которая ей требовалась, но у нее был
радикально другой графический интерфейс
пользователя, чем у Mac OS. Apple начала изменять
NEXTSTEP, чтобы сделать ее более похожей на Mac OS.
Результатом стало нечто, что Apple назвала
Rhapsody. Rhapsody была новой современной
операционной системой для маковских
пользователей со знакомым маковским
интерфейсом, однако ей не хватало
совместимости с существующими приложения
под Mac OS. В 1999 г. Apple провозгласила разработку
в рамках "открытых кодов" одним из
ключевых принципов своей стратегии, и в
марте 1999 г. появились исходные тексты
первой версии нового ядра (Дарвин). А давно
ожидаемый сообществом пользователей Apple
релиз Mac OS X вышел 24 марта 2001 года.
Mac OS X (Jaguar)
За кодовым названием Jaguar и уже ставшими
знаменитыми снимками экранов с
характерными элементами пользовательского
интерфейса в Mac OS X скрывается по-настоящему
революционное изменение в архитектуре
операционных систем.
Ядро ОС Jaguar (как и всех ее предшественниц,
начиная с NeXTStep) воплощает по сей день
нереализованную мечту многих известных
проектов - это основанная на отработанном
микроядре Mach (проект Университета Карнеги-Миллан)
модульно-компонентная конструкция,
использующая в качестве "интерфейсных"
сервисов наработки не менее известного
проекта BSD Unix. За время развития от NeXTStep до Mac
OS X создатели ядра ОС не изменили изначально
принятой идеологии, и сегодняшняя Jaguar на
уровне ядра отличается разве что
технологическими нюансами (Mach 3.0 и "интерфейсный"
код, заимствованный из ОС FreeBSD версии 4.4).
Учитывая опыт многих коммерческих проектов,
идеологи Mac OS X приняли довольно
нетрадиционное решение, "открыв"
исходные коды ядра ОС и подчеркнув его
независимость от всей остальной системы
даже "именем собственным" - Darwin (Дарвин).
Так как исходные коды ядра доступны любому
разработчику, то идеи сообщества
программистов суммируются, анализируются,
и из них выстраивается готовый продукт.
Создатель UNIX Кен Томпсон называл такой
метод программирования "компьютерным
дарвинизмом". Вероятнее всего, именно
поэтому ядро Mac OS X получило название Дарвин.
Итак, для разработки ядра новой
операционной системы Apple взяла за основу
открытую версию операционной системы UNIX - BSD
4.4 и создала новое микроядро (kernel) - Mach 3.0.
Первоначально ядро Mach было разработано в
Университете Carnegie-Mellon при непосредственном
участии Авадиса Тавеняна (занимающего одно
время пост вице-президента компании Apple по
программному обеспечению).
Использование UNIX-ядра BSD дало много
преимуществ для Mac OS X. Прежде всего, Дарвин
обеспечивает защиту памяти. Именно этот
механизм позволяет Apple говорить о небывалой
надежности новой ОС. Еще одним интересным
механизмом ядра Дарвин является механизм
приоритетной, или вытесняющей,
многозадачности (preemptive multitasking),
обеспечивающей надежность одновременной
работы нескольких приложений. Предыдущие
версии Mac OS поддерживали лишь один способ
распределения ресурсов процессора между
задачами - так называемую кооперативную (совместную)
многозадачность (cooperative multitasking), при которой
задача, получившая доступ к процессору,
занимает его до тех пор, пока поток команд
от нее непрерывен. Новый (для Mac OS) способ
распределения ресурсов процессора
позволяет избежать "притеснения"
одних приложений другими. Дарвин по целому
ряду критериев, таких как активность
приложения, его требования к ресурсам
процессора и т.п., определяет приоритет
каждой задачи и принудительно распределяет
процессорное время в соответствии с этими
приоритетами. Это позволяет также избежать
простоев процессора.
Mac OS X поддерживает также и
многопроцессорность, обеспечивая
распределение нагрузки между процессорами
оптимальным образом. Упомянем также и
систему виртуальной памяти, которая в Mac OS X
позволяет использовать дисковое
пространство для повышения
производительности приложений,
требовательных к объему оперативной памяти.
И хотя этот механизм применяется
практически во всех ОС, создатели Дарвина
за счет достаточно сложных механизмов
именования объектов памяти добились
существенного увеличения скорости и
эффективности его работы.
Будучи основанным на BSD UNIX, Дарвин
поддерживает всю "внутреннюю кухню" BSD:
в него включена полная поддержка стандарта
POSIX, что дает возможность исполнять любые
UNIX-приложения, совместимые с этим
стандартом; используется UNIX-модель
процессов (идентификаторы процессов,
сигналы и проч.); поддерживаются потоки (или
нити - threads) UNIX, что позволяет назвать Mac OS X не
только многозадачной, но и многопотоковой
системой, в которой каждое приложение имеет
ряд параллельно выполняемых задач. Кроме
того, в Дарвине применяется политика
безопасности UNIX (идентификаторы
пользователя, полномочия, атрибуты и т. п.).
Кроме "классических" достоинств "скрытой
Unix на микроядре", разработчики Apple
создали ряд расширений функциональности,
представляющих отдельный интерес. В первую
очередь это относится к подсистеме NKE (Network
Kernel Extensions -- "сетевые расширения ядра"),
позволяющей "на лету" без
необходимости перезагрузки или
приостановки работы ОС фактически
полностью изменять не только параметры, но
и саму организацию сетевой подсистемы,
например динамически добавлять новые
сетевые протоколы или модули, реагирующие
на события в сетевой подсистеме. При этом NKE
сама является загружаемым модулем ядра и
органично вписывается в многоуровневую
архитектуру ОС.
"Виртуальность" сетевых протоколов,
обеспечиваемая NKE, подкрепляется и
виртуальной файловой системой (VFS -- Virtual File
System), свойственной Unix, - Mac OS X может
одновременно работать с файловыми
системами форматов HFS+ (расширенная
иерархическая файловая система,
поддерживаемая "классическими" Mac OS 8 и
9), HFS (предшественница HFS+ из "Mac-мира"), UFS
(классика в мире Unix), UDF (универсальный
формат для CD ROM) и ISO9660 (стандартный формат CD
ROM).
В связи с коренной перестройкой ядра и
архитектуры Mac OS X ее разработчикам пришлось
искать решения, призванные обеспечить
одновременно использование всех
возможностей новой ОС и поддержку
приложений, созданных для предыдущих
версий Mac OS. Таким решением стало создание
трех типов программного окружения (application
environment).
Classic. Mac OS X сама по себе не поддерживает
приложения, созданные для предыдущих
версий Mac OS. Поэтому для их исполнения
запускается специфическое приложение,
именуемое Classic и представляющее собой...
вариант Mac OS 9. Вот на этом виртуальном
компьютере и исполняются все приложения
старых ОС. Если закрыть приложение Classic, все
работавшие в нем приложения тоже будут
завершены. Если какое-либо Classic-приложение
приводит к сбою, система защиты памяти
срабатывает не для этого отдельного
приложения, а для всего Classic-окружения.
Кроме того, существует целый ряд
ограничений для Classic-приложений, например
невозможность использовать PDF как
глобальное средство отображения
информации.
Carbon. Кроме того, существует и
компромиссный вариант перехода на Mac OS X.
Программное окружение Carbon представляет
собой способ перевода приложений для
старых версий Mac OS на новую с минимальными
затратами. Незначительная модификация
приложений, конечно, не приводит к
использованию всех возможностей Mac OS X, но
позволяет все же избавиться от ограничений
и неудобства Classic-окружения.
Cocoa - так называется "полноценное"
программное окружение Mac OS X, позволяющее
полностью задействовать все технологии
новой ОС (и нового оборудования - Cocoa
поддерживает многопроцессорность и Velocity
Engine). Одной из интересных его особенностей
является способ организации приложения в
системе, дающий возможность гибкой
настройки и расширения функциональных
возможностей.
Кроме упомянутых выше, Mac OS X поддерживает
и ряд дополнительных окружений, например
Java. Сюда же следует отнести и поддержку BSD-приложений.
Подытоживая, можно сказать, что Mac OS X
предоставляет превосходные возможности
для программ, написанных специально для нее,
поддерживает (но не более) программы для
предыдущих версий Mac OS и обеспечивает в
совокупности с политикой "открытых
текстов" достаточно быстрый и
безболезненный перевод программных
продуктов в новую среду.
Графическая подсистема и интерфейс
Общесистемные "прослойки" Mac OS X
используют ресурсы трех главных
низкоуровневых графических подсистем --
Quartz, OpenGL и QuickTime. Последние два названия
широко известны, а вот Quartz представляет
собой относительно новое слово в "интерфейсостроении".
"Относительно" потому, что идеология
Quartz достаточно сильно перекликается с
идеями графической подсистемы NeXT DPS (Display
PostScript -- "дисплейный PostScript").
"Сердце" графической подсистемы Mac OS X
- высокоуровневый менеджер окон, содержащий
мощную библиотеку векторно-растровой
графики Quartz. Именно этот компонент ОС
реализует и "движок" рендеринга
единого формата для Mac OS X - PDF, и именно в нем
кроется радикальное несходство Mac OS X со
своей предшественницей - NeXTStep. Quartz
обеспечивает как базовые функции,
свойственные большинству аналогичных
систем, например буферирование содержимого
окон, так и совершенно уникальные, такие,
как модель "попиксельного
видеомикширования", которая позволяет в
реальном времени разделять каждый пиксел
физического экрана между несколькими
окнами приложений одновременно с помощью
различных алгоритмов. В предыдущих версиях
Mac OS X критический компонент Quartz - Quartz Compositor,
отвечающий за уникальную функциональность
подсистемы (в первую очередь, за "попиксельное
видеомикширование"), выполнялся на
центральном процессоре компьютера и
работал с подготовленными областями
буферной памяти окон, в которые приложения
осуществляли "вывод" посредством
вызовов библиотек Quartz. На основе содержания
буферов окон Quartz Compositor формировала
мгновенный "снимок" текущего
состояния экранной области, и именно эта
картинка отображалась на экране рабочей
станции под управлением Mac OS X. Очевидно, что
все процедуры, связанные с обработкой таких
объемов информации, да еще и основанные на
весьма сложных алгоритмах, крайне
ресурсоемки, что и подтверждалось "заторможенностью"
Mac OS X прошлых поколений. Найти одновременно
красивое и радикальное решение такой
проблеме было трудно. Существенно поднять
производительность такой высокоуровневой
графической подсистемы, как Quartz, можно было
только одним способом... А именно,
превратить всю дисплейную подсистему из
двухмерной в трехмерную! Именно это и было
сделано в Jaguar - усложненное модным
словечком название Quartz Extreme (QE) скрывает за
неопределенностью, пожалуй, самое
значительное событие в мире ОС последних
лет. Jaguar - это Первая Операционная Система с
полностью 3D-пользовательским интерфейсом!
Теперь QE воспринимает каждое окно не иначе
как текстурированный 3D-объект. Сама
текстура этого объекта может порождаться
программами двухмерной (библиотеки Quartz),
трехмерной (OpenGL) графики или мультимедийным
потоком (QuickTime). А остальное - операции с
"3D-объектами-окнами" - дело мощного де-факто
стандартного и доступного
видеоакселератора.
Последний важнейший элемент системы --
пользовательский интерфейс Aqua. Это
название не случайно - стилем нового
интерфейса является полупрозрачность, "текучесть"
и подвижность элементов. О красоте Aqua не
писал наверное только ленивый.
Ответственная за знаменитую "карамельную
красоту" подсистема Mac OS X принесла в
спокойный мир Mac массу нововведений. И, как
ни странно, освоиться в Aqua значительно
легче после некоторого опыта работы с
NeXTSTEP/OPENSTEP или даже X-Window. Во-первых, по
сравнению с классическими версиями Mac OS, Aqua
изменяет устоявшееся представление
пользователя об уровневом расположении
окон (в классических Mac все окна одного
приложения располагаются на "одном
уровне глубины экрана"). Теперь, как и в
большинстве оконных систем, можно "поднимать"
на "поверхность" экрана любое окно, не
заботясь о его расположении в уровневой
иерархии (стандартное поведение
классической Mac OS, эмулируется элементом
меню Bring All to Front). Во-вторых, Aqua предполагает
возможность управления новыми (для Mac-мира)
элементами интерфейса -- "листами"
(sheets). Лист представляет собой хорошо
знакомое пользователям Windows и X-Window "всплывающее
окно" (popup), "привязанное" к
родительскому окну, и используется в
основном для критических сообщений и
предупреждений, ассоциированных с одним
процессом. В-третьих, интерфейсные
возможности расширены еще одной (хорошо
знакомой в мире "не-Mac") конструкцией:
"выдвижным ящиком" (drawer) -- "выплывающим"
окном, способным содержать различные
интерфейсные элементы. В-четвертых,
изменениям подверглась "святая святых"
Mac -- организация Рабочего стола: в ней
появился новый элемент интерфейса, очень
похожий на панель (panel), знакомую
пользователям Unix-оболочки CDE.
В завершение остается только сказать, что
разработчики прикладного и системного ПО
очень высоко оценивают шансы Jaguar, что
подтверждается высокой активностью не
только в области создания принципиально
новых программ для этой платформы, но и в
портировании настоящей "классики".
Уникальность Jaguar делает ее крайне
привлекательной для производителей мощных
графических пакетов и CAD, а стабильность, с
которой Apple в этой системе реализует "тихие
революции", обещает много интересного в
будущем.
|