What is virtual memory?
Virtual memory (VM) is the computer technique of saving
and accessing information via "abstract" locations, rather
than using "fixed" physical locations. It is a system wide
abstraction that is provided in coordination with hardware.
Using VM provides great flexibility over a wider variety of
computer configurations. This flexibility helps accomplish
more with less Random Access Memory (RAM).
The whole issue starts with the fact that computer
programs can only operate within "real physical RAM". This
is because all other storage hardware is much too slow for
regular operation. As a result, information and programs
stored on your hard disk must be copied into RAM to be used
(this is why opening an application or document takes time,
noisily spinning your hard disk).
Before VM, when computer programs used memory they would
read and write information directly to & from each "real
physical RAM" location. For example, if the name "George"
was at memory location "00001230", then "George" was
actually at "00001230" in the physical RAM computer chip.
This "pre-VM" technique wasted valuable RAM when could not
be packed efficiently; it also precluded use of slower and
cheaper storage locations for information rarely used.
However, in more recent years most operating systems
provide a new method called "Virtual Addressing". When
"Virtual Addressing" is enabled, the information at a memory
location may actually be stored anywhere - the operating
system "looks up" the "real physical RAM" location
corresponding to the "Virtual Memory" location when
required. For example, though "George" was in VM location
"00001230" it may actually be stored at "00408740" in the
physical RAM computer chip. The VM abstraction provides
opportunity for more efficient and creative storage.
Obviously, there is some overhead for the extra level
of processing when using Virtual Memory. However, this
extra level allows the operating system to play tricks with
"information stored" which may provide more benefit than
speed degradation. For example, the size of Virtual Memory
can be set larger than the real Physical RAM and hard disk
storage can be used for information that will not fit in the
RAM. In such a case, the Hard Disk is called "backing
storage".
On the negative side, when required "information"
stored at a "Virtual Address" is in "backing storage" then
normal computer operation must be suspended. At this time,
called a "page fault", room is made in "real physical
RAM" (perhaps swapping information out to
backing storage), and required information is moved into
"real physical RAM" (swapping information in
from backing storage). "Thrashing" occurs when memory is
full enough, or the virtual system is bad enough, that the
"swapping" causes speed degradation which is
noticeable. This often appears to users as "jerky pauses
without apparent cause".
On the positive side, computers perform the
"Virtual Address" to "real physical RAM" lookup in hardware,
which can be extremely fast. In the case where required
information is already in "physical RAM", the lookup has no
speed penalty. This is why you need at least a 68030
generation of computer hardware to use Virtual Memory - it
is simply too slow to "lookup" in software, without the
Memory Management Unit (MMU) hardware in more recent
processors. Without an MMU, every memory lookup would
require significant extra work which might slow down the
computer by multiple factors.
It is the objective of the Virtual Memory system to
minimize the negative impact using intelligent information
location management, while providing as much memory as
possible. A "good" virtual memory system should not slow
down as long as you use less of your virtual memory than you
have physical memory. Even better, such systems should be
able to operate smoothly when you are using more than your
real RAM, since most of what you are "using" may be "idle"
and can be left in backing storage. However, no matter how
good the memory management, eventually all VM systems will
slow down your machine if you stress them far enough that it
is not possible to keep all frequently used memory in RAM.
Early Apple VM
The early Virtual Memory implementation from Apple
provided the simple benefit that you could specify a
"larger" amount of virtual memory than you had "real
physical RAM". This would be accomplished by "Swapping" some
data to the hard disk when not in use, "Swapping" it back in
when needed ("Swapping" other data out). Since only one spot
in memory may be touched at once, it is possible to have an
unlimited amount of memory this way.
The drawback where is that the "Swap" to and from disk
can slow the computer down since hard disks are thousands of
times slower than "real physical RAM". So, the objective is
to keep infrequently used memory on the hard disk, and
frequently used memory in RAM. Unfortunately, Apple's
implementation was very poor, even up to recent Mac OS
versions, and virtual memory slowdowns were noticeable under
all conditions.
Drawbacks of traditional Apple VM
- Slow down resulting from poor implementation
- Required reserved disk space equal to VM size
What new innovations have there been?
First along came Connectix Virtual, which was able
to operate without reserved disk space equal to VM size.
Though this may have required some extra processing, the
advantage was obvious back in the days of expensive disks.
This product also supported some third party accelerators
that Apple VM did not support.
Next came Connectix Ram Doubler virtual memory,
whose main addition was that it reserved some of your "real
physical RAM" for use "Swapping compressed data" in place of
the "disk" backing storage - since even compressing
into RAM may be much faster than using the disk. Though the
result here is that you have less "real physical RAM", since
some was in use by RAM Doubler for its own "compressed
backing storage" purposes, the product appeared to be faster
than traditional implementation. It is not clear where the
speed up came from, since undoubtedly a number of other
invisible optimizations were added as well. Moreover, the
speedup was never measured in any testing we are aware of.
Since then, a number of innovations, including
file mapping and
others, have been added to Apple
VM and RAM Doubler VM. Most of the enhancements are
optimizations on the implementation and we are not aware of
the details.
|