This page provides some details related to the implementation of Umlwin32.
Cygwin API Vs Win32 API
Currently Umlwin32 makes use of Cygwin APIs at a lot of places.
Eventually, the plan is to move over to using pure Win32 API. This would make
execution faster, and eliminates the runtime dependence on Cygwin.dll. It would
give more flexibility for implementation since we can take advantage of Win32
features that are not available through Cygwin. This is especially true when
certain things require using the lower level NT APIs and direct invocation
of Win32 system calls.
At this point there are a few things in uml_win32.c (under
arch/um/kernel directory) which uses win32 and native API.
Umlwin32 Processes and IPC
Each linux process and kernel thread under Umlwin32 corresponds
directly to a unique windows process. These processes share a common kernel
code and text segment, but have a seperate private section which store
process specific state. They all share a common physical memory region
which is nothing but a shared file mapping.
Processes are put to sleep in the scheduler by making them read
from a pipe. Context switching occurs by writing a byte to the
appropriate pipe to unblock the process to be switched to.