What is virtual memory?
Virtual memory is a technique used in
computers to access and save information in "abstract"
locations, rather than exclusively in RAM. This level of
abstraction is provided by the Operating System in
coordination with Hardware, and provides great flexibility
over a wider variety of computer configurations. In
specific, using virtual memory you can often accomplish more
with less RAM.
The whole issue starts with the fact that
computer programs can only operate from, and save and
retrieve working information directly to and from, "real
physical RAM". Though information and programs are stored on
your hard disk, they must be copied into RAM to be
used.
Traditionally, when computer programs
used memory they would read & write information directly
to & from each "real physical RAM" location. For
example, if the "user name" was at memory location
"00001230", then it was actually at "00001230" in the
physical RAM computer chip.
In recent years, most operating systems
provide a new method called "Virtual Addressing". When
"Virtual Addressing" is enabled, each time a program
accesses memory the operating system "looks up" the "real
physical RAM" location corresponding to the "Virtual Memory"
location - then the program can save and retrieve
information to and from the appropriate "real physical RAM"
location. In this case, if the "user name" was at memory
location "00001230", then it may actually be at "00408740"
in the physical RAM computer chip (any RAM location).
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 "infromation 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 memory can be used to store
information that will not fit in the RAM. In such a case,
the Hard Disk is called "backing
storage".
On the negative side, when the "information" stored at a "Virtual
Address" is not already in "real physical RAM", instead
being 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 the information is restored
into "real physical RAM" (swapping information in
from backing storage). "Thrashing" is a term often used to
refer to a computer when its memory is full enough, or the
virtual system is bad enough, that the "swapping" causes speed
degradation which is noticable. 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 the 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
only available in more recent processors. Wihtout an MMU,
every memory lookup, somthing that happens constantly, would
require significant extra work.
It is the objective of the Vitual 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 infrequenlty 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 noticable
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.
|