[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Questions about translators

From: Hiran Watson
Subject: Re: Questions about translators
Date: Sun, 23 Mar 2003 23:03:32 -0500

Thanks first off! Secondly, I wrote all those questions with the view that translators and servers were different things. Now that I know they are not, it makes more sense. But I still do have some more questions then.

First, I'm confused then about the meaning of the following from the white paper "Towards a New Strategy of OS Design" (found at

"Most servers are accessed by opening files. Normally, when you open a file, you create a port associated with that file that is owned by the server that owns the directory containing the file. For example, a disk-based filesystem will normally serve a large number of ports, each of which represents an open file or directory. When a file is opened, the server creates a new port, associates it with the file, and returns the port to the calling program.

However, a file can have a translator associated with it. In this case, rather than return its own port which refers to the contents of the file, the server executes a translator program associated with that file. This translator is given a port to the actual contents of the file, and is then asked to return a port to the original user to complete the open operation."

I understand the first paragraph. But then the second one gives the impression that the translator is started as another layer between the end-user app and the server. Is it that the server just starts another server? Or are they talking about server threads? So the main server thread spawns a subthread that connects with the main thread through the port decided by the server (main thread) and on the other end connects with the end-user app through another port?

Secondly, what happens when an end-user app makes a system call (ie, open some file, or read, or write, etc.)? Does the call get caught by the kernel which passes it onto the appropriate server? If so, then the layers would be end-user apps on top; they're connected to the kernel; and the kernel is connected to the servers; and finally the servers are connected to physical hardware? If so, what about servers that don't actually mess with hardware?

Thanks again.

God bless

From: "Ciaran O'Riordan" <>
To: Hiran Watson <>
Subject: Re: Questions about translators
Date: Mon, 24 Mar 2003 02:32:33 +0000
MIME-Version: 1.0
Received: from ([]) by with Microsoft SMTPSVC(5.0.2195.5600); Sun, 23 Mar 2003 18:32:35 -0800 Received: (from coriordan@localhost)by (8.11.6/8.11.6) id h2O2WYo26363;Mon, 24 Mar 2003 02:32:34 GMT
X-Message-Info: JGTYoYF78jEHjJx36Oi8+Q1OJDRSDidP
Message-ID: <>
References: <>
In-Reply-To: <>
User-Agent: Mutt/1.4i
X-OriginalArrivalTime: 24 Mar 2003 02:32:35.0789 (UTC) FILETIME=[A15147D0:01C2F1AD]

Hello Hiran,
  They're three big questions ;)

On Sun, Mar 23, 2003 at 07:50:07PM -0500, Hiran Watson wrote:
> I have three questions about translators.
> The first is what happens when a server executes a translator?

"translators" and "servers" are two names for the same thing.  The
name "translator" is very fitting sometimes but sometimes it's

> That is, is
> the translator run as a layer between the kernel and user app

Usually, yes.  Everything on your system is an app, the kernel
(GNU Mach) runs as a kernel process, everything else is a user
app.  There's nothing special about translators, they're just
userspace apps.

> (thereby
> making system calls to accomplish things like internally opening
> files/directoris as well as using the original port for information to and
> from the user app and server)? Or is it run as a layer between the server
> and kernel (thereby making server-specific function calls to accomplish the
> same things mentioned above)?

With the knowledge that translators and servers are the same
thing, could you ask this bit again?

> Secondly, are the servers and translators run as user processes or system
> processes? What about the kernel?

only the kernel is kernelspace.  Everything else is userspace.
Some applications are persistent, we usually call them servers.

Apache is a HTTP server, it handles HTTP commands.

One of the servers which makes up the GNU Hurd is called 'ext2fs'.
It is an "Ext2fs server", it handles Ext2fs commands.

Linux provides built-in support for ext2fs and can handle these
requests without the need for a userspace app.  GNU Mach does not
contain support for Ext2fs, it contains the bare minimum
funtionality to allow ext2fs and other filesystems to be handled
in userspace.

> Thirdly, why is there a need for translators?

It depends on how you want to design your kernel.  Monolithic
kernels like Linux consist of a scheduler, memory pager, device
drivers, filesystems, etc.

Microkernel architecture aims to have a kernel which does the bare
minium and provide a bunch of userspace apps that provide the

> They just seem like an extra
> layer (or "middle-man") between the user app-kernel-server connection that
> would otherwise occur.

It comes down to a trade-off.  Microkernel architecture offers
much greater possibilities for security an stability since the
kernel exists as five or ten seperate apps, only one of which is
running in kernelspace.  It is also possible to write faster apps
for microkernel systems by making use of the low level kernel API
that is exposed that doesn't exist in monoliths.

The GNU Hurd isn't the greatest kernel in the world yet but it's
definitly one of the most interesting.  It's needs a few more
developers but it is usable as-is right now.

I'm sure this info will create as many questions as it answers,
please mail the list again.

a quick note: I used to be confused about translators because I
read somewhere that "translators can be embedded in file systems".
This is not true, a reference (i.e. the name) to a translator can
be stored (as "meta data") in most file systems.

(can someone on the list let me know if my info is correct?)
Ciaran O'Riordan

MSN 8 with e-mail virus protection service: 2 months FREE*

reply via email to

[Prev in Thread] Current Thread [Next in Thread]