stationeers.de Mod-Werkstatt · Dominik1199
EN Anmelden
  1. Start
  2. IC10-Akademie
  3. Tag 289

Tag 289 von 365 · Experte · Monat 10: Bits und Daten

Gemeinsamer Speicher

Mehrere Chips teilen einen Speicher: der Stack eines Gehäuses mit get und put, Schreibrechte über Adressbereiche und eine Sperre, die halbe Datensätze verhindert.

Lektion 20 Min. Woche 42

Das lernst du heute

  • Mehrere Chips, ein Speicher
  • Schreibrechte
  • Sperren

Drei Chips messen in drei Räumen, ein vierter zeigt alles auf einer Tafel. Statt dass jeder Messchip die Tafel selbst beschreibt, legen alle ihre Werte in einen gemeinsamen Speicher. Der Tafelchip liest nur dort. Das ist sauber – solange sich niemand ins Gehege kommt.

Mehrere Chips, ein Speicher

Jedes IC-Gehäuse hat einen Stack mit 512 Plätzen. Andere Chips erreichen ihn mit get und put, wenn sie seine ReferenceId kennen:

lbn id GEHAEUSE HASH("Speicher") ReferenceId Average
put id 10 wert          # Adresse 10 beschreiben
get wert id 20          # Adresse 20 lesen

Ein leeres Gehäuse ohne eigene Aufgabe ist so ein großer, gemeinsamer Speicher. Für einzelne Werte reicht auch ein Logikspeicher (StructureLogicMemory) mit seinem Setting.

Schreibrechte

Die wichtigste Regel: Jeder Platz hat genau einen Schreiber. Lege die Adressen fest und schreib sie in jeden beteiligten Chip:

AdressenSchreiberInhalt
0alle, nur mit SperreSperre
10–19Chip AWerte Raum A
20–29Chip BWerte Raum B
30–39Chip CWerte Raum C

Schreiben zwei Chips auf denselben Platz, gewinnt der, der zuletzt dran war – und keiner merkt es.

Sperren

Gehören mehrere Werte zusammen, etwa Temperatur und Druck derselben Messung, darf niemand zwischendurch lesen. Eine Sperre regelt das: Wer schreiben will, trägt seine ReferenceId ein, prüft im nächsten Takt, ob sie noch drinsteht, schreibt und gibt mit 0 frei.

Warum erst im nächsten Takt prüfen? Sehen zwei Chips im selben Takt eine freie Sperre, tragen sich beide ein. Nur einer steht danach drin – der andere sieht beim Prüfen eine fremde Nummer und wartet.

lbn sperre SPEICHER HASH("Sperre") Setting Average
beq sperre ich schreiben    # Sperre ist unsere
bnez sperre start           # fremd: warten
sbn SPEICHER HASH("Sperre") Setting ich
j start                     # nächsten Takt prüfen
Achtung

Eine Sperre, die nie freigegeben wird, legt alle anderen lahm. Gib sie immer im selben Abschnitt frei, in dem du schreibst, und schreib dazwischen nichts, das einen Fehler auslösen kann.

Hinweis

In der Übung sind Sperre und Werte Logikspeicher, damit der Test sie beobachten kann. Im Spiel funktioniert dasselbe Muster mit get und put auf einem Gehäuse.

Schaubild

Der Stack mit Stapelzeiger Platz 0 10 Platz 1 20 Platz 2 30 Platz 3 Platz 4 sp = 3 nächster freier Platz push 40 pop r0 r0 = 30 zuletzt rein, zuerst raus
Jeder Chip schreibt nur in seinen Bereich. Wer mehrere Werte zusammen schreibt, nimmt vorher die Sperre.

Übung

Aufgabe

Dein Chip schreibt Temperatur und Druck des Sensors „Raum“ in die Speicher „TempA“ und „DruckA“ – aber nur mit der Sperre im Speicher „Sperre“:

  • Sperre 0: eigene ReferenceId eintragen, im nächsten Takt prüfen
  • Sperre ist die eigene: beide Werte schreiben, dann Sperre auf 0
  • Sperre fremd: nichts schreiben, Lampe „Warten“ an
  • fehlt der Speicher „Sperre“, wird nichts geschrieben

Hinweise

Hinweis 1

Die eigene Nummer steht schon in ich (l ich db ReferenceId).

Hinweis 2

Reihenfolge: bnan, beq sperre ich schreiben, Lampe setzen, bnez sperre start, Sperre nehmen.

Hinweis 3

Im Abschnitt schreiben: zwei Werte, dann sbn … Sperre … Setting 0.

Quiz

3 Fragen. Ab 60 % ist das Quiz bestanden – die Auswertung macht der Server.

Tag abschließen

  • Übung im Simulator bestanden
  • Quiz mit mindestens 60 % bestanden

Ohne Konto wird der Fortschritt nur in diesem Browser gespeichert.

Fehler in dieser Lektion melden

Zum Melden bitte anmelden. Anmelden

Esc
↑ ↓ wählenEnter öffnen/ öffnet die Suche überall