A/ROSE (Apple Real-time Operating System Environment)

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 00:35, 6 июня 2018.
A/ROSE
HQsuWGF0UXU.jpg
Разработчик Apple Computer
Линейка ОС Macintosh
Состояние разработки Не поддерживается
Дата первого релиза Февраль 1988
Платформы Macintosh Coprocessor Platform для Apple Macintosh (Motorola 68000)
Официальный веб-сайт нет

A/ROSE (англ. Apple Real-time Operating System Environment) – это небольшая встроенная операционная система, которая работает на "Macintosh Coprocessor Platform" Apple Computer, карте расширения для Apple Macintosh. Идея заключалась в том, чтобы предложить единую "перегруженную" аппаратную платформу, на которой сторонние поставщики могли бы построить практически любой продукт, уменьшая, в противном случае, большую нагрузку на разработку карты расширения на основе NuBus. Однако карты MCP были довольно дорогими, ограничивая привлекательность концепции. A/ROSE имел очень мало использования, по-видимому, ограничиваясь исключительно собственными сетевыми картами Apple для последовательного ввода-вывода, Ethernet, Token Ring и Twinax.

История

Когда разработка различных сетевых и коммуникационных продуктов для Macintosh II началась в компании Apple около 1987 года, стало очевидно, что операционная система Macintosh не удовлетворяет потребности этих продуктов в вычислительной мощности и возможностях операционной системы. В конце концов, ОС Macintosh был предназначен для человеческого общения, а не для подключения к ЭВМ. Это не в реальном времени (прерывания могут быть отключены дольше, чем это приемлемо для быстрого управления прерываниями ввода/вывода), и она призвана обеспечить приятный и эффективный графический интерфейс пользователя, а не процессор обработки вывода. Было принято решение сделать "умные" NuBus карты, с собственным процессором 68000, его собственное рабочее место в оперативной памяти, и его собственные базовые сервисы операционной системы; а также для разработки этой карты не только в качестве основы для Apple, но и как инструмент для NuBus карты расширения разработчикам. Результатом стала Macintosh Coprocessor Platform. Ее операционная система, A/ROSE, была разработана, чтобы отвечать потребностям продуктов подключения, дополнять возможности Mac OS. Работа над A/ROSE началась в августе 1987 года, а первый вариант был введен в эксплуатацию в феврале 1988 года. [Источник 1]

Общий вид

Сама A/ROSE очень маленькая, ядро использует только 6 КБ, а операционная система в целом около 28 КБ. A/ROSE поддерживает упреждающую многозадачность с циклическим планированием задач со временем переключения контекста 110 микросекунд и только 20 микросекундами задержки (гарантированное время отклика прерывания). Задача системы состоит в том, чтобы перемещать данные и запускать и останавливать задачи на картах, а весь API содержит только десять вызовов. A/ROSE - это система передачи сообщений, основными вызовами которой являются Send() и Receive(). Сообщения короткие, включая только 24 байта пользовательских данных, и отправляются асинхронно. Чтобы найти соответствующую конечную точку, A/ROSE включает сервер имен, который позволяет приложениям привязывать свои имена к идентификаторам задач, позволяя им перемещаться в системе и быть найденными динамически. ОС также поддерживала ряд процедур для поиска, запуска и остановки задач на других картах, одна из которых была хост-компьютером.

Для координации связи и обеспечения механизма для разговора с процессором хоста, сокращенная копия A/ROSE также работала внутри Mac OS в виде системного расширения или" INIT", известного как" Prep " (который не следует путать с более поздним стандартом оборудования PReP). Драйверы устройств для карт A/ROSE также записывались как INIT и запускались автоматически. После запуска они находят заглушку Prep и используют обычный канал связи A/ROSE, который он предоставляет для связи с картами. Например, карта Apple TokenTalk NB card устанавливает свой драйвер в качестве инициализации и дополнительно устанавливает заготовку, предполагая, что она не была установлена раньше. При запуске драйвер находит заглушку Prep и просит ее перечислить карты TokenTalk, установленные в машине, и, возможно, загружает в них код или настройки. С этого момента Prep обрабатывает связь с картой, передавая результаты водителю TokenTalk. Ядро A/ROSE отвечает за планирование задач, межпроцессное взаимодействие и управление памятью.[Источник 2]

