Свежий номер №40 (417) / Unix для всех
 
Дата публикации: 19.10.2001

Сергей Волк, volks@mac.com

 
Страница 1
Страница 2 >>

 …Взгляд на экран - ага, что-то новенькое. Ярко, красиво, заметна продуманная, добросовестная работа дизайнеров, серьезное отношение к деталям, иконки просто идеальны, фактура кнопок создает иллюзию объемности, все «живет и дышит». При всей узнаваемости основных элементов интерфейса не покидает ощущение свежести и новизны. И тут, наконец, мы замечаем небольшое голубое яблочко в углу экрана…
- А, так это Apple! Па-анятно… Новая красивая игрушка для детей и домохозяек. Хотя конечно… Почему бы и нет. Что-то же должно быть, так сказать, «для дома, для семьи»…
- Так ведь, вроде бы, это Uniх...
- ВОТ ЭТО - UNIX?!
Звучит действительно странно: Macintosh и Unix, «два в одном», конь и трепетная лань… Но, как ни странно звучит, это действительно Unix. Не верится? Давайте посмотрим.

Ядро

Начнем с самого главного. Mac OS X, как и любой «нормальный» Unix, в основе своей несет ядро, называемое Darwin. Это ядро открыто, то есть его коды доступны всем желающим, и посему в реализации проекта Darwin приняло участие более 10 тысяч программистов. В отличие от классического Unix’а, для которого термин «ядро» обычно означает небольшую, как правило монолитную, часть системы, выполняющую минимальные базовые функции для поддержки всех основных сервисов операционной системы, в Mac OS X понятие ядра существенно расширено: там под ядром понимаются все программные модули, исполняемые в адресном пространстве ядра. Darwin объединяет в себе несколько технологий, основные из которых: микроядро Mach 3.0, сервисы операционной системы на базе BSD 4.4-Lite, быстрые, основанные на сложившихся стандартах сетевые модули, система ввода-вывода (I/O Kit), поддержка различных файловых систем.

Микроядро Mach 3.0

Микроядро Mach (разработка Carnegie-Mellon University), выполняя критически важные функции операционной системы, является основой всего ядра Darwin. Оно управляет загрузкой процессора и распределением памяти и обеспечивает ее защиту, составляет расписания и отслеживает их выполнение, создает централизованную инфраструктуру системных сообщений для других уровней операционной системы.

  • Защита памяти. Mach заботится о том, чтобы никакая программа не смогла записать какие-либо данные в адресное пространство другой программы или системы. Поэтому сбои и нарушения в работе прикладной программы не приводят к краху всей системы - достаточно отключить программу, вызвавшую сбой, и можно продолжить работу.

  • Вытесняющая многозадачность. В современных системах множество задач разделяют ресурсы процессора. Mach устанавливает приоритеты задач, чтобы обеспечить максимальную эффективность работы процессора и предоставить всем им необходимое процессорное время.

  • Виртуальная память. Каждой задаче в Mac OS X выделяется свое виртуальное адресное пространство объемом до 4 Гбайт. Однако реальное выполнение каждой задачи возможно только в истинной физической памяти - оперативной памяти компьютера. Соответственно, Mach выделяет задачам пространство физической памяти и преобразует виртуальные адреса в адреса физической памяти, а также контролирует загрузку и освобождение памяти.

  • Режим реального времени. Для процессов, требующих быстрой реакции, Mach обеспечивает доступ к ресурсам процессора за минимальное время.

BSD

Несколько видоизмененная версия Unix системы BSD 4.4, базирующаяся на микроядре Mach. Включает в себя многие POSIX API, обеспечивает реализацию модели процессов, отвечает за многопользовательский режим работы и соответствующую систему безопасности, реализует так называемые «нити процессов» (threads) для всей Mac OS X.

Сетевые компоненты

В основном реализованы на базе сетевых модулей системы BSD, включая поддержку современных возможностей типа Network Address Translation (NAT) или FireWall.

