feat(v4.0.0): step 6e -- a node removed at any step leaves the rest at rest; written up
test_host_mesh.c, 220 checks: three exchanges on the row of three -- text from the console for node 12 with what it prints and how it ended; node 11 SENDing node 12 text and waiting for its answer; a message node 12 has no way for and its NACK to node 10 -- are each played once for every engine step they take with node 11 removed at that step, and again with node 12: 17,642 removals at 64 bits. Every node left comes to rest asleep, blocked at no port and in no operation, and answers. What is typed is a word defined beforehand, so that the steps are the exchange's and not the dictionary being searched. Removed from the engine, nothing using them: v4_fabric_interrupt_error, a device's pending hook, v4_node_words_since_look, V4_ERROR_INTERRUPTED. MESH.md: 4.1's table has the addresses after the ports; 7a and 7b say what of them still holds; 7b.7's limit is closed; step 6e is written up. v4/README.md likewise. make -C v4 test and sanitize at both widths, hosted-check, lint. Three bare-metal boots with the typed session and a loop printing 400 numbers: logs/20261013-165124 (amd64), -165428 (aarch64), -165818 (riscv64). POST 538 of 538, word_count=317, dict_hash=0x0951d7e02e251554 on all six, and the three sessions are the same character for character. The boots were built with the working tree's uncommitted change to kernel/Makefile that adds the ISA to the kernel's version line; nothing else differs from this commit. The plan's final review is not done yet. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
ab96a9f2be
commit
06da5700bc
+17
-9
@@ -115,13 +115,9 @@ steps 8 and 9.
|
||||
**Finding the way** (`MESH.md` step 4) is built: a node has a table of
|
||||
which port leads toward which node (`ROUTE`, `DEFAULT-ROUTE`, `NO-ROUTES`),
|
||||
passes on a message that is not for it, and `SEND`s text to another node;
|
||||
`v4/tests/test_host_mesh.c` runs three StarForth nodes in a row. A node
|
||||
looks before it begins a message (`MESH.md` section 7a): it takes in what
|
||||
its neighbours are waiting to write to it, keeps those messages until it
|
||||
has nothing else to do, and writes only to a neighbour that is waiting to
|
||||
read -- or, of two neighbours, the one with the lower number may wait.
|
||||
`NEIGHBOUR ( node port -- )` tells a node who is on each port. A node with
|
||||
no room for one more message lets it go and counts it in `(LOST)`.
|
||||
`v4/tests/test_host_mesh.c` runs three StarForth nodes in a row.
|
||||
`NEIGHBOUR ( node port -- )` tells a node who is on each port. What a node
|
||||
cannot take or pass on it lets go and counts in `(LOST)`.
|
||||
|
||||
**Five nodes from nothing** (`MESH.md` step 5) is built and proven in the
|
||||
fabric under test: Hera asks whoever holds the fabric for a node
|
||||
@@ -141,8 +137,20 @@ sixteenth to pass it on, sends a NACK to whoever waits on it; `(REFUSED)`
|
||||
counts them. `AWAIT` ends in an error if the answer is not going to come:
|
||||
"Message refused", "Node gone", or "Interrupted" when a line is typed at
|
||||
the console. `n KILL` on Hera removes node n and tells every other node it
|
||||
is gone; a node believes that only from its centre. A stuck node can hold
|
||||
up its neighbours until it is killed: `MESH.md` 7b.7 says how.
|
||||
is gone; a node believes that only from its centre.
|
||||
|
||||
**Messages on the wire** (`MESH.md` 7d, step 6e). A node that is stuck
|
||||
holds up no other node. The fabric keeps a queue of whole messages each
|
||||
way on every wire (`v4/src/wire.c`, 1,024 cells), and a node asks it,
|
||||
through six addresses after its ports, to look at, take, move, drop or
|
||||
put a whole message: each is one engine step, all of it or none. A node
|
||||
holds nothing in transit. `SEND`, an answer, a NACK and a GONE go at once
|
||||
or are refused at once; only what a text prints waits for room, so that
|
||||
output is not lost. A node with nothing to do sleeps until a message
|
||||
comes. A node removed at any step of an exchange leaves the others at
|
||||
rest and answering (`v4/tests/test_host_mesh.c`). What it costs is in
|
||||
`MESH.md` 7d.6: a burst beyond what a wire holds is refused, and text for
|
||||
a node that is stuck fills its wire and is refused from then on.
|
||||
|
||||
**Blocks** (`MESH.md` step 6). The block words are the kernel's, as they
|
||||
are for a v3 VM: `BLOCK`, `BUFFER`, `UPDATE`, `SAVE-BUFFERS` and
|
||||
|
||||
Reference in New Issue
Block a user