I describe Keykos here in a style which is seldom used to describe platforms.
The purpose of this note is more to focus on the style than to explore Keykos.
It is about Keykos because I understand Keykos.
The style chooses names for sorts of things which may be unconventional simply because there are no unambiguous conventional names for the things being described.
In this style we focus on what sorts of things point to what other sorts of things, just as a collection of control-block definitions define pointers to other sorts of control-blocks.
This style, so far, does not convey that some of these inter sort pointers discriminate the authority conveyed by the pointer.
In Keykos these differences limit the effects the the holder of the pointer can have on the designee of the pointer.
That is why these pointers are called capabilities, or briefly “keys” in Keykos.
For instance the keeper slot in the domain allows the misfortune of the domain to send a message describing the problem to some domain so that the code obeyed by the latter domain can decide what to do about the trouble.
- Segment (address space—defines meaning of addresses)
- C-list (an array of capabilities)
- Meter (authority to consume dynamic resources such as CPU)
- Keeper (who to notify when domain cannot obey instructions)
- Brand (A dynamic class concept)
- General Register Values
- PSW (PC and some status information)
- Hardware define debugging state
- points to pages and other typically smaller segments.
- Mutable array of 4K bytes
- Another meter plus limits mainly on CPU time.
- Process list
- list of domains
I think there is a one-to-one relation between a Unix process and an address space.
A thread is permanently attached to just one process.
A file opening is attached to a file and one or more processes.
A process knows an opening by an integer known as a “file descriptor”.
When the CPU cannot obey a program the kernel delivers the program state to the address space and tries to execute another program in the same space.
The above is probably an unfair and incorrect hash of Unix.