Сетевые компоненты ядра Darwin обеспечивают:

  • 4.4 BSD стек протоколов TCP/IP и socket API;

  • поддержку как IP, так и AppleTalk - протоколов транспортного уровня;

  • работу одной и той же сетевой карты с несколькими адресами (multihoming);

  • маршрутизацию (routing);

  • многоадресную рассылку (multicast);

  • реализацию AppleTalk, основанную на идеологии socket;

  • поддержку сетевых возможностей «классической» Mac OS;

  • модемное подключение;

  • функционирование беспроводных сетей.

Mac OS X поддерживает разнообразные типы сетевых сред: Ethernet 10/100/1000Base-T, Jumbo Frame (Ethernet-стандарт передачи данных между серверами), последовательную передачу данных через модемы, а также с применением DSL и ISDN устройств, и беспроводные сети, например, по технологии AirPort на основе стандарта 802.11b. Из стандарнтных сетевых протоколов Mac OS X поддерживает TCP/IP, UDP/IP, PPP, включая протоколы подтверждения прав (authentication) PAP и CHAP, HTTP, FTP, DNS - Domain Name Service, SLP - Service Location Protocol, DHCP и BOOTP - Dynamic Host Configuration Protocol, Bootstrap Protocol, LDAP - Lightweight Directory Access Protocol и NTP - Network Time Protocol.

Будучи рассчитанной на работу в сложных гетерогенных средах, Mac OS X поддерживает также несколько сетевых файловых протоколов:

  • AFP-клиент - Apple File Protocol - основной протокол общего доступа к файлам в системах Mac OS 8 и Mac OS 9;

  • NFS-клиент - Network File Service - доминирующий протокол общего доступа к файлам в системах Unix;

  • SAMBA - стандартный протокол общего доступа к файлам в сетях Windows;

  • WebDAV - стандарт общего доступа к файлам через Интернет.

Подсистема ввода/вывода (I/O Kit)

Данная подсистема создает объектно-ориентированную среду для облегчения разработки и функционирования драйверов устройств. Будучи модульной и расширяемой подсистемой, реализованной на подмножестве языка C++, она обеспечивает истинный режим plug and play, динамическое управление устройствами («горячее подключение») с загрузкой их драйверов по мере необходимости,  Рис. 1управление энергопотреблением как портативных, так и настольных систем, а также позволяет Mac OS X работать в многопроцессорных конфигурациях.

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

Mac OS X базируется на идеологии виртуальной файловой системы (VFS), что позволяет легко добавлять новые файловые системы по мере их появления. В настоящее время реализована поддержка HFS, HFS+, UFS, ISSO 9660, UDF, из которых HFS и HFS+ - стандартные для Mac OS, что-то вроде FAT16 и FAT32 в мире Windows 1, UFS - самая распространенная файловая система для Unix, ISSO 9660 - стандартный формат компакт-дисков, а UDF - формат DVD-дисков.

Как видим, все основные компоненты на месте: микроядро Mach и BSD Unix, вытесняющая многозадачность и защита памяти, виртуальная память и многопроцессорная обработка, многопользовательский режим работы и модульность, удобные средства работы в локальной сети и в Интернете.

Ну а если вас, как бывалого юниксоида, смущает «оболочка», многослойный пирог графического интерфейса, и нет ощущения полного владения ситуацией при работе мышью, потому что гораздо привычнее и понятнее работать из командной строки, - вперед! Запускайте терминальную сессию (рис. 1) - и все в вашей власти (рис. 2). Это ведь все-таки Unix…

Переходный возраст

Хорошо. Добавим возможность работы из командной строки в число явных плюсов OS X. Но все же при всей своей Unix’овости Mac OS X - это система  Рис. 2не столько для Macintosh’а, сколько для людей, работающих на Macintosh’ах. За многие годы существования Mac OS все уже привыкли к простоте и удобству работы в ней. А теперь, получается, надо убедить всех поклонников Маков в связи с переходом на Unix срочно учиться работать из командной строки, компилировать систему, бороться с многочисленными конфигурационными файлами и так далее?

