Coupon Accepted Successfully!


Memory Organization

The main purpose of a computer system is to execute programs. These programs, together with the data they access, must be in main memory (at least partially) during execution. To improve both the utilization of CPU and the speed of its response to its users, the computer must keep several processes in memory. There are many different memory-management schemes. Since main memory is usually too small to accommodate all the data and programs permanently, the computer system must provide secondary storage to back-up main memory.

Address mapping and translation

Most systems allow a user process to reside in any part of the physical memory. Although the address space of the computer starts at 00000, the first address of the user process does not need to be 00000. In most cases, a user program goes through several steps before being executed. Addresses may be represented in different ways during these steps. Addresses in the source program are generally symbolic. A compiler typically binds these symbolic addresses to relocatable addresses. The linkage editor or loader will in turn bind these relocatable addresses to absolute addresses. Each binding is a mapping from one address space to another. The addresses are translated using the relocation registers.
As in the diagram, the binding of instructions and data to memory can be done at any step along the way:
  • Compile time: If it is known at compile time where the process will reside in memory, then absolute code can be generated. For example, if it is known a priori that a user process resides starting at location R, then the generated compiler code will start at that location and extend up from there. If, at some later time, the starting location changes, then it will be necessary to recompile this code.
  • Load time: If it is not known at compile time where the process will reside in memory, then the compiler must generate relocatable code. In this case, final binding is delayed until load time. If the starting address changes, we need only to reload the user code to incorporate this changed value.
  • Execution time: If the process can be moved during its execution from one memory segment to another, then binding must be delayed until run rime.

Logical and physical addresses

An address generated by the CPU is commonly referred to as a logical address, whereas an address seen by the memory unit, i.e., the one loaded into the memory address register of the memory, is called physical address. The logical address space may also be referred to as virtual address space. Now, since as user we only see the logical address, but the system works with physical addresses, some mapping must be done to allow correct working. This mapping is done by the memory-management unit (MMU).

Base and Limit Registers

Base and limit registers are special registers in the system which are used by MMU to convert logical addresses to physical addresses. Base register keep the starting address of physical memory where the program resides where as the limit register keeps the length of the program. These registers allow protecting the OS code and data as well as a simpler model of executable (user) code. The purpose of having base-limit register pairs is to address specific sub regions of the memory unit.
Logical Address MMU Physical Address
The limitation of the base-limit register pair scheme of memory partitioning is that the OS code has to fill in the actual memory address values in the registers when a program is loaded. This implies that for every program to be loaded, the OS has to manipulate certain references to memory addresses in the program. Additional hardware support of physical address generation using a combination of base register and the logical address generated by the CPU allows dynamic relocation without the CPU overheads of physical address computation.

Memory management unit

A memory management unit (MMU) is a computer hardware component responsible for handling accesses to memory requested by the central processing unit (CPU). Its functions include translation of virtual addresses to physical addresses, memory protection etc.
The MMU uses a base register also called relocation register. The value in this register is added to the logical address, to get the physical address. That means, depending on the value of the relocation register, the logical address is relocated to its actual physical location.

Memory partitioning

The main memory must accommodate both the operating system and the various user processes. The memory is usually divided into two partitions, one for the resident operating system, and one for the user processes. If single partition scheme is used, then we need to protect the operating-system code and data from changes by the user processes and also protect the user processes from one another. This can be done by loading the relocation and limit registers with the correct values as part of the context switch.
For multiple partitions, one of the simplest methods is to divide memory into several fixed-size partitions. Each partition may contain exactly one process. Thus, the degree of multiprogramming is bound by the number of partitions. When a partition is free, a process is selected from the input queue and is loaded into the free partition. When the process terminates, the partition becomes available for another process. Other method is to consider all memory as one large block, a hole. When a process arrives and needs memory, we search for a hole large enough for this process. If we find one, we allocate only as much memory as is needed, keeping the rest available to satisfy future requests. Thus after some time, there is at any time a set of holes, of various sizes, scattered throughout memory. The operating system keeps a table indicating which parts of memory are available and which are occupied.
The set of holes is searched to determine which hole is best to allocate. First-fit, best-fit, and worst-fit are the most common strategies used to select a free hole from the set of available holes.


By partitioning the memory and allocating them using various strategies, the memory is fragmented. Fragmentation can be internal and external. When fixed size partitions are used, the process may or may not be the same size as the partition. Thus, some amount of memory is left unused leading to internal fragmentation.
When variable size partitions are used, problem of external fragmentation is created as a lot of memory may still be available but since it is not contiguous, it cannot be allotted to a process. The solution to the external fragmentation problem is compaction. The goal is to shuffle the memory contents to place all free memory together in one large block.

Test Your Skills Now!
Take a Quiz now
Reviewer Name