The kernel subsystem of LiteOS takes the thread approach, but it also allows user applications to handle events using callback functions for efficiency. It implements both priority-based scheduling and round-robin scheduling in the kernel. It also support dynamic loading and un-loading of user applications, as well as a suite of system calls for the separation between kernel and applications.