You could do worse than Mach ports

Peter da Silva peter-dragonfly at taronga.com
Thu Jul 17 14:54:07 PDT 2003


First, the dragonfly message ports could cheaply act as a proxy to a 
more heavyweight messageport where that's needed, so the current design 
doesn't exclude Mach message ports or anything else weird and wonderful 
you want to layer under them.

Terry Lambert wrote:
For anything that does anything interesting, you are going to have
to map file data as well as metadata pages into the address space
of whoever handles operations on the vp; specifically, here are the
classes of manipulations, with a few examples of each:

	QUOTAFS		Implement quotas for all FS's

	UMSDOSFS	Implement UNIX permissions, etc., on top of
			FS's which don't support it
I'm not sure why either of these would require doing anything more with 
the user data itself than passing it through unchanged, unless you 
decided to store this metadata inline with the file data... which is 
probably not the optimal design. :) Even if the metadata is stored in 
the file you can keep it in a fixed size block and just adjust offsets.

Transformation, yes. You would need to add a more extensive operation in 
the middle... but I'm not sure how having the normal path not touching 
the user data excludes this.

3)	Directory folding, where you obtain multiple forks for files and
	implicit association of metadata, with the ability to back up
	and restore the resulting information, and have it functional
	afterwards.
Again, the data fork wouldn't normally be touched by any of this.

 > 4)	Semantic layering, where explicit semantics are implemented on
	top of the underlying FS, without needing to store specific
	additional metadata.
Again, you're not goin to touch the content of any data pages, so why do 
they need to be in your address space?

Probably, whatever you call your message port or how you end up
implementing it, you are going to have to treat it as a unit with
the mapping across protection domains interface, in order to avoid
any races between mapping and then operating on the mapped objects
(given your stated out-of-order execution model).
Even if this is necessary in special cases those can be handled by 
making the Send() function for that message port point to the 
heavier-weight message call, or have a proxy message port that then 
redirects messages to one or the other if there's only one "syscall" 
message port per process.

There doesn't have to be... in fact it would make things more flexible 
if there was a message port associated with each file descriptor even if 
most of the time that pointed back to the system port.






More information about the Kernel mailing list