Введение
Архитектурные решения
Подержка разработки приложений

С 1983 года компания Aeon Systems занимает ведущие позиции в разработке и производстве инструментальных средств для систем реального времени. Компьютер Aeon VMEAlpha64/SP - последнее решение в классе высокопроизводительных систем, выполненных в стандарте VME. Он сочетает процессор Alpha АХР 21064, шину и VME ОС OSF/1 с расширениями для решения задач реального времени.

Введение

Высокопроизводительные RISC-процессоры, первоначально использовавшиеся главным образом в рабочих станциях, сегодня все уверенней проникают и в смежные области применения. Растущее число задач реального времени, в которых массивные вычисления необходимо выполнять на фоне высокоинтенсивного ввода/вывода, ставят перед людьми, их решающими, следующую задачу - строить многоуровневую иерархическую систему, в которой несколько процессоров взаимодействуют через общую магистраль данных, или опереться на единственный высокомощный вычислитель. Как всегда, каждый из вариантов имеет свои "за" и "против". И все же, для целого ряда приложений второй вариант выглядит предпочтительней. Основная причина - один процессор гораздо легче программировать, его легче настроить на удобную и привычную вычислительную среду.

Именно по пути создания высокопроизводительного компьютера пошла компания Aeon Systems (США), предлагая свою новую разработку - компьютер VMEAlpha64. Эта система объединяет в себе два основных аппаратных компонента: 64-разрядный RISC процессор Alpha АХР и промышленноориентированную шину VME.

Модульный интерфейс VME вытеснил с рынка устаревшие модульные интерфейсы типа КАМАК за счет более гибкой структуры, обеспечивающей логическую адресацию и изменяемую разрядность обменов, сохранив основные достоинства модульных интерфейсов предыдущего поколения: взаимозаменяемость модулей, поддержку блочных обменов информации. Интерфейс VME находится в постоянном развитии, и последняя версия Rev.1014 64-разрядного расширения шины призвана обеспечить совместимость с новым 64-разрядным поколением процессоров.

Такая комбинация определяет спектр приложений, для которых компьютер VMEAlpha 64 выглядит особенно привлекательным высокопроизводительные вычисления в реальном масштабе времени. Примерами могут служить обработка изображений и сигналов, натурное и полунатурное моделирование, системы управления сложными объектами. Этот компьютер работает под управлением операционной системы DEC OSF/1, которая, будучи дополнена расширениями, ориентированными на задачи реального времени, и средствами доступа к шине VME из пользовательского приложения, представляет собой идеальную вычислительную среду для подобного рода задач.

Архитектурные решения

Стандарт VME и компьютеры на базе процессоров Alpha

Шина VME используется как управляемый канал передачи данных для сильно связанных вычислительных подсистем. В то же время сохраняются предыдущие приложения стандарта: осуществление подключения широчайшего спектра устройств ввода/вывода, в том числе устройств реального времени. Новые возможности стандарта VME - версия D64 и предложения по подключению высокоскоростного канала Autoban - призваны увеличить производительность шины в блочном режиме передачи.

RISC-архитектура процессоров Alpha АХР имеет полностью 64-разрядную внутреннюю структуру с 32-мя 64-разрядными регистрами общего назначения и 32-мя 64-разрядными регистрами плавающей арифметики. Расширение набора выполняемых процессором команд осуществляется на уровне внешней библиотеки микропрограмм, обычно реализуемой на аппаратном уровне в виде устройства типа PAL. К числу таких дополнительных команд, зависящих от-конкретной реализации, производители обычно относят команды обработки прерываний и команды, обеспечивающие совместимость с предыдущими семействами процессоров (например VAX). Такая гибкость в реализации набора команд (доступная, однако, только производителю, а не потребителю системы) обеспечивает не только индивидуальную настройку на операционную систему, например Windows NT или VRTX, но и реализацию специальных расширений, таких как команды организации циклов на шине VME.

На данный момент существуют две реализации Alpha АХР. Первая - низкопроизводительные процессоры 21066/21068 с сильно интегрированными подсистемами памяти и ввода/вывода. Эти процессоры функционируют на частотах от 66 до 233 МГц. Процессоры 21064/21064A обеспечивают более высокую производительность за счет использования 128-разрядной внешней шины данных. Тактовая частота их работы 150-275 МГц. Обе реализации имеют внутрикристальные раздельные кэш данных и кэш команд и обеспечивают выполнение двух процессорных команд за один такт. Эти два семейства процессоров позволяют получить высокую динамическую производительность. Различия между двумя семействами процессоров ALPHA АХР отражены в реализациях встраиваемых в крейт компьютеров: VME АХР 160/166, выпускаемых фирмой DEC, и VMEAlpha64, выпускаемых компанией Aeon Systems. Компьютеры VME фирмы DEC используют 21066/68 процессоры и имеют относительно низкую стоимость, в то время как компьютеры VME фирмы Aeon Systems построены на базе процессоров 21064/64A и предназначены для создания систем высокой производительности.

