Virtual Memory is a memory management technique that is implemented using both hardware and software
The basic concept of Virtual Memory is to store instruction and data of a program in the secondary memory and to load them in the main memory when they are required.
It means it is not necessary to load all of a process into main memory during its execution.
Only those portions which are actually being used at any instant need to be present in memory. The rest of program is kept in secondary memory.
This technique is useful as large virtual memory is provided for user programs when a very small physical memory is there.
The Virtual Memory Concept is called so because instead of holding the entire program, the main memory holds only a portion of the program currently being executed.
Virtual Memory is commonly implemented by demand paging and demand segmentation.Edit
Unlimited Address Space:
A program is no longer controlled by the amount of physical memory that is available.
Using Virtual Memory user is able to write programs for a very large virtual address space and this simplifies the programmer’s task.
Increased Degree of Multiprogramming:
With the implementation of virtual memory, each user program occupies less physical memory, as a result more programs can be run at the same time.
Thus, CPU utilization and throughput increases.
Less I/O is need to load each user program into memory, so each user program will run faster.
It requires additional hardware support for address translation.
The another disadvantage of virtual memory is the possibility of thrashing due to excessive paging and page faults.