가상메모리는 메모리 관리 기법의 하나로 컴퓨터가 실제로 이용 가능한 메모리 자원을 추상화하여 이를 이용하는 사용자들에게 매우 큰 메모리로 보이게 만드는 것

가상주소 라고하며, 실제 메모리상에 있는 주소를 실제주소 라고 한다. 가상 주소는 MMU(메모리관리장치)에 의해 실제 주소로 변환되며, 이 덕분에 사용자는 실제 주소를 의식할 필요 없이 프로그램을 구축할 수 있다.페이지 테이블로 관리된다.페이지란?
- 가상 메모리를 사용하는 최소 크기 단위.
- 전체 메모리를 일정 크기의 '페이지'라는 블록으로 나눕니다. 이 '페이지' 단위로 메모리가 관리되고, 가상 메모리 주소를 물리 메모리 주소로 변환하는 과정에서도 사용된다.
- 메모리 관리를 효율적으로 할 수 있게 하며, 프로세스 간의 메모리 격리를 통해 안정성과 보안성을 높이는 데에도 기여한다.
페이지폴트란, 프로세스의 주소 공간에는 존재하지만 지금 RAM 에는 없는 데이터에 접근했을 경우 발생한다. 페이지폴트와 그로 인한 스와핑은 다음 과정으로 이루어진다.
1. CPU는 물리 메모리를 확인해 해당 페이지가 없으면 트랩을 발생시킨다.
2. 운영체제는 CPU를 멈춘다.
3. 페이지테이블을 확인해 가상메모리에 페이지가 있는지 확인하고, 없으면 프로세스를 중단하고 물리메모리에 비어있는 프레임이 있는지 찾는다. 물리메모리에도 없다면 스와핑 발동된다.
4. 비어있는 프레임에 해당 페이지를 로드하고, 페이지테이블을 최신화한다.
5. 중지된 CPU 다시 시작한다.
만약 가상메모리에는 존재하지만 RAM에는 현대 없는 데이터에 접근할 경우 페이지폴트가 발생한다. 이때, 메모리에서 당장 사용하지 않는 영역을 하드디스크로 없기고, 하드디스크의 일부분을 메모리처럼 불러와 쓰는 것을 '스와핑' 이라고 한다. 이를 통해 마치 페이지폴트가 발생하지 않은 것처럼 만듦.
스레싱은 메모리의 페이지 폴트율이 높은 것을 의미하며, 이는 컴퓨터의 심각한 성능 저하를 초래한다.

메모리 할당은 연속할당과 불연속 할당으로 나뉘며, 현대 운영체제는 불연속 할당인 페이지 기법을 기본으로 사용한다.
고정 분할 방식은 메모리를 미리 나누어 관리하는 방식으로, 내부 단편화가 발생할 수 있다.
내부단편화란?
메모리를 나눈 크기보다 프로그램이 작아서 들어가지 못하는 공간이 많이 발생하는 현상
매 시점 프로그램의 크기에 맞게 동적으로 메모리를 나누어 사용한다. 외부 단편화가 발생할 수 있다.
외부단편화란?
메모리를 나눈 크기보다 프로그램이 커서 들어가지 못하는 공간이 많이 발생하는 현상
페이징은 동일한 크기의 페이지 단위로 나누어 메모리의 서로 다른 위치에 프로세스를 할당한다. 홀의 크기가 균일하지 않은 문제가 없어지지만 주소 변환이 복잡해진다.
메모리는 한정되어 있기 때문에 스와핑이 많이 발생한다. 스와핑은 많이 일어나지 않도록 설계되어야 하며, 이는 페이지 교체 알고리즘을 기반으로 스와핑이 일어난다.
FIFO(First In First Out)는 가장 먼저 온 페이지를 교체 영역에 가장 먼저 놓는 방법
LRU(Least Recentle Used)는 참조가 가장 오래된 페이지를 바꾼다. '오래된'것을 파악하기 위해 각 페이지마다 계수기, 스택을 두어야 하는 문제점이 있다.
LFU(Least Frequently Used)는 가장 참조 횟수가 적은 페이지를 교체한다.