Вовсе нет. Инженеры Apple прекрасно понимали, что большинство людей, работающих на Mac’ах, просто не готовы к такому развитию событий, посему вопрос об обеспечении плавного перехода «на новые рельсы» был одним из ключевых и от его успешного решения зависел успех всей системы. Общая задача была разбита на несколько подзадач разного уровня, и для каждой из них предстояло найти достойное решение.

На уровне ядра системы был разработан и внедрен механизм динамической загрузки специальных дополнительных модулей без необходимости перекомпиляции ядра. Такие модули и весь механизм в целом получили название расширений ядра (Kernel Extensions, KEXTs). Например, некоторые модули работы с сетью реализованы как сетевые расширения ядра (Network Kernel Extension, NKE), а возможность динамически добавлять новые файловые системы основана на расширении ядра, называемом виртуальной файловой системой (VFS).

Кроме того, был разработан новый подход к созданию, организации и функционированию программ, как прикладных, так и большинства системных (некоторые системные модули в силу их специфики могут быть реализованы иначе, нежели прикладные). Итак: программы, разработанные для новой системы, должны иметь четкую, заранее определенную структуру. Все их компоненты должны находиться в одной-единственной папке, содержимое которой скрыто от пользователя и на его уровне вся эта папка выглядит как целостный файл. Посему процесс инсталляции программ или их переноса состоит… в простом копировании одного «файла-папки», называемого пакетом (bundle)!

Помимо этого, пожалуй, впервые принцип «штепселей» (plug-ins) был реализован на уровне системы как единый механизм дополнений для прикладных программ. Таким образом, разработка любой прикладной программы может начинаться с небольшого фрагмента, постепенно обрастающего деталями, причем без необходимости перекомпиляции при выходе в свет нового релиза. Конечно, идея «штепселей» не нова, но до сих пор в каждой из поддерживающих их программ был свой собственный механизм создания и работы с plug-in’ами, в «десятке» же поддержка «штепселей» представляет собой идеологию системы.

Наследие прошлого

Самым трудным, пожалуй, был вопрос совместимости и переноса на новую систему прикладных программ. Полноценно уникальные возможности OS X можно было реализовать только в новых, специально для нее написанных программах. Многие фирмы-разработчики, потратив немало средств, времени и сил на создание программ, которые принесли им успех и признание, не могли согласиться с необходимостью все начинать с «чистого листа». Да и большинство пользователей не стали бы переходить на новую систему в полном программном вакууме - вспомните судьбу, постигшую очень неплохую BeOS. После тщательного анализа сложившейся ситуации было найдено воистину соломоново решение, устроившее подавляющее большинство заинтересованных лиц.

Было очевидно, что на некоторое время, по крайней мере на «переходный период», необходимо сохранить возможность работы с уже существующими программами безо всякой их переделки. Для этого был разработан способ запуска слегка расширенной версии обычной Mac OS в среде Mac OS X без необходимости перезагрузки компьютера 2 . В качестве такой «классической» системы была выбрана последняя версия Mac OS 9 - Mac OS 9.2.1 с некоторыми добавлениями, а сам режим запуска «старых» программ и поддержка этого режима получили наименование Classic. Конечно, такой режим никаких преимуществ не дает, но позволяет начать осваиваться и работать в новой системе, легко переключаясь в привычную среду классической Mac OS без затрат времени на перезагрузку.

