• We’re currently investigating an issue related to the forum theme and styling that is impacting page layout and visual formatting. The problem has been identified, and we are actively working on a resolution. There is no impact to user data or functionality, this is strictly a front-end display issue. We’ll post an update once the fix has been deployed. Thanks for your patience while we get this sorted.

Addressable memory

MustPost

Golden Member
I just read that P6 procs have a 36bit address bus.

Is this true, and if so can current OSs(ie Windows XP) address more than 4 Gigs?
 
No. 36-bit addressing is used through the Page Size Extension flag (PSE36), but it is not a flat 64GB addressable space. 4GB (32-bit) is the largest flat addressable space on any 32-bit processor.
 
Isn't the 36 bit addressing essentially analogous to the old 24bit addressing on 286's? The 286 could only address 1 16bit pages at a time but could switch between up to 256 pages and thus achieve 16Meg paged addressing?

And can XP or Linux use the page extensions?
 
36-bit addressing is used through the Page Size Extension flag (PSE36), but it is not a flat 64GB addressable space.

Do you have a link that explains how it's used then, or have time to type something up for me =) I was under the impression that an OS that supported the 36-bit addressing could have a flat 64G addressable, but then again I'm still wet behind the ears with this memory management stuff.
And can XP or Linux use the page extensions?

I believe NT 4 Enterprise, Win2k, XP and Linux all support it to a certain extent.
 
<<4GB (32-bit) is the largest flat addressable space on any 32-bit processor. >>

Doesn't that depend on how you define a 32-bit processor?
 


<< Do you have a link that explains how it's used then, >>


All right, now you've made me get off my ass and actually go look. I'm thumbing through ye old Intel Architecture Software Developer's Manual Volume 1 - Basic Architecture and this is what it says in essense.

The P6 and above have 36bit addressing but it is not flat. Only 32bit at a time can be flat as one would expect. But the deal is, memory can be broken up into 16383 different pages. The location of these pages is set by software (usually OS). The thing is, the processor can't handle addresses bigger than 32bit dirrectly so it divides memory up into pages. You can set which page you are on by setting the page registers and then you can read data from that page. If you want to read data from a different page, then you have to first change to that other page.

If you only want to use flat addressing, then you just set the page registers to all point at the start of main memory and then never change pages again.

If you had 8GB of memory on your machine, the program can set one page register to point to the first 4GB and when it needed some data from the upper 4GB, it would have to change the value in the page resigster to point to the upper 4GB.

There are actually 6 page registers and they are 16bit registers. The memory pages can overlap and they page can be of various sizes up to 4GB.
The 6 registers are:
CS = code segment
SS = stack segment
DS = data segment
ES = data segment
FS = data segment
GS = data segment
So the technique is essentially the same as in the old XT/AT days except with bigger pages.

Back in the DOS days, programs had Far pointers and Near pointers. But now with Linux and Windows programming, I've never seen any such Far pointers. I wonder if programs can even directly use more than 4GB in these systems?
 
Back
Top