SlideShare a Scribd company logo
1 of 32
Download to read offline
Опыт применения активных объектов во
встраиваемых системах.
Архитектурные аспекты
Владимир Лось
SSD, Embedded Department, Sigma Software, Харьков
Два аспекта при построении моделей
проектируемых систем
Статический - внутренняя структура и связи элементов системы
Динамический - взаимодействие элементов друг с другом,
их реакция на внешние воздействия
Статический аспект
Методологии:
 структурное программирование
 программирование с использованием АТД
 ООП
Зачем?
 повышение показателя модульности
 понижение степеней неявной связности и зависимости элементов
проектируемых систем (Парнас, Вирт, etc)
Динамический аспект
Как определялось «поведение»?
Реакции пассивных сущностей на внешние воздействия
Чем моделировать поведение?
 среды исполнения и ОС
 библиотеки
 языки
Самые главные проблемы с многопоточностью
Практика раньше теории
Мощь программирования - в детерминированных решениях и механизмах
Потоки - строго недетерминированный механизм
Как есть и как должно быть
Как делаем?
Недетерминированная система
+
Механизмы и средства, повышающие её детерминированность
Как должны:
Строго детерминированная модель
+
Максимально ограниченные и, обеспеченные механизмами безопасности,
элементы недетерминированности
Главные проблемы использования потоков
Главная Беда - архитектурного плана:
смешение понятий и сущностей из разных
уровней представления системы
«Упаковка» в ОО-обёртки НЕ решает проблему.
Усугубляет.
Осознание проблем и поиски их решения
Синхронизация совместного доступа к данным
Мониторы Хоара-Хансена
Теория - Хоар, Практика - Хансен в Concurrent Pascal
Реализованы в Ada, Object Pascal, Java.
Что дают?
Позволяют забыть сущности и понятия более низкого уровня.
Переносят фокус внимания разработчика с сущности на свойство.
Следующие проблемы
Выражения понятия исполнимой сущности
Теперь нужно найти высокоуровневый механизм для их представления и
реализации
Что предлагалось и делалось кроме предложения привычного набора ОО-
«костылей»?
Заглянем в «параллельную вселенную» «других решений»...
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;
Элементы 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 );
...
}
};
Практическое применение библиотеки
Применялась в проекте
«ЕгиптCат» (НИИРИ, Харьков) в
подсистеме управления наземного
приёмного антенного комплекса.
http://www.nkau.gov.ua/img/spacesystems/cposi2.jpg
Активности и протоколы в 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.
Билиотека 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 );
}
Операционная система Contiki
Contiki на Atmel AVRСеть из 41 узла Contiki
Применение КА/АО в реальных системах
Регистратор полётной информации СРВП-25
Применение КА/АО в реальных системах
Регистратор полётной информации СРВП-25
(Программа визуализации)
Применение КА/АО в реальных системах
Регистратор полётной информации СРВП-25
(Программа визуализации. Вырезка части фоновой видеоинформации)
Применение КА/АО в реальных системах
Системы управления «умным домом» от фирмы eZLO
Библиотека QP
Варианты:
QP/C и QP/C++ - для 16- и 32-битных архитектур (например ARM Cortex-M, PIC)
QP-nano - для маломощных 8- и 16-битных архитектур (например, AVR MSP430)
QP/Spy - трассировка и тестирование, пересылка информации на отладочную машину
QUTest - фреймвок и библиотека юнит-тестирования (аналог отладки с printf-ом)
QWin - набор утилит для для прототипирования GUI встроенных систем в Windows.
Дополнительный инструментарий (QTools)
QM - графическая оболочка-редактор для работы с QP
Propeller (Parallax Inc.)
GA144 (GreenArrays, Inc.)
Проект Supercomputer in the Pocket
Тема: Высокопроизводительная
платформа для встроенных применений
на базе FPGA
Цель: Разработка набора утилит
Подход: Распределённая система,
основанная на ультра-простых
процессорах
The Tiny Register Machine (TRM)
(by Wirth and Liu)
Основная идея:
Пример реализации: 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:
Применение: Медицинские наблюдения с помощью
Сети на Кристалле
A2 host with GUI
Sensor control and
medical algorithms
on Spartan 6 FPGA
Sensors and
motors on bracelet
Выводы
Архитектура «железа» - из требований задачи
Радикальное улучшение показателей использования ресурсов, скорости
исполнения и энергопотребления
Один язык для описания программного и аппаратного обеспечения снизу
доверху (сквозное проектирование)
Итог
Только сейчас, через более, чем три четверти века
развития отрасли, мы начинаем подходить к
истинным целям, методологиям проектирования и
построению систем, ...
... и - осознанию способов и средств оптимального
решения наших задач
Ссылки на ресурсы
Первая часть доклада: 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
Спасибо за внимание!

