Mak said:
I'll let the man speak:
http://forums.2cpu.com/showthread.php?threadid=63004
jeh = Jamie Hanrahan of Kernel Mode Systems, he wrote few things for
Windows Internal series by M. Rusinovich and D. Solomon.
I still don't see how system RAM and video RAM access are related. The thread you referenced says no such thing.
Think of it in terms of code:
function Foo() {
//pointer is a pointer type which is 32bits wide
//so the largest number that it can hold is
//back_buffer is a chunk of system RAM where the graphics are drawn
//video_display is the video card's memory which will display on screen
pointer back_buffer=AllocatedMemory(1000000);
pointer video_display=GetVideoRAM();
//read some graphics data from memory and process it
Read(back_buffer);
Process(back_buffer);
//display it on screen by copying it to the video card's RAM
Copy(video_display, back_buffer);
}
Accessing system RAM is done through a pointer, accessing video RAM is done through a different pointer.
What may be confusing you is memory mapped devices such as writing to a port by writing to a special memory address. For example,
when in VGA, text mode, or CGA mode, you can write to the video card by writing to the system RAM at 0xA8000, 0xB0000, and 0xB8000.
What you're missing is that if a video card has 1GB of RAM, 1GB does not get mapped into system RAM, thus reducing the amount of
system memory by 1GB. Memory mapping only occurs in specific (usually older) situations, so when the card's full memory is accessed
it is done so through DMA (direct memory access), which uses a separate pointer for it. It's like with system RAM back in the DOS
days. You could access system RAM using the easy method, but to use the full thing (EMS, XMS) you had to use another technique in a
different mode.
BTW, you are forgeting about PAE and mixing RAM and vitrtual memory.
I was summarizing, so I did not bother going into too much detail, and I did mentioned virtual.