the 32- to 64-bit Problem
in the late 1980s
By the late 1980s, Moore’s Law seemed
cast in silicon, and it was clear that by
1993–1994, midrange microprocessor
servers could cost-effectively offer 2GB–
4GB or more of physical memory. We
had seen real programs effectively use
as much as 4: 1 more virtual memory
than installed physical memory, which
meant pressure in 1993–1994, and real
trouble by 1995. As I wrote in Byte in
September 1991:
5
intel 80286 PhotograPh by henry mühlPforDt, conVex c4600 KeVin D. Kissell
“The virtual addressing scheme often can exceed the limits of possible
physical addresses. A 64-bit address can
handle literally a mountain of memory:
Assuming that 1 megabyte of RAM
requires 1 cubic inch of space (using
4-megabit DRAM chips), 2** 64 bytes
would require a square mile of DRAM
piled more than 300 feet high! For now,
no one expects to address this much
DRAM, even with next-generation 16MB
DRAM chips, but increasing physical
memory slightly beyond 32 bits is definitely a goal. With 16MB DRAM chips,
2** 32 bytes fits into just over 1 cubic
foot (not including cooling)—feasible
for deskside systems…
“Database systems often spread a
single file across several disks. Current SCSI disks hold up to 2 gigabytes
(i.e., they use 31-bit addresses). Calculating file locations as virtual memory
addresses requires integer arithmetic.
Operating systems are accustomed to
working around such problems, but
it becomes unpleasant to make work-arounds; rather than just making things
work well, programmers are struggling
just to make something work….”
So, people started to do something
about the problem.
SGI (Silicon Graphics). Starting in early 1992, all new SGI products used only
64/32-bit chips, but at first they still ran
a 32-bit operating system. In late 1994,
a 64/32-bit operating system and compilers were introduced for large servers,
able to support both 32-bit and 64-bit
user programs. This software worked
its way down the product line. A few
customers quickly bought more than
4GB of memory and within a day had
recompiled programs to use it, in some
cases merely by changing one Fortran
parameter. Low-end SGI workstations,
however, continued to ship with a
32-bit-only operating system for years,
and of course, existing 32-bit hardware
had to be supported…for years. For historical reasons, SGI had more flavors of
32-bit and 64-bit instruction sets than
were really desirable, so it was worse
than having just two of them.
This is the bad kind of “long tail”—
people focus on “first ship dates,” but
often the “last ship date” matters more,
as does the “last date on which we will
release a new version of an operating
system or application that can run on
that system.” Windows 16-bit applications still run on regular Windows XP,
20 years after the 80386 was introduced.
Such support has finally been dropped
in Windows XP x64.
DEC. DEC shipped 64-bit Alpha systems in late 1992, with a 64-bit operating
system, and by late 1994 was shipping
servers with memories large enough
to need greater than 32-bit addressing.
DEC might have requested (easy) 32-bit
ports, but thinking long term, it went
straight to 64-bit, avoiding duplication.
It was expensive in time and money to
get third-party software 64-bit clean,
but it was valuable to the industry as it
accelerated the 64-bit cleanup. DEC was
probably right to do this, since it had no
installed base of 32-bit Alpha programs
and could avoid having to support two
modes. For VMS, early versions were 32-
bit, and later ones 64/32-bit.
Other vendors. Over the next few
years, many vendors shipped 64-bit
CPUs, usually running 32-bit software,
and later 64/32-bit: Sun UltraSPARC
(1995), HAL SPARC64 (1995), PA-RISC
(1996), HP/UX 11.0 (1997), IBM RS64
and AIX 4. 3 (1997), Sun Solaris 7 (1998),
IBM zSeries (2001), Intel Itanium
(2001), AMD AMD64 (2003), Intel EM-
T64a (2004), Microsoft Windows XP x64
(2005). Linux 64-bit versions appeared
at various times.
Most 64-bit CPUs were designed as
extensions of existing 32-bit architectures that could run existing 32-bit binaries well, usually by extending 32-bit
registers to 64 bits in 64-bit mode, but
ignoring the extra bits in 32-bit mode.
The long time span for these releases
arises from natural differences in priorities. SGI was especially interested in
high-performance technical computing, whose users were accustomed to
64-bit supercomputers and could often
use 64 bits simply by increasing one array dimension in a Fortran program and
recompiling. SGI and other vendors of
large servers also cared about memory
for large database applications. It was
certainly less important to X86 CPU
vendors whose volume was dominated
by PCs. In Intel’s case, perhaps the emphasis on Itanium delayed 64-bit X86s.
By 2006, 4GB of DRAM, typically consisting of 1GB DRAMs, typically used
motorola mc68020
32-bit; 32-bit addressing
c
I16LP32 on MC68000
in Bell Labs Blit terminal
iBm 370/xa
adds 31-bit mode
for user programs,
24-bit mode
still supported
c
Amdahl u TS (32-bit S/370)
uses long long, especially
for large file pointers
intel 80286
allows 16MB of real
memory, but restrictions
keep most systems
at 1MB
c
unix workstations
generally use ILP32,
following unix
on vAX systems
c
Convex (64-bit vector
mini-supercomputer)
uses long long for
64-bit integers
1981
1982
1983
1984
1985