Особенности реализации VMEAlpha64/SP

При разработке VMEAlpha64/SP основным требованием было обеспечение максимальной вычислительной производительности и пропускной способности канала ввода/вывода и в то же время сохранение всех возможностей протокола шины VME. Alpha АХР процессоры 21064 обеспечивают пересылку достаточно большой порции данных за одну операцию на системной шине. Обычно операции на системной шине (с внешним кэшем или оперативной памятью) являются сдвоенными и обеспечивают пересылку дважды по 128 бит, или всего 32 байта данных за одну операцию. Время выполнения операции на системной шине, или другими словами скорость работы внешнего кэша и массовой памяти, ключевым образом влияет на интегральную производительность Alpha-компьютера. Фирма Aeon Systems провела специальные исследования по оптимизации соотношения скорости выполнения операций к объему для оперативной памяти и для внешнего кэша с целью достижения более высокой производительности всей системы.

Одним из важных достоинств системы VMEAlpha64/SP является прямое управление устройствами на шине VME со стороны Alpha-процессора. За счет использования дополнительных кристаллов обеспечиваются прямые обращения Alpha-процессора к D16/D8 VME-устройствам. Поскольку минимальный квант данных, которыми оперирует процессор, 32 разряда, операции с байтовыми или двухбайтовыми устройствами вызывают определенные сложности и могут осуществляться только с помощью предварительных посылок, доопределяющих младшие разряды адреса, разрядность передачи и т.п. Для 32-разрядных VME устройств в VMEAlpha64/SP осуществляется прямое отображение в адресное пространство процессора Alpha.

Использование процессора Alpha для прямого управления устройствами VME снижает эффективность его использования как вычислителя. Для разгрузки процессора с сохранением пропускной способности шины передачи данных в VMEAlpha 64 применяются следующие технические решения:

- использование кристаллов SCV64 фирмы Newbridge, в качестве интерфейса к шине VME. Этот кристалл имеет встроенный контроллер прямого доступа к памяти, буферы типа FIFO и поддерживает режим блочных передач D64 на шине VME;

- внешний мультиплексор, расположенный между шиной ввода/вывода процессора Alpha и подсистемой памяти, позволяющий сгруппировывать четыре 32-разрядные обмена по шине ввода/вывода в одну 128-разрядную операцию памяти;

- дополнительный локальный буфер типа SRAM, подключенный к шине ввода/вывода, облегчающий прямую передачу данных между процессором Alpha и устройствами на шине VME, которые работают с форматом данных D16/D8.

Возможность прямого управления устройствами на шине VME со стороны процессора Alpha значительно повышает эффективность работы с интеллектуальными устройствами VME, которые обычно содержат разравнивающие буферы и собственные контроллеры прямого доступа к памяти. Однако VMEAlpha64 позволяет эффективно работать и с более простыми устройствами VME за счет подключения дополнительного сопроцессора ввода/вывода, реализованного на RISC-процессоре Intel 960. Подключение сопроцессора ввода/вывода позволяет разгрузить основной процессор, что особенно важно, если вспомнить, что за время, необходимое для проведения одной простой передачи на шине VME - одну микросекунду, 275 МГц Alpha-процессор выполняет 550 команд. Такой подход к реализации архитектуры системы лежит в рамках эволюционного развития стандарта VME. Так, если текущая реализация системы VME базируется на простых устройствах без встроенного интеллекта, то ее развитие может быть выполнено не путем трудоемкой замены исполнительных модулей VME на более интеллектуальные, а простым добавлением интеллекта в основную вычислительную систему.

Перспективы развития

Фирма Aeon Systems приступила к выпуску новой версии VMEAlpha 64/XP системы на процессоре 21064A 275 МГц. По сравнению с предыдущей моделью, VMEAlpha 64/SP, массовая память и внешний кэш реализованы в новой модели на заменяемых модулях SIMM и DIMM соответственно, что обеспечивает простоту конфигурирования системы в соответствии с запросами потребителя. Кроме того, в новой системе в качестве шины ввода/вывода используется шина PCI, которая не только увеличивает пропускную способность канала ввода/вывода, но и обеспечивает большую гибкость в подключении дополнительных периферийных устройств.

Подержка разработки приложений

Некоторые особенности DEC OSF/l