More Related Content

What's hot

Python AST / Николай Карелин / VPI Development Center [Python Meetup 27.03.15]
Python AST / Николай Карелин / VPI Development Center [Python Meetup 27.03.15]Python AST / Николай Карелин / VPI Development Center [Python Meetup 27.03.15]
Python AST / Николай Карелин / VPI Development Center [Python Meetup 27.03.15]Python Meetup
 
ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...
ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...
ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...Alexey Paznikov
 
ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...
ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...
ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...Alexey Paznikov
 
Антон Полухин, Немного о Boost
Антон Полухин, Немного о BoostАнтон Полухин, Немного о Boost
Антон Полухин, Немного о BoostSergey Platonov
 
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионаловПолухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионаловSergey Platonov
 
"Модифицируй это!" или "Больше магии Python с помощью изменения AST"
"Модифицируй это!" или "Больше магии Python с помощью изменения AST""Модифицируй это!" или "Больше магии Python с помощью изменения AST"
"Модифицируй это!" или "Больше магии Python с помощью изменения AST"PyNSK
 
Александр Фокин, Рефлексия в C++
Александр Фокин, Рефлексия в C++Александр Фокин, Рефлексия в C++
Александр Фокин, Рефлексия в C++Sergey Platonov
 
JPoint 2016 - Etudes of DIY Java profiler
JPoint 2016 - Etudes of DIY Java profilerJPoint 2016 - Etudes of DIY Java profiler
JPoint 2016 - Etudes of DIY Java profilerAnton Arhipov
 
ПВТ - весна 2015 - Лекция 8. Многопоточное программирование без использования...
ПВТ - весна 2015 - Лекция 8. Многопоточное программирование без использования...ПВТ - весна 2015 - Лекция 8. Многопоточное программирование без использования...
ПВТ - весна 2015 - Лекция 8. Многопоточное программирование без использования...Alexey Paznikov
 
JPoint 2015 - Javassist на службе Java-разработчика
JPoint 2015 - Javassist на службе Java-разработчикаJPoint 2015 - Javassist на службе Java-разработчика
JPoint 2015 - Javassist на службе Java-разработчикаAnton Arhipov
 
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2Dima Dzuba
 
ПВТ - весна 2015 - Лекция 6. Разработка параллельных структур данных на основ...
ПВТ - весна 2015 - Лекция 6. Разработка параллельных структур данных на основ...ПВТ - весна 2015 - Лекция 6. Разработка параллельных структур данных на основ...
ПВТ - весна 2015 - Лекция 6. Разработка параллельных структур данных на основ...Alexey Paznikov
 
ПВТ - осень 2014 - Лекция 7. Многопоточное программирование без блокировок. М...
ПВТ - осень 2014 - Лекция 7. Многопоточное программирование без блокировок. М...ПВТ - осень 2014 - Лекция 7. Многопоточное программирование без блокировок. М...
ПВТ - осень 2014 - Лекция 7. Многопоточное программирование без блокировок. М...Alexey Paznikov
 
Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов...
Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов...Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов...
Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов...Alexey Paznikov
 
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++. Р...
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++.   Р...ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++.   Р...
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++. Р...Alexey Paznikov
 
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4
Объектно-Ориентированное Программирование на C++, Лекции  3 и 4 Объектно-Ориентированное Программирование на C++, Лекции  3 и 4
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4 Dima Dzuba
 
Объектно-ориентированное программирование. Лекции 9 и 10
Объектно-ориентированное программирование. Лекции 9 и 10Объектно-ориентированное программирование. Лекции 9 и 10
Объектно-ориентированное программирование. Лекции 9 и 10Dima Dzuba
 

