Block-Flow: identify required API operations

- decision how to handle the Extent storage (by forced-cast)
- decision to place the administrative record directly into the Extent

TODO not clear yet how to handle the implicit limitation for future deadlines
This commit is contained in:
Fischlurch 2023-07-05 15:10:34 +02:00
parent 022d40a8cf
commit 4ac995548a
6 changed files with 320 additions and 29 deletions

View file

@ -74,6 +74,7 @@ namespace gear {
,TIMESTOP ///< correspondingly signal end of some processing
,NOTIFY ///< push a message to another Activity
,PROBE ///< evaluate a condition and inhibit another target Activity
,GATE ///< probe window + count-down; activate next Activity, else re-schedule
,TICK ///< internal engine »heart beat« for internal maintenance hook(s)
};

View file

@ -52,7 +52,10 @@
#include "vault/common.hpp"
#include "vault/gear/activity.hpp"
#include "vault/mem/extent-family.hpp"
//#include "lib/symbol.hpp"
#include "lib/time/timevalue.hpp"
#include "lib/nocopy.hpp"
//#include "lib/util.hpp"
@ -64,7 +67,54 @@ namespace gear {
// using util::isnil;
// using std::string;
using lib::time::Time;
namespace {// hard-wired parametrisation
const size_t EPOCH_SIZ = 100;
const size_t ACTIVITIES_PER_FRAME = 10;
const size_t INITIAL_FRAMES = 50;
const size_t INITIAL_ALLOC = 1 + (INITIAL_FRAMES * ACTIVITIES_PER_FRAME) / EPOCH_SIZ;
using Allocator = mem::ExtentFamily<Activity, EPOCH_SIZ>;
}
/**
*
*/
class Epoch
: public Allocator::Extent
{
/// @warning will faked, not constructed
Epoch() = delete;
public:
struct EpochGate
: Activity
{
EpochGate()
: Activity{GATE}
{
UNIMPLEMENTED ("initialise allocation usage marker to zero");
}
// default copyable
};
static Epoch&
implantInto (Allocator::Extent& rawStorage)
{
Epoch& target = static_cast<Epoch&> (rawStorage);
new(&target[0]) EpochGate{};
return target;
}
EpochGate&
gate()
{
return static_cast<EpochGate&> ((*this)[0]);
}
};
/**
* Basic (abstracted) view of...
@ -75,11 +125,24 @@ namespace gear {
class BlockFlow
: util::NonCopyable
{
Allocator alloc_;
public:
explicit
BlockFlow (int woof)
BlockFlow()
: alloc_{INITIAL_ALLOC}
{ }
Activity&
createActivity (Activity::Verb verb, Time deadline)
{
UNIMPLEMENTED ("place new allocation");
}
void
discardBefore (Time deadline)
{
UNIMPLEMENTED ("traverse oldest Epochs and discard obsoleted");
}
};

View file

@ -71,32 +71,47 @@ namespace mem {
class ExtentFamily
: util::NonCopyable
{
using Storage = std::array<T,siz>;
public:
struct Extent
: std::unique_ptr<Storage>
: std::array<T,siz>
{
using Payload = T;
};
private:
struct Storage
: std::unique_ptr<char[]>
{
/**
* @note default ctor immediately allocates the full storage,
* but uses default initialisation rsp. no initialisation
* in case the payload type T is a POD
* but without initialisation since payload is `char`
*/
Extent()
: std::unique_ptr<Storage>{new Storage}
Storage()
: unique_ptr{new char[sizeof(Extent)]}
{ }
/** access projected Extent storage type
* @warning payload is uninitialised and dtors won't be invoked
*/
Extent&
access()
{
ENSURE (get() != nullptr);
return reinterpret_cast<Extent&> (*get());
}
};
using Extents = std::vector<Extent>;
using Extents = std::vector<Storage>;
Extents extents_;
size_t start_,after_;
public:
explicit
ExtentFamily(size_t initialCnt =0)
: extents_{initialCnt}
, start_{0}
, after_{initialCnt}
, start_{0} // Extents allocated yet marked unused
, after_{0}
{ }
void

