<aside> 💡 “운영체제 : 아주 쉬운 세가지 이야기”를 읽으면서 핵심 내용을 정리하였습니다. 이화여대 반효경 교수님의 운영체제 강의를 듣고 복습 차원에서 책 한권을 완독해보고자 합니다. 잘못된 정보가 있다면 댓글 남겨주시면 감사하겠습니다!

</aside>

세그멘테이션의 한계

논리적인 의미를 가지는 가변크기의 공간으로 메모리를 나눠서 물리 메모리에 올리게 되면 외부 단편화가 발생할 수 있는 태생적인 한계를 가지고 있다.

이를 해결 하기 위해 동일 크기의 공간으로 분할하는 아이디어에 대한 연구가 이루어졌고 이를 **페이징(paging)**이라고 부르게 되었다. 페이징에서는 프로세스의 주소공간을 고정 크기의 단위로 나누게 되고 물리 메모리 또한 **페이지 프레임(page frame)**이라는 고정크기로 나누게 되었다.

페이징의 간단한 예시

https://blog.kakaocdn.net/dn/xE2uI/btrZ4cFYXMs/G3lFdK7ANo5aA2E47kpsY0/img.png

https://blog.kakaocdn.net/dn/5HoOJ/btrZNv1qdQJ/EWRKq0zP3tHWcyrP0vS5w1/img.png

위의 그림과 같이 64바이트의 작은 주소 공간을 16바이트짜리 페이지 4개로 나눌수 있고 이를 물리 메모리의 페이지 프레임에 탑재 한것을 볼 수 있다.(물리 메모리의 페이지 프레임 또한 16바이트)

페이징을 사용 하였을 때 장점은 아래와 같다.

  1. 유연성
  2. 빈공간 관리의 단순화

주소 공간의 각 가상 페이지에 대한 물리 메모리의 위치를 기록하기 위해서 운영체제는 각 프로세스마다 페이지 테이블이라는 자료구조를 가지고 있다. 페이지 테이블의 주요 역할은 주소 변환이다.

페이징 기법의 주소 변환 방법

주소 변환을 위해 먼저 가상 주소를 **가상페이지 번호(virtual page number, VPN)**와 **페이지내에서의 오프셋(OFFSET)**으로 나눈다.

예시에서는 64바이트의 가상주소로 가정하였으므로 6비트의가 필요하고 각 페이지의 크기를 16바이트로하고 총 4개로 나눴기 때문에 2개의 비트로 VPN을 나타낼 수 있다.

https://blog.kakaocdn.net/dn/VK4m9/btrZ2yvGaZn/xMQ4vZlFP8AxxeexwsOduk/img.png

가상 주소 21을 변환해 보면 아래와 같다.