VMEAlpha64/SP работает под управлением операционной системы DEC OSF/1, являющейся на сегодняшний день, наверное, лучшим выбором на рынке промышленно-ориентированных ОС UNIX. Будучи разработанной в соответствии с требованиями, предъявляемыми к унифицированному UNIX'y "законодателями мод" в этой области, - Open Software Foundation и UNIX System Laboratories, - DEC OSF/1 поддерживает практически все основные программные стандарты. Как следствие, под DEC OSF/1 работает большая часть механизмов, определяемых двумя главнейшими разновидностями UNIX System V и Berkeley Software Distribution. Это делает возможным безболезненный перенос в DEC OSF/1 очень многих пользовательских приложений и средств. Что не менее важно, внутренняя архитектура ядра DEC OSF/1 следует самой современной микроядерной парадигме, делая операционную среду открытой "снизу доверху".

Очень интересны расширения DEC OSF/1, ориентированные на поддержку приложений для задач реального времени. К важнейшим из них можно отнести повторную входимость ядра (что означает немедленную реакцию на внешние события), приоритетную диспетчеризацию процессов, блокировку памяти процесса в оперативной памяти. С помощью этих механизмов пользователю, как правило, удается добиться нужного ему времени ответа на внешние события.

Разработчик программного обеспечения для задач реального времени, безусловно, заинтересуется механизмом thread, поддерживаемым в DEC OSF/1. Thread - это отдельный поток управления, работающий параллельно с другими в рамках одного процесса. Единое адресное пространство и развитые механизмы синхронизации позволяют писать ясные и компактные программы для задач, в которых взаимодействуют несколько слабосвязанных компонентов. Например, один thread может обмениваться данными с диском, в то время как другой производит вычисления, а третий следит за мышью.

Расширения DEC OSF/1 компании Aeon

К сожалению, DEC OSF/1, как впрочем и любая другая ОС, обладает свойством, которое отпугивает пользователей, решающих Задачи реального времени: интерфейс для включения в систему драйверов нестандартных внешних устройств довольно запутан и неинтуитивен. Очень часто программист, желающий обеспечить обмен данными с новым устройством ввода/вывода, оказывается в ситуации, когда он вынужден изучать соглашения, не имеющие никакого отношения ни к его устройству, ни к его задаче. Ситуация ухудшается тем, что новый драйвер должен быть встроен в ядро системы, что вызывает ряд трудностей (средства отладки минимальны, любая ошибка, как правило, фатальна). Как следствие, несмотря на всю привлекательность программных и интерфейсных возможностей, предоставляемых системой пользователю, легкость доступа к внешним устройствам становится, по сути, необходимым условием использования DEC OSF/1 для приложений реального времени.

Не так уж сложно разработать аппаратные схемы, обеспечивающие доступ системы к устройствам на шине VME. Куда сложнее изящно экспортировать эти возможности в пользовательскую программу. Инженеры компании Aeon предлагают довольно широкий спектр альтернативных механизмов, решающих эту проблему. Все они подчиняются одному и тому же определяющему требованию: пользователь должен быть избавлен от необходимости включать свой драйвер устройства на шине VME в ядро системы. Все программирование устройства должно осуществляться на уровне стандартного пользовательского приложения.

Первый и, наверное, самый простой аппарат, разработанный компанией Aeon, - это библиотека VASL (VME Access Support Library). VASL предлагает пользователю набор процедур, которые инкапсулируют в себе детали доступа к шине VME. Как это осуществляется? VASL тесно взаимодействует с универсальным псевдодрайвером, встроенным в ядро системы и обеспечивающим доступ к аппаратным средствам и экспортирующим некоторые ресурсы, доступные только из ядра OSF/1. Использование псевдодрайвера для "тонких" операций подразумевает, что худшее, что может сделать пользователь, - это "сломать" свою собственную программу, но уж никак не всю систему.

VASL определяет две основных процедуры: read vmebus и write vmebus. Каждая из них получает при вызове всю информацию о VME-транзакции (адресное пространство, ширина данных и так далее). Так как VME-контроллер, - реализующий транзакцию, программируется непосредственно из ядра (из псевдодрайвера), VASL гарантирует, что одиночный доступ к шине VME не будет прерван из-за других внутренних или внешних событий.

Доступ к шине VME при обработке прерываний также спрятан внутрь псевдодрайвера, который, получив прерывание от VME устройства, оповещает пользовательский процесс, заранее зарегистрировавшийся (посредством вызова специальной процедуры VASL) в качестве обработчика прерываний для данного вектора. В пользовательский процесс прерывание прибывает либо как стандартный сигнал UNIX, либо в виде возобновленного потока - кому что больше нравится.

