Hi vProud,
We virtualize/emulate the entire platform, including CPU, RAM, ROM and all the other various devices (PCI devices, PCIe configuration space, APIC, HPET, etc...), so the guest OS is, for the most part, oblivious to the fact that it is running in a virtual machine and not on a physical machine.
The guest OS will build its device list by combining the information from the ACPI tables it finds (see the links in my earlier post) and from probing of other emulated devices (PCI, PCIe, USB, ...). As far as the guest is concerned, that process is exactly the same as on a physical machine, but – unknown to the guest – any device accesses are talking to emulated virtual PCI/PCIe/USB devices instead of real hardware.
The ACPI tables themselves are generated by the virtual machine's firmware (BIOS or EFI) in much the same way as on a physical machine, although virtual machine firmware needs to be much more flexible than physical machines' firmware due to the highly variable set of emulated hardware that might be present (we can add/remove/enable/disable HPET, xAPIC, x2APIC, memory hotplug, PCI hotplug, CPU hotplug, various CPU features, and various other sundry peripherals). Regardless, the firmware publishes ACPI tables describing the virtual hardware, and the OS consumes that information as part of its device enumeration.
Cheers,
--
Darius