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.
Implementation of clone() under Windows
Asynchronous IO Performance Issues
Console IO Limitations
Limitations of MapViewOfSection API
Various other hacks
Bear with me, this is still "Under Construction"!