32 bit OS RAM limitation.

i just read a paper named Memory Hole in Large Memory X86 Based Systems

They decribe the device memory & physical memory conflict described in this thread. However, i don't think i'm properly understanding what the PCI hole is. There's a pic in there describing a memory map of a computer with 1gb of ram. It shows that the device memory is always set with the highest address at the 4gb limit. I guess device memory uses these addresses to avoid conflict with physical memory. but they go on to say

This rest of paper further explores the memory hole and other related issues. It also explores the reasons why a 64-bit processor and a 64-bit operating system won't simply fix this problem.
Before we explore the details for the apparent missing memory, let's take a look at the problems associated with breaking the 4 GB limit. First, let's do a little review of the basics.


they say the reason is because the bios always loads device memory at the 4gb edge regardless of what cpu or OS you are running
 
Sorry but i dont agree with anything stated.

Yes the BIOS doesnt know what OS you are running. But at teh same time what does the BIOS Care? The BIOS is not what is affected by the 4GB limit. IT is the OS.

So what does the BIOS have to do with hardware addressing? IF you have 8GB or are running 64 Bit how would the BIOS know NOT to take out that hardware mapping.

Maybe back in 2004 when this article was written and 32 Bit CPU's and that were the normal and standard then yes, i could see this meaning something.

I dont get what they are saying. The BIOS doesnt care. The BIOS recognizes all the RAM. So what does that have to do with hardware mapping? Wow...

I cant say much else. Cause that paper is just all types of wrong to me.

Yes i know that the BIOS is the starting point and that the hardware is first recognized there. But how it is recognized in the BIOS serves no relation to how it is shown or used by the OS. Windows cant even recognized some devices that the BIOS can. So that makes no sense to me there.

To further that if you are not using 4GB of RAM as they make many references to how could you possibly be using the highest end of the memory reference for hardware mapping....

I think that article is seriously outdated.
 
So what does the BIOS have to do with hardware addressing?

...

Yes i know that the BIOS is the starting point and that the hardware is first recognized there. But how it is recognized in the BIOS serves no relation to how it is shown or used by the OS. Windows cant even recognized some devices that the BIOS can. So that makes no sense to me there.

It seems the bios act as a middleman between the OS and the hardware. I think that when the OS wants to interact with the hardware, it uses the information loaded by the bios (mainly hardware addresses).


How can we prove which addresses are in use by device memory?

BIOS definition by The Linux Information Project (LINFO)

The BIOS is also used after the computer has booted (i.e., started up). It acts as an intermediary between the CPU (central processing unit) and the input and output devices. This eliminates the need for the operating system and application programs to be aware of the details (e.g., hardware addresses) of the input and output devices. And when device details change, only the BIOS needs to be updated. These changes can be made by a user by entering the BIOS configuration mode when the computer first starts up (which is usually accomplished by pressing a specified key as soon as the computer begins to start up).
 
this vbscript will generate a csv in the same folder that lists all device memory addresses in use. funny some starting addresses are greater than 4072644351 for my system. i only have two gigs of physical ram.

Code:
'http://www.cruto.com/resources/VBScript/vbscript-examples/hardware/memory/List-Device-Memory-Addresses.asp

'On Error Resume Next

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colItems = objWMIService.ExecQuery _
    ("Select * from Win32_DeviceMemoryAddress")

txt = "Name,Starting Address,Ending Address" & vbcrlf

For Each objItem in colItems
    'Wscript.Echo "Ending Address: " & objItem.EndingAddress
    'Wscript.Echo "Name: " & objItem.Name
    'Wscript.Echo "Starting Address: " & objItem.StartingAddress
    'Wscript.Echo

    
    txt = txt & objItem.Name & "," & objItem.EndingAddress & "," & objItem.StartingAddress & vbcrlf

Next

set filesys = createobject("Scripting.FileSystemobject")

set file = filesys.createtextfile(".\devicememadds.csv")

file.write txt

file.close

set file = nothing

set filesys = nothing

