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.

Reply via email to