What's hot (20)

Python AST / Николай Карелин / VPI Development Center [Python Meetup 27.03.15]
Python AST / Николай Карелин / VPI Development Center [Python Meetup 27.03.15]Python AST / Николай Карелин / VPI Development Center [Python Meetup 27.03.15]
Python AST / Николай Карелин / VPI Development Center [Python Meetup 27.03.15]
 
ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...
ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...
ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...
 
ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...
ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...
ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...
 
Reactive extensions
Reactive extensionsReactive extensions
Reactive extensions
 
Антон Полухин, Немного о Boost
Антон Полухин, Немного о BoostАнтон Полухин, Немного о Boost
Антон Полухин, Немного о Boost
 
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионаловПолухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
 
"Модифицируй это!" или "Больше магии Python с помощью изменения AST"
"Модифицируй это!" или "Больше магии Python с помощью изменения AST""Модифицируй это!" или "Больше магии Python с помощью изменения AST"
"Модифицируй это!" или "Больше магии Python с помощью изменения AST"
 
Александр Фокин, Рефлексия в C++
Александр Фокин, Рефлексия в C++Александр Фокин, Рефлексия в C++
Александр Фокин, Рефлексия в C++
 
JPoint 2016 - Etudes of DIY Java profiler
JPoint 2016 - Etudes of DIY Java profilerJPoint 2016 - Etudes of DIY Java profiler
JPoint 2016 - Etudes of DIY Java profiler
 
ПВТ - весна 2015 - Лекция 8. Многопоточное программирование без использования...
ПВТ - весна 2015 - Лекция 8. Многопоточное программирование без использования...ПВТ - весна 2015 - Лекция 8. Многопоточное программирование без использования...
ПВТ - весна 2015 - Лекция 8. Многопоточное программирование без использования...
 
Parallel STL
Parallel STLParallel STL
Parallel STL
 
JRebel
JRebelJRebel
JRebel
 
JPoint 2015 - Javassist на службе Java-разработчика
JPoint 2015 - Javassist на службе Java-разработчикаJPoint 2015 - Javassist на службе Java-разработчика
JPoint 2015 - Javassist на службе Java-разработчика
 
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
 
ПВТ - весна 2015 - Лекция 6. Разработка параллельных структур данных на основ...
ПВТ - весна 2015 - Лекция 6. Разработка параллельных структур данных на основ...ПВТ - весна 2015 - Лекция 6. Разработка параллельных структур данных на основ...
ПВТ - весна 2015 - Лекция 6. Разработка параллельных структур данных на основ...
 
ПВТ - осень 2014 - Лекция 7. Многопоточное программирование без блокировок. М...
ПВТ - осень 2014 - Лекция 7. Многопоточное программирование без блокировок. М...ПВТ - осень 2014 - Лекция 7. Многопоточное программирование без блокировок. М...
ПВТ - осень 2014 - Лекция 7. Многопоточное программирование без блокировок. М...
 
Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов...
Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов...Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов...
Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов...
 
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++. Р...
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++.   Р...ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++.   Р...
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++. Р...
 
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4
Объектно-Ориентированное Программирование на C++, Лекции  3 и 4 Объектно-Ориентированное Программирование на C++, Лекции  3 и 4
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4
 
Объектно-ориентированное программирование. Лекции 9 и 10
Объектно-ориентированное программирование. Лекции 9 и 10Объектно-ориентированное программирование. Лекции 9 и 10
Объектно-ориентированное программирование. Лекции 9 и 10
 

Similar to Опыт применения активных объектов во встраиваемых системах. Архитектурные аспекты, Владимир Лось

Ecma script 6 in action
Ecma script 6 in actionEcma script 6 in action
Ecma script 6 in actionYuri Trukhin
 
Solit 2014, EcmaScript 6 in Action, Трухин Юрий
Solit 2014, EcmaScript 6 in Action, Трухин Юрий Solit 2014, EcmaScript 6 in Action, Трухин Юрий
Solit 2014, EcmaScript 6 in Action, Трухин Юрий solit
 
