Propeller, или Жизнеутверждающая история

22 ноябрь, 2006 - 17:26Андрей Зубинский

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

В те времена, когда в нашем городе еще был магазин «Юный техник» и в нем еще продавалось хоть что-то, что соответствовало его названию, «блошиный рынок» радиодеталей, несмотря на подпольный характер сомнительного бизнеса, собирал толпы. Здесь люди самых разных возрастов обменивали заработанные самостоятельно или родителями рубли на транзисторы и микросхемы, причем делали это добровольно и даже с азартом. Кто-то под страхом лишения абонентского билета растаскивал в библиотеках журналы «Радио» и «Моделист-конструктор» постранично – не из клептомании, а потому, что подписка на «Радио» была не дешевой, а копировальной техники в библиотеках просто не было. В магазинах игрушек продавались наборы типа «Юный радиолюбитель», и кто-то покупал их своим детям в подарок.

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

В принципе, ничего особо страшного во всем этом нет. Но что-то все-таки мы потеряли. Что именно? Например, возможности. Такие, которые в полной мере реализовал один американский некогда очень юный радиолюбитель.

Parallax

В 1980 г. Чипу Грейси (Chip Gracey) было всего 12 лет, когда его отец впервые принес с работы домой на выходные компьютер Apple II – восьмибитовую бизнес-модель с монохромным алфавитно-цифровым монитором. Дорвавшийся до серьезной вычислительной машины (а Apple II тогда действительно ею был), Чип Грейси по выходным самостоятельно осваивал неизбежный Basic и цифровую схемотехнику. Через год он уже неплохо программировал, и его школьный учитель привлек способного ученика к преподаванию основ вычислительной техники. Со временем детское увлечение превратилось в осознанное хобби, затем – в профессию. Причем произошло это довольно быстро – ученик последнего класса американской средней школы разработал, произвел и умудрился продать... больше 20 тысяч (!) программаторов для распространенного тогда компьютера Commodore 64, не располагая никакими офисами, мастерскими и рекламными бюджетами, – только своей спальней и умением делать несложную, но полезную и интересную электронику.

Propeller, или Жизнеутверждающая история
Созданный греческим любителем балансирующий двухколесный робот использует в качестве основного вычислителя BASIC Stamp
Propeller, или Жизнеутверждающая история
Любители с использованием BASIC Stamp создают не только игрушки, но и весьма полезные вещи, например такие, как этот интеллектуальный агрегат питания

После окончания колледжа Чип Грейси со своим другом основал крохотную фирму Parallax. Но в отличие от наших радиолюбителей-кооператоров, сделали они это на удивление грамотно, взяв на работу профессионального инженера, адвоката и бухгалтера. Продукция фирмы была ориентирована на любителей – несложный аналого-цифровой преобразователь, согласованный по интерфейсам с аппаратными средствами компьютера Apple II, и непрофессиональный программатор резко набирающего популярность и уже более или менее доступного по цене микроконтроллера Intel 8051. Маленькая фирма без особых притязаний спокойно работала до 1990 г. Именно в этом году компания удачно выбрала направление деятельности и создала продукт, во многом предопределивший все ее будущее: простой, эффективный и дешевый программатор для микроконтроллеров семейства PIC производства Microchip. Программатор оказался настолько удачным, что Microchip купила эту разработку, оставив, впрочем, Parallax право ее модифицировать и продавать обновленные версии. Следует сразу оговориться, программатор Parallax ни в коем случае не являлся изделием промышленного класса – компания осталась верна своему весьма специфическому рынку любопытных и заинтересованных любителей. Количество программаторов, проданных Microchip и сделанных любителями самостоятельно по схемам, автору статьи неизвестно, Parallax же за несколько лет реализовала 12 тыс. этих весьма специфических устройств. Но настоящий успех к компании пришел тогда, когда она сделала невероятное – фактически создала... новую индустрию. В 1992 г., продолжая сотрудничество с Microchip, Parallax разработала для радиолюбителей весьма специфический крохотный компьютерчик, который было легко и программировать, и встраивать в свои изделия. BASIC Stamp – так назывался этот одноплатный компьютер размером с почтовую марку, «понимающий» диалект языка Basic и поставляющийся в виде платы с напаянными компонентами. В компании Parallax и подумать не могли, что за следующие 10 лет им придется «наклепать» больше трех миллионов таких машинок, чтобы удовлетворить аппетиты любопытных всего мира. Больше того, ни один специалист по маркетингу наверняка не верил тогда (да и не поверит сейчас, не зная истории Parallax), что такой необычный продукт, как Basic Stamp, будет поставляться более чем четырьмя десятками всемирно известных дистрибьюторов электронных компонентов, что возникнет всемирная школа инструкторов по его применению (и ее окончат свыше полутора тысяч человек), что сотни небольших фирм будут выпускать к BASIC Stamp различные расширения. Но бог с ними, со специалистами по маркетингу. Далеко не всякий инженер поверит в то, что компания класса Parallax окажется способной... разработать собственный микроконтроллер, да еще и какой!

