가상메모리란(Virtual Memory)
가상메모리란?
프로세스를 메모리와 보조저장장치에 나누어 저장, 프로세스를 실행하기에 충분히 큰 메모리로 보이게 만드는 기법이라고 볼 수 있다.
OS 마다 세부 구현 방법은 요구 페이징, 요구 세그멘테이션 등으로 방법은 다르다.
가상메모리 등장 배경
한 프로세스가 모든 메모리에 적재되어야지만 프로그램이 실행된다는건 가장 간편하지만 방법일수도 있겠지만, 실행되는 프로세서의 크기가 물리적인 메모리의 크기로 제한된다는 기본적인 한계가 있다. 즉 물리 메모리보다 큰 크기의 프로세스는 실행될 수 없다는 제약이 따르게 된다는 단점이 발생하게 된다. 또한 동시에 수행되는 프로세스들의 크기의 총합은 물리 메모리보다 클 수 없다는 단점도 발생하게 된다. 이와같은 단점을 보완하기 위해 등장한 개념이 가상메모리이다.
- 32비트 CPU 물리 메모리의 최대량 : 2^32B = 4GB
- 64비트 CPU 물리 메모리의 최대량 : 2^64B = 2^24TB = 16EB (16EB까지 인식하는 OS는 없으며, 실제적으로는 8GB~2TB -윈도우 버전에 따라 다름- 이다.)
가상메모리와 MMU(Memory Management Unit)
그렇다면 본론으로 다시 돌아가서, 메인 메모리는 512MB인데 어떻게 프로세스에 4GB 바이트가 할당되어 프로그램이 실행이 되는걸까?
이를 이해하려면 먼저 물리 주소와 가상 주소에 대한 이해가 필요하다.
물리 주소는 메모리에 실제 올라가는 주소이고,
가상 주소는 프로세스가 참조하는 주소로 프로세스마다 독립적이며 0번지부터 시작하는 주소이다. 또한 CPU가 보는 논리 주소이기도 하다.
페이징이란?
각각의 프로세스에서 필요한 논리주소 공간을 연속 메모리할당 처럼 반드시 주기억장치에 연속할당하고자 하는게 아니라
한 프로세스에 속하는 논리주소 공간을 페이지 단위로 나누어서 각 페이지를 비연속적인 공간에 할당하는 메모리 관리기법이다.
dynamic allocation의 한 형태로 MMU에 의해 모든 가상 주소는 MMU에 의해 물리 주소로 매핑방식을 이용한다.
- Page : 가상 메모리를 고정된 크기의 블록으로 분할한 단위
- Page Frame : 물리 메모리를 하나의 Frame과 같은 크기의 블록의로 분할한 단위
* 페이지와 페이지 프레임은 메모리를 일정한 크기의 공간으로 나누어 관리하는 단위이기때문에 크기가 같다.
* 프레임을 할당받지 못한 페이지들은 외부 저장장치에 저장되며 이때도 프레임과 같은 크기 단위로 관리된다.
페이징을 사용하는 이유
페이징기법을 사용하게되면 외부 단편화 문제를 해결할 수 있게된다.
페이지 테이블 엔트리(PTE , Page Table Entry)
페이지 테이블의 레코드, 즉 각 항목으로 페이지 기본주소와 플래그 비트의 내용이 기록된다.