Статический анализ кода: Что? Как? Зачем?
Статический анализ кода: Что? Как? Зачем?Статический анализ кода: Что? Как? Зачем?
Статический анализ кода: Что? Как? Зачем?Andrey Karpov
 
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"Yandex
 
Распространённые ошибки оценки производительности .NET-приложений
Распространённые ошибки оценки производительности .NET-приложенийРаспространённые ошибки оценки производительности .NET-приложений
Распространённые ошибки оценки производительности .NET-приложенийAndrey Akinshin
 
Распространённые ошибки оценки производительности .NET-приложений
Распространённые ошибки оценки производительности .NET-приложенийРаспространённые ошибки оценки производительности .NET-приложений
Распространённые ошибки оценки производительности .NET-приложенийMikhail Shcherbakov
 
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 2
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 2Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 2
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 27bits
 
20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonovComputer Science Club
 
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...Yandex
 
Где кончается react native? / Павел Кондратенко (Rambler&Co)
Где кончается react native? / Павел Кондратенко (Rambler&Co)Где кончается react native? / Павел Кондратенко (Rambler&Co)
Где кончается react native? / Павел Кондратенко (Rambler&Co)Ontico
 
Про асинхронное сетевое программирование
Про асинхронное сетевое программированиеПро асинхронное сетевое программирование
Про асинхронное сетевое программированиеPython Meetup
 
Инструментируй это
Инструментируй этоИнструментируй это
Инструментируй этоRoman Dvornov
 
Продолжаем говорить о микрооптимизациях .NET-приложений
Продолжаем говорить о микрооптимизациях .NET-приложенийПродолжаем говорить о микрооптимизациях .NET-приложений
Продолжаем говорить о микрооптимизациях .NET-приложенийAndrey Akinshin
 
Статический анализ Си++ кода
Статический анализ Си++ кодаСтатический анализ Си++ кода
Статический анализ Си++ кодаTatyanazaxarova
 
ADD 2011: Статический анализ Си++ кода
ADD 2011: Статический анализ Си++ кодаADD 2011: Статический анализ Си++ кода
ADD 2011: Статический анализ Си++ кодаAndrey Karpov
 
паттерны программирования
паттерны программированияпаттерны программирования
паттерны программированияguestfc8ae0
 

Similar to Опыт применения активных объектов во встраиваемых системах. Архитектурные аспекты, Владимир Лось (20)

C sharp deep dive
C sharp deep diveC sharp deep dive
C sharp deep dive
 
C# Deep Dive
C# Deep DiveC# Deep Dive
C# Deep Dive
 
Ecma script 6 in action
Ecma script 6 in actionEcma script 6 in action
Ecma script 6 in action
 
Solit 2014, EcmaScript 6 in Action, Трухин Юрий
Solit 2014, EcmaScript 6 in Action, Трухин Юрий Solit 2014, EcmaScript 6 in Action, Трухин Юрий
Solit 2014, EcmaScript 6 in Action, Трухин Юрий
 
Bytecode
BytecodeBytecode
Bytecode
 
Статический анализ кода: Что? Как? Зачем?
Статический анализ кода: Что? Как? Зачем?Статический анализ кода: Что? Как? Зачем?
Статический анализ кода: Что? Как? Зачем?
 
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
 
Распространённые ошибки оценки производительности .NET-приложений
Распространённые ошибки оценки производительности .NET-приложенийРаспространённые ошибки оценки производительности .NET-приложений
Распространённые ошибки оценки производительности .NET-приложений
 
Распространённые ошибки оценки производительности .NET-приложений
Распространённые ошибки оценки производительности .NET-приложенийРаспространённые ошибки оценки производительности .NET-приложений
Распространённые ошибки оценки производительности .NET-приложений
 
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 2
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 2Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 2
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 2
 
20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov
 
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
 
Где кончается react native? / Павел Кондратенко (Rambler&Co)
Где кончается react native? / Павел Кондратенко (Rambler&Co)Где кончается react native? / Павел Кондратенко (Rambler&Co)
Где кончается react native? / Павел Кондратенко (Rambler&Co)
 
