Дмитрий Лапшин, "The importance of TEX and Internal Quality. How explain and ...
Опыт применения активных объектов во встраиваемых системах. Архитектурные аспекты, Владимир Лось
1. Опыт применения активных объектов во
встраиваемых системах.
Архитектурные аспекты
Владимир Лось
SSD, Embedded Department, Sigma Software, Харьков
2. Два аспекта при построении моделей
проектируемых систем
Статический - внутренняя структура и связи элементов системы
Динамический - взаимодействие элементов друг с другом,
их реакция на внешние воздействия
3. Статический аспект
Методологии:
структурное программирование
программирование с использованием АТД
ООП
Зачем?
повышение показателя модульности
понижение степеней неявной связности и зависимости элементов
проектируемых систем (Парнас, Вирт, etc)
4. Динамический аспект
Как определялось «поведение»?
Реакции пассивных сущностей на внешние воздействия
Чем моделировать поведение?
среды исполнения и ОС
библиотеки
языки
5. Самые главные проблемы с многопоточностью
Практика раньше теории
Мощь программирования - в детерминированных решениях и механизмах
Потоки - строго недетерминированный механизм
6. Как есть и как должно быть
Как делаем?
Недетерминированная система
+
Механизмы и средства, повышающие её детерминированность
Как должны:
Строго детерминированная модель
+
Максимально ограниченные и, обеспеченные механизмами безопасности,
элементы недетерминированности
7. Главные проблемы использования потоков
Главная Беда - архитектурного плана:
смешение понятий и сущностей из разных
уровней представления системы
«Упаковка» в ОО-обёртки НЕ решает проблему.
Усугубляет.
8. Осознание проблем и поиски их решения
Синхронизация совместного доступа к данным
Мониторы Хоара-Хансена
Теория - Хоар, Практика - Хансен в Concurrent Pascal
Реализованы в Ada, Object Pascal, Java.
Что дают?
Позволяют забыть сущности и понятия более низкого уровня.
Переносят фокус внимания разработчика с сущности на свойство.
9. Следующие проблемы
Выражения понятия исполнимой сущности
Теперь нужно найти высокоуровневый механизм для их представления и
реализации
Что предлагалось и делалось кроме предложения привычного набора ОО-
«костылей»?
Заглянем в «параллельную вселенную» «других решений»...
10. Active Oberon + AOS/bluebottle/A2
TYPE
Synchronizer = OBJECT
awake: BOOLEAN
PROCEDURE Wait; BEGIN {EXCLUSIVE} AWAIT(awake); awake := FALSE END Wait;
PROCEDURE WakeUp; BEGIN {EXCLUSIVE} awake := TRUE END WakeUp;
END Synchronizer;
(* Procedures Set and Reset are mutually exclusive*)
TYPE
MyContainer = OBJECT
VAR x, y: LONGINT;
(* Invariant: y = f(x) *)
PROCEDURE Set(x: LONGINT);
BEGIN {EXCLUSIVE}
(* changes to both x and y are atomic *)
SELF.x := x; y := f(x)
END Set;
PROCEDURE Reset;
BEGIN
...
BEGIN {EXCLUSIVE}
(* changes to both x and y are atomic *)
x := x0; y := y0;
END;
....
END Reset;
END MyContainer;
TYPE
(*define the object and its intended behavior*)
AnActiveObject = OBJECT
...
BEGIN {ACTIVE} (*object body*)
... do something ...
END AnActiveObject;
PROCEDURE CreateAndStartObject;
VAR o: AnActiveObject;
BEGIN
... NEW(o); ...
END CreateAndStartObject;
11. Элементы Active Oberon в C++
class Synchronizer {
bool awake;
public:
void Wait() { X_BEGIN X_AWAIT( awake ); awake = FALSE; X_END }
void WakeUp() { X_BEGIN awake = TRUE; X_END }
};
/* Methods Set and Reset are mutually exclusive*/
class MyContainer {
Int x, y; /* Invariant: y == f(x) */
public:
void Set( int x )
{
X_BEGIN
/* changes to both x and y are atomic */
this->x = x; y = f(x);
X_END
}
void Reset()
{
...
X_BEGIN
/* changes to both x and y are atomic */
x = x0; y = y0;
X_END
....
}
};
/* define the object and its intended behavior */
class AnActiveObject {
DECL_ACTIVITY( activity )
{
... do something ...
}
public:
AnActiveObject()
{
...
ACTIVITY_START( ActiveObject, activity, «ObjectActivity» );
...
}
~AnActiveObject()
{
…
ACTIVITY_STOP( activity );
...
}
};
12. Практическое применение библиотеки
Применялась в проекте
«ЕгиптCат» (НИИРИ, Харьков) в
подсистеме управления наземного
приёмного антенного комплекса.
http://www.nkau.gov.ua/img/spacesystems/cposi2.jpg
13. Активности и протоколы в Zonnon
object Opponent implements Fighter;
activity Karate implements Fighter.Karate;
var t: object;
procedure fight;
begin
while t is ATTACK do
receive t;
while t is DEFENSE do receive t; strike
if t is ATTACK then strike else halt(protokolError) end
end;
if t is RUNAWAY then
if (*не истощен*) then send Karate.CHASE end;
return (* борьба завершается *)
elsif t is KO then return (* борьба завершается *)
elsif t is ATTACK then fight (* рекурсия, продолжается борьба *)
else halt(protocolError) (* ошибка протокола *)
end
end
end fight;
procedure strike;
begin
if (t is LEG) or (t is NECK) or (t is HEAD)
then
receive t;
if t is integer then (* необычная сила *) receive t end
end
end strike;
begin (* Karate*) receive t; fight
end Karate;
end Opponent.
definition Fighter;
activity (* Синтаксис протокола, в данном случае он рекурсивный *)
{ fight = { attack ( { defense attack } | RUNAWAY [ ?CHASE] | KO | fight ) }.
attack = ATTACK strike.
defense = DEFENSE strike.
strike = bodypart [ strength ].
bodypart = LEG | NECK | HEAD.
strength = integer. }
Karate = (RUNAWAY, CHASE, KO, ATTACK, DEFENSE, LEG, NECK, HEAD);
end Fighter.
object Challenger;
import Opponent, Fighter;
var opp: Opponent; f: Fighter.Karate;
opp := new Opponent; (* создать оппонента *) …
f := new opp.Fighter.Karate; (* создать диалог *)
send Fighter.Karate.ATTACK => f; … (* борьба соответствующая протоколу диалога *)
…
end Challenger.
14. Билиотека protothreads
#include "pt.h"
PT_THREAD( struct pt *pt )
{
PT_BEGIN( pt );
do {
send_packet();
/* Wait until an ackowledgement has been received,
or until the timer expires.
If the timer expires, we should send the packet
again. */
timer_set(&timer, TIMEOUT);
PT_WAIT_UNTIL( pt, acknowledgment_received()
|| timer_expired(&timer) );
} while( timer_expired(&timer) );
PT_END( pt );
}
#include "pt.h«
PT_THREAD( struct pt *pt )
{
PT_BEGIN( pt );
/* Wait until a packet has been received,
and send an acknowledgment. */
PT_WAIT_UNTIL( pt, packet_received() );
send_acknowledgement();
PT_END( pt );
}
16. Применение КА/АО в реальных системах
Регистратор полётной информации СРВП-25
17. Применение КА/АО в реальных системах
Регистратор полётной информации СРВП-25
(Программа визуализации)
18. Применение КА/АО в реальных системах
Регистратор полётной информации СРВП-25
(Программа визуализации. Вырезка части фоновой видеоинформации)
19. Применение КА/АО в реальных системах
Системы управления «умным домом» от фирмы eZLO
20. Библиотека QP
Варианты:
QP/C и QP/C++ - для 16- и 32-битных архитектур (например ARM Cortex-M, PIC)
QP-nano - для маломощных 8- и 16-битных архитектур (например, AVR MSP430)
21. QP/Spy - трассировка и тестирование, пересылка информации на отладочную машину
QUTest - фреймвок и библиотека юнит-тестирования (аналог отладки с printf-ом)
QWin - набор утилит для для прототипирования GUI встроенных систем в Windows.
Дополнительный инструментарий (QTools)
25. Проект Supercomputer in the Pocket
Тема: Высокопроизводительная
платформа для встроенных применений
на базе FPGA
Цель: Разработка набора утилит
Подход: Распределённая система,
основанная на ультра-простых
процессорах
The Tiny Register Machine (TRM)
(by Wirth and Liu)
27. Пример реализации: Realtime ECG Monitor
Computational scheme:
Signal
input
Wave
proc_1
QRS
detect
HRV
analysis
Disease
classifier
Wave
proc_2
Wave
proc_8
ECG
bitstream
out
stream
Hardware layout on FPGA:
28. Применение: Медицинские наблюдения с помощью
Сети на Кристалле
A2 host with GUI
Sensor control and
medical algorithms
on Spartan 6 FPGA
Sensors and
motors on bracelet
29. Выводы
Архитектура «железа» - из требований задачи
Радикальное улучшение показателей использования ресурсов, скорости
исполнения и энергопотребления
Один язык для описания программного и аппаратного обеспечения снизу
доверху (сквозное проектирование)
30. Итог
Только сейчас, через более, чем три четверти века
развития отрасли, мы начинаем подходить к
истинным целям, методологиям проектирования и
построению систем, ...
... и - осознанию способов и средств оптимального
решения наших задач
31. Ссылки на ресурсы
Первая часть доклада: https://www.youtube.com/watch?v=_CYAcsZVr_c
Слайды первой части: https://www.slideshare.net/GlobalLogicUkraine/active-objects-in-embedded-systems-
history-experiences-examples
О проблемах с потоками: https://www2.eecs.berkeley.edu/Pubs/TechRpts/2006/EECS-2006-1.pdf
О мoниторах: https://dl.acm.org/citation.cfm?doid=355620.361161
Active Oberon & A2: http://www.ocp.inf.ethz.ch/wiki/OCP/Home
Протопотоки и ОС Contiki: http://www.dunkels.com/adam
Процессор Propeller: https://www.parallax.com/microcontrollers/propeller
Процессоры фирмы GreenArrays: http://www.greenarraychips.com
Проект Оберон: http://www.projectoberon.com
Библиотека QP и средство графического моделирования QM: https://www.state-machine.com
Оберон-сообщества и материалы оберон-тематике: https://oberoncore.ru , http://www.inr.ac.ru/~info21 ,
https://zx.oberon2.ru , https://t.me/BlackBoxOberon , http://obertone.ru