msgbox "done"





edit - erf, my pc is assigning addresses close to the 4gb limit. i'll try this on a x64 box and compare
 
Windows doesnt address hardware teh same way as Linux. So quoting something from the Linux Information Project is not going to affect how Windows recognizes the hardware.

I can tell you for a fact that Windows doesnt use the BIOS. Easiest way to prove it.

Set your configuration so that the Boot Drive and your main OS Drive is the 2nd Drive 2nd Partition.

I bet you any money that Windows will show it as the first drive first partition.

Cause that is the way it is designed. So if you can trick it so easily with something as simple as a hard drive swap, then there is no way that the BIOS is acting as a gateway for Windows.

Yes, you can use the BIOS as a method to trouble shoot a Windows problem. Like if a device isnt working or what not. But the BIOS is by far a means for Windows to co-operate with the hardware. Not anymore. They got past the dependencies of that a long time ago.
 
I can tell you for a fact that Windows doesnt use the BIOS. Easiest way to prove it.

Set your configuration so that the Boot Drive and your main OS Drive is the 2nd Drive 2nd Partition.

I bet you any money that Windows will show it as the first drive first partition.

Cause that is the way it is designed. So if you can trick it so easily with something as simple as a hard drive swap, then there is no way that the BIOS is acting as a gateway for Windows.


I don't understand what you mean by setting the boot drive as the 2nd drive 2nd partition.


Also, try this without any network connection. boot to windows. check the date. reboot. enter bios config. change the date to a few days prior. save. reboot into windows. check the date. The windows date changed with the bios change.

This is because the date and time for any pc is controlled by the bios. Whenever Windows needs to make a change to the date & time, it will send the request to the bios and the bios makes the change.



I'm finding clarity in the paper describing the memory hole. They're saying that a 32bit processor can map up to 4gb of ram. They call this the processor address space. The processor address space contains two separate address spaces: device memory address space and physical memory address space. The device memory address space ends at the top of the processor address space (4gb) and extends down. The device memory address space is the memory hole. The size of this space is variable as it contains the addresses of the IO devices such as video ram, agp aperture, and mmio.

The device memory address space and physical address space can overlap. You notice this when you add 4gb of ram to a 32bit Windows pc. The physical memory address space will only be as large as the processor address space minus the device address space. This is why the device address space is descibed as a memory hole. When you run a pc, whether 32bit or 64bit, it will always assign the addresses near the 4gb limit to the device address space. If the physical address space overlaps the device address space, the physical addresses are lost.

4 GB RAM showing up as 3, BIOS memory hole and all that



next question, why are windows server memory limits higher than windows desktop os?
 
I've been into computers for quite a few years, especially Linux.

Linux does not have limits on the available RAM, not like windows does.

However, there IS a way to use more than 4Gb RAM with windows.

I was running Windows XP pro on a computer that was stolen from me.

It had the usual 4Gb RAM limit, but I put another 4Gb of RAM into that computer,
and used the extra RAM as the /tmp folder by formatting the RAM
at bootup, renaming /tmp to /tmp1, then recreating /tmp as a link to the RAM,
copying any files from /tmp1 to that "external" drive.

It made a HUGE difference, especially in speed.

At a normal shutdown, files from the /tmp link were copied to /tmp1, to save
them to be recopied at the next bootup.

It worked very well.

However, I'm now using win7 which is still carrying the 4Gb RAM limit.

The bootup files and process is different than XP, so I haven't done the
same thing; not yet, anyway.

Once I get a handle on how to control and modify the bootup processes of win7,
I'll do the same thing.

But when I booted into linux (via a CD or USB stick and having linux itself
installed on an external hard drive), all the available memory was used, no problems.

So if you want to use more ram, it can be done.

I will probably do it myself, once I get a handle on exactly how to control how win7
boots up and shuts down.

If anyone has the info on exactly how win7 boots up and how to control it,
or has a link to website with this info, then I would appreciate it.

- Tony
 
Back
Top Bottom