Далее. Анализ существующих прикладных программ показал, что большинство из них относительно легко может быть переделано для работы в системе Mac OS X. Для этого надо переписать фрагменты программ, содержащие безнадежно устаревшие системные вызовы, которые не могут адекватно работать в среде многозадачной операционной системы, и заново перекомпилировать программу. Фирма Apple выпустила соответствующий документ, содержащий список всех «нехороших» вызовов, а также предложила специальную утилиту, которая позволяла проверить конкретную программу на готовность к работе в новых условиях и подсказать разработчикам, где могут возникнуть проблемы. Объем требуемых переделок, как правило, не превышает 5% кода, а во многих случаях - и того меньше. Такой подход позволяет существенно экономить время и средства при переходе на новую систему. У переделанных программ, конечно, не появляется новой функциональности, но они могут полноценно работать в среде Mac OS X и использовать ее возможности - защиту памяти, многозадачность и так далее. Такой режим работы был назван Carbon («Углерод»), а переделанные для него программы стали называть «карбонизированными», то бишь готовыми для работы в среде Carbon.

И, наконец, для поддержки работы новых, с нуля написанных для этой системы программ была создана специальная объектно-ориентированная среда, названная Cocoa («Какао»).

Вот и все. Точнее, почти все, потому как осталось еще два возможных режима работы с системой. Об одном из них мы уже упоминали - это работа непосредственно в Unix’овой среде команд BSD. Хотя фирма Apple рассматривает этот режим только как вспомогательное средство, которое может быть полезно в редких случаях для решения сложных административных задач, тем не менее он вполне доступен, и если вы являетесь приверженцем «нормальной» работы в Unix’е безо всяких излишеств - дерзайте.

Еще один режим, о котором пока что ничего не было сказано, - среда поддержки работы с Java. Она реализует полные спецификации стандарта Java 2, включая Java Virtual Machine (JVM). В материалах фирмы Apple возможности Mac OS X для работы с Java хотя и упоминаются, но не очень широко рекламируются. Но от себя замечу, что разработчики программ на Java имеют доступ ко всем API (Application Programming Interface) среды Cocoa. А это означает, что разницы между программами, написанными на языках типа C, и программами, написанными на Java, практически не существует. Более того, многие системные модули написаны именно на языке Java!

Бесплатный сыр

 Рис. 3

Для того чтобы облегчить переход на новую систему и стимулировать разработчиков писать или переделывать программы для Mac OS X, фирма Apple бесплатно (пока) поставляет собственные средства разработки прикладных программ. На компакт-диске Developer Tools, которым комплектуется Mac OS X, есть практически все, что нужно для их создания. Основу набора составляют Project Builder и Interface Builder. Первая из них - это интегрированная среда по созданию и управлению программными проектами, включающая в себя компиляторы таких языков программирования, как C, C++, ObjectC, Java, а также отладчик и другие необходимые инструменты разработчика (рис. 3). Project Builder позволяет создавать программы для всех трех основных сред - Classic, Carbon, Cocoa, а также полноценные  Рис. 4программы и апплеты на Java. Interface Builder же дает возможность быстро и легко разрабатывать из готовых элементов пользовательский интерфейс вашей будущей программы (рис. 4)

Недавно Apple объявила еще об одном мощном инструменте для разработки специальных программ - AppleScript Studio. Он, в отличие от упоминавшегося Project Builder, предназначен для создания средств автоматизации работы с помощью специального языка межпрограммного общения - AppleScript. Сам по себе язык AppleScript появился довольно давно, и я знаю немало людей, которые в той или иной степени пользуются им для автоматизации рутинных операций. Но его широкому применению до сих пор препятствовало, помимо прочего, отсутствие хороших средств отладки AppleScript-программ. AppleScript Studio призвана ликвидировать этот недостаток.


1 (обратно к тексту) - Скорее, я сравнил бы их с NTFS и NTFS 5. - Scout.
2 (обратно к тексту) - В какой-то мере этот механизм можно сравнить с запуском DOS-программ в отдельном адресном пространстве из-под Windows. - Scout.

 
Страница 1
Страница 2 >>


Сергей Волк
volks@mac.com
 
Специалист по Макинтошам с многолетним стажем: от Lisa до G4.


<< 2:0 в пользу USB
Все материалы номера
Откуда пошли Linux и Mac OS X >>