[МУЗЫКА] [МУЗЫКА] [МУЗЫКА] Сейчас мы поговорим про встроенные системы. Встроенная система — это такая система, в которой одна или несколько ЭВМ управляют каким-то специализированным оборудованием. Примеров тому масса. Прежде всего, военные приложения. Всякие ракеты, другие системы. Медицинские приложения. Встроенный стимулятор сердца — это тоже встроенное приложение. Телефонные станции. Таких примеров очень много. И, на самом деле, многие авторы относят программирование встроенных систем к числу самых сложных задач системного программирования. Попробуем разобраться, почему. Главная трудность встроенных систем реального времени именно в условии «реальное время». Для каждого сигнала, приходящего из вне, вы должны уложиться в определенное ограниченное время. Причем тут все настолько жестко, что, если вы чуть-чуть не уложились, то сигнал просто потеряется. Просто будет потерян. Поэтому при программировании надо учитывать всякие — возникнет сбора мусора, не возникнет, возникнут какие-то обработки, какие-то дополнительные прерывания не возникнут. Надо в любом случае гарантировать, что обработка любого важного сигнала уложится в определенное, заранее ограниченное время. Следующая трудность, что обычно СРВ управляются не одной машиной, а многими. И поэтому все проблемы сетевых протоколов, перегрузки, переполнение протоколов, обработка отказов, отключение, сбой от отказа — все эти сетевые проблемы входят в органичные части системы реального времени. Любая телефонная станция включает в себя большие базы данных. Информация об абонентах, например, об аппаратуре, о платах — где какая плата стоит, кем запитана, кем должна быть запитана, чем должна быть заменена в случае отказа и так далее. И поэтому проблематика больших баз данных, кстати, сама по себе эта проблематика очень трудная, в полном объеме входит и в систему реального времени. Часто, особенно для больших систем, встроенные системы управляются людьми-операторами. И поэтому вся масса проблем человеко-машинного взаимодействия тоже сюда входит. Я не хочу углубляться в эту отдельно большую тему. Скажу, что я на всю жизнь запомнил, что меня инженерные психологи учили, что красный — это цвет опасности. Поэтому надо аварийные сообщения выдавать красным цветом, а зеленый цвет — это успокаивающий цвет. Поэтому нормальные сообщения надо выдавать зеленым цветом. Или вот такая мелочь, что, оказывается, что, если в диалоговой системе человек задал вопрос системе и больше трёх секунд не получает ответа, то человек нервничать начинает, начинает кидаться предметами и ломать технику. Поэтому надо, это не шутка, это правда. Это просто особенность инженерной психологии, человеческой психологии, причем не только компьютерной. Поэтому и такого рода проблемы нам надо учиться изучать и преодолевать проблемы, связанные с человеко-машинным взаимодействием. И, наконец, самая большая трудность встроенных систем — это неповторяемые ситуации. Поскольку я много лет занимался этим делом и моя докторская была защищена в 91-м году, название «Технология программирования встроенных систем реального времени», то есть это моя личная специализация, эта неповторяемость — это самый главный бич. Понимаете, на обычной программе, когда вы написали программу, она выдала вам неправильный ответ. Вы вставляете какие-то дополнительные печати, трассы и повторяете исполнение программы, и локализуете место, где программа выдала ошибку. Это нормальный процесс. Во встроенных системах реального времени это совершенно не так. Например, телефонная станция может, автоматическая цифровая телефонная станция может два года работать. Абсолютно все хорошо. А потом вдруг раз — и повисла. И понять, почему, а, на самом деле, конечно, тут в бога верить не надо. Тут все происходит по объективным причинам. Есть такое понятие «критический интервал». Если там два процесса одновременно вошли в критический интервал, что не должно быть, то они могут вызвать как раз такую ситуацию. Телефонная станция может годами работать. Так вот, стечения звезд на небе, что два процесса вошли в критический интервал, не будет, а потом раз — и случится, и станция повиснет. Это кошмар. На самом деле, сколько-то объективных и таких универсальных средств борьбы с этим просто нет. И до сих пор нет. Это некоторое искусство. То есть люди, которые отлаживают встроенные системы реального времени, — это фокусники, которые должны как-то так уметь просто мысленно представить себе ситуацию, которую на машине просто не посмотреть. Хотя появились средства статического анализа, model checking, но эти средства еще не пришли в реальную практику. И поэтому я повторяю и отвечаю за свои слова, что отладка встроенных систем реального времени по-прежнему является очень трудной задачей. Знаете, как и в разделе про мобильные телефоны, мне здесь надо сказать, что написать, как мы говорим, «на коленках», просто на языке Си или на каком-то другом языке», встроенную систему реального времени практически невозможно. Нужно иметь очень мощные технологии создания таких систем, их верификации, их тестирования, их установки на компьютерах. И только при наличии определенных довольно строго технологий можно добиться положительного результата. Теперь давайте рассмотрим другие направления развития архитектуры процессоров. Долгие годы соблюдался закон Мура. Каждые полтора года производительность процессоров удваивается. И в основном это достигалось усилиями физиков и инженеров, что уменьшался шаг между проводками в кристаллах, увеличивалось количество вентилей в кристаллах. Сейчас мы уже пришли к такому, что уже сегодня некоторые лучшие фабрики работают с шагом 18–22 нанометра. Это уже близко к физическому пределу. Дело в том, что, когда шаг будет достигнут 10 нанометров, может не 10, а 6, но близко все равно, то уже перестанут работать традиционные для нас правила – 1-0, правило дискретности. Все переходит в мир квантовых вычислений. Что это такое? Между 0 и 1 бывает континуум разных значений. И поэтому возникают такие кубиты, что принимают такое-то значение с такой-то вероятностью. Это уже совершенно другая физика и, главное, совершенно другая математика, в том числе машина Тьюринга там не будет работать. Поэтому закон Мура в таком чистом виде перестает работать, потому что мы пришли к физическим пределам. Главное концептуальное направление преодоления этой проблемы — распараллеливание. То есть теперь делают либо много процессоров, о которых мы говорили, либо много ядер в одном процессоре. И опять-таки с сожалением должен констатировать, что инженеры как-то обогнали нас, программистов. То есть инженеры делают, например, кристалл с 64-мя ядрами, а как его программировать ведь они же не говорят. Есть системы OpenMP, MPI, но они все-таки довольно громоздкие и довольно тяжелые. И поэтому программирование параллельных процессоров — это тоже очень трудная система задача, которая еще классическим образом не решена. Мы, кстати, этим тоже занимаемся и пытаемся придумать, например, графическую технологию для записи программ по методу MPI, но пока похвастаться нечем. Таким образом, подводя итог всему этому разделу, я сказал, что главная идея и главное направление развития архитектур ЭВМ сегодня — это параллельность. Много машин, много процессоров, много ядер. Понятно, что главная проблема, так уж получилось, еще раз повторюсь, что инженеры нас обогнали, главная проблема в том, что мы не умеем еще толком программировать параллельные системы. То есть создаются какие-то параллельные программы, но каждая параллельная программа — это годы труда, годы на отладку, тяжелая работа. К сожалению, хороших технологий, которые позволили бы более менее легким образом создать нетривиальную параллельную программу, до сих пор не создано. Но мы над этим работаем.