palladin9479 :
@monkey,
That region between 3.5 and 4GB is what is used to peripheral memory. You would use DMA transfer with a memory window if you had to manually move data into the GPU's memory. GPU's have an onboard memory management unit (MMU) that handles their memory, the PC doesn't manage the GPU's memory. The GPU's driver will act as the go-between for transferring data from main system memory to GPU memory. The OS has no reason to ever directly address GPU memory.
That upper 512MB is a standard amount set aside since the days of NT 4.0, it's never been more or less. Prior to NT 4.0 (DOS / Win 3.0) it would use the IBM specified standard region of A000 -> FFFF which was know as upper memory. This was back when PC's had 512~640 KB of memory. As OC's grew beyond 1MB the OS would access the memory beyond 1MB through the eXtended memory specification (XMS) which would ignore the region between 640K and 1024K. There was a rival memory specification known as Expanded Memory Specification (EMS). EMS was accessed through a 64KB page that existed inside upper memory, typically between E000 and EFFF. Once we moved to the 80386 and the dawn of 32-bit CPU's the OS's moved to a flat memory model where all memory was directly addressable, early DOS implementations (Windows / DOS Games) would simply skip the first 1MB entirely and run everything out of the upper sections. Eventually NT 4.0 decided to completely do away with all that and instead have device drivers map their respective HW into the highest accessible region available to a 32-bit CPU, the upper 512MB. The guys at MS thought that 3GB+ of memory would be more then enough for anything in that era, computers rarely had more then 8 or 16MB and servers rarely more then 32 to 64MB.
So think of that last 512MB as the "upper memory" region of the 32-bit CPU era.
2^32 is
4294967296 or
100000000000000000000000000000000 in binary.
Adjust for the value of zero and we get,
4294967295
11111111111111111111111111111111
512MB would be represented as
11111111111111111111111111111
So the upper memory range of the NT x86 kernel is anything above
11100000000000000000000000000000 or
E0000000 as hex.
3758096384 as Decimal (bytes).
3584MB
3.5GB
If you look into your device manager and set it to show devices by type, you'll see the memory layout. You will have a few things near the bottom due to BIOS requirements for booting (first 16MB). Then you'll have a huge empty space, then you'll start seeing stuff at D0000000 (3.25GB)or E0000000 (3.5GB). The D0000000 range is typically used for permanent BIOS assigned IGA memory and various other buffers. It doesn't have to be. Windows will have drivers put their assignments into the E0+ block. The absolute lowest possible is the C0 block which would be 3GB on the dot, if this happens someone needs to check their motherboard BIOS settings or contact their MB manufacturer to see if there is a way to lift it. In either case the permanent IGA shared memory should be put in the D0 range. If the IGA needs more memory then the OS can provide it via GART.
ok so i had to register just to tell you that you are awesome and i have already learned alot from this short forum. your memory reference explanation was perfectly understandable. you rock, ill buy you a beer anytime.
What i was originally scouring the interweb for was an answer to an honest and probably frequently wondered or asked question:
Here we go
-Running a MAX RAM 4GB system, Nvidia discrete graphics with onboard 128mb dedicated ram but share-able nonetheless.
and
-64bit windows7 Ultimate allows 1900mb video ram, can play almost any recent game but BF4 beta lags alot-basically unplayable.
and
-32bit sameOS says 3.75GB usable RAM in properties. Video card says dedicated 128mb in DXDIAG. no shared memory there?
so the question is
-COULD USING a 32bit system offer the best performance? THIS SYSTEM SPECIFIC of course. because i could easily play around with drivers and find something that would address an otherwise usable area of system ram? I mean like bios would detect the OS after a few successful boots and allocate the remaining 512mb to the video? instead of the windows dynamic graphics crap
I am the proud original owner of a Dell Vostro 1500.
-Core2Duo 2nd Gen 32x2, 32x2, 2mb @1.4Ghz
--Nvidia GeForce 8400GS (G86M) PCi-E 16x gpu@800Mhz mem128mb dedicated @800Mhz, shader@800Mhz
-Chipset PM965 Crestline ICH8M
-My memory is rated @800mhz but it is only showing a top speed of 333mhz?!?! Dual Channel Twin 2GB Hyundai crap from FRYS on sale lol couldnt pass up the upgrade!
the thing is in high performance mode it shows 400mhz?
but still it should be faster. its the fastest ram this board can handle supposedly.
down to the point- on 32bit i get outstanding framerates for low end games, but incompatibility errors with MW4, Blackops2 etc. but in 64bit i run these no problem, only around 60 frames on low. it plays fine when all specs sites say it shouldnt but it all runs playable.
Could using 32bit OS @3.75GB Ram Usable and proper drivers (like a windows vista driver in compatibility mode) to render 768mb Dedicated video ram? the Actual BUS Speed shows 800Mhz where the ram should be, which is where the video memory is clocked at, so i am thinking the bios will make the connection and dedicate resources accordingly, correct?
because as it is, i believe that the 64bit windows is sharing graphics memory space in my ram. i have widgets that are accurate and show all my data (something about a gauges i have to have them on everything) at total idle my memory clock (on the GPU) is 400mhz, 8mb+/- running Aero and gadget platform. the intersesting thing is not the amount of usage, but rather the speed. it seems that 64bit is forcing the bus speed to match the idle GPU? it throttles down to 337mhz and that is when i notice system stability issues. its like it doesnt want to cool down. if i load the system to 50%ram and an avg cpu load of 14-25% (iTunes or my virtual router does this) the cooling fan kicks on, and the whole system is super fast, click boom no lag no waiting. idling is a whole different story- its like it gets stuck at 798mhz CPU speed or something? thats what the widget registers at least. it seems like it does not want to fire up per say. in 32bit this does not happen, but i get different issues like memory reference errors and application incompatibility. I am no noob and i have played with various cpu control apps and have programmed some adjustments to the dual core throttle policy, but i really dont know what im doing with memory.
this is where i need your help:
in your opinion, with these circumstances, would a 32bit OS with tuning to all the bios and video functions be helpful, or should i call it a day and stick with the 64bit and its weak, definitely not optimal, basically generic experience and it is what it is?
i dont know what i can really do but i think im going to play around with a 32bit OS a little more and see how it turns out. ill report back