More kernel works: preemption and realtime, devfs, modules, testing
The following kernel-related projects were raised in the
past few weeks:
- Kernel Preemption:
Andrew Doran has continued his work towards fine-grained
locking, and he has proposed a
patch to implement kernel preemption,
i.e. that in a realtime environment, high-priority processes can
interrupt system calls running inside the kernel.
Handling the Floating Point Unit (FPU) was
added later on --
the FPU needs special attention as saving and restoring is
expensive, and doesn't need to be done in many cases. But if a
program uses it, care must be taken to handle the case.
The exact handling is
explained by Christoph Egger.
Christoph also outlined the
roadmap for getting realtime support
in NetBSD - there are still a number of bits missing, but being
able to preempt the kernel is a good first step!
- Fine-grained socket locking:
In order to allow fine-grained locking (instead of blocking
all other processes from entering the kernel, as is done in the
"biglock" SMP approach), many kernel subsystems need to be changed.
The socket system is the core part of interprocess communication,
and Andrew Doran has changed it to
use fine-grained locking
In that context, the question of
what code still runs with the biglock held, and
Andrew gave an overview where
more work is needed: some file systems (lfs, ext2fs, nfs),
most of the drivers, protocols like TCP/IP, Veriexec, and
some machine-dependent parts.
Veriexec-Hacker Brett Lymn
added details on the status of Veriexec
with respect to its transition towards fine-grained locking.
- Kernel modules and ramdisk:
A change in kernel modules was proposed
some time ago, and
Andrew Doran has used this scheme now to unify the way
many ports handle the install media: There, the kernel loaded
contains a ramdisk (miniroot) image inside the kernel, which is then used
as root-filesystem for the kernel, containing the install tools.
In order to split things and eventually use a stock GENERIC kernel
for both running and installing, Andy has
x86 boot process to load the miniroot as a kernel module.
When booting it may be useful to select one of several ramdisks:
one for installing, and one for resuing the system,
For this, the recently introduced boot.cfg file was
extended to handle kernel modules in the boot menu.
Izumi Tsutsui has
made an ISO with all changes for testing available.
- Device File System (devfs):
Another area of the kernel where a lot of work is currently being
done by Matt Fleming is NetBSD's device driver infrastructure,
esp. under aspects of dynamic attaching, detaching, and suspending
(power management!). To talk to the various drivers, device nodes in
the /dev directory are kept right now, but those are static and
need to be updated when a new driver is added.
Matt is working on a Device Filesystem (devfs) that dynamically
created /dev from the list of devices inside the kernel. The
fileysstem will also handle dynamic creation and deletion of
nodes, and as an important case it will also keep permissions
across reboots, if someone changes permissions manually.
The work is at a very mature point right now and needs some
testing - see
Matt's mail to the tech-kern list
for more information!
- Testing driver attachment:
While talking about testing of device drivers,
David Young has
reminded driver developers to test
individual drivers' detachment and re-attachment,
suspension and resumption after changes.
He has also
posted a how-to for those tests,
(The manpage needs some updating, sorry --
[Tags: devfs, initrd, kernel, kmod, lkm, preemption, realtime]