The Linux kernel just uses two set of segments for address space
separation. There is nothing funny about it; it was mostly a "it's
there, we might as well use the bloody thing for something." Of
course, some of us remember when Linux only had one linear address
space for all processes, and actually used segmentation for isolating
processes; this also limited these early Linux systems to 63 64MB
processes. Back then we were much more worried about the 16MB RAM and
64MB partition size limitations; the former which still lives in the
form of a Config.in question, since long obsolete...
I think what Alan was referring to was the possibility of running
Multics-style segmentation (the i386 segmentation and ring mechanisms
were basically Multics rip-offs, and Intel still managed to get a
patent on it!) complete with 48-bit pointers (16-bit selector+32-bit
offset). The advantage is that most fandango on core and array
overruns are automatically caught, the disadvantage is that lugging
around those 48-bit pointers and reloading segment registers all the
time is a bloody waste of time.
I still, however, believe we should use %gs for the glocal storage
pointer on the i386 (for multithreaded apps.) On machines with a real
register file this would of course be kept in a normal register, but
on the i386 there are only five registers left once %ebp is made frame
pointer and %ebx PIC pointer.
I would personally have been much happier had base-index addressing
been implemented from %esp (this is a flaw in the i386 instruction
set, not a Linux flaw) and left %ebp a general-purpose
PGP public key available - finger firstname.lastname@example.org
I don't work for Yggdrasil, but they sponsor the linux.* hierarchy.
"The earth is but one country, and mankind its citizens." -- Bah=E1'u=
Just Say No to Morden * Save Babylon 5: http://www.babylon5.com/cmp/sup=