Model
Dwight Hughes
dhughes@intellinet.com
Sun, 11 May 1997 01:47:29 -0500
| From: BRIAN SPILSBURY <zhivago@iglou.com>
|
| LispOs: a Model
|
| Base primitive is a 'byte-chunk'.
Works for me - I cannot really think of a simpler model. You might
want to also have 'aligned-byte-chunk' for accessing data that
is not actually structured as bytes and that needs to be accessed
efficiently.
| Byte-Chunk
| begin - value at which the memory this chunk is responsible for starts.
| end - end of this chunk's memory.
|
| get-byte (index) - sets a byte. relative to 'begin', limited by
'end'.
^gets
| set-byte (index value) - gets a byte. relative to 'begin', limited by
'end'.
^sets
| get-begin () - returns begin.
| set-begin (value) - sets the start.
| set-end (index) - sets the end.
how about:
set-chunk(value index) - sets start and end in one call
get-position() - gets present index into byte-chunk
| merge-next () - arranges for this chunk to merge with the
following.
| merge-prev () - arranges for this chunk to merge with the
previous.
|
| At this point we have a memory system.
| Initially all of memory is covered by a single 'byte-chunk' with begin at
0
| end at 4 gig or whatever. This does not imply that the memory inside
exists.
|
| We can allocate objects in by writing inside a byte-chunk. We can split
| byte chunks by allocating a byte-chunk inside a byte-chunk, and then
changing
| the begin or end positions so that the new byte-chunk is now outside the
| old.
|
| Now we can implement other objects over this byte-layer interface.
| We can have 'free-memory' byte-chunks which are created when an object is
| gc'd, and when two free-memory chunks touch we can merge them together.
|
| references to 'byte-chunks' should only be obtainable via a secure vendor
| as they will allow naughty things to happen, on the other hand we want
| access to the byte-layer to implement device drivers, etc.
|
|
| To implement the byte-chunk system you'll need to implement a
| callable-primitive, this doesn't need scope, etc, you can call it
directly
| via reference. If a typing convention is adopted then at this point
| we can also add type definitions, and we're well down the road to
reflection.
|
| Note that using this system, we can at a later stage transparently adopt
a
| transparent POS system, such as disk-as-memory, ram-as-cache, or we can
| do this initially.
|
| -- now for a couple of whinges --
|
| What is this scheme/CL debate? Neither langauge is appropriate as a core
| to an os. Write a micro-lisp with reflection and mop, and then if you
feel
| the need implement CL/CLOS/Scheme over the top, also add in security
| (preferable though something lispish like _capabilities_, rather than
| unix flavour silliness), and threads are a must.
I don't disagree - just not happy about the amount of work needed.
|
| With the POS there is some amazing silliness.
|
| a) Transparent POS _does not imply_ that your GC process will be
affected.
| Transparent POS into an Object Store System Thingy might, and that
would
| I agree be silly.
|
| For persistent objects all that it requires is that the system can
| survive reboot without a loss of non-execution state. This can easily
| be achieved by making the byte-layer of the memory system persistent,
| and imho this is the logical, obvious solution.
|
| b) If you do make the byte-layer persistent, this doesn't change a thing
| as far as GC is concerned, if no-one's referencing an object it will
| still go away.
|
| c) You can implement an Object Store System Thingy under this system
| as a database, although why you would want to except for putting
things
| in a suitcase to take elsewhere I can't imagine.
|
| d) To make the most of persistence, you might well want to make threads
| persistent, which would be nice. If you don't have a persistent-byte
layer
| to help here, good-luck. What this would mean is you could shut down
| and restart and your programs won't notice, except that simultaneously
| all their sockets to external machines may have closed, and the clock
| might jump a couple of hours. This would be nice.
|
I have some concern over what happens if the power should go out
or the system should crash. How do we make this robust?
| --
|
| Feel free to flame, anything will be better than the 'what name will we
call
| this os that we haven't even defined in any way more than an os that is
| lispy', or the 'I want Scheme! I want CL! I want GCC!' threads.
|
| Lets at least get some models up of what's possible/desirable and have
them
| fight it out.
|
| Brian Spilsbury
|
-- Dwight