View file

@ -26,6 +26,7 @@
#include "lib/test/run.hpp"
#include "lib/test/test-helper.hpp"
#include "vault/gear/block-flow.hpp"
//#include "lib/time/timevalue.hpp"
//#include "lib/format-cout.hpp"
@ -36,10 +37,11 @@
using test::Test;
//using std::move;
//using util::isSameObject;
using lib::test::randTime;
namespace vault{
namespace mem {
namespace gear {
namespace test {
// using lib::time::FrameRate;
@ -72,6 +74,13 @@ namespace test {
void
simpleUsage()
{
BlockFlow bFlow;
Time deadline = randTime();
Activity tick = bFlow.createActivity(Activity::TICK, deadline);
///////////////////////////////////////////////////////////////////////////////OOO diagnostic function to check allocation
bFlow.discardBefore (deadline + Time{0,5});
///////////////////////////////////////////////////////////////////////////////OOO diagnostic function to check de-allocation
}
@ -99,4 +108,4 @@ namespace test {
}}} // namespace vault::mem::test
}}} // namespace vault::gear::test

View file

@ -6853,7 +6853,7 @@ At first sight the link between asset and clip-MO is a simple logical relation b
{{red{Note 1/2015}}} several aspects regarding the relation of clips and single/multichannel media are not yet settled. There is a preliminary implementation in the code base, but it is not sure yet how multichnnel media will actually be modelled. Currently, we tend to treat the channel multiplicity rather as a property of the involved media, i.e we have //one// clip object.</pre>
</div>
<div title="RenderActivity" creator="Ichthyostega" modifier="Ichthyostega" created="202304140145" modified="202306252308" tags="Rendering spec draft" changecount="4">
<div title="RenderActivity" creator="Ichthyostega" modifier="Ichthyostega" created="202304140145" modified="202307042331" tags="Rendering spec draft" changecount="5">
<pre>//Render Activities define the execution language of the render engine.//
The [[Scheduler]] maintains the ability to perform these Activities, in a time-bound fashion, observing dependency relations; activities allow for notification of completed work, tracking of dependencies, timing measurements, re-scheduling of other activities -- and last but not least the dispatch of actual [[render jobs|RenderJob]]. Activities are what is actually enqueued with priority in the scheduler implementation, they are planned for a »µ-tick slot«, activated once when the activation time is reached, and then forgotten. Each Activity is a //verb//, but can be inhibited by conditions and carry operation object data. Formally, activating an Activity equates to a predication, and the subject of that utterance is »the render process«.
@ -6871,6 +6871,8 @@ The [[Scheduler]] maintains the ability to perform these Activities, in a time-b
:push a message to another Activity or process record
;probe
:invoke a closure within engine context; inhibit another target Activity, depending on the result.
;gate
:probe a launch window [start…deadline[ and check a count-down latch ⟹activate next Activity | else re-schedule @self into the future
;tick
:internal engine »heart beat« -- invoke internal maintenance hook(s)
</pre>

View file

@ -77761,7 +77761,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</body>
</html></richcontent>
</node>
<node CREATED="1684980900581" ID="ID_1090845009" MODIFIED="1684980927235" TEXT="depend">
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1684980900581" ID="ID_1090845009" MODIFIED="1688513151731" TEXT="depend">
<richcontent TYPE="NOTE"><html>
<head>
@ -77772,6 +77772,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</p>
</body>
</html></richcontent>
<icon BUILTIN="help"/>
</node>
<node CREATED="1684980900583" ID="ID_896772403" MODIFIED="1687733911963" TEXT="timestart">
<richcontent TYPE="NOTE"><html>
@ -77809,7 +77810,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</body>
</html></richcontent>
</node>
<node CREATED="1684980900587" ID="ID_1255388864" MODIFIED="1687734557301" TEXT="probe">
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1684980900587" ID="ID_1255388864" MODIFIED="1688513151732" TEXT="probe">
<richcontent TYPE="NOTE"><html>
<head>
@ -77820,6 +77821,19 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</p>
</body>
</html></richcontent>
<icon BUILTIN="help"/>
</node>
<node CREATED="1688513156754" ID="ID_993428178" LINK="#ID_1088341634" MODIFIED="1688513607197" TEXT="gate">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
probe a launch window from start to deadline, and additionally check a count-down latch; on success activate the next Activity, else re-schedule @self into the future
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1684980900588" ID="ID_1729066993" MODIFIED="1684980976835" TEXT="tick">
<richcontent TYPE="NOTE"><html>
@ -78244,7 +78258,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
<node CREATED="1687994762046" ID="ID_1088341634" MODIFIED="1687994767082" TEXT="Gate-Check">
<node CREATED="1687994769427" ID="ID_490498751" MODIFIED="1687994831595" TEXT="pr&#xfc;ft ein countdown-Latch"/>
<node CREATED="1687994769427" ID="ID_490498751" MODIFIED="1688513655010" TEXT="pr&#xfc;ft countdown-Latch und Start-Zeit"/>
<node CREATED="1687994866264" ID="ID_1786817486" MODIFIED="1687994891144" TEXT="falls &gt; 0, re-schedule &#x27f6; future"/>
<node CREATED="1687995197271" ID="ID_1651228511" MODIFIED="1687995814074" TEXT="falls &#x21b7; Deadline &#x27f6; &#xd83d;&#xdc80;"/>
</node>
@ -78289,11 +78303,41 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1688336218233" HGAP="-55" ID="ID_323523273" MODIFIED="1688337255857" TEXT="testgetriebener Aufbau" VSHIFT="34">
<linktarget COLOR="#fe3a58" DESTINATION="ID_323523273" ENDARROW="Default" ENDINCLINATION="-167;17;" ID="Arrow_ID_589297136" SOURCE="ID_1968961000" STARTARROW="None" STARTINCLINATION="-139;-149;"/>
<icon BUILTIN="pencil"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1688336601091" ID="ID_1454374119" MODIFIED="1688337246568" TEXT="BlockFlow_test">
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1688336601091" ID="ID_1454374119" MODIFIED="1688514802412" TEXT="BlockFlow_test">
<linktarget COLOR="#eb4070" DESTINATION="ID_1454374119" ENDARROW="Default" ENDINCLINATION="-596;80;" ID="Arrow_ID_208594716" SOURCE="ID_836380061" STARTARROW="None" STARTINCLINATION="-331;-16;"/>
<icon BUILTIN="flag-yellow"/>
<node CREATED="1688336974018" ID="ID_1806920884" MODIFIED="1688337018608" TEXT="&#xbb;Epoch&#xab; based memory layout">
<icon BUILTIN="info"/>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1688562176925" ID="ID_1158793893" MODIFIED="1688562236828" TEXT="simpleUsage">
<icon BUILTIN="pencil"/>
<node COLOR="#338800" CREATED="1688562183720" ID="ID_112254409" MODIFIED="1688562193713" TEXT="BlockFlow erzeugen">
<icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1688562194185" ID="ID_1955464710" MODIFIED="1688562203569" TEXT="eine tick-Activity platzieren">
<icon BUILTIN="pencil"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1688562204824" ID="ID_101196546" MODIFIED="1688562218495" TEXT="Diagnose: Allokation erfolgte">
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1688562219790" ID="ID_1157838911" MODIFIED="1688562224348" TEXT="aufr&#xe4;umen">
<icon BUILTIN="pencil"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1688562225717" ID="ID_1423239902" MODIFIED="1688562233397" TEXT="Diagnose: Allocation wech">
<icon BUILTIN="flag-yellow"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1688514837919" ID="ID_23367137" MODIFIED="1688514850742" TEXT="API-Operationen">
<icon BUILTIN="flag-yellow"/>
<node CREATED="1688514860052" ID="ID_1887728481" MODIFIED="1688514863244" TEXT="Action allozieren"/>
<node CREATED="1688514904095" ID="ID_819616913" MODIFIED="1688514909523" TEXT="sp&#xe4;teste Deadline"/>
<node CREATED="1688514944443" ID="ID_341749929" MODIFIED="1688514974588" TEXT="Aufr&#xe4;umen vor Zeit"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1688515088451" ID="ID_254117288" MODIFIED="1688515092923" TEXT="Epochen-Operationen">
<icon BUILTIN="flag-yellow"/>
<node CREATED="1688515094346" ID="ID_1027706144" MODIFIED="1688515110180" TEXT="Epoche finden oder erstellen"/>
<node CREATED="1688515126831" ID="ID_1528998679" MODIFIED="1688515184828" TEXT="Epoche aktiv oder obsolet"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1688394889309" ID="ID_1132827905" MODIFIED="1688398856923" TEXT="ExtentFamily_test">
<linktarget COLOR="#eb4070" DESTINATION="ID_1132827905" ENDARROW="Default" ENDINCLINATION="-593;73;" ID="Arrow_ID_709934622" SOURCE="ID_504623704" STARTARROW="None" STARTINCLINATION="-214;-18;"/>
@ -78519,14 +78563,14 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</body>
</html></richcontent>
</node>
<node CREATED="1688258639519" ID="ID_253828146" MODIFIED="1688337591520" TEXT="Async-IO dagegen braucht zwingend einen aktiv-Z&#xe4;hler">
<node CREATED="1688258639519" ID="ID_253828146" MODIFIED="1688512561410" TEXT="Async-IO dagegen braucht zwingend einen aktiv-Z&#xe4;hler">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
Es handelt sich hierbei um ein <b>grunds&#228;tzliches Problem</b>. Es liegt in der Natur von IO, da&#223; eine solche Operation eine unbestimmte Zeit dauern kann; und diese Zeit kann ganz erheblich sein, wenn das IO-Subsystem &#252;berlastet wird. Es gibt keine M&#246;glichkeit, eine IO-Operation abzubrechen; vielmehr kommen <i>die Daten irgendwann an, und landen dann in dem daf&#252;r vorgesehenen Buffer. </i>Und solange das nicht passiert ist, mu&#223; der Buffer und der Callback im Speicher bereitliegen. Ich sehe keine andere M&#246;glichkeit, als f&#252;r jede Epoche einen Z&#228;hler aller schwebenden IO-Operationen mitzuf&#252;hren. Mithilfe der &#187;post&#171;, &#187;notify&#171; und &#187;guard&#171;-Activities lie&#223;e sich das jedoch single-threaded verwirklichen &#8212; Synchronisations-Effekte treten daher nur f&#252;r Threads, die grade eine IO-Operation abgeschlossen haben, sowie den Thread, der das GroomingToken h&#228;lt
Es handelt sich hierbei um ein <b>grunds&#228;tzliches Problem</b>. Es liegt in der Natur von IO, da&#223; eine solche Operation eine unbestimmte Zeit dauern kann; und diese Zeit kann ganz erheblich sein, wenn das IO-Subsystem &#252;berlastet wird. Es gibt keine M&#246;glichkeit, eine IO-Operation abzubrechen; vielmehr kommen <i>die Daten irgendwann an, und landen dann in dem daf&#252;r vorgesehenen Buffer. </i>Und solange das nicht passiert ist, mu&#223; der Buffer und der Callback im Speicher bereitliegen. Ich sehe keine andere M&#246;glichkeit, als f&#252;r jede Epoche einen Z&#228;hler aller schwebenden IO-Operationen mitzuf&#252;hren. Mithilfe der &#187;post&#171;, &#187;notify&#171; und &#187;gate&#171;-Activities lie&#223;e sich das jedoch single-threaded verwirklichen &#8212; Synchronisations-Effekte treten daher nur f&#252;r Threads, die grade eine IO-Operation abgeschlossen haben, sowie den Thread, der das GroomingToken h&#228;lt
</p>
</body>
</html></richcontent>
@ -78590,7 +78634,24 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1688435528483" ID="ID_8576020" MODIFIED="1688435554882" TEXT="Entscheidung: es wird ein Payload-Typ f&#xfc;r den Inhalt der Extents festgelegt">
<icon BUILTIN="yes"/>
</node>
<node COLOR="#338800" CREATED="1688432504244" ID="ID_1241185228" MODIFIED="1688434715080" TEXT="Extent (Storage)">
<node COLOR="#338800" CREATED="1688556402446" ID="ID_811991749" MODIFIED="1688556460629" TEXT="Extent (Typ-Definition f&#xfc;r den client)">
<icon BUILTIN="button_ok"/>
<node CREATED="1688556417133" ID="ID_619844510" MODIFIED="1688556419712" TEXT="ein array&lt;T,siz&gt;"/>
<node CREATED="1688556421587" ID="ID_1207535788" MODIFIED="1688556445023">
<richcontent TYPE="NODE"><html>
<head>
</head>
<body>
<p>
nested Typedef <font face="Monospaced" color="#2727b8">Payload</font>
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1688556449759" ID="ID_389613064" MODIFIED="1688556458098" TEXT="rein virtuell (per cast erzeugt)"/>
</node>
<node COLOR="#338800" CREATED="1688432504244" ID="ID_1241185228" MODIFIED="1688556470257" TEXT="Storage (privat)">
<icon BUILTIN="button_ok"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1688432516234" ID="ID_615463720" MODIFIED="1688432527931" TEXT="Anfroderung: keine Initialisierung">
<icon BUILTIN="messagebox_warning"/>
@ -78604,29 +78665,32 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="idea"/>
</node>
<node CREATED="1688432677832" ID="ID_409669482" MODIFIED="1688432698306" TEXT="Syntax: kein Initialiser, und ein impliziter default-ctor"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1688437935976" ID="ID_518652809" MODIFIED="1688438261107" TEXT="Entscheidung: vom Payload-Typ abh&#xe4;ngig machen">
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1688437935976" ID="ID_518652809" MODIFIED="1688556367223" TEXT="Entscheidung: forced-cast von char[]">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
das hei&#223;t: es findet zwar eine default-Initialisierung statt, aber f&#252;r einen Objekt-Typ bedeutet das <i>value-Initialisierung der Member.</i>&#160;Nur falls der Payload-Typ ein POD ist, findet keine Initialisierung statt &#8212; und ich hoffe, da&#223; der Optimizer das checkt
das hei&#223;t: es findet zwar eine default-Initialisierung statt, aber f&#252;r einen Objekt-Typ mit implizitem default-ctor bedeutet das <i>default-Initialisierung der Member.</i>&#160;Nach meinem Verst&#228;ndnis hat std::array einen impliziten default-ctor und als einziges Member ein Array, und daf&#252;r wiederum erfolgt dann <i>default-Initialisierung jedes einzelnen Elements. Und da das Element ein base-value (char) ist, erfolgt &#252;berhaupt keine Initialisierung.</i>
</p>
</body>
</html></richcontent>
<linktarget COLOR="#b85283" DESTINATION="ID_518652809" ENDARROW="Default" ENDINCLINATION="587;31;" ID="Arrow_ID_463215029" SOURCE="ID_1531653683" STARTARROW="None" STARTINCLINATION="897;-29;"/>
<linktarget COLOR="#b85283" DESTINATION="ID_518652809" ENDARROW="Default" ENDINCLINATION="594;42;" ID="Arrow_ID_463215029" SOURCE="ID_1531653683" STARTARROW="None" STARTINCLINATION="897;-29;"/>
<icon BUILTIN="yes"/>
</node>
</node>
<node CREATED="1688432712542" ID="ID_849183361" MODIFIED="1688435612692" TEXT="Basis std::unique_ptr&lt;array&lt;T,siz&gt;&gt;">
<node CREATED="1688432712542" ID="ID_849183361" MODIFIED="1688556395243" TEXT="Basis std::unique_ptr&lt;char[]&gt;">
<icon BUILTIN="idea"/>
</node>
<node COLOR="#338800" CREATED="1688433893319" ID="ID_666220506" MODIFIED="1688434720661" TEXT="default-ctor macht sofort die Allokation">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1688556494841" ID="ID_293642055" MODIFIED="1688556513015" TEXT="access() &#x27f6; cast auf Extent">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1688432864248" ID="ID_1390525681" MODIFIED="1688435636832" TEXT="Extents gehalten als vector&lt;unique_ptr&lt;...&gt;&gt;">
</node>
<node COLOR="#338800" CREATED="1688432864248" ID="ID_1390525681" MODIFIED="1688556491574" TEXT="Extents gehalten als vector&lt;Storage&gt; (also uniqe_ptr)">
<icon BUILTIN="button_ok"/>
</node>
</node>
@ -78634,6 +78698,25 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1688437541022" ID="ID_1493417420" MODIFIED="1688437566889" TEXT="kann man &#xfc;berhaupt iterieren ohne einen TransformIterator zu verwenden?">
<icon BUILTIN="help"/>
<node CREATED="1688509701330" ID="ID_1512622255" MODIFIED="1688509710564" TEXT="ja: ganz banal">
<icon BUILTIN="ksmiletris"/>
</node>
<node CREATED="1688509711550" ID="ID_868274901" MODIFIED="1688509754176" TEXT="mit eine IterAdapter">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
genau f&#252;r sowas war der gedacht &#9787;
</p>
</body>
</html></richcontent>
</node>
</node>
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1688509796132" ID="ID_361634809" MODIFIED="1688509960392" TEXT="fragt sich blo&#xdf;: wird &#xfc;berhaupt ein Iterator gebraucht?">
<arrowlink COLOR="#7e3acf" DESTINATION="ID_836380061" ENDARROW="Default" ENDINCLINATION="47;-174;" ID="Arrow_ID_166794449" STARTARROW="None" STARTINCLINATION="-280;14;"/>
<icon BUILTIN="hourglass"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1688398893220" ID="ID_675575195" MODIFIED="1688398901316" TEXT="belegen / freigeben">
@ -78653,6 +78736,124 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1688509829145" HGAP="36" ID="ID_836380061" MODIFIED="1688514802412" TEXT="ben&#xf6;tigte high-Level-Operationen identifizieren">
<arrowlink COLOR="#eb4070" DESTINATION="ID_1454374119" ENDARROW="Default" ENDINCLINATION="-596;80;" ID="Arrow_ID_208594716" STARTARROW="None" STARTINCLINATION="-331;-16;"/>
<linktarget COLOR="#7e3acf" DESTINATION="ID_836380061" ENDARROW="Default" ENDINCLINATION="47;-174;" ID="Arrow_ID_166794449" SOURCE="ID_361634809" STARTARROW="None" STARTINCLINATION="-280;14;"/>
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1688510160724" ID="ID_915708936" MODIFIED="1688510165585" TEXT="Action allozieren">
<icon BUILTIN="flag-yellow"/>
<node CREATED="1688510169558" ID="ID_435186748" MODIFIED="1688510256314" TEXT="werden grunds&#xe4;tzlich einzeln behandelt">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
...selbst wenn es Zusammenh&#228;nge gibt &#8212; notfalls wird die Aktion in die n&#228;chst nachfolgende Epoche geschoben (welche stets l&#228;nger lebt)
</p>
</body>
</html></richcontent>
<icon BUILTIN="yes"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1688510299817" ID="ID_1750265058" MODIFIED="1688510436943" TEXT="ben&#xf6;tigt: Deadline-Info"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1688510405600" ID="ID_974318886" MODIFIED="1688510436943" TEXT="&#x27fc; liefert: Slot f&#xfc;r Placement-New">
<node CREATED="1688511764027" ID="ID_494303010" MODIFIED="1688511780582" TEXT="den fr&#xfc;hest m&#xf6;glichen der diese Deadline unterst&#xfc;tzt"/>
<node CREATED="1688511807398" ID="ID_160731598" MODIFIED="1688511817680" TEXT="erzeugt implizit alle Epochen dazwischen"/>
<node CREATED="1688511820828" ID="ID_1443383285" MODIFIED="1688511836189" TEXT="kann scheitern wenn zu weit in der Zukunft &#x27fc; nullptr"/>
</node>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1688559559278" ID="ID_27532065" MODIFIED="1688560429832" TEXT="unklar: wenn zu weit in der Zukunft">
<arrowlink COLOR="#fd1a6e" DESTINATION="ID_1315709817" ENDARROW="Default" ENDINCLINATION="21;-31;" ID="Arrow_ID_1483237280" STARTARROW="None" STARTINCLINATION="-202;16;"/>
<icon BUILTIN="flag-pink"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1688560442660" ID="ID_143148462" MODIFIED="1688560448084" TEXT="Activity placement-New">
<icon BUILTIN="flag-yellow"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1688511891911" ID="ID_604517829" MODIFIED="1688511905225" TEXT="sp&#xe4;teste derzeit unterst&#xfc;tzte Deadline">
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1688512195210" ID="ID_455793213" MODIFIED="1688512207091" TEXT="Aufr&#xe4;umen vor gegebener Zeit">
<icon BUILTIN="flag-yellow"/>
<node CREATED="1688512231159" ID="ID_960172052" MODIFIED="1688512246837" TEXT="gegeben: eine aktuell behandelte (Start)Zeit"/>
<node CREATED="1688512252777" ID="ID_831223782" MODIFIED="1688512279796">
<richcontent TYPE="NODE"><html>
<head>
</head>
<body>
<p>
jede Deadline <i>vor</i>&#160;dieser Zeit ist damit <i>grunds&#228;tzlich obsolet</i>
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1688512304121" ID="ID_304428860" MODIFIED="1688513681351" TEXT="die Gates aller Epochen durchpr&#xfc;fen">
<node CREATED="1688513728333" ID="ID_276339587" MODIFIED="1688513740995" TEXT="Gate sitzt im ersten Slot einer Epoche"/>
<node CREATED="1688513742667" ID="ID_849223562" LINK="#ID_1088341634" MODIFIED="1688513840525" TEXT="Gate dient in diesem Fall nur als komplexe Bedingung"/>
</node>
<node CREATED="1688513876713" ID="ID_1973420609" MODIFIED="1688513883828" TEXT="obsolete Epochen verwerfen"/>
<node CREATED="1688513885200" ID="ID_47111804" MODIFIED="1688513903849" TEXT="auf der ersten nicht-obsoleten Epoche stehen bleiben"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1688515962746" HGAP="25" ID="ID_468510160" MODIFIED="1688559368790" TEXT="Strukturen" VSHIFT="4">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1688515974697" ID="ID_1054833524" MODIFIED="1688516009303" TEXT="h&#xe4;lt eine ExtentFamily&lt;Action,siz&gt;">
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1688555107931" ID="ID_285024973" MODIFIED="1688555140175" TEXT="Datentyp: Epoch">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1688555141913" ID="ID_406773800" MODIFIED="1688555169035" TEXT="als Subtyp der Extent-Storage">
<icon BUILTIN="flag-yellow"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1688516187452" ID="ID_843039397" MODIFIED="1688516195292" TEXT="Zusatz-Infos zu verwalten">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1688516199288" ID="ID_1824919687" MODIFIED="1688516212258" TEXT="Epochen-Deadline">
<icon BUILTIN="flag-yellow"/>
<node CREATED="1688516220648" ID="ID_1169377280" MODIFIED="1688516237353" TEXT="steht in einem Gate im 1.Slot"/>
<node CREATED="1688553471328" ID="ID_262514506" MODIFIED="1688553490999" TEXT="daf&#xfc;r eigenen Sub-Typ anliegen: EpochGate"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1688554963598" ID="ID_708490850" MODIFIED="1688554971708" TEXT="F&#xfc;llstand der Epoche">
<icon BUILTIN="flag-yellow"/>
<node CREATED="1688554972581" ID="ID_278561305" MODIFIED="1688554979689" TEXT="wird auch im EpochGate abgelegt"/>
</node>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1688555006558" ID="ID_11354677" MODIFIED="1688555057586" TEXT="Beschlu&#xdf;: KISS">
<icon BUILTIN="yes"/>
<node CREATED="1688555021190" ID="ID_1624305559" MODIFIED="1688555026714" TEXT="keine logarithmische Suche"/>
<node CREATED="1688555027213" ID="ID_1516151909" MODIFIED="1688555031529" TEXT="kein separater Index"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1688555032021" ID="ID_1157610750" MODIFIED="1688555050479" TEXT="die EpochGate als LInked-List verwenden">
<icon BUILTIN="flag-yellow"/>
</node>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1688559356693" HGAP="9" ID="ID_1823374976" MODIFIED="1688559375797" TEXT="Grenzf&#xe4;lle" VSHIFT="7">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1688559379394" ID="ID_1315709817" MODIFIED="1688560429832" TEXT="zu weit in der Zukunft">
<linktarget COLOR="#fd1a6e" DESTINATION="ID_1315709817" ENDARROW="Default" ENDINCLINATION="21;-31;" ID="Arrow_ID_1483237280" SOURCE="ID_27532065" STARTARROW="None" STARTINCLINATION="-202;16;"/>
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1688559400839" ID="ID_980233005" MODIFIED="1688559420337" TEXT="problematisch: es kann nicht wirklich alloziert werden"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1688559421309" ID="ID_498818717" MODIFIED="1688559505993">
<richcontent TYPE="NODE"><html>
<head>
</head>
<body>
<p style="text-align: center">
zwar wird ein POST geplant,
</p>
<p style="text-align: center">
aber die angeh&#228;ngten Activities werden
</p>
<p style="text-align: center">
daf&#252;r sp&#228;ter kopiert (Addresse &#228;ndert sich)
</p>
</body>
</html></richcontent>
<icon BUILTIN="clanbomber"/>
</node>
</node>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1681347244544" ID="ID_444443795" MODIFIED="1681347486789" TEXT="Basis: Operational Control">
@ -79412,7 +79613,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1688438184671" ID="ID_1971690047" MODIFIED="1688438194457" TEXT="Pr&#xfc;fen / messen">
<icon BUILTIN="bell"/>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1688438197846" ID="ID_1531653683" MODIFIED="1688438261107" TEXT="findet f&#xfc;r POD tats&#xe4;chlich keine value-Initialisierung der Storage statt?">
<arrowlink COLOR="#b85283" DESTINATION="ID_518652809" ENDARROW="Default" ENDINCLINATION="587;31;" ID="Arrow_ID_463215029" STARTARROW="None" STARTINCLINATION="897;-29;"/>
<arrowlink COLOR="#b85283" DESTINATION="ID_518652809" ENDARROW="Default" ENDINCLINATION="594;42;" ID="Arrow_ID_463215029" STARTARROW="None" STARTINCLINATION="897;-29;"/>
<icon BUILTIN="help"/>
</node>
</node>