OberonCore
https://forum.oberoncore.ru/

lock-free A2
https://forum.oberoncore.ru/viewtopic.php?f=22&t=4996
Страница 1 из 1

Автор:  Info21 [ Пятница, 21 Февраль, 2014 20:56 ]
Заголовок сообщения:  lock-free A2

Готовится новая версия ядра A2, говорят, lock-free, типа, "революционно".

Завершение работы -- дело недель (реализатор будет защищать по ней кандидатскую).

Автор:  Kemet [ Пятница, 28 Ноябрь, 2014 16:42 ]
Заголовок сообщения:  Re: lock-free A2

Есть какая-нибудь доступная информация? Или революцию отменили?

Автор:  Дмитрий Дагаев [ Пятница, 28 Ноябрь, 2014 18:31 ]
Заголовок сообщения:  Re: lock-free A2

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

Автор:  Kemet [ Пятница, 28 Ноябрь, 2014 18:44 ]
Заголовок сообщения:  Re: lock-free A2

а где на это можно посмотреть

Автор:  Kemet [ Пятница, 28 Ноябрь, 2014 18:52 ]
Заголовок сообщения:  Re: lock-free A2

нашел

Автор:  Kemet [ Пятница, 28 Ноябрь, 2014 19:25 ]
Заголовок сообщения:  Re: lock-free A2

может есть не в репозитории eth, с тезисами, обосновывающими революционность такого подхода.
Я думаю, что здесь вне не так просто, потому что, как минимум, у блоков есть модификатор UNCOOPERATIVE и это позволяет предположить, что вытесяняющая многозадачность никуда не делась

Автор:  Info21 [ Суббота, 29 Ноябрь, 2014 09:36 ]
Заголовок сообщения:  Re: lock-free A2

Kemet писал(а):
это позволяет предположить, что вытесняющая многозадачность никуда не делась
Можно предположить off hand, что осталась не столько полноценная вытесняющая многозадачность, сколько некие следы её, из которых полноценную не восстановить, но и без них трудно, и которые при этом не гробят верифицируемость.
В таком духе.

Автор:  Дмитрий Дагаев [ Понедельник, 01 Декабрь, 2014 10:34 ]
Заголовок сообщения:  Re: lock-free A2

Модификатор UNCOOPERATIVE сообщает компилятору, что не надо ставить точки передачи управления Activities.Switch.
Код:
(** Performs a cooperative task switch by suspending the execution of the current activity and resuming the execution of any other activity that is ready to continue. *)
(** This procedure is called by the compiler whenever it detects that the time quantum of the current activity has expired. *)
PROCEDURE Switch-;


Info21 писал(а):
не столько полноценная вытесняющая многозадачность, сколько некие следы её

Разработчик утверждает, что ядро Interrupt-free, т.е. не использует вытесняющую многозадачность.
Но драйверы сидят на прерываниях
Код:
                PROCEDURE &Init*;
                BEGIN
                        last.ch := 0X; (*last.key := 0X;*) last.flags := {0..31};
                        Objects.InstallHandler(SELF.HandleInterrupt, Machine.IRQ0+1)
                END Init;

Автор:  Kemet [ Понедельник, 01 Декабрь, 2014 19:55 ]
Заголовок сообщения:  Re: lock-free A2

Собственно, как осуществилась революция можно понять по следующему коду(из компилятора):
Код:
      
PROCEDURE VisitWhileStatement(x: SyntaxTree.WhileStatement);
VAR start: Label; true,false: Label;
BEGIN
  IF Trace THEN TraceEnter("VisitWhileStatement") END;
  IF cooperativeSwitches THEN EmitCooperativeSwitch END;
  start := NewLabel();
  true := NewLabel();
  false := NewLabel();
  SetLabel(start);
  Condition(x.condition,true,false);
  SetLabel(true);
  StatementSequence(x.statements);
  IF cooperativeSwitches THEN EmitCooperativeSwitch END;
  BrL(start);
  SetLabel(false);
  IF Trace THEN TraceExit("VisitWhileStatement") END;
END VisitWhileStatement;

Т.е. в нужных местах компилятор генерирует код переключения. Переписывать приложения в кооперативном стиле не нужно, т.е. не требуется ручная передача управления и специальное проектирование приложений.
При этом, в рамках одного ядра действует кооперативная многозадачность, но ядер может быть не одно, естественно, все может распараллеливаться и, видимо, есть балансировка нагрузки на ядра.
Введено понятие виртуальных процессоров, на которые,видимо, и происходит планирование, затем они связываются с реальным процессором/ядром.
Есть {DISPOSABLE} переменные для которых введен механизм подсчета ссылок.
Ну это я так понял, могу ошибаться, документации то нет. Но может у кого-то есть?

Автор:  Илья Ермаков [ Вторник, 02 Декабрь, 2014 20:04 ]
Заголовок сообщения:  Re: lock-free A2

Вот именно поэтому когда-то Active BlackBox был заморожен ))
Мы ещё тогда пошли другим путем...

Правда, утряслось в окончательную элегантную модель (имеющей подобие с A2 lock-free), только в этом году - и немного обсуждали это на прошедшей осенней конференции у Info21.

Но у нас нет компиляторной поддержки. Интересно, стоит ли о ней думать - не даёт ли это каких-то подводных камней (типа приличного замедления каждого WHILE... что придётся делать флаг WHILE [nonswitchable] для каких-то нагруженных вычислительных фрагментов).

А швейцарские коллеги с переключением контекстов на уровне компилятора игрались ещё в Composita. Вообще, не буду утверждать наверняка, но есть подозрение, что там эта модель и была у них опробована и просто пересажена в A2.

Автор:  Дмитрий Дагаев [ Среда, 03 Декабрь, 2014 12:21 ]
Заголовок сообщения:  Re: lock-free A2

Илья Ермаков писал(а):
Интересно, стоит ли о ней думать - не даёт ли это каких-то подводных камней

Не надо переключать контекст при присвоении разделяемых данных. В A2 есть EXCLUSIVE. Компилятор ББ про это не знает, будет вставлять автоматически куда угодно.
Ну, я вставляю Co.Yield руками, куда требуется, не так их и много.

Автор:  Илья Ермаков [ Среда, 03 Декабрь, 2014 15:43 ]
Заголовок сообщения:  Re: lock-free A2

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

Так что, баш на баш: или нужно явно ограничивать неделимые блоки, либо явно расставлять переключения (у нас Tasks.Pass :) ).

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/