Where is the i686 kernel

James Wilkinson ubuntu at westexe.demon.co.uk
Wed May 25 16:45:21 UTC 2005

Kreg Schlosser wrote:
> umm this has nothing to do with the memory addressing limit of a 32
> bit processor

Hmm. Yes, and no. I oversimplified. Sorry. There are *two* architectural
limits of a 386. There's the physical memory limit of either 16 MB or 4
GB, which isn't an issue, and the virtual address space of 4 GB, which
is. See http://www.intel.com/design/intarch/intel386/.

Virtual memory is a logical abstraction, physical memory can be

The 1 GB limit (including shared PCI memory) is a kernel optimisation.
By artificially limiting the kernel to 1 GB, the kernel can turn on the
optimisations I described. But this is trying to work around the limited
virtual address space on a 32 bit processor. 64 bit processors, which
have a massive virtual address space, can have these optimisations on
all the time.

It is theoretically possible to equip a 386 with 1 GB of memory[1], and
this would run into the same problems.

There is a kernel setting that allows for more memory than 1 GB[2]: it
turns off certain optimisations. It is independent of the processor
support level (this allows for generic kernels that can access up to
4 GB of memory).

The URL you included:
> http://www.ubuntulinux.org/support/documentation/faq/helpcenterfaq.2004-09-21.1496455883/view?searchterm=RAM
does not contradict what I wrote.

Hope this helps,


[1] My apologies to all my readers who keeled over at the thought of
such an abomination...

[2] HIGHMEM4G: /usr/src/linux/arch/i386/Kconfig includes these lines
that describe the situation:

          Linux can use up to 64 Gigabytes of physical memory on x86 systems.
          However, the address space of 32-bit x86 processors is only 4
          Gigabytes large. That means that, if you have a large amount of
          physical memory, not all of it can be "permanently mapped" by the
          kernel. The physical memory that's not permanently mapped is called
          "high memory".

          If you are compiling a kernel which will never run on a machine with
          more than 1 Gigabyte total physical RAM, answer "off" here (default
          choice and suitable for most users). This will result in a "3GB/1GB"
          split: 3GB are mapped so that each process sees a 3GB virtual memory
          space and the remaining part of the 4GB virtual memory space is used
          by the kernel to permanently map as much physical memory as possible.

          If the machine has between 1 and 4 Gigabytes physical RAM, then
          answer "4GB" here.
E-mail address: james | Important note: when washing your brain out with
@westexe.demon.co.uk  | nitric acid, it is important to stop *after* you've
                      | erased the distressing images and *before* you get
                      | the urge to install AOL. -- Jim Andrew

More information about the ubuntu-users mailing list