> For the complete documentation index, see [llms.txt](https://riverallzero.gitbook.io/summary/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://riverallzero.gitbook.io/summary/operating-system/virtual-memory.md).

# Virtual Memory

실행하고자 하는 프로그램의 일부만 메모리에 적재해 실제 물리 메모리 크기보다 더 큰 프로세스를 실행할 수 있게 하는 기술

### 메모리 할당 방식

* 세 가지 방식 모두 작은 빈 공간들이 여러 개 남아 메모리가 낭비되는 **외부 단편화**가 발생

#### 최초 적합(first fit)

운영체제가 메모리 내의 빈 공간을 순서대로 검색하다가 적재할 수 있는 공간을 발견하면 그 공간에 프로세스를 배치하는 방식 프로세스가 적재될 수 있는 공간을 발견하는 즉시 메모리를 할당하므로 검색을 최소화할 수 있고 빠른 할당이 가능하다.

#### 최적 적합(best fit)

운영체제가 빈 공간을 모두 검색해 본 후, 프로세스가 적재될 수 있는 공간 중 가장 작은 공간에 프로세스를 배치하는 방식

#### 최악 적합(worst fit)

운영체제가 빈 공간을 모두 검색해 본 후, 프로세스가 적재될 수 있는 공간 중 가장 큰 공간에 프로세스를 배치하는 방식

### 외부 단편화 해결 방안

#### 압축

* 빈공간들을 하나의 공간으로 모으는 방법
* 오버헤드 발생

#### 페이징

* 메모리와 프로세스를 일정한 단위로 자르고 잘린 조각을 메모리에 불연속적으로 적재하는 방법
* 프로세스가 물리 주소에 불연속하게 적재되어도 CPU가 보는 논리 주소에는 연속적으로 배치되도록 페이지 테이블 이용(논리 주소는 페이지 단위, 물리 주소는 프레임 단위)
* 페이지 테이블은 논리 주소를 물리 주소로 매핑
