The fetch key {(p2,fetch)} has a curious status.
It was, however, somewhat of a trap -- one might hastily think that a fetch key to a tree of nodes connected by node keys provided read-only access to the slots in the tree. Of course node keys in the first designated node could be gotten by the fetch key holder, whence he could modify the rest of the tree.
Worse, section (p2,fetch) once provided for the transformation of a fetch key into a meter key. This increases the authority of the node by allowing counters in the node to be changed. We have prohibited changing fetch keys into meter or segment keys.
This could be done by introducing some sort of memory key that allowed fetching memory keys from the designated node and restricting the memory access rights in the operation.
Implemented changes for fetch keys:
Fetch keys are not able to produce meter and segment keys.
This section is a {coordinated} accretion of ideas to fix the fetch key problem {(p1,fetch-fault)} and at the same time provide for efficient signal diodes between worlds.
We would like to invent a new kind of key that could be held in world A to a node in world B such that the key did not provide for signals from world A to world B. Possible definitions of the idea of a Diode:
The sense key is to support the reading of information in world B in such a way as not to disturb world B.
allow the sense key holder to make a weakened copy of a key from the designated node.
Similarly I propose that the following transformations be performed on the copies of keys made for the holder from the designated node. This transformation is called the (_sense transformation).
Segment key -- Same key but with no-call and read-only bits on
Page key -- Read only page key to the same page
Data or Miscellaneous key -- Same key
Others -- DK(0) {Sorry about that!}
All keys that designate pages and nodes of TS are in nodes of TS and all keys in TS that designate nodes and pages not in TS are sensory {(p2,sensory)} keys.
The agency responsible for the key to the node being a sense key rather than a node key is concerned about just such observations {or at least that no report be made to inappropriate places}.
This problem was unilaterally decided in favor of the segment holder.
To strengthen the analogy we might well call the segment with an active keeper a synthetic segment. The no-call bit thwarts the keeper's strategies as the sense key thwarts the synthetic node maker, in both cases by ruining the function.
But who is the kernel to trust?
You can't really call a domain without changing it at least momentarily. {Its PSW will be temporarily different.} Even this is too much. Proving that domain will go back to the same state is difficult and insufficient {and is likely to preclude the original use of the synthetic node}.
It can be argued that computers are built of physical things so that it is ultimately impossible to avoid the influence of the observer. For instance a memory bank that is cycling to fetch a word for a top secret user is unavailable to the secret user. Nonetheless I think that it is practical to hide the fetch from the other users.
The connection here is that the procedure call seems always to affect {change the state of} the callee as well as the caller. The memory reference or sense key fetch, on the other hand, affects the actor without affecting the object.
While it is true that you call the sense key, the fact that the key is discreet depends on the fact that the key is implemented in the kernel.
While it may be true that some domains are the same after a call as before a call, this cannot be established as a consequence of the capabilities they hold.
Perhaps this dilemma can be solved well enough by limiting sense keys as we do domain-tools.
A user of PL/I will want to use a binder {which holds the PL/I library} produced by the PL/I expert.
The user will need to add some secret code to the binder. The user must trust the entire logic of the binder to keep this secret from the PL/I expert in the current architecture. Introducing sense keys and modifying some of the creators {including virtual copy makers} means that the implementer of the binder and the PL/I expert need not be trusted to keep the secrets.
While it may be pointed out that these two must be trusted for the correct function of the user's application, this is less critical in some circumstances {DOD, etc.}.
Gnosis provides nearly enough tools to build virtual machines; but 2K pages and storage keys are features of the hardware that are denied the Gnosis programmer so that virtual machines that he can construct will lack those features.
Since this program would run in a domain it would be at a performance disadvantage to CP.
We would have to provide more direct access to storage and PSW keys. The kernel could perhaps provide access to VMA. This would provide a bigger relative advantage to Gnosis's virtual machines that to CP's virtual machines. That is to say it would decrease the performance disadvantage that CP holds over the program in Gnosis.
See (sie).
A black key designates a node. It responds to the alleged key type call with a code to identify itself as a black key. All other order codes provide a return code of 0.
Order codes 16 thru 31 cause a key to be stored in the corresponding slot of the designated node. The key that is stored is a weakened form of the key passed by the black key holder. The weakening is the same as the that performed by the sense key upon fetching a key.
Order codes 0 thru 15 fetch a key from the designated node but again transformed as follows:
Node keys are transformed into black keys to the same node. All other keys are transformed into black keys to a constant {garbage} node to whom no one holds keys other than black keys.
Black keys outside a discreet object to objects in the object are allowed.
In Gnosis we typically call the object in order to operate on the object. We select the operation by the order-code that we send to the object. This has the disadvantage that we cannot substitute one transformation for another {in a code-independent manner} without substituting the objects. This doesn't seem too bad.
When we want to create operators that operate on two objects we must resort to something a little like Hydra; we call one of the objects and pass the other object as a parameter. {We hand one operand to the other.} The asymmetry is the only thing that bothers me here.
In the case of segments and their segment keepers we have a dilemma. There will be a growing class of segment keepers and a growing class of conventional segment operations. It seems clear that there is no general way to make all combinations of operations and segment keepers work in an integrated way.
In the Hydra system the problem manifests itself when an old operator gets a new-style object. In the Gnosis system the problem shows up when a newly-defined operation {an extension of old conventions} is applied to a segment with an old segment keeper.
A proposed solution in the Gnosis case is to have a "current conventional segment operations" key that leads to a general program that knows all of the new operations on segments from the outside {given only a segment key}. I am not comfortable with this yet.
The first version of the problem is that parameter pages must be real. This interferes with the production of synthetic pages.
The second version is that parameter strings must not be at virtual addresses which require the service of a segment keeper.
The root of the justification of these kernel restrictions is that returning from prompt public services must not be delayed by the running of a segment keeper in response to storing into the parameter string.
One of the suggestions has been to put a {real} page key in the domain root to accept the argument on those occasions that the parameter string does exist in real pages.
This just moves the problem once more. The real page key is still required.
These features replace older features required by the current Gnosis kernel.
They may be necessary to run software written to use the new features.
We list some of the features that might bear on the external specifications of the Gnosis kernel.
Some other new features apply to the interface between the Gnosis kernel and the hardware.
31 bit real addressing
Channel queuing and automatic path selection
Multi-processing
Some delicate code must be written and most modules must be changed.
In addition we must code the actions triggered when a locked lock is met. When a domain acts to modify a domain running on another processor we must somehow arrange for the action to be deferred until the object domain is not running and to hasten its not running.
The net effect is that 2**47 bytes of storage can be addressed without going to privileged code (except, of course, for page faults).
Performance
IBM seems to intend that address space numbers be global -- the hardware encourages but does not enforce this.
The tables that define the meaning of the address space numbers are two level tables much like segment and page tables. The same sort of logic that provides for sharing of segment and pages tables can be used to share the address space tables.
The PC command is deficient, in our view, because it calls another program in such a way as to grant all authority of the caller to the called program. This is rarely what is wanted in Gnosis. Another fundamental flaw is that there is no switching of control register 14 in this operation which means that caller and called must agree on the meaning of address space numbers. It is as if two domains had to share super address spaces to jump from one to the other.
IBM's architecture has established three different protection principles in one instruction:
You can load address space numbers if storage keys set values are compatible {anding of boolean vectors},
An access matrix.
It is as if IBM recognizes that there are several ideas about how to protect and it should be safe and use them all at once.
A variant type of domain is provided whose address segment slot is supplanted by a "system segment slot". This can be a memory key to a 2**48 byte segment. This segment is the concatenation of 2**16 segments each of 2**32 bytes which constitute the 2**16 address spaces referred to by the semantics of "ASNs" (Address Space Numbers).
In addition such domains hold the root of an additional structure that defines to the kernel the real tables required to support the DAS hardware features. This structure defines the DAS tables in much the same way that memory trees define segment and page tables.
The two ASNs (found in control registers 3&4) are also part of the new domain state.
Except for the fact that entry-table entries have a bit that puts the entered code in privileged mode, the DAS structure could be a tree with pages as leaves and those page serve, unmodified, as a real entry-table to drive the DAS hardware
I think that multiple domains can share a system segment and DAS structure with the semantics of MVS.
SIE is privileged - there are the following reasons for this that I can discover:
The address of the SCA is real too.
The storage keys are available to the program running under SIE. The rules are unclear.
The only significant part of the 370 XA architecture that it doesn't support is I/O. The SIE architecture assumes that the program that issues the SIE will be responsible for coping with I/O. The Gnosis virtual machine server could provide I/O by either mapping it into segments or using the current style device driver within the kernel.
Attempted violations to page protection in the virtual space of the program executing the SIE instructions are reported to that program. The program is thus in a position to sense the absence of one of its pages.
See (vm).
Implications:
Path control instead of Channel control.
Support DAS via secondary address segment.
Show LASP function to domains.
Show PC to domains.
Do virtual machine.