11.3 resource allocation
Mike Prince
mprince@crl.com
Tue, 6 Dec 1994 14:37:43 -0800 (PST)
On Tue, 6 Dec 1994, Francois-Rene Rideau wrote:
> Well, I admit was not clear enough.
> There are
> * basic, primitive, resources, from device drivers
> * (potentially recursive) resource constructors, that make resources from
> other resources: for example, we may have a packet protocol as a standard
> line multiplexer (so anyone can use any kind of raw comm. line to send
> asynchronously any kind of objects). If some user/program has got part of
> a line, he/it may want to multiplex it again, and a sub-user/program may
> multiplex it again, and again. As for memory, there is a big memory object
> in each host; it can be multiplexed by using memory allocators, and each
> memory zone can be used with a sub-allocator, etc...
> * Finally, there are deconstructors/clients, that consume/use provided
> services. If normal users/clients are not given access to the primitive
> resources, they may be unable to know if they are using the actual system,
> or a virtualized one. Clients may well be providers themselves...
We are working on the same problem from two different vantage points; Fare
from the OO high end of constructors/destructors and inheritance, and I
from the hardware implementation side.
You want as much versatility, I want that balanced with good speed.
My framework is meant to show HOW our system could work. It is good to
talk OO theory, but please address the implementational side of things as
well.
Let's see if we can agree on a few things right off the bat.
Our OS is meant to exist in a very distributed environment.
This is our GLOBAL layer.
It is composed of everything out there. This exists, period. Lets name it.
Software will be distributed to users.
I call these TOOLBOXES.
Remember, this is not the programming side, but the distribution side. I
have the feeling Fare believes that once I get a TOOLBOX from vendor X, I
should be able to add functionality to it by inheriting its properties a
la OO programming. Is this true? If it is we either need access to the
source code, or our distribution format needs to be rich with information
about our a TOOLBOXES internal routine names, data structures, etc. This
will slow re-compilation during migration of code to different
computers. It will also make our distributions fat. I am leery about
making such a compromise.
The alternative, is to have TOOLBOXES be black-boxes of functionality
with multiple entry points and a versatile data-passing mechanism.
Stacks provide us this versatile data-passing method; almost anything can
be handed in and given out.
The multiple entry points coupled with a tool boxes ability to
advertise entry points and their capabilities.
Finally, if we break code up into discrete toolboxes we can manage
migration more easily.
Fare, please address how OO programming practices would influence
distribution format of code. I.e does an application come in one big
package, or is it a collection of code fragments that can be farmed out?
What shall we call these code fragments?
If the code can be farmed out, how do we manage intra-code and code-data
dependencies in a distributed environment?
Assuming we can have
subroutines, how do we retain the integrity of a return stack if an
entire process is migrated (we can not simply remember the return address
anymore, its more like domaincodename:offset)? Then, how can we
do subroutine calls/returns FAST? I've gone on too long already.
These are implementational issues that must be addressed. We cannot look
at the ideal pure OO language. We are looking at an *operating system*.
Everything must work together; programmers, hardware, users, etc.
BTW, holistically is not a religion, it is a way of looking at things.
You recognize all the factors and then make a decision.
> So what I want to say is *NO ARBITRARY F?CKING LAYERS* in the system:
> what we need is not layers, but services. You don't build a hierarchy just
> for the sake of administratrivia. Your build an administration because you
> need services. Let's model the possible layers according to the actual
> needs measured, and not provide resources according to some administration's
> capabilities. That's liberalism vs. collectivism.
These layers are a framework, within which the pieces of our OS will
fit. Code does not just exist, it is located in memory of some
computer. At the very least we need terms to describe where this code
is during our discussions about the OS, even if the code itself does not
care.
To recap;
The GLOBAL level exists.
Code and data will migrate between machines so;
How is it represented during transmission? I've suggested
Toolboxes, tools, agents, and stacks. Not to your liking,
suggest an alternative.
A DOMAIN is a useful way of corraling your resources. Is there a
better way?
CPU's exist. Drivers are necessary. What will we call the space
these drivers are bound within? I vote to call it
LOCAL. When migrating resources, they are going
somewhere (a physical machine). Again, we at least need a
term for this destination.
Bottom line, terminology limits you. But we need terminology in order to
communicate. I have proposed names for things we have, and have
suggested relationships between them. If you don't like the names or
relationships, suggest new ones, but don't throw out the baby with the
bathwater. Without names from things we talk about, we'll be a veritable
Tower of Babel.
Mike