On Thu, Dec 15, 2022 at 9:07 AM Larry McVoy <lm(a)mcvoy.com> wrote:
On Thu, Dec 15, 2022 at 09:02:08AM -0500, Dan Cross
wrote:
On Thu, Dec 15, 2022 at 12:38 AM Bakul Shah
<bakul(a)iitbombay.org> wrote:
Don't see how unless they put multiple
related services in the same
address space, which reduces context switching but tends toward a
monokernel (& increased coupling). Unless I am misunderstanding you.
I don't see why two services in a microkernel couldn't arrange to
share a region of memory and implement bidirectional queues
between themselves. With an appropriate signalling mechanism,
you'd still be context switching but avoiding a lot of copying.
My mind went to similar thoughts. How did QNX manage the page cache?
Did they have mmap?
I don't know if they did historically, but I kind of doubt it; QNX predates
4.2BSD, and I imagine there wasn't much influence from TENEX/PMAP).
But they seem to now:
https://www.qnx.com/developers/docs/7.1/#com.qnx.doc.neutrino.getting_start…
No idea how they handle page caching. That's an interesting question,
given how they adopted POSIX and try to at least give the outward
appearance of being Unix-y.
Given the emphasis on the message-based architecture, where messages
can be sent between nodes, I doubt there's that much support for shared
memory as a basis for IPC; I think they favored explicit messaging copying
facilitated by the ukernel. Whether you could build something bespoke using
the provided primitives is another matter.
- Dan C.