Overview

The non-isolated environment is the environment the host kernel runs in. kliblcd provides the implementation of the LIBLCD interface in this environment. The kliblcd code, in lcd-domains/kliblcd, is actually built as a part of the LCD microkernel kernel module, but it is conceptually separate from it.

A thread running in the non-isolated environment that wishes to use the LIBLCD interface must invoke lcd_enter (the kliblcd implementation). It creates the LCD microkernel-internal data structures, like a CSpace, for the non-isolated thread. When the non-isolated thread is finished using the LIBLCD interface, it must invoke lcd_exit before it dies. This gives kliblcd a chance to tear down the same data structures.

Unlike liblcd, kliblcd doesn't need to provide or implement any additional library functions, since non-isolated threads can access the host kernel implementations (like kmalloc, memcpy, etc.)

Probably the most complex parts of kliblcd are the resource trees and kernel module loading.

Where's the UTCB, Cptr Cache, etc.?

Loading Kernel Modules for LCDs