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/ |