Thrashing is defined as "when the hard drive is being overworked by moving information between the system memory and virtual memory"
Simplifying a bit, virtual memory is backed by disk, i.e. the pagefile in Windows or the swap partition in Linux.
So this implies there's a transfer of data from the hard disk, back onto the hard disk but the section designated for virtual memory?
Virtual memory, or the pagefile, holds the RAM of processes that have been "swapped out." Modern systems try to swap out processes to disk that haven't been used in a while, such as minimized programs you haven't touched in a while, or services that have been inactive for a long time.
This allows more real RAM for programs you are actually using. Also it allows you to get away with running more programs than your RAM will support. However, during "thrashing", basically you have multiple processes that won't fit in RAM, but are trying to be active and do work.
This can happen if there are two or more processes running simultaneously that are using a lot of memory in a system where all the memory is allocated. So the system is constantly moving data from disk, to RAM, and back to disk - i.e. process A needs something that was in RAM but was shunted to the page file, so the system retrieves it, but if memory is really low, it may have to swap another process's memory to disk. Then when process B gets its turn on the CPU, the system may need to go back to disk again and swap in something for process B.
If this is the case then why not just have all the contents of the hard disk always virtual memory?
Doesn't make sense. You're basically saying why not put the whole disk in the page file or swap partition. The page file or swap partition is just an area of disk meant to be used by the virtual memory system of the CPU/OS, but it isn't magically faster than the rest of the disk for any reason.
EDIT: I see everyone is saying the purpose of virtual memory is so that RAM appears to be bigger, but isn't the point also having to do with the adress space inside processes, for example each process appears to have it's own address space?
Each userspace process has its own address space. It begins at address 0 and goes up to the maximum that it was allocated by the OS. The CPU's MMU maps userspace memory addresses to actual memory addresses transparently to the userspace process.
You seem to be thinking "virtual memory" in this context is something different from your physical RAM, and it's not. It's merely another view of physical RAM created for a userspace process. So, if you have a 3TB hard disk, you can't even do this unless you have 3TB of real RAM, plus what you need to run your programs. Plus every time you update the RAM you'd have to update the hard disk, so unless you really need to read 3TB of data very fast, it's pointless.