This article is from the comp.sys.acorn FAQ, by Paul Vigay with numerous contributions by others.
The short answer is that full VM is not possible under the current versions of RISC OS. The problem is that most of RISC OS works in SVC mode, if a DataFetch abort occurs then R14_svc is corrupted. This makes returning from the SWI somewhat problematic. This is a hardware limitation with the ARM2 and ARM3 cell chips. Hardware using ARM6 or better processor cells have special memory abort modes that alleviate this problem so future machines and incarnations of RISC OS may well have VM available. Indeed the new RiscPC machines make prime candidates for having virtual memory, however there are still re-entrancy issues that make this problematic for RISC OS. (Consider loading data from a file into paged out virtual memory...)
However limited solutions are available now. !Virtual is one such solution allowing VM for a user process using a limited subset of SWI's that are carefully 'protected' against R14_svc being corrupted. Such solutions suffer from the restricted set of SWI's they support and are mostly useful for batch style processing jobs like compilation or memory intensive processing jobs. !Virtual can be downloaded from http://www.sunsite.org.uk/package/archimedes/riscos/util/memory
!Virtual currently does not work with Risc PCs due to the fact that it requires a page size which is a multiple of 8kb. (This means !Virtual will not work with A305s.)
Also available commercially, from Clares Micro Supplies, is Virtualise for the RiscPC machines. This provides virtual memory on dynamic areas. As more and more software starts to use dynamic areas for data storage and manipulation this will become increasingly useful.