"RO is presently a N:1 multi-threaded system, that is all thread are mapped onto a sinlge processor, and the application itself schedules those threads. In most cases, it does so in response to reasoncodes retruned by Wimp_Poll."
Well, there are no threads at all.
"I wonder if the pre-filter mechanism could be used (by the kernel) to prevent blocking. Simtec's Hydra was introduced before prefiltering, I think."
Possibly, but the work is best done centrally. Hydra only worked in RiscPCs, which meant they must have been running RISC OS 3.5 at minimum. Filters were introduced in 3.1 IIRC (and are noticeably absent from 3.0)
"Killermike's suggestion is called "forking" in which the OS creates a new instance of itself and starts a process (application) within that instance, thus giving each application its own OS context."
Forking almost always refers to a process, not the OS. ie, the call fork() makes a copy of the process (copy on write in all modern operating systems), and returns one value to on process, and the PID of the newly spawned process to the other.