Kautalya Mishra Programmers when confronted with the problem of having programs that were too big to fit in to the available memory came up with a solution of splitting the program in to pieces called ‘Overlays’. Overlay 0 would start running first followed by the next overlay. The overlays were kept on the disk and swapped in and out of the memory by the operating system dynamically. Although the work of swapping Overlays in and out was done by the system, the LABORIOUS work of splitting the program in to Overlays had to be done by the programmer. The basic idea of Virtual Memory is to keep only those parts of the program currently in use in the memory and the rest on the disk drive. For example: a 16M program can run on a 4M machine by carefully choosing which 4M to keep in memory at each instant, with pieces of the program being swapped between disk and memory as needed. It can work in a Multiprogramming system, with bits and pieces of many programs brought to the memory at once by the Operating System. While a program is waiting for part of itself to be brought in, it is waiting for I/O and cannot run, so the CPU can be given to another process, the same way as for any other multiprogramming system. The position and function of the MMU When a page being referred to by the virtual address is not loaded as a page frame in to the memory, a page fault is occurred which causes the CPU to trap the Operating System. The Operating System removes a page frame from the memory and loads the new page in to the freed location at the same time making appropriate changes to the page table. There are a number of page replacement algorithms available such as The Optimal Page Replacement Algo, The Not Recently Used Page Replacement Algo, FIFO etc. Problems faced with Virtual Memory implementation: • Possibly large page table • Thrashing Solution: • Use multilevel page tables. • Use TLB (Translation Lookaside Buffer) or sometimes called ‘Associative Memory’. • Page fault rates can be reduced by using a ‘Working Set Model’ approach or a ‘Prepaging’ approach. • Increase RAM! Some advanced systems give programmers some control over the memory map so that they can used it in a non-traditional way. It allows for the possibility of sharing the same memory space between two or more processes. Distributed Shared Memory – The idea here is to allow multiple processes over a network to share a set of pages, possibly, but not necessarily, as a single shared linear address space Operating Systems – Design and Management Andrew S. Tanenbaum and Albert S. Woodhull http://computer.howstuffworks.com/virtualmemory.htm http://en.wikipedia.org/wiki/Virtual_memory