Про асинхронное сетевое программирование
Про асинхронное сетевое программированиеПро асинхронное сетевое программирование
Про асинхронное сетевое программирование
 
Инструментируй это
Инструментируй этоИнструментируй это
Инструментируй это
 
Продолжаем говорить о микрооптимизациях .NET-приложений
Продолжаем говорить о микрооптимизациях .NET-приложенийПродолжаем говорить о микрооптимизациях .NET-приложений
Продолжаем говорить о микрооптимизациях .NET-приложений
 
Статический анализ Си++ кода
Статический анализ Си++ кодаСтатический анализ Си++ кода
Статический анализ Си++ кода
 
ADD 2011: Статический анализ Си++ кода
ADD 2011: Статический анализ Си++ кодаADD 2011: Статический анализ Си++ кода
ADD 2011: Статический анализ Си++ кода
 
msumobi2. Лекция 1
msumobi2. Лекция 1msumobi2. Лекция 1
msumobi2. Лекция 1
 
паттерны программирования
паттерны программированияпаттерны программирования
паттерны программирования
 

More from Sigma Software

Fast is Best. Using .NET MinimalAPIs
Fast is Best. Using .NET MinimalAPIsFast is Best. Using .NET MinimalAPIs
Fast is Best. Using .NET MinimalAPIsSigma Software
 
"Are you developing or declining? Don't become an IT-dinosaur"
"Are you developing or declining? Don't become an IT-dinosaur""Are you developing or declining? Don't become an IT-dinosaur"
"Are you developing or declining? Don't become an IT-dinosaur"Sigma Software
 
Michael Smolin, "Decrypting customer's cultural code"
Michael Smolin, "Decrypting customer's cultural code"Michael Smolin, "Decrypting customer's cultural code"
Michael Smolin, "Decrypting customer's cultural code"Sigma Software
 
Max Kunytsia, “Why is continuous product discovery better than continuous del...
Max Kunytsia, “Why is continuous product discovery better than continuous del...Max Kunytsia, “Why is continuous product discovery better than continuous del...
Max Kunytsia, “Why is continuous product discovery better than continuous del...Sigma Software
 
Marcelino Moreno, "Product Management Mindset"
Marcelino Moreno, "Product Management Mindset"Marcelino Moreno, "Product Management Mindset"
Marcelino Moreno, "Product Management Mindset"Sigma Software
 
Andrii Pastushok, "Product Discovery in Outsourcing - What, When, and How"
Andrii Pastushok, "Product Discovery in Outsourcing - What, When, and How"Andrii Pastushok, "Product Discovery in Outsourcing - What, When, and How"
Andrii Pastushok, "Product Discovery in Outsourcing - What, When, and How"Sigma Software
 
Elena Turkenych “BA vs PM: Who' the right person, for the right job, with the...
Elena Turkenych “BA vs PM: Who' the right person, for the right job, with the...Elena Turkenych “BA vs PM: Who' the right person, for the right job, with the...
Elena Turkenych “BA vs PM: Who' the right person, for the right job, with the...Sigma Software
 
Eleonora Budanova “BA+PM+DEV team: how to build the synergy”
Eleonora Budanova “BA+PM+DEV team: how to build the synergy”Eleonora Budanova “BA+PM+DEV team: how to build the synergy”
Eleonora Budanova “BA+PM+DEV team: how to build the synergy”Sigma Software
 
Stoyan Atanasov “How crucial is the BA role in an IT Project"
Stoyan Atanasov “How crucial is the BA role in an IT Project"Stoyan Atanasov “How crucial is the BA role in an IT Project"
Stoyan Atanasov “How crucial is the BA role in an IT Project"Sigma Software
 
Olexandra Kovalyova, "Equivalence Partitioning, Boundary Values ​​Analysis, C...
Olexandra Kovalyova, "Equivalence Partitioning, Boundary Values ​​Analysis, C...Olexandra Kovalyova, "Equivalence Partitioning, Boundary Values ​​Analysis, C...
Olexandra Kovalyova, "Equivalence Partitioning, Boundary Values ​​Analysis, C...Sigma Software
 