Достоинства VASL очевидны - простота на фоне довольно мощных возможностей. Столь же очевидны и недостатки - выполнение каждой транзакции требует отдельного вызова, так же как обработка каждого прерывания означает переключение контекста выполнения из ядра в пользовательскую программу. Эти недостатки существенно нивелируются, если учесть насколько велик разрыв в производительности главного вычислителя (процессор ALPHA) и скорости обмена с шиной VME. Очевидна также тенденция к повышению интеллектуальности устройств на шине VME, где прерывание во многих случаях означает, что интеллектуальное устройство подготовило целый блок данных.

Следующее решение - DIL (Device Interface Language - язык описания интерфейсов устройств) - опирается на утверждение, что универсальные языки программирования (а для DEC OSF/1 это, в первую очередь, язык Си) не являются идеальной средой для программирования драйверов внешних устройств вообще, и для устройств на шине VME в частности. В самом деле, практически любая программа драйвера обладает атрибутами, малоприсущими стандартной пользовательской программе. Это, в частности, вызывает необходимость описывать аппаратные характеристики устройства. Например, регистры могут быть доступны только для чтения или записи, или для того и другого, чтение регистра может изменять его внутреннее состояние и так далее. Кроме того, поток управления внутри драйвера следует некоторому общему профилю: транзакция инициируется, вызывается обработчик прерывания или процедура тайм-аута, транзакция завершается. И наконец, вычислительные конструкции внутри драйвера в большинстве случаев чрезвычайно просты: как правило, они сводятся к чтению и записи регистров и манипуляциям с битовыми полями. В этом контексте указатели и адресная арифметика языка Си представляются излишними и, что хуже, провоцирующими на ошибки.

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

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

Как и VASL, DIL базируется на универсальном псевдодрайвере, в который встроен интерпретатор DIL -программ, непосредственно взаимодействующий с шиной VME. Для повышения эффективности интерпретация предваряется переводом DIL-кода в некоторое внутреннее представление, понимаемое интерпретатором. То, что интерпретатор является составной частью псевдодрайвера, исключает необходимость смены контекста выполнения при обработке прерывания (экономя десятки микросекунд).

Отладка DIL-программ выполняется с помощью символьного отладчика, реализованного как приложения для Х Window. Удобный оконный интерфейс, в сочетании со стандартными возможностями символьного отладчика (точки останова, чтение/запись регистров и памяти), дают пользователю почти уникальную возможность следить за динамикой операций ввода/вывода и непосредственно контролировать их. Другое опасение, что интерпретация замедляет выполнение программы, представляется спорным, если учесть высокую производительность процессора ALPHA.

Когда стало очевидно, что символьный отладчик очень удобен, если нужно просто "потрогать" шину VME, дополнительно к DIL было написано самостоятельное приложение для Х Window - DIL Probe, позволяющее выполнять чтение/запись на шину VME и фиксировать прерывания и ошибки на ней. Структура регистров описывается с помощью специального графического редактора (с возможностью перевода этой структуры на Си или DIL). Очень быстро это приложение стало довольно популярным даже среди тех, которым первоначально не понравилась идея самого DIL. DIL Probe действительно незаменим, особенно в случаях, когда устройство VME плохо или неполно документировано.

Последнее решение, предлагаемое компанией Aeon, - библиотека IOCP (Input-Output Со-Processor), - ориентировано на использование сопроцессора для обмена данными с устройствами на шине VME. В этом случае сопроцессор, выполняя пользовательскую программу, является, по сути, интеллектуальным контроллером DMA. Код, резидентный на сопроцессоре, обеспечивает связь с пользовательскими приложениями на процессоре ALPHA, позволяя загружать и перезагружать пользовательский код, идентифицировать и вызывать пользовательские транзакции. Код для сопроцессора готовится пользователем с помощью различных кросссредств, инсталлированных в систему. Именно в случае IOCP мы еще раз убедились насколько удобен UNIX для развития подобного рода систем. Очень быстро удалось разработать целый ряд пользовательских утилит и оболочек, позволяющих создавать код для сопроцессора, загружать его в память, отлаживать и тестировать.

Решения на основе сопроцессора представляются наиболее перспективными для задач, в которых интенсивный ввод/вывод выполняется на фоне массивных вычислений. Использование сопроцессора для сбора "сырых" данных позволяет высвободить процессор ALPHA для работы, которую он выполняет лучше всего - для вычисления. Немаловажно и то, что пользовательская программа выполняется на практически голом сопроцессоре, что снижает латентность прерываний и делает ее предсказуемой. Наконец, появляется возможность максимально эффективно использовать аппаратуру - ведь с сопроцессора можно напрямую программировать контроллер VME.