Propeller

Возможно, Parallax – действительно уникальная компания, возможно, все дело в настоящей увлеченности – ничем иным объяснить успех разработки вычислительной машины собственной совершенно уникальной архитектуры, основанной на нетрадиционных идеях, нельзя. А успех налицо – любой желающий может купить у Parallax не только разработанный «с нуля», на транзисторном уровне, восьмиядерный (!) 32-битовый (!) микроконтроллер Propeller всего за $13 (!), но и все необходимые средства кросс-разработки к нему. Согласитесь, для маленькой компании, функционирующей на любительском рынке, – это успех.

Рассказывать о Propeller непросто. Хотя бы потому, что в этой разработке очень мало общего с привычными микропроцессорами и микроконтроллерами.

Propeller, или Жизнеутверждающая история
Propeller в самодельном колесном роботе

Во-первых, в отличие от любого вычислительного устройства из своего ценового диапазона Propeller содержит восемь 32-разрядных синхронных, но независимо работающих вычислительных ядра фон-неймановской архитектуры, каждое из которых оснащено весьма нетривиальной интегрированной периферией и локальной оперативной памятью небольшого объема. В терминах Propeller каждое такое вычислительное ядро называется «зубом» (дословный перевод термина cog – зуб шестеренки). Странное сочетание «синхронные, но независимые» на деле означает, что работа всех восьми «зубов» Propeller'а тактируется импульсами одного общесистемного генератора тактовой частоты, но при этом каждый «зуб» может исполнять свою собственную программу. Каждый «зуб», кроме ОЗУ универсального назначения (фон-неймановская архитектура) емкостью 496 32-разрядных слов, содержит 16 регистров специального назначения и целый «букет» отображенных на них периферийных устройств, таких как два управляемых коммуникатора портов ввода/вывода, два универсальных счетчика событий и даже... генератор видеосигналов!

Во-вторых, все восемь «зубов» Propeller четырьмя 32-разрядными шинами соединены между собой и с двумя совсем уж неожиданными в таком случае подсистемами микроконтроллера. И если две шины традиционны для цифровых вычислителей (шины данных и адреса), то общая шина доступа к 32 однобитовым портам ввода/вывода (отображенным на аппаратные выводы, «ноги» микроконтроллера) и отдельная шина разделения общесистемного счетчика машинных циклов – вещи, мягко сказать, экзотические. Более того, посредством этих двух шин каждое вычислительное ядро может в любой момент опросить состояние портов ввода/вывода и прочесть содержимое счетчика машинных циклов – эти операции выполняются полностью асинхронно. В терминах Propeller (и в терминах многозадачных операционных систем) однобитовые порты ввода/вывода и счетчик машинных циклов называются общими разделяемыми ресурсами. Ну а загадочный счетчик машинных циклов –просто 32-битовый счетчик, подсчитывающий импульсы общесистемного генератора тактовой частоты.

В-третьих, кроме общих разделяемых ресурсов, Propeller содержит и так называемые взаимоисключающие ресурсы (mutually exclusive), к которым одновременно может осуществляться доступ только одним вычислительным ядром. Таких ресурсов в Propeller немало, и, кроме очевидной общей оперативной памяти (8 килослов), к ним относятся, например, аппаратно реализованные битовые семафоры (в терминах Propeller они называются locks, но, по сути, являются традиционными механизмами защиты взаимоисключающих разделяемых ресурсов от непредсказуемых результатов одновременного доступа).

Propeller, или Жизнеутверждающая история
Андре Ламот (слева) и Дэвид Френсон. Андре Ламот – легенда малоразрядных консолей и игр для них, научный сотрудник NASA с двадцатилетнего возраста, один из разработчиков первой суперкомпьютерной системы виртуальной реальности, создал на основе процессора Propeller набор «сделай сам игровую консоль» под названием HYDRA. HYDRA – полностью открытая для пользователя система, в ней документировано и доступно все – от аппаратных средств и микропрограмм до библиотек и инструментария

