From: http://www.makelinux.net/ldd3/chp-15-sect-1
"VM_IO
marks a VMA as being a memory-mapped I/O region. Among other things, the VM_IO flag prevents the region from being included in process core dumps.
VM_RESERVED
tells the memory management system not to attempt to swap out this VMA; it should be set in most device mappings."
For better understanding of how and why these evolved and what is the linux kernel community's recommendation, read these lwn articles:
http://lwn.net/Articles/161204/
http://lwn.net/Articles/162860/
UPDATE:
The VM_RESERVED
flag has been discontinued. See Linus' patch