For those who want more backgound on the architecures that Paul is describing, I’d
recommend reading Henry M. Levy’s _Capability-Based Computer Systems_. The Burroughs B5000
shows up in in Ch.2 on early descriptor based architectures.
https://homes.cs.washington.edu/~levy/capabook/
—Milo
On Feb 20, 2025, at 5:04 PM, paul.kimpel--- via cctalk
<cctalk(a)classiccmp.org> wrote:
As I mentioned in my last reply to Paul Koning, that can't occur in the
Burroughs/Unisys stack architecture I was discussing earlier. Application code can only
access what it has created by pushing words onto the stack, and then only access those
stack frames that are in the lexicographical scope of the currently-executing procedure.
It can't access memory outside of that current scope, except through references and
descriptor words, which are protected by memory tags and managed only by the combination
of the hardware and OS.
Those systems do not have threads in the same way that most other systems do. We call
them sub-tasks or dependent asynchronous tasks. They each have their own stack, which is
linked back to the specific stack frame that initiated them (the so-called "critical
block"). Addressing within the sub-task is subject to the same scope rules as the
parent task, although that scope can extend across stacks into the parent's stack. If
the parent task exits a critical block for which there are active sub-tasks, the parent
and all of its children (and their children -- the whole tree of sub-tasks) is terminated
by the OS because the dependency chains have been broken. Applications are just not
allowed to mess with the structure of their stacks.