В классической Mac OS (исходной операционной системе Apple Macintosh ) расширения представляли собой небольшие фрагменты кода, расширяющие функциональность системы. Первоначально они запускались во время запуска и управлялись различными механизмами, включая исправление ловушек и другие методы модификации кода. Изначально разработанные Apple, расширения стали стандартным способом создания модульной операционной системы. Большое количество важных системных служб, таких как сетевые стеки TCP / IP (MacTCP и Open Transport), а также поддержка USB и FireWire, были дополнительными компонентами, реализованными как расширения. Фраза «расширение системы» позже стала обозначать и безликие фоновые приложения .
Расширения обычно заполнены ту же роль , как DOS «s прекратить и остаться резидентные программы или Unix » ы демонами , хотя, исправляя исходный код операционной системы, они имели возможность изменить существующее поведение операционной системы, другие два не сделали. [ сомнительно ]
Механизм INIT
Концепция расширений отсутствовала в исходном системном программном обеспечении Macintosh, но система, тем не менее, имела частный механизм исправления, которым разработчики вскоре научились пользоваться - загрузчик INIT. Этот код будет искать системные ресурсы типа INIT, загружать и запускать их во время загрузки. Кодовые ресурсы должны быть сохранены непосредственно в Mac чемодане System «s вилке ресурсов , то есть это было только действительно доступно„ продвинутых пользователей“ , которые будет удобно использовать ResEdit или другой редактор ресурсов.
Поскольку использование этого механизма было неподдерживаемым взломом и таким образом можно было загрузить только 32 INIT, Apple ответила, предоставив более управляемое решение. Первоначально это само по себе было в форме ресурса «INIT» с идентификатором 31, помещенного в системный файл, который будет искать дополнительные файлы типа «INIT» в системной папке , а также загружать и запускать ресурсы INIT внутри них. (Вот почему некоторые опытные программисты Mac до сих пор называют механизм загрузки расширений «уловкой с INIT 31». [1] INIT теперь можно было установить, просто поместив файл в системную папку, что в пределах возможностей обычного пользователя. Начиная с System 7, расширения были перемещены в папку Extensions внутри системной папки для удобства, и был реализован механизм автоматической маршрутизации, так что размещение расширения в системной папке с помощью перетаскивания фактически помещало файл в соответствующую подпапку.
Расширения сохраняли тип ресурса «INIT» на протяжении всего своего жизненного цикла, и загрузчик постепенно улучшался для поиска этих ресурсов во многих местах, в том числе в ответвлениях ресурсов панелей управления в различных форматах и в Chooser .
Расширения
INIT превратились в системные расширения, попутно получив дополнительные специальные протоколы, такие как предоставление значка, отображаемого во время загрузки (источником этого было «ShowINIT»). «Парад частей головоломки и значков» на экране при загрузке каждого расширения стал знаком всем пользователям Mac. Сами Apple в конечном итоге выпустила основные (но необязательные) части операционной системы в виде расширений, таких как QuickTime , QuickDraw 3D и многие другие. Значительное количество сервисов и драйверов в Mac OS - как официальных, так и сторонних - было предоставлено в виде расширений, что позволяло урезать ОС путем их отключения.
Расширения системы были обычным источником нестабильности на Macintosh, поскольку сторонний код имел переменное качество и часто исправлял систему способами, которые не всегда работали правильно. Некоторые расширения не работали должным образом вместе или работали только при загрузке в определенном порядке. Кроме того, разные расширения могут пытаться исправить одну и ту же часть системы, что может привести к конфликтам расширений и другой нестабильности. Выявление этих источников проблем было еще одной задачей, с которой в какой-то момент столкнулись большинство пользователей Mac. Расширения Устранение неполадок Mac OS может быть трудоемким процессом Рассекайте и методом проб и ошибок .
Самый простой способ выполнить «чистую» загрузку операционной системы - удерживать нажатой клавишу Shift: загрузка расширений будет пропущена. В систему 7.5 добавлен менеджер расширений , который позволяет пользователю быстро включать или отключать определенные расширения, а также определять их наборы, которые будут правильно работать вместе. Extensions Manager поставлялся с двумя предоставленными базовыми наборами только для чтения: один содержал подмножество расширений, необходимых для базовой работы ОС, а другой включал все официальные расширения, поставляемые с ОС, но отключал все сторонние расширения.
Порядок загрузки расширений был побочным эффектом функции GetFInfo, которая использовалась загрузчиком для перечисления файлов в папке Extension. Хотя Apple всегда заявляла, что порядок, который возникает в результате перечисления файлов с помощью этой функции, не определен, на томах HFS эта функция перечисляет файлы в порядке, хранящемся в каталоге HFS. Люди выяснили, что изменение первого символа в имени файла может изменить порядок загрузки расширений, что вызвало проблемы, когда Mac OS 8.1 перешла на HFS +. В итоге Apple пришлось изменить загрузчик, чтобы отсортировать имена файлов, возвращаемых этой функцией, в таблицу и предоставить интерфейс, позволяющий программному обеспечению изменять таблицу. [2]
Панели настройки и управления
У системных расширений не было пользовательского интерфейса: не было стандартного механизма, с помощью которого пользователь мог бы настраивать услуги, предоставляемые расширением. Расширения могли изменять графический интерфейс (например, добавлять новые меню в строку меню) и, таким образом, принимать конфигурацию пользователя, или они могли сопровождаться приложением для предоставления интерфейса конфигурации.
С System 7 , панели управления становятся отдельным Finder плагины на диске , которые могут быть запущены пользователем. Путем вставки кода INIT в панель управления стало возможным создавать гибриды расширения / панели управления, которые изменяли операционную систему во время загрузки и содержали свой собственный встроенный интерфейс конфигурации в той же форме, что и любая другая панель управления операционной системы.
Безликие фоновые приложения
MultiFinder и System 7 и более поздние версии поддерживали безликие фоновые приложения, подобные демонам UNIX или службам Windows , но с использованием совместной многозадачности . Примеры включают синхронизатор времени ( корректировка летнего времени и удаленная синхронизация времени), планировщик обновлений программного обеспечения и действия с папками (обработка событий папки). Безликие фоновые приложения были обычными приложениями с ограничением, что они не отображались в меню приложений. Единственные технические различия между безликим фоновым приложением и обычным приложением заключались в том, что в SIZE
ресурсе ' ' был установлен флаг "Только фон" . Им было запрещено открывать обычное окно уровня приложения: в противном случае система зависала бы.
Однако они могли свободно открывать глобальные плавающие окна, поскольку они не могли ни получить, ни потерять фокус. Полоса управления в Mac OS 8 и 9 была примером безликого фонового приложения, которое отображало глобальное плавающее окно для взаимодействия с пользователем. Переключатель приложений был другим. Однако пользователь никогда не знал, что контрольная полоса была запущенным процессом; это было просто представлено как дополнительная функция интерфейса. Система просто описывала безликие фоновые приложения как «системные приложения». [ необходима цитата ]
Языковые функции в Open Scripting Architecture (и, следовательно, AppleScript ) изначально были реализованы как динамически загружаемые плагины, известные как «скриптовые дополнения» или OSAX. В Mac OS 8 и 9 они были дополнены безликими фоновыми приложениями, которые загружались в фоновом режиме по запросу. Как и в случае с обычными приложениями, доступ к этим приложениям осуществлялся с помощью tell
предложений: глобальное пространство имен не обновлялось, как в случае с OSAX. Операционная система не показывала запуск таких процессов и не указывала, запущены они или нет.
Другие расширения, не относящиеся к INIT
Расширения типа INIT загружались во время загрузки для обновления операционной системы. Как ни странно, в папку Extensions можно было поместить и другие файлы, многие из которых не были загружены во время загрузки. Наиболее примечательными из них были общие библиотеки, которые обычно помещались в папку Extensions для простоты размещения. Общие библиотеки не загружались во время загрузки.
Файлы типа INIT были не единственным типом расширения системы. Другой тип - это scri или расширение WorldScript. BootX Загрузчик Linux был реализован в виде SCRI просто такие файлы были загружены очень рано в процессе загрузки, перед всеми другими расширениями. Затем BootX может отобразить диалоговое окно, предлагающее пользователю завершить загрузку Mac OS или вместо этого загрузить Linux.