[comp.society.futures] Memories...

bzs@ENCORE.COM (Barry Shein) (12/20/88)

A few weeks ago I posted a note from Computerworld about NEC investing
in a 16Mbit DRAM production facility. I started doing some arithmetic
and it suddenly occurred to me that we may be on the verge of the
other side a memory problem, too much?!

32MB and 64MB single boards manufactured from 1Mb DRAMs are relatively
common today in medium-sized systems. If the supply leap-frogs to 16Mb
then those become 0.5GB and 1.0GB respectively.

The address space on most CPUs today is 32 bits (hmm, for arguable
values of "most", well, very common anyhow.) In fact, it's usually a
little less, 31 bits is often all you can use. That's 2GB or two or
four of those boards, not a whole lot. Then bango, you're full up,
can't use anymore physical memory. Anyone know what the address space
is for the RISC processors which are becoming so popular?

At that point vendors have two choices, change CPU architecture
(relatively painful) or find some sort of workaround.

For typical workarounds we can look to the past, there are two major
versions which have been used (with various variants):

1. Separate I&D space (a la the PDP-11), instructions are stored in
one address space and data is stored in another thus doubling the
theoretical address space (although I suspect needs are assymmetric
with data running out long before instruction space.) This works by
the CPU fetching instructions relative to one address space and then
fetching the data they refer to from another, fairly simple.  Unix
still has some scars from coping with those days (was nargs() a victim
of separate I&D? I don't remember.)

2. Allowing (eg) 31 bits per process but being able to have many of
those in memory at once, a context switch now involves switching a
bank register to extend the memory being addressed (a relatively
painless architecture extension which only the O/S will see.) I
believe OS/370 has used this approach, probably others (PDP-10?)

This is fairly transparent but of course still allows one only the old
address space worth of memory (it only enhances multi-processing by
minimizing access to secondary storage.) Of course, in this day and
age it will be user processes which want the memory, in many instances
simple time-sharing is becoming less important, this doesn't work.  I
would imagine it also makes sharing physical pages between two such
processes nearly impossible (?)

Hybrids of these two schemes are of course possible, they're not
mutually exclusive. Other temporary possibilities are to do things
like use the extra memory as ram disks etc, I consider that begging
the question.

Fortunately we live in a more (software) portable world and new
processors won't be the end of the world although I have no doubt
there will be a fair amount of pain going to longer pointers, programs
which make assumptions etc.

The remaining question is, 48 bits or 64 bits for the next
generation?

	-Barry Shein, ||Encore||

asp@puck.UUCP (Andy Puchrik) (12/21/88)

In article <8812200325.AA12574@multimax.encore.com>, bzs@ENCORE.COM (Barry Shein) writes:
> The address space on most CPUs today is 32 bits (hmm, for arguable
> values of "most", well, very common anyhow.) In fact, it's usually a
> little less, 31 bits is often all you can use. That's 2GB or two or
> four of those boards, not a whole lot. Then bango, you're full up,
> can't use anymore physical memory. Anyone know what the address space
> is for the RISC processors which are becoming so popular?

The ever-popular MIPS R2000 has a 4Gb address range, but the address space
is divided into 2 Gb for users and 2 Gb for the kernel.  The TLB
(Translation Lookaside Buffer) gives each user up to 2 Gb of virtual
address space.
-- 
Internet: asp@puck.UUCP				Andy Puchrik
uucp: decvax!necntc!necis!puck!asp		Moonlight Systems
ARPA: puchrik@tops20.dec.com			Concord, MA 01742

Makey@LOGICON.ARPA (Jeff Makey) (12/21/88)

In article <8812200325.AA12574@multimax.encore.com> bzs@ENCORE.COM (Barry Shein) writes:
>The address space on most CPUs today is 32 bits (hmm, for arguable
>values of "most", well, very common anyhow.) In fact, it's usually a
>little less, 31 bits is often all you can use. That's 2GB or two or
>four of those boards, not a whole lot. Then bango, you're full up,
>can't use anymore physical memory.

Be careful not to confuse virtual addresses with physical addresses.
For example, the VAX architecture gives you the use of 1.5 * 2**31
bytes of virtual space, but only 2**30 bytes of physical memory.

>The remaining question is, 48 bits or 64 bits for the next
>generation?

Virtual addresses:

Given that very few computer programs (I said, "few."  I don't want to
hear about *your* monster program!) are capable of making good use of
an entire 32-bit virtual address space, I suspect that 32-bit
addresses are a good tradeoff between addressing capability and
program size (change virtual addresses to 64 bits and *every* pointer
in your program doubles in length).  Certain applications (generally,
scientific ones I would imagine) will want larger virtual addresses;
that's what supercomputers are for.

Physical addresses:

It would be nice to have an architecture that would support really
large amounts (48 to 64 bits worth) of physical memory, but -- once
again -- most applications won't need them so I would expect different
hardware configurations of the same architecture to support different
amounts of physical memory, with the larger capacities costing more.

One practical limit to physical memory size is the time required to
transfer data to/from mass storage (e.g., disk).  Demand paging helps
keep this under control, but you're going to be annoyed when it takes
minutes (!) to write your gigabytes of memory out to disk at the end
of the day (battery backup of memory should be standard to avoid
problems with powerfailures).  Also (and I hope this is obvious!),
more memory than mass storage space is a questionable configuration,
at best.  Will mass storage tecnology be the computing bottleneck of
the future?

To summarize, I feel that 32-bit demand-paged virtual addresses are a
central part of an architecture that will satisfy at least 95% of all
applications for the next 10-15 years.  Systems that run lots of *big*
programs will need to be able to map these 32-bit virtual addresses
into maybe 48 bits worth of physical memory.

                           :: Jeff Makey

Department of Tautological Pleonasms and Superfluous Redundancies Department
    Disclaimer: Logicon doesn't even know we're running news.
    Internet: Makey@LOGICON.ARPA    UUCP: {nosc,ucsd}!logicon.arpa!Makey

dan@WATSON.BBN.COM (Dan Franklin) (12/22/88)

> ... Anyone know what the address space is for the RISC processors
> which are becoming so popular?

I don't know if the RISC chip set inside the RT PC would qualify as
"popular", but as I recall, its physical address space is 43 bits.
(The top 4 bits of each 32-bit virtual address choose one of 16 segment
registers; segment registers are 15 bits wide.  Thus the segment
address + 28-bit offset gives 43 bits.)  I think the current line
may only bring out 12 of those 15 bits, so the current implementations
may be restricted to 40 bits.

	Dan Franklin

bga@raspail.UUCP (Bruce Albrecht) (12/22/88)

CDC Cyber 180's in native mode have up to 2**12 segments of 2**32 bytes,
giving them an addressing space of 2**44.  Disk files are actually memory
segments, reads and writes are handled as page faults.  I'm not sure if
they support files larger than 2**32 bytes, yet, because that would require
the files to span segments.

jbn@glacier.STANFORD.EDU (John B. Nagle) (12/23/88)

      Eventually we have to get away from addressing memory by dense
numbers and go to a naming architecture.  Addressing by pathname is
a distinct possibility.  This idea is not new; it first appeared in
the Burroughs 5000 and English Electric Leo Marconi KDF-9, circa
1960.  But the memories of the day were not large enough to really
require such an architecture.  

     Now that we're getting there, something like this starts to
make sense.  Imagine addresses that look like UNIX pathnames.  At
the lowest level, one has an object that is addressed sequentially,
like a UNIX file.  But in general, sequential units would be single
arrays, or at least no larger than the workspace of a single named
object.  

     Efficient implementation of this concept is quite possible.  It
requires segment registers and cacheing.

     One thing worth realizing, by the way, is that ferroelectric RAM
technology is coming.  Some, perhaps most, 16Mb RAMs will be nonvolatile.
The implications of nonvolatile main storage are interesting.  There
are both good and bad points to this.  Among other things, virus
eradication may become very difficult in an era when clearing RAM is
as traumatic as reformatting a hard disk.

					John Nagle

smryan@garth.UUCP (Xxxxxx Xxxx) (12/24/88)

>CDC Cyber 180's in native mode have up to 2**12 segments of 2**32 bytes,

2**31 bytes, sign bit must be zero.

>                                                        I'm not sure if
>they support files larger than 2**32 bytes, yet, because that would require
>the files to span segments.

Yes. yes.

The Cyber 205 has 48 bit vitual bit address, or 2**45 bytes. Rumour has
if you buy enough disks and memory to complete the address space, they'll
throw in a 205 for free.
-- 
An otter ate beside the rush                                         -- s m ryan
with blinking eyes beneath a bush.                              
He closed his eyes to hide the thought                          -- Andwari's Gem
the salmon soon would be as naught.                                       -- 1/3

janssen@titan.sw.mcc.com (Bill Janssen) (12/30/88)

Remember that the PDP-11/34 type of machine had more physical memory,
128KB, than program address space, 64KB.  The PDP-11/70 addressed this
problem with separate I&D space.

Virtual memory makes the size of physical memory less important.  When
the amount of physical memory goes above the sum of the virtual memory
requirements of all the processes, don't add any more.  The real restriction
on program size seems to be imposed by swap partitions.  Anybody running
a 500MB swap partition?  (Mine is 150MB).

Bill

fbaube@NOTE.NSF.GOV ("F.Baube") (12/31/88)

With the advent of cheap non-volatile RAMs (such as ferro-
electric), isn't there an operating system design issue relating
to whether the dichotomy of core memory versus device-based
storage isn't a bit artificial ? Is there an OS that can run a
program without first loading it, by applying (virtual) program
addresses directly to the device that has been determined to be
byte addressable ?  To rephrase, why should an executable stored
in a RAM disk first have to be copied to main memory in order to
be executed ?

Pardon me if this is an old question.

khb%chiba@Sun.COM (Keith Bierman - Sun Tactical Engineering) (01/04/89)

In article <8812301210.aa25361@note.nsf.gov> fbaube@NOTE.NSF.GOV ("F.Baube") writes:
>
>With the advent of cheap non-volatile RAMs (such as ferro-
>electric), isn't there an operating system design issue relating
>to whether the dichotomy of core memory versus device-based
>storage isn't a bit artificial ? Is there an OS that can run a
>program without first loading it, by applying (virtual) program
>addresses directly to the device that has been determined to be
>byte addressable ?  To rephrase, why should an executable stored
>in a RAM disk first have to be copied to main memory in order to
>be executed ?
>
>Pardon me if this is an old question.

Consider the IBM mainframe extended storage options, or the Cray solid
state disk (common on XMP systems).

Both these system's lack the hardware support for enough memory, so
the RAMdisk is very different that real memory. Cray does not support
any sort of VM, so the RAMDISK is really just that (albeit very, very fast).

IBM does support VM (the OS and the memory system :>), there are
several levels of memory (2 levels of cache on some) followed by real
memory (RAM), followed by extended storage (which can only be spoken
to in special ways) followed by actual disks (and often these are
tiered w.r.t. performance). There is a large overhead in dealing with
overhead memory, so fetching (or writing) byte by byte would be a very
bad move.

With today's machines the different memory systems have very different
characteristics. Loading the program into system memory and then
paging out what turns out to not be useful works out fairly well.

Demand paged systems do pretty much what you suggest, in that
"loading" is very short, execution begins, followed (in nearly all
cases) a page fault, which results in some IO, followed by some
exeuction, etc. 

There was a very cheap 16032 kit for the PC and z80 machines which
used this form of demand paged memory, and it worked out fairly well.
Keith H. Bierman
It's Not My Fault ---- I Voted for Bill & Opus