I was wondering what differences and relations are between emulator and virtual machine? Is one a special kind of the other, and what are some other kinds in the other? I don't quite understand about these questions from the linked Wikipedia articles.
As the terms are most commonly used, an emulator is any application that runs code designed for one platform on another platform.
A virtual machine is a special case of an emulator, in that it runs code designed for one platform in a virtualized environment on the same platform - for example, software like VMWare and VirtualBox run code designed for an x86 PC on an x86 PC - this makes it possible to run one operating system on top of another, among other things.
The difference between emulation and virtualization is that with emulation, the entire operating environment is simulated in software, whereas with virtualization, some portion of the work to be done is passed directly to the host CPU. Most modern x86 processors have hardware to accelerate this function. This makes virtualization very fast compared to emulators that have to take some action in response to each operation performed by the guest software.
One popular PC emulator is Bochs. Since it emulates the x86 hardware quite accurately (at the expense of speed), it can be very useful for OS-level debugging.