Skip site navigation (1)Skip section navigation (2)
Date:      05 Jun 2003 16:06:16 +0100
From:      Doug Rabson <dfr@nlsystems.com>
To:        Paul Richards <paul@freebsd-services.com>
Cc:        current@freebsd.org
Subject:   Re: VFS: C99 sparse format for struct vfsops
Message-ID:  <1054825575.32554.28.camel@builder02.qubesoft.com>
In-Reply-To: <20030605145111.GF76193@survey.codeburst.net>
References:  <26877.1054676171@critter.freebsd.dk> <20030603.160943.102571653.imp@bsdimp.com> <1054594801.1641.49.camel@cf.freebsd-services.com> <200306041001.07145.dfr@nlsystems.com> <20030604122445.GB68108@survey.codeburst.net> <1054730025.32554.15.camel@builder02.qubesoft.com> <20030604131628.GE68108@survey.codeburst.net> <1054734198.32568.23.camel@builder02.qubesoft.com> <20030605145111.GF76193@survey.codeburst.net>

next in thread | previous in thread | raw e-mail | index | archive | help
On Thu, 2003-06-05 at 15:51, Paul Richards wrote:
> On Wed, Jun 04, 2003 at 02:43:20PM +0100, Doug Rabson wrote:
> > On Wed, 2003-06-04 at 14:16, Paul Richards wrote:
> > > On Wed, Jun 04, 2003 at 01:33:46PM +0100, Doug Rabson wrote:
> > > 
> > > > Interfaces actually can be added at runtime. Existing objects (i.e.
> > > > objects instantiated before the new interface was added) will continue
> > > > to work as before. If methods from the new interface are called on old
> > > > objects, the default method will be called.
> > > 
> > > How can you add an interface at runtime?
> > 
> > By loading a kernel module. If I load e.g. the agp kernel module, I add
> > the agp_if interface to the kernel.
> 
> Yes, I know that you can load a pre-compiled interface at runtime
> and thereby add that interface, but you can only "create" interfaces
> at build time because each method in the interface is uniquely
> identified by a kobjop_desc struct, which is what I was referring to.

What has build time got to do with anything? At build time, you have no
idea what interfaces are available either. Besides modules can be built
at a different time from the rest of the kernel.

> 
> > The code which is doing the method dispatch has no real idea what
> > methods (or what interfaces for that matter) that the object's class
> > implements. You can't use the classes method table layout for the ops
> > table since the caller has no way of knowing that layout (and the layout
> > will be different for almost every class in the system).
> > 
> > One possible way of making this slightly simpler might be to make the
> > class point at a table indexed by interface ID, each entry of which is a
> > table indexed by a method ID from that interface. This sounds fine in
> > theory but in practice, it would end up slower due to the two memory
> > accesses.
> 
> That's along the lines of what I suggested at the start of the thread :-)

Its still slower and wastes more memory and bloats the code for every
call site. I have a better approach in mind which I will be trying out
soonish.





Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1054825575.32554.28.camel>