By Kato Mivule
According to Silberschatz et al, virtual memory is a method that allows the running of processes that are not entirely in memory; virtual memory involves the separation of logical memory from physical memory as viewed by users. Such a separation of logical memory from physical memory allows the operating system to provide large virtual memory even when actually little physical memory is available. 
Microsoft describes virtual memory as virtual memory functions that allow a process to manipulate and determine the status of pages in its virtual address space. 
One of the ways in which virtual memory allocation is implemented is Demand Paging where pages are only loaded to memory when needed during program execution time.  
Another virtual memory allocation technique is Copy-on-Write that allows the parent and child process to initially share the same pages. If a number of processes need access to the same page, then those processes are given pointers to that same needed page and it is marked as ‘copy-on-write’, allowing the processes to access the shared data page.  
Yet another virtual memory implementation technique is Page Replacement in which free frames that are not utilized are sought out in physical memory and utilized. If no free frame is found, then the operating system will search for the least utilized frame also called the victim frame which is then freed and a page is allocated to the freed frame.  
According to Silberschatz et al, Main Memory is both the physical memory and logical memory located inside the computer but separate from the Storage Memory like hard-drives and external drives. Main Memory is referred to as RAM or Random Access Memory due to its volatile nature – that is, it losses contents once power is switched off.  
Memory allocation in Main Memory involves a number of techniques that include address binding in which the logical addresses are mapped to physical addresses when processes are loaded into main memory at compile time, load time, and execution time.  
Another technique of memory allocation in Main Memory is dynamic loading and dynamic linking in which routines are not loaded until called for the former and linking is only done only when required for the later. The routines are kept on the hard disk in a relocatable load format and only called when needed for dynamic loading.  
Swapping is another technique that involves keeping a process out of memory to the hard disk and then brought back to main memory for execution at a later time.  Paging is another memory management technique that permits the physical address space of a process to be non-contiguous, avoiding fragmentation; physical space on main memory is allocated to a process in form of a fixed magnitude called frames.   Segmentation is another type of memory allocation technique in main memory that involves diving memory into small segments as defined by the user. 
 Abraham Silberschatz, Peter B. Galvin, Greg Gagne, Operating system concepts, Edition 9, illustrated, J. Wiley & Sons, 2009, ISBN 978-0-470-12872-5, Page 357-408.
 “Virtual Memory Functions (Windows).” [Online]. Available: http://msdn.microsoft.com/en-us/library/aa366916(VS.85).aspx. [Accessed: 28-Oct-2010].
 Sibsankar Haldar, Alex A. Aravind, “Operating Systems”, Pearson Education India, 2009, ISBN 8131730220, 9788131730225, Page 254
 Craig Partridge, “Gigabit networking”, Addison-Wesley, 1994, ISBN 0201563339, 9780201563337, Page 205
 D. M. Dhamdhere, “Operating Systems: A Concept-based Approach,2E”, Tata McGraw-Hill, 2006, ISBN 0070611947, 9780070611948, Page 266
 “main memory (computer technology) — Britannica Online Encyclopedia.” [Online]. Available: http://www.britannica.com/EBchecked/topic/358612/main-memory. [Accessed: 28-Oct-2010].
 Nell Dale, John Lewis, “Computer Science Illuminated”, Jones & Bartlett Learning, 2009, ISBN 0763776467, 9780763776466, Page 340
 Er. Vivek Sharma, Er. Manish Varshney, Shantanu Sharma, “Design and Implementation of Operating System”, Laxmi Publications, Ltd., 2010, ISBN 9380386419, 9789380386416, Page 281-282
 Balagurusamy, “Fund Of Computers”, Tata McGraw-Hill, ISBN 0070141606, 9780070141605, Page 249
 Linda Null, Julia Lobur, “The essentials of computer organization and architecture”, Jones & Bartlett Learning, 2006, ISBN 0763737690, 9780763737696, Page 303
 Mohamed Rafiquzzaman, “Microprocessors and microcomputer-based system design”, CRC Press, 1995, ISBN 0849344751, 9780849344756, Page 19