The Notebook Review forums were hosted by TechTarget, who shut down them down on January 31, 2022. This static read-only archive was pulled by NBR forum users between January 20 and January 31, 2022, in an effort to make sure that the valuable technical information that had been posted on the forums is preserved. For current discussions, many NBR forum users moved over to NotebookTalk.net after the shutdown.
Problems? See this thread at archive.org.

    why 32bits intels can access 4GB only?

    Discussion in 'Hardware Components and Aftermarket Upgrades' started by jsteng, Jan 26, 2010.

  1. jsteng

    jsteng Notebook Consultant

    Reputations:
    3
    Messages:
    179
    Likes Received:
    2
    Trophy Points:
    31
    I am a Machine Language programmer way back in the 286 and earlier.

    Back then, the 16 bit 8086~80286, being a segmented memory architecture, can address 256MB of memory (theoretically if all pins were brought out). Each Segment is 4KB long and with 65536 (16bits) possible number of segments, we get 256MB for the lowly 8086~80286 CPU.

    I thought 386 (32bits) onwards are Segmented CPU architecture also? So how was it that these 32 bits CPUs can only address 4GB of memory? ie, if its got a 32bit segment register and a segment is 4K bytes, the 386 and newer CPUs should be able to address 16TB.... (if all pins were brought out)...

    please update me on what happened why 386 and newer generations could not address more than 4GB of memory without resorting to 64 bits addressign???


    Someone explained to me that the 386 onwards uses a 32bit MMU mapping the 32bit segment address to a 32bit equivalent segment pointer in physical space..
    so does this mean that we now have a MMU that maps 1 byte at a time? WOW! as if, we can have 1 byte long programs?
     
  2. davepermen

    davepermen Notebook Nobel Laureate

    Reputations:
    2,972
    Messages:
    7,788
    Likes Received:
    0
    Trophy Points:
    205
    because we have direct memory access, that means a single register is a direct address into memory. and a single register is 32bits. 2^32 = 4Giga => you can only address 4Gigabytes of memory
     
  3. jsteng

    jsteng Notebook Consultant

    Reputations:
    3
    Messages:
    179
    Likes Received:
    2
    Trophy Points:
    31

    so segmentation was dropped altogether?
     
  4. Lithus

    Lithus NBR Janitor

    Reputations:
    5,504
    Messages:
    9,788
    Likes Received:
    0
    Trophy Points:
    205
    Your data conflicts with mine. The 16-bit 8086 has 4 segments, each 64KB (2^16) long. Thus allowing for a total memory space of 256 KB.

    Current processors (x86-32) don't use segment registers, so they use byte-addressing. So 2^32 = 4GB.
     
  5. davepermen

    davepermen Notebook Nobel Laureate

    Reputations:
    2,972
    Messages:
    7,788
    Likes Received:
    0
    Trophy Points:
    205
    yes. much simpler for the hw, and for compilers. jumping from 16 to 32bit was so massive in terms of possible address space, they knew it will take years till it get a problem. and by then, we can move to 64bit to delay it even much much further.
     
  6. jsteng

    jsteng Notebook Consultant

    Reputations:
    3
    Messages:
    179
    Likes Received:
    2
    Trophy Points:
    31
    Since segmentation is dropped then, the argument is finished: 32bits = 4GB max addressible memory. No segmentation, no headache...

    @Lithus

    256KB? So how did my IBM PC of 1986 had 1MB or RAM?

    Im sure a segment = 4KB; i spent contless sleepless nights programming assembly in those days.. Like i said, 4K segments of 65536 bytes (or 4Kbytes per segment x 65536segments) on 8086~80286 gives us a maximum theoretical addressible memory of 256MB! Not 256KB. But of course not all pins where available and only 20 was used thus a physical limit then of just 1MB.

    From Wiki: