CELLS!

Dr. J. Van Sckalkwyk (external) SCHALKW@odie.ee.wits.ac.za
Tue, 20 Dec 1994 19:00:29 SAT


Dear All,

IDEAS ON FUNDAMENTAL PRINCIPLES OF CELL DESIGN.
===============================================

Let us define the fundamental unit of our system as
the "cell" (a la Mike).

How about? ...

MAIN GOAL:
==========
A world-wide (distributed) environment composed of
interacting cells. If cell A migrates from machine X to 
dissimilar machine Y, it presents similar external 
characteristics in terms of its interaction with other
cells, despite the move, OR, if its interactive 
characteristics are slowed / otherwise perturbed 
beyond a certain point, (ideally this is predicted at/before
migration time) then it signals that it can't work!

(IDEA: it retains the address of its parent, and directs
you to "try my dad, he's stronger than me, and has other
children too")!!


Assumption: Our goal is achievable. Otherwise, we're wasting
our time.


Assume: goal has been achieved. ie we have:

LOWEST (HARDWARE) LEVEL -------|----------> HIGHEST (CELLULAR) LEVEL
||||||                         |            ||||||
DISSIMILAR MACHINES -----------|----------> SIMILAR CELLS
                               |
                               transition point.

Below the transition point, function will be dissimilar.
Above, similar.

Now, I see our problem as "trying to define the 
common language immediately above the transition point".

We are faced with several options:

a. The transition point is "very close" to the cellular
level. This means that when a cell migrates, almost 
the whole of its code will have to be "rewritten" in
order to get it to function on the new machine.

b. The transition point is "very close" to the machine
level. 

c. The transition point is somewhere in between.


The way I see it, (b) is the best option. Cells are / 
can be extremely complex, with numerous complex
interacting processes. the closer we move the
transition point to the complete cell, the more
complex our re-coding becomes on migration. We
should therefore try and move the transition
point as far to the left as we can.



Goal Statement: Goal #1.
------------------------
To define **NECESSARY** and **SUFFICIENT**
fundamental (primitive) cellular processes
that can be implemented on all of the machines on
which we _wish_ to implement our system.


Suggested mechanism of implementation of Goal #1:
-------------------------------------------------
1. Identify the initial hardware on which we wish to
implement our systems.

2. Identify individuals within / outside our group
who have a reasonable knowledge of low-level (i.e.
machine-dependent) programming on such machines.

3. If someone has a particular yen to implement Joy
on a system where he does not know enough about the
hardware/low level, it is his responsibility to:
    a. learn the low level mechanisms; or,
    b. get hold of someone with that knowledge; or
    c. shut up until (a) / (b) are satisfied!

4. THEN to identify common ground between the 
low levels.

5. THEN to eliminate all duplication and 
UNNECESSARY instructions.

6. THEN to define a core set of INSTRUCTIONS that
    are common to all architectures.
(Explanatory note to point 6: this does NOT imply
one to one correspondence, eg a floating point
multiply may be one instruction on a machine
with a coprocessor, or 100 on one without).

7. Then to examine the core instructions (of 6)
and determine whether they are SUFFICIENT to
implement any reasonable system, and if not,
to refine them until they are.

(Alternatively, do you think that e.g. C will be
sufficient for ALL our needs? If so, what parts
of C are both necessary and sufficient?)

8. Then to create a working model of a cell,
using these primitives, and the ideas that
come out of:-



Goal Statement : Goal #2.
-------------------------
At the same time as Goal #1 is being (we hope)
attacked, we should establish a high level
initiative. This should be directed at:

2.1. Defining desirable cellular properties.
2.2. Defining cellular interaction mechanisms.


Suggested questions to ask:
---------------------------

1. Is a cell a completely independent entity 
i.e. own stack space, own memory blocks, own
"processor"?

2. Does a cell retain a memory of past events?
i.e. Can it be altered?

3. If (2) is true, would it be a good idea for
the cell to undergo "binary fission" before
(one copy) is altered?

4. Can cells share common code / processes?

5. How does cell death occur - eg. suicide
messages? Who has control over this? Do/Can 
copies of a cell "inherit" the parent's death?

6. How does cell birth occur? Should a cell
have a unique "birth certificate number", and
if so, is it desirable to / how can we
keep track of cell birth worldwide. Might it
be a good idea to have "local registries"
allocating "birth numbers" and even perhaps
keeping a register of "cellular properties"
eg "This is a word processing cell..."??

7. How can we define mechanisms of cellular
interaction? Data streams between cells?
When should synchronisation be used? How?

8. If a cell is about to migrate / has
migrated, how can its performance be
assessed? When should it "soldier on"
despite being fairly ineffectual, and
when should it quit? Should the criteria
for "quitting" be internal or EXTERNAL?

9. On a particular machine, with limited
resorces, and several cells running and
straining those resources, should a
particular allocation strategy be used
to dispose of those resources. Should we
use some sort of "Banker's algorithm" or
what? What preventive / rollback mechanisms
should be in force? Should different cells
have different priorities, and if so,
how should these be enforced.

10. In a group of interacting cells on
different machines, should we apply the
considerations mentioned in (9) above,
especially with migration occurring..?

11. [please feel free to add more]!


Just trying to give things a little form.
At present, Mike seems to be the only one
of us with some direction!



Bye, JVS.