10 базовых элементов A/ROSE
Название Описание
AROSEFreeMem() Освобождает блок памяти
FreeMsg() Освобождает буфер сообщений
AROSEGetMem() Выделяет блок памяти
GetMsg() Выделяет буфер сообщений
Receive() Получить сообщение
Reschedule() Изменение режима планирования задачи
Send() Отправлять сообщения
SpI() Устанавливает уровень приоритета оборудования
StartTask() Инициирует задачу
StopTask() Останавливает задачу

Сообщения и задачи

Межпроцессное взаимодействие A/ROSE происходит посредством сообщений, передаваемых между задачами. Задача сервера инициализируется перед задачей клиента. Затем задача клиента выполняет вызов GetMsg () для запроса буфера сообщений из предварительно выделенного пула буферов сообщений, который поддерживается параметром A/ROSE и размер которого задается пользователем. После сообщений с адресов, кодов команд и параметров, он отправляется на сервер. На этом этапе отправляющая задача теряет права на буфер сообщений и не должна использовать его снова, пока не вернется через вызов Receive (). С другой стороны, задача сервера обычно находится в бесконечном цикле, ожидая сообщения, запрашивающие службу, обрабатывающие эти запросы и отправляющие ответы. После получения ответа задача клиента может повторно использовать буфер сообщений для последующих запросов или освободить буфер с помощью вызова FreeMsg() и продолжить работу с другим заданием. Сообщение содержит до 24 байт пользовательских данных, имеет фиксированную длину и является асинхронным. Если отправляемые данные не помещаются в сообщение, оно может быть помещено в память отправителя, а адрес и размер области данных могут быть переданы в сообщении. Каждое сообщение идентифицируется идентификатором сообщения и кодом сообщения. Код сообщения определяется по соглашению между отправителем и получателем. Соглашение, которое следует в A/ROSE для исходящих сообщений, чтобы использовать четный код и для ответов на эти сообщения, чтобы установить код на следующий нечетный номер. Структура Сообщения A/ROSE (54 байта) в языке C, структура сообщения объявляется следующим образом:

 1              struct mMessage *mNext;     
 2              /* Используется для внутренней цепочки cообщений. */
 3              long            mId;       /* Уникальный идентификатор сообщения. */
 4              short           mCode;     /* Пользовательский код сообщения. */
 5              short           mStatus;   /* Состояние возврата сообщения. */
 6              unsigned short  mPriority; /* Диапазон от 0 (низкий) до 31 (высокий). */
 7              tid_type        mFrom;     /* Идентификатор задачи отправляющего сообщения. */
 8              tid_type        mTo;       
 9              /* Идентификатор задачи, к которой относится посланный msg. */
10              unsigned long   mSData[3];
11              /* Используется для личной информации отправителя. */
12              unsigned long   mOData[3];
13              /* Используется получателем для отправки данных обратно. */
14              long            mDataSize;
15              /* Размер данных, на которые указывает mDataPtr. */
16              char            *mDataPtr; /* Указатель на данные переменной длины. */

Задачи в A/ROSE принимают и отвечают на сообщения. Задача идентифицируется в A/ROSE по идентификатору задачи, который является 32-разрядным полем типа tid_type. Каждая задача также имеет связанные имя и тип. Это очень близко к протоколу привязки имени AppleTalk. Задачи запускаются с вызовом StartTask(). Задачи имеют один из 32 уровней приоритета, с уровнем 31 как наивысший приоритет и уровнем 0 как самый низкий. Задачи выполняются либо в режиме среза, либо в режиме выполнения в блок. В режиме среза задача выполняется для одного основного тика (около 50 миллисекунд), а затем передает управление процессом задаче с более высоким или равным приоритетом, если она доступна. В режиме выполнения в блок задача выполняется до тех пор, пока она не будет заблокирована или не будет завершена. Задача блокируется, если она вызывает Receive() для сообщения, которое недоступно. Новые задачи планируются к выполнению в порядке приоритета; задача выполняется только в том случае, если не ожидаются соответствующие требованиям задачи с более высоким приоритетом.

