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@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.