(I feel this question half belongs here and half on Server Fault; please let me know if you think there's a better venue for it.)
How does Xen, or indeed, any hypervisor, expose hardware to guest operating systems?
For instance, a guest wanting to communicate on the network; at some stage its request must get translated into a request to the NIC. Does the hypervisor expose a dummy network device, which we assume the guest knows how to use? Or do paravirtualised guests have knowledge of how to directly make a request for a given piece of hardware? (If so, what do non-paravirtualised guests do?)
Once the request is made, who handles it? I'm guessing the hypervisor has no little knowledge about physical hardware (from a driver perspective), so it probably has to come down to the dom0. Right?
I ask because I love doing kernel development, but writing drivers is a chore. If I could rely on a dom0 with pretty good hardware support (Ubuntu, say), and then just write my kernel to run paravirtualised, and/or to make use of some mock device that Xen exposes, that would make my life a lot easier. It's pretty difficult to find documentation on these topics, however, so my next stop is probably to look at a range of Xen guest implementations; HaLVM, a port of GHC for running Haskell software natively as a Xen guest, looks like a good start.
Thanks and salutations!
Edit: this marketing doc from Xen.org seems to state that the dom0 runs drivers in order to facilitate domUs' block device and network access, in line with my guess. In this case, any technical references/specs/etc. would be awesome!
Edit: this (apparently outdated) documentation looks good.
There are three types of device models.
PV — For example, Linux PV guests use pv_ops (http://wiki.xen.org/wiki/XenParavirtOps, http://wiki.xen.org/wiki/Category:PVOPS)
HVM — full virtualization of devices with QEMU (https://serverfault.com/questions/222010/difference-between-xen-pv-xen-kvm-and-hvm)
The book The Definitive Guide to the Xen Hypervisor might be useful to you.
There is quite a bit of development related info on the wiki: http://wiki.xen.org/wiki/Category:Developers.