Диспетчеры A/ROSE

Диспетчер в A/ROSE - это еще одна задача, которая выполняет свою работу по принятию и ответу на сообщения с предопределенными кодами сообщений.

Диспетчер имён

Диспетчер имен поддерживает перекрестную ссылку между идентификаторами задач и связанными с ними именем и типом. Пользовательские задачи могут регистрироваться в диспетчере имен, указывая имя объекта и тип объекта, а затем другие задачи, которые должны ссылаться на эту задачу, могут искать задачу по имени и типу, вызывая утилиту A/ROSE Lookup_Task (). И наоборот, для заданного идентификатора задачи диспетчер имен возвращает имя объекта и тип объекта, если отправить ему сообщение с mCode = NM_LOOKUP_NAME. Диспетчер имен также предоставляет службы уведомлений. Эти сервисы включают сигнализацию, когда карта NuBus выключена или запущена, проверяя, присутствует ли задача или нет, и сигнализацию, когда задача завершается.

Диспетчер связи Intercard

Диспетчер связи InterCard (ICCM) позволяет связывать задачи потребителя с задачами на других карточках NuBus или на главной доске логики. Есть только три кода сообщения, которые пользовательская задача может отправить ICCM: ICC_GETCARDS, ICC_DETACH и ICC_ATTACH.

  • ICC_GETCARDS возвращает длинное целое число для каждого из шестнадцати возможных слотов NuBus. Положительное число представляет идентификатор задачи диспетчера имен, работающего под A/ROSE на карте Macintosh Coprocessor Platform. Для slot = 0 это идентификатор задачи диспетчера имен, включенного в A/ROSE Prep под ОС Macintosh. Идентификатор задачи диспетчера имен требуется для поиска конкретных задач на любой карте NuBus.
  • Коды ICC_DETACH и ICC_ATTACH обеспечены для карточек NuBus.

Удаленный системный диспетчер

Удаленный системный диспетчер, работающий на карте NuBus позволяет задачам, выполняться на любых других NuBus картах. Удаленный системный диспетчер регистрируется в диспетчере имен с именем RSM и типом RSM.

Диспетчер отклика

Диспетчер отклика повторяет все сообщения, отправленные ему. Это может быть очень полезно на начальных этапах тестирования A/ROSE.

Некоторые примеры программирования A/ROSE

Некоторые примеры программирования A/ROSE находятся в папке A/ROSE на диске Developer Essentials. Вы можете запустить эти приложения под MultiFinder после загрузки с A/ROSE Prep в системной папке. За исключением операции загрузки, все эти приложения будут работать независимо от того, установлена ли на вашем компьютере карта Macintosh Coprocessor Platform.

TaskSample и ClientAppli

Приложение TaskSample открывает окно и ожидает сообщения A/ROSE. Приложение ClientAppli ищет сервер с именем myTaskName и отправляет сообщение при каждом нажатии кнопки. Сервер TaskSample просто возвращает каждое сообщение, которое он получает отправителю, и ClientAppli отображает количество сообщений, которые он отправил и получил. Если вы запустите приложения, вы заметите некоторую задержку в сообщениях, передаваемых туда и обратно. Это связано со значением SleepTime (выбирается в меню SleepTime), который передается theWaitNextEvent() звонок по MultiFinder. В двух примерах программ службы A/ROSE PrepSend() и Receive() вызываются только один раз в каждом туре по циклу событий. В зависимости от значения времени сна фоновое приложение более или менее замедляется, и это объясняет задержку, наблюдаемую на экране.

