On 29 Oct 2010 at 21:14, Johnny Billquist wrote:
If your program vrites data to address 0, and reads it
back, and get
the same data back, and another program on the same machine, at
roughly the same time, write to address 0, and reads the same data
back, and that data is different than the first programs data, then
I'd say you have virtual memory.
So, your definition ties virtual memory into multi-user access?
That's not the way I learned it.
Consider (again folks, I'm sorry for the reference) the CDC 6600
(circa 1964). Every user is given a relocation address (called RA)
and field length (FL) as a way of partitioning main memory. Each
user's memory addressing space is kept isolated from every other's
and this fits your definiton because one user's location X was
different from every other user's location X and there was no way for
a user to tell what his RA was; i.e. each user was safely "boxed in".
That's not virtual memory by any stretch of the definition. Over-
committing memory meant writing/reading the entire FL of a user to
disk ("rollout" and "rollin").
Now consider the STAR-100 (I think it would qualify as the first
virtual memory machine of CDC), circa 1969. Every user got an
addressing space of 48 bits, but the machine itself had only
512Kwords (64 bit) of physical storage. For production use, most of
the time the system was run in single-user mode (kept thrashing down
with large data sets). That fits my definition of VM because the
user was fooled into thinking that there was more physical memory
than there really was.
Aside from expanding program storage, the large addressing space was
used to map file space (another type of "memory-mapped I/O"), so file
access was actually performed through the paging hardware/software.
That was kind of cool, as the STAR was a memory-to-memory vector
machine, so you could use vector instructions on entire files, rather
than have to issue reads and writes for pieces of a file.
So I think we differ considerably in our definitions.
--Chuck