The matter is a bit complicated. I'll offer quick answers first, and then add a rather lengthy analogy, which (in the past) has helped me to explain the technical details.
First, some quick answers:
FreedomWings: For example I have a 1GiB card, I play a none Large Address Aware game like Oblivion. Do I only get to use 1GB system RAM (with the 1GiB VRAM of course) or do I get the 2GB system and all the VRAM on my card?
You get 2GB system RAM and all the VRAM on your card. The VRAM is not "deducted" from your main memory, it just occupies a portion of the available address space. (If that's too technical, see my analogy further below.)
FreedomWings: And say the game is Large Address Aware. Do we then get 3GB system RAM plus the VRAM or is the VRAM included in the 3GB.
A game that is Large Address Aware can allocate up to 4GB of address space. This is independent of the actual physical RAM in your machine. Your amount of VRAM does not influence this. However, if you have a 32-bit Windows, then the operating system is limited to 4GB of address space, and has to reserve some of that space for resources like the video card. Typically (in 32-bit Windows) the operating system allows programs to use only 2GB of address space, no matter whether or not they are Large Address aware. In such an environment, making a porgram large address aware simply does nothing. Most 32-bit Windows version can be set up so that they allow programs to occupy a larger part of the available address space, e.g. 3 GB. In this case, programs that are large address aware can allocate up to 3 GB of memory. However, Windows now has less address space available for its own processes, which may cause problems, particularly when you have a lot of VRAM. In some configurations, it may not be possible to hand over 3 GB to the program. Whether or not this will occur, depends on your mainboard, your graphics card, and your operating system. It's not a question that can be easily answered, basically only people with exactly the same hard- and software configuration as yourself can provide a truly reliable answer.
FreedomWings: And for a 64 bit OS do we get 4GB plus the VRAM or is the VRAM included in the 4GB.
In a 64 bit OS, a program that's large address aware can allocate up to 4 GB of memory. The VRAM is totally separate from that. The operating system has a huge address space to work with, so it can hand over 4 GB of it to the program, and still have enough address space to account for system resources. You need to understand that the limitation is one of address space, not of physical memory (again - if that's too technical, see below).
korell: A 32-bit OS can address a maximum of 4GB of memory:
2^32 bytes = 4294967296 bytes = 4194304 Kilobytes = 4096 Megabytes = 4 Gigabytes
However, the addressable memory for a 32-bit application is only 2GB. Why is this?
Because 32-bit Windows reserves 2 GB of address space for its own processes and resources.
korell: Next up, how is the 2GB addressable memory allocated? If the GPU has 2GB memory on it, does that take up the full 2GB addressable space or does the system RAM take priority? Or is there a set size set aside for the GPU memory with the rest taken up by system RAM?
That depends on the specific combination of mainboard (BIOS), graphics card, Windows version, and drivers. With some earlier combinations, a 1 GB graphics card would need to occupy 1 GB of address space. This became impractical when the memory on graphics cards began to outgrow the 2 GB limit all by themselves. Modern cards can work with less address space, but it depends on your BIOS and on your software (operating system, drivers) whether your machine can make use of that.
korell: Lastly, I've heard of programs that can patch 32-bit applications so that they become large address aware (which also helps stop them crashing by hitting the 2GB cap). Is this something that we will have to come to do as normal as systems get more and more memory (both system and GPU)? And what programs are recommended to do this? How do we even know which programs need to be made large address aware?
As a general rule, _only_ make a program large address aware if it's crashing and if you can see (in the task manager) that it uses up at least 1.5 GB of memory.
Making a program large address aware is a very simple change - it's achieved by switching a single bit in the program's header. There are numerous "patch" programs which can do this. I don't know of a specific one that I would recommend, just choose one that has a lot of downloads. The process is so simple that I doubt that any patch program could get it wrong.
The problem is rather that not every application can handle large addresses. The patch programs only set a flag that tells the operating system "Hey, this application can handle addresses larger than 2GB". They don't check whether the programs actually _can_ handle those addresses - in fact, checking that would require a thorough analysis of a program's code, and is way out of scope for those patch programs. So, making a program large address aware may very well break it, because it may have been written in a way that it can't correctly interpret addresses larger than 2GB.
That's the quick answers I can provide, I'll post my (non-technical) analogy in the next post. :)
Feel free to ask questions if you have them, the matter is rather technical, and understanding it correctly requires knowledge of technical details that users aren't otherwise required to have (and which therefore isn't widespread).