Re: Fine-grained locking for POSIX local sockets (UNIX domain sockets)

From: Peter Jeremy <peterjeremy_at_optushome.com.au>
Date: Wed, 10 May 2006 17:45:47 +1000
SunOS 4 (not sure about SunOS 5) exports a per-CPU page that
includes a high-resolution timer amongst other things.

On Wed, 10 May 2006, David Xu wrote:
>One of the problems to implement it is that atomic operations,
>if there are multiple integer needs to be updated by kernel,
>userland maybe gets an inconsistent result, the way to avoid the
>problem is using two generation numbers.

A lot of the need for atomic operations goes away if the page (or
whatever) refers to the current CPU - the page is either being updated
by the current CPU in kernel mode or read by the current CPU in
userland.  The page won't be updated/accessed by other CPUs.  You
still need to update the base time and TSC (or whatever) count in a
way that looks atomic to userland but I suspect the kernel could
achieve this by twiddling the code transparently to userland (eg there
are two copies of the base/count and the kernel flips a pointer
between then).

On Wed, 2006-May-10 12:01:57 +0800, David Xu wrote:
>Daniel Eischen wrote:
>>Can you not make a simple pseudo device driver and mmap the page?
>>
>mmap is fine if you don't care binary compatible, exporting a kernel
>page which can be executed by userland is more flexible, kernel can
>change it freely without having to change libc.

These aren't mutually exclusive - .so's are mmap'd.  All libc needs
to do is mmap a page from a pseudo device and execute a function in
it.  Either the function could be at a magic address or the pseudo
device could simulate a shared object so you just dlopen() the device.

-- 
Peter Jeremy
Received on Wed May 10 2006 - 05:45:56 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:38:55 UTC