В-четвертых, кроме восьми «зубов», Propeller содержит еще и общее управляющее ядро – «вал» (hub). Главное назначение этого механизма – упорядочивание доступа «зубов» к взаимоисключающим ресурсам. Такая задача решается в Propeller на микропрограммно-аппаратном уровне, но при этом почти так же, как принято ее решать в операционных системах. Если попробовать использовать образы, навязанные названиями отдельных элементов Propeller, можно сказать так: через каждые два такта общесистемной тактовой частоты «вал» доворачивает всю «шестеренку» процессора до вхождения в «зацепление» очередного «зуба» и взаимоисключающих ресурсов. Менее образно, но более внятно, это означает, что тактовая частота «вала» в два раза ниже общесистемной тактовой частоты, и в каждый такт своей работы «вал» предоставляет очередному вычислительному ядру доступ к взаимоисключающим ресурсам. Подобным «вращением доступа» (все-таки мы говорим о Propeller) в операционных системах занимается важнейший элемент ядра ОС – диспетчер (scheduler), а само «вращение» называется циклическим алгоритмом диспетчеризации (round robin). Разработчики Propeller реализовали этот алгоритм с одним важным нюансом – независимо от того, сколько вычислительных ядер микроконтроллера задействовано пользовательской программой, диспетчер-«вал» гарантирует стабильный временной интервал между получением доступа к mutually exclusive ресурсам – 16 тактов общесистемной тактовой частоты.

В-пятых, «вал» сам как бы является сопроцессором вычислительного ядра, исполняющим специальные команды доступа к взаимоисключающим ресурсам. По сути, эти команды, входящие во множество машинных команд Propeller, есть не что иное, как аналог... системных вызовов в операционных системах – именно посредством исполнения ядром ОС этих вызовов пользовательские программы получают доступ к взаимоисключающим ресурсам. В языке ассемблера Propeller таким командам соответствуют, например, мнемоники RDBYTE/WRBYTE и группа мнемоник, начинающихся четырьмя символами LOCK. Первые – это полный аналог системных вызовов чтения/записи разделяемой (shared) памяти, вторые – аналог группы системных вызовов, отвечающих за управление семафорами.

Propeller, или Жизнеутверждающая история
Системная плата игровой консоли HYDRA с процессором Propeller

В-шестых, в Propeller нет понятия «прерывание». Вообще нет. Но не спешите фыркать – разработчики Parallax свое дело знают отлично. Давайте подумаем – зачем нужен механизм прерываний? Ответ очевиден – чтобы получить возможность управления потоком исполнения в зависимости от аппаратных асинхронных с этим потоком событий. В Propeller для решения подобной задачи нет нужды усложнять сущности без необходимости и вводить в восьмипроцессорной аппаратно-программной системе реального времени дополнительный механизм. Хотя бы потому, что на любой из процессоров можно возложить решение задач опроса состояний общего ресурса (портов ввода/вывода) и трансформации этих состояний во взаимоисключающий ресурс, например битовый флаг, сообщающий о событии.

В-седьмых, Propeller имеет встроенное ПЗУ, в котором есть чуть ли не все, что нужно для построения на основе этой микросхемы самых разных управляющих устройств. Достаточно только упомянуть о том, что в ПЗУ хранятся и прошивки знакогенераторов для генераторов видеосигналов каждого вычислительного ядра, и готовые таблицы для быстрых аппроксимационных вычислений основных тригонометрических функций и перевода чисел в экспоненциальную форму, и программа начальной загрузки, и даже... интерпретатор кодов промежуточного представления мощного языка программирования Spin. То есть фактически Propeller – это не микроконтроллер, и даже не восьмиядерный микроконтроллер, а функционально завершенная аппаратно-программная платформа для разработки систем реального времени. Вот так – ни много ни мало.

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

И опять немного о грустном

Propeller, или Жизнеутверждающая история
Набор HYDRA на выставке «Фестиваль винтажных компьютеров», 5 ноября 2006 г., Музей истории компьютеров, Маунтин-Вью, Калифорния

Восемь перечисленных особенностей Propeller – это, конечно, далеко не все, что можно рассказать об упакованной в традиционный 40-выводный DIP-корпус функциональности удивительной микросхемы, созданной удивительной компанией. Но и их достаточно для того, чтобы понять – даже у малого инженерного бизнеса, ориентированного не на профессиональный рынок, есть колоссальный потенциал. Автор статьи не берется прочить ни архитектуре Propeller большое будущее, ни ее создателям – миллиардов. Но даже если Parallax продаст всего несколько десятков тысяч этих микросхем (а при сочетании цены и возможностей – это весьма скромная оценка), с ними вдоволь «наиграются» несколько десятков тысяч очень любопытных людей. Пусть КПД всей этой системы, главной латентной целью которой является регенерация культуры (высококвалифицированные специалисты – это ведь составляющая культуры, не правда ли?), равна 1%, косвенная подготовка нескольких сотен великолепных будущих конструкторов и инженеров – это уже очень большой успех всей компании Parallax. Если же учесть тот факт, что 1% – оценка катастрофически заниженная...

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