Yana Lysa — "Decision Tables, State-Transition testing, Pairwase Testing"
Yana Lysa — "Decision Tables, State-Transition testing, Pairwase Testing"Yana Lysa — "Decision Tables, State-Transition testing, Pairwase Testing"
Yana Lysa — "Decision Tables, State-Transition testing, Pairwase Testing"Sigma Software
 
Business digitalization trends and challenges
Business digitalization trends and challengesBusiness digitalization trends and challenges
Business digitalization trends and challengesSigma Software
 
Дмитро Терещенко, "How to secure your application with Secure SDLC"
Дмитро Терещенко, "How to secure your application with Secure SDLC"Дмитро Терещенко, "How to secure your application with Secure SDLC"
Дмитро Терещенко, "How to secure your application with Secure SDLC"Sigma Software
 
Яна Лиса, “Ефективні методи написання хороших мануальних тестових сценаріїв”
Яна Лиса, “Ефективні методи написання хороших мануальних тестових сценаріїв”Яна Лиса, “Ефективні методи написання хороших мануальних тестових сценаріїв”
Яна Лиса, “Ефективні методи написання хороших мануальних тестових сценаріїв”Sigma Software
 
Тетяна Осетрова, “Модель зрілості розподіленної проектної команди”
Тетяна Осетрова, “Модель зрілості розподіленної проектної команди”Тетяна Осетрова, “Модель зрілості розподіленної проектної команди”
Тетяна Осетрова, “Модель зрілості розподіленної проектної команди”Sigma Software
 
Training solutions and content creation
Training solutions and content creationTraining solutions and content creation
Training solutions and content creationSigma Software
 
False news - false truth: tips & tricks how to avoid them
False news - false truth: tips & tricks how to avoid themFalse news - false truth: tips & tricks how to avoid them
False news - false truth: tips & tricks how to avoid themSigma Software
 
Анна Бойко, "Хороший контракт vs очікування клієнтів. Що вбереже вас, якщо вд...
Анна Бойко, "Хороший контракт vs очікування клієнтів. Що вбереже вас, якщо вд...Анна Бойко, "Хороший контракт vs очікування клієнтів. Що вбереже вас, якщо вд...
Анна Бойко, "Хороший контракт vs очікування клієнтів. Що вбереже вас, якщо вд...Sigma Software
 
Дмитрий Лапшин, "The importance of TEX and Internal Quality. How explain and ...
Дмитрий Лапшин, "The importance of TEX and Internal Quality. How explain and ...Дмитрий Лапшин, "The importance of TEX and Internal Quality. How explain and ...
Дмитрий Лапшин, "The importance of TEX and Internal Quality. How explain and ...Sigma Software
 

More from Sigma Software (20)

Fast is Best. Using .NET MinimalAPIs
Fast is Best. Using .NET MinimalAPIsFast is Best. Using .NET MinimalAPIs
Fast is Best. Using .NET MinimalAPIs
 
"Are you developing or declining? Don't become an IT-dinosaur"
"Are you developing or declining? Don't become an IT-dinosaur""Are you developing or declining? Don't become an IT-dinosaur"
"Are you developing or declining? Don't become an IT-dinosaur"
 
Michael Smolin, "Decrypting customer's cultural code"
Michael Smolin, "Decrypting customer's cultural code"Michael Smolin, "Decrypting customer's cultural code"
Michael Smolin, "Decrypting customer's cultural code"
 
Max Kunytsia, “Why is continuous product discovery better than continuous del...
Max Kunytsia, “Why is continuous product discovery better than continuous del...Max Kunytsia, “Why is continuous product discovery better than continuous del...
Max Kunytsia, “Why is continuous product discovery better than continuous del...
 
Marcelino Moreno, "Product Management Mindset"
Marcelino Moreno, "Product Management Mindset"Marcelino Moreno, "Product Management Mindset"
Marcelino Moreno, "Product Management Mindset"
 
Andrii Pastushok, "Product Discovery in Outsourcing - What, When, and How"
Andrii Pastushok, "Product Discovery in Outsourcing - What, When, and How"Andrii Pastushok, "Product Discovery in Outsourcing - What, When, and How"
Andrii Pastushok, "Product Discovery in Outsourcing - What, When, and How"
 
