Kernel 0.11, [arf1]
Michael David WINIKOFF
winikoff@mulga.cs.mu.OZ.AU
Fri, 26 Mar 93 16:42:05 EST
>
> Howdy all!
>
> Some comments on the kernel so far - looks pretty good!
>
> One statement concerns me: "every object is a process..." I'm assuming you
> mean every *instance* of an object is a process, which would require a lot of
> overhead. (As an estimate, a system might use between 256 bytes and 8k to
> represent a single process and its registers, state of the machine, etc.)
>
Let me explain.
What I meant was that a MOOSE object is defined to be a process.
A small object that isn't a process (Eg. is internal to a process/large-object)
isn't viewed as an object by the system.
Ie. objects REPLACE processes -- there is only the single (merged) concept.
[Private objects deleted]
Private objects are not viewed as MOOSE objects.
>
> Now take a look at a database application: multiple processes would need
> access to the same instance of an object (a record in the database) at once.
> Each process can change the object, and (possibly) one process changing a
> database record notifies all other processes with interests in that record
> that a change has been made so they may update themselves accordingly. This
> type of object is a 'public' object, stored (most likely) in some shared memory
> space, and has some special characteristics allowing it to be shared between
> processes and (in a distributed system) between systems. Methods for sharing
> these objects between processes and systems are implemented in the next type
> of object, which is....
>
> The process object. Descendants of this type of object would be applications,
> device drivers, and *possibly* the kernel itself. Processes have some way of
> making themselves available to other processes, and if one process knows the
> interface to another, they can communicate directly. As mentioned before,
> shared object stored in this manner would probably be distributed through this
> interface.
>
> So far, this is our object heirarchy:
>
> object
> | |
> shared object process object
>
> An 'object' is the definition of how an object in this system is structured,
> how it behaves, how its attributes (data) are stored, and how its methods
I don't think we should dictate how the data is stored -- we shoudl instead
limit ourselves to accessing said data through methods. Comments?
> (functions) are accessed. Most languages (C++) do not define an 'object'
> object, but in this system *all* objects have a common ancestor. If, for
> example, an object were defined in C++ with no ancestors, it would (by the
> compiler) be given the 'object' ancestor by default. This ties all objects
> together with a single ancestor, closing a major gap in to OOP paradigm.
> Maybe it defines some methods...I don't know yet. This kind of object is
> created in a private memory area, which must be owned by some process.
> Maybe this object defines some virtual methods for loading itself and storing
> itself to and from a 'file' object? This way, all objects are given the
> interface to load/store, and whether or not this is implemented is up to the
> object designer. Also, the 'object' object would be given some method to
> identify itself in a system dependent manner, defining which module the object
> is found in an what the object is called. (module:object) This I don't know
> how to define yet...
>
> A 'shared object' is the next step in this heirarchy, and represents an object
> which can be shared between mutlitple processes, or (eventually) between
> systems in a distributed system. This object must be able to handle itself
> contention of multiple processes through the use of semaphores or other similar
> devices. This kind of object is created in a shared memory area, which must
> be owned by some process. Some process must manage these - they are not
> independent in and of themselves.
>
> A 'process object' is the type of object associated with a task or application.
> When a process object is instanciated, it can be made public to other proceses
> (or not) through which other processes have access to its methods. These are
> managed by the kernel, and access to processes (finding a process object
> pointer?) is done via the kernel.
>
> ----------------------
>
> An example using this scheme, implementing a database application:
>
> The database process is started for a particular database, placing it in the
> system wide table of processes, or giving only a limited subset of processes
> access to it. (This access and protection still needs to be ironed out...)
>
> Another process begins, and needs to access the database. It requests the
> kernel for a pointer to the database process object. Next, it needs to find
> all records in the database with a certain search criteria, and uses the
> database process object's methods to perform this search, returning a list of
> objects. Each of these objects are instances of shared objects stored in
> memory managed by the database process; for all the requesting process knows,
> it instanciated these objects itself and should treat them as such. *Note*:
> directly modifying the contents of these objects is not allowed... Next,
> another process accesses the database and also requests similar records, so
> now two processes have pointers to identical objects (the same data, *not*
> two instances!). The first process *destroys* its version of the shared
> objects (the database records) when it is through, just as it would with any
> other object, except instead of freeing memory it only dereferences the object,
> and when the reference count reaches zero the object is actually destroyed.
>
> Did I mention the second process existed on another system? :-)
>
> Basically, when processes are created some access protection is set to allow
> use by a single user, multiple users, multiple systems, etc. This example
> database application would probably allow multiple user access, but only a
> limited subset of "installed" users. I.E., the database has complete control
> over which users are allowed to access its process (via the kernel) to begin
> with.
>
> --------------------------
>
> I envision shared memory being read-only by all processes except the owner.
> (The owner can write as well.) Across distributed systems, process should not
> even be allowed to read shared memory. This way, all information can be
> gathered from an object without a task switch; to modify an object requires a
> task switch to the owner's task, so each method in a shared object must be
> classified in some way to allow this to happen.
>
> Ok...these thoughts are a little sketchy, but coming together nicely. Let me
> know what you think! This is absolutely implementable - I've done my research
> there. I think this is our best bet of an object oriented system...
>
> Dennis
>
--------------------------------------------------------------------------------
Michael Winikoff
winikoff@cs.mu.oz.au
Computer science honours. University of Melbourne, Australia.