Virtual memory is a technique that allows processes to exceed the size of physical memory. It divides programs into pages stored on disk until needed. When a page is accessed, it is copied into RAM. Addresses are translated between virtual and physical addresses by an MMU. Pages are replaced using policies like FIFO. Thrashing occurs when too many page faults slow processing. Demand paging loads pages on first access, while segmentation divides programs into variable blocks. Combined systems use both paging and segmentation.