ShowTasks

ShowTasks - это инструмент, который показывает все задачи A/ROSE, которые " видны" в машине (также могут быть "невидимые" задачи A/ROSE). Он проходит через все шестнадцать слотов NuBus, ищет все видимые задачи и отображает их по идентификатору задачи, имени объекта и типу объекта. Пример выходных данных этой программы может выглядеть следующим образом (что отражает ситуацию, в которой выполняется пример задачи и ClientAppli):

1              slot = $0 :
2              00000003: name "echo manager", type "echo manager"
3              00000004: name "myTaskName", type "myTaskType"
4              00000005: name "ClientApp", type "ClientType"

Это указывает на то, что в настоящее время на карте NuBus нет задач A/ROSE; слот $0 представляет собой основную логическую плату, где драйвер A/ROSE Prep делает все возможное, чтобы заставить нас поверить, что есть экземпляр A/ROSE.

Утилиты, облегчающие разработку программ A/ROSE на Macintosh

Следующие утилиты Macintosh, включенные в дистрибутивные диски A/ROSE, облегчают разработку программ A/ROSE на Macintosh:

  1. Print Manager (nprm) - это приложение для Macintosh, которое позволяет пользователям отображать информацию из задачи, запущенной на карте Macintosh Coprocessor Platform. Он регистрируется в A/ROSE с помощью диспетчера печати имени объекта и диспетчера печати имени типа. Строки для печати отправляются менеджеру печати программой printf, поставляемой с выпуском A/ROSE. При первом вызове printf ищет диспетчер печати и находит его идентификатор задачи. Впоследствии он отправляет все строки печати как сообщения диспетчеру печати, который создает окно и отображает строки, которые он получает. Пользователи могут отображать диагностические сообщения с помощью функции printf. Функции диспетчера печати также могут быть реализованы в пользовательской программе.
  2. Dumpcard - это инструмент MPW, который сбрасывает статус задач A/ROSE, запущенных на любой карте NuBus. Доступные параметры отображают блоки памяти, сообщения, ожидающие получения задачей, и блоки управления задачами всех задач, запущенных в A/ROSE. Если карта останавливается по какой-либо причине, как ошибка шины, пользователь может получить трассировку стека, чтобы найти вызывающую последовательность, которая вызвала исключение. В добавлении, потребитель может спросить разборку инструкций вокруг точки прерывания.
  3. Download application (ndld) - это приложение для Macintosh, используемое для загрузки задач A/ROSE и/или A/ROSE на указанную карту или карты статически или динамически. Выбор файла осуществляется через стандартное диалоговое окно получить файл.
  4. Download - это инструмент MPW, который загружает задачи A/ROSE и/или A/ROSE на указанную карту или карты статически или динамически. Это полезно, когда пользователь хочет загрузить код из сценария оболочки.
  5. NuBug - это отладочное приложение, используемое для отладки программ A/ROSE, запущенных на карте. NuBug выглядит и работает как MacsBug. Все команды MacsBug, не относящиеся к Mac OS, поддерживаются NuBug. Кроме того, NuBug предоставляет команды, специфичные для A/ROSE, связанные со статусом задачи, именами задач и так далее. NuBug является многооконный приложение, которое воспитывает столько окон, сколько есть NuBus карты, способные работать A/ROSE. Поскольку NuBug реализован в C++, его можно легко улучшить.

Источники

  1. Inside The Macintosh Coprocessor Platform And A/ROSE// Preserve.mactech [2018—2018]. URL: http://preserve.mactech.com/articles/develop/issue_04/coprocessor.html (дата обращения: 18.04.2018).
  2. A/ROSE (Apple Real-time Operating System Environment)// Wikipedia [2018—2018]. URL: https://en.wikipedia.org/wiki/A/ROSE#Overview (дата обращения: 18.04.2018).