Main Memory Basics
Memory is
central to the operation of a modern computer system. The CPU can only access
its registers and main memory. It cannot, for example, make direct access
to the hard drive, so any data stored there must first be transferred into the
main memory before the CPU can work with it. User processes must be restricted
so that they only access memory locations that "belong" to that
particular process. This is usually implemented using a base register and a
limit register for each process.
Every memory access made by a
user process is checked against these two registers, and if a memory access is
attempted outside the valid range, then a fatal error is generated. The OS
obviously has access to all existing memory locations, as this is necessary to
swap users' code and data in and out of memory.
Address Binding
User programs
typically refer to memory addresses with symbolic names such as "i", "count",
and "average". These symbolic names must be mapped or bound to
physical memory addresses, which typically occurs in several stages:
- Compile Time - If it
is known at compile time where a program will reside in physical memory,
then absolute code can be generated by the
compiler, containing actual physical addresses. However if the load
address changes at some later time, then the program will have to be recompiled.
DOS .COM programs use compile time binding.
- Load Time - If
the location at which a program will be loaded is not known at compile
time, then the compiler must generate relocatable code,
which references addresses relative to the start of the program. If that
starting address changes, then the program must be reloaded but not
recompiled.
- Execution Time - If
a program can be moved around in memory during the course of its
execution, then binding must be delayed until execution time. This
requires special hardware, and is the method implemented by most modern
operating systems.
Logical Versus
Physical Address Space
The address
generated by the CPU is a logical address, whereas the
address actually seen by the memory hardware is a physical address.
Addresses bound
at compile time or load time have identical logical and physical addresses.
Addresses created
at execution time, have different logical and physical addresses.
o
In
this case the logical address is also known as a virtual address,
and the two terms are used interchangeably by our text.
o
The
set of all logical addresses used by a program composes the logical
address space, and the set of all corresponding physical addresses
composes the physical address space.
The run time
mapping of logical to physical addresses is handled by the memory-management
unit, MMU.
o
The
MMU can take on many forms. One of the simplest is a modification of the
base-register scheme described earlier.
o
The
base register is now termed a relocation register, whose
value is added to every memory request at the hardware level.
User programs
work entirely in logical address space, and any memory references or
manipulations are done using purely logical addresses. Only when the address
gets sent to the physical memory, the physical memory address is generated.
Dynamic Loading
Rather than
loading an entire program into memory at once, dynamic loading loads up each
routine as it is called. The advantage is that unused routines will never be loaded;
reducing total memory usage and generating faster program startup times. The
downside is the added complexity and overhead of checking to see if a routine is
loaded every time it is called and then loading it up if it is not already
loaded.
No comments:
Post a Comment