18 - vm_paging
segmantation과 paging은 작은 단위로 virtual address를 맵핑하기 위해서 만들어낸 것
가변 크기의 조각들로 메모리를 분할하는 segmentation은 공간 자체가 단편화(fragmentation) 되는 태생적인 문제를 가지고 있다.
- 페이징(paging) : 프로세스를 일정 크기인 페이지로 잘라서 메모리에 적재
- 가변 크기의 논리 세그멘트 (예, 코드, 힙, 스택)로 나누는 것이 아니라 고정 크기의 단위로 나눈다. 이걸 고정 분할이라 하고 단위를 page 라고 부른다
- 물리 메모리도 page frame 이라고 불리는 고정 크기의 슬롯의 배열.
- 프레임 각각은 하나의 가상 메모리 페이지를 저장할 수 있다.
<aside>
💡 핵심 질문 : 페이지를 사용하여 어떻게 메모리를 가상화할 수 있을까
세그멘테이션의 문제점을 해결하기 위해 페이지를 사용하여 어떻게
메모리를 가상화할 수 있는가? 기본적인 기법은 무엇인가? 공간과 시간 오버헤드를 최소로 하면서 그 기법을 잘 동작하게 만들기 위한 방법은 무엇인가?
</aside>
가상 메모리 사이즈 : 32비트 → 2^32 = 4294967296 = 4GB 테니스 코트이면
64비트는 유럽만하다
- virtual memory 랑 physical memory를 동일한 크기로 자른다 - 고정 분할
- vm을 동일한 크기로 나눈 걸 page, pm을 동일한 크기로 나눈 걸 frame.
- vm의 page와 pm의 frame을 매핑시키고 linear 하게 실행될 수 있도록 연결시켜주고 관리해주는 테이블이 page mapping table. 운영체제는 프로세스 마다 페이지 테이블(page table)이라는 자료 구조를 유지한다.

CPU 내부에 페이지 테이블을 만들면,
- 장점 : 주소 변환 속도가 빠르다
- 단점 : CPU 내부에 사용할 수 있는 레지스터는 한정되어 있어 페이지 테이블의 크기 매우 제한.