Elena Turkenych “BA vs PM: Who' the right person, for the right job, with the...
Elena Turkenych “BA vs PM: Who' the right person, for the right job, with the...Elena Turkenych “BA vs PM: Who' the right person, for the right job, with the...
Elena Turkenych “BA vs PM: Who' the right person, for the right job, with the...
 
Eleonora Budanova “BA+PM+DEV team: how to build the synergy”
Eleonora Budanova “BA+PM+DEV team: how to build the synergy”Eleonora Budanova “BA+PM+DEV team: how to build the synergy”
Eleonora Budanova “BA+PM+DEV team: how to build the synergy”
 
Stoyan Atanasov “How crucial is the BA role in an IT Project"
Stoyan Atanasov “How crucial is the BA role in an IT Project"Stoyan Atanasov “How crucial is the BA role in an IT Project"
Stoyan Atanasov “How crucial is the BA role in an IT Project"
 
Olexandra Kovalyova, "Equivalence Partitioning, Boundary Values ​​Analysis, C...
Olexandra Kovalyova, "Equivalence Partitioning, Boundary Values ​​Analysis, C...Olexandra Kovalyova, "Equivalence Partitioning, Boundary Values ​​Analysis, C...
Olexandra Kovalyova, "Equivalence Partitioning, Boundary Values ​​Analysis, C...
 
Yana Lysa — "Decision Tables, State-Transition testing, Pairwase Testing"
Yana Lysa — "Decision Tables, State-Transition testing, Pairwase Testing"Yana Lysa — "Decision Tables, State-Transition testing, Pairwase Testing"
Yana Lysa — "Decision Tables, State-Transition testing, Pairwase Testing"
 
VOLVO x HACK SPRINT
VOLVO x HACK SPRINTVOLVO x HACK SPRINT
VOLVO x HACK SPRINT
 
Business digitalization trends and challenges
Business digitalization trends and challengesBusiness digitalization trends and challenges
Business digitalization trends and challenges
 
Дмитро Терещенко, "How to secure your application with Secure SDLC"
Дмитро Терещенко, "How to secure your application with Secure SDLC"Дмитро Терещенко, "How to secure your application with Secure SDLC"
Дмитро Терещенко, "How to secure your application with Secure SDLC"
 
Яна Лиса, “Ефективні методи написання хороших мануальних тестових сценаріїв”
Яна Лиса, “Ефективні методи написання хороших мануальних тестових сценаріїв”Яна Лиса, “Ефективні методи написання хороших мануальних тестових сценаріїв”
Яна Лиса, “Ефективні методи написання хороших мануальних тестових сценаріїв”
 
Тетяна Осетрова, “Модель зрілості розподіленної проектної команди”
Тетяна Осетрова, “Модель зрілості розподіленної проектної команди”Тетяна Осетрова, “Модель зрілості розподіленної проектної команди”
Тетяна Осетрова, “Модель зрілості розподіленної проектної команди”
 
Training solutions and content creation
Training solutions and content creationTraining solutions and content creation
Training solutions and content creation
 
False news - false truth: tips & tricks how to avoid them
False news - false truth: tips & tricks how to avoid themFalse news - false truth: tips & tricks how to avoid them
False news - false truth: tips & tricks how to avoid them
 
Анна Бойко, "Хороший контракт vs очікування клієнтів. Що вбереже вас, якщо вд...
Анна Бойко, "Хороший контракт vs очікування клієнтів. Що вбереже вас, якщо вд...Анна Бойко, "Хороший контракт vs очікування клієнтів. Що вбереже вас, якщо вд...
Анна Бойко, "Хороший контракт vs очікування клієнтів. Що вбереже вас, якщо вд...
 
Дмитрий Лапшин, "The importance of TEX and Internal Quality. How explain and ...
Дмитрий Лапшин, "The importance of TEX and Internal Quality. How explain and ...Дмитрий Лапшин, "The importance of TEX and Internal Quality. How explain and ...
Дмитрий Лапшин, "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 ); }
  • 15. Операционная система Contiki Contiki на Atmel AVRСеть из 41 узла Contiki
  • 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)
  • 22. QM - графическая оболочка-редактор для работы с QP
  • 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