Post

페이징과 세그멘테이션 - 1

페이징과 세그멘테이션

메모리를 효율적으로 운용하기 위해서 컴퓨터의 발생부터 사람들의 많은 노력이 있었다. 그냥 일괄처리 시스템이라면 메모리 0번지부터 차근차근 써버리고 해제하면 되겠지만 PC의 시대가 도래하면서 여러가지 프로그램을 한번에 처리해야할 필요성이 생겼다. 그리하여 메모리 운용의 가장 최신 기술이 세그멘테이션과 페이징인것이다.

이러한 세그멘테이션과 페이징에 대해서 알아보도록 하겠다.

1. 페이징

물리 메모리를 특정 크기로 잘라서 운용하는 것을 말한다. 메모리를 선형주소라고 부르는 가상의 주소와 실제 메모리의 주소를 뜻하는 물리주소로 나누어서 관리하고 해당 물리주소를 찾아 갈 수 있는 테이블을 운용하여 필요한 데이터를 불러오는 식이다. 이렇게 실 주소와 가상 주소로 나눠서 관리하면 여러 이점이 있다.

1) 페이징의 장점

가. 프로그램을 짤 때 메모리를 혼자 전체 다 쓰는 것처럼 짜도 된다.

어차피 선형 주소를 이용하여 관리하기 때문에 물리 메모리를 프로그램 한 개가 다 쓰는 것처럼 짜도 조각 조각 나뉘어 따로 관리된다. 개발간에 고려할 사항이 줄어드는 것이다.

나. 프로그램이 실제 물리 메모리보다 더 큰 메모리를 요하더라도 구동할 수 있다.

물론 프로그램 구동 중간중간에 메모리에 들어가있는 데이터를 교체해줘야하는 빈도는 높겠지만 선형 주소로 관리되기 때문에 물리주소와 매핑만 시켜주면 프로그램을 구동하는데는 아무런 문제가 없기에 실제 물리 메모리에 선형 메모리가 성능적인 문제만 제외한다면 전혀 구애 될 필요가 없다.

다. 메모리를 공유할 필요가 있는 프로그램의 경우 구현하기 쉽다.

물리 주소 페이지 한 개를 각 프로세스의 선형 주소와 연결하여 메모리를 공유하는 것과 같은 효과가 나기때문에 프로세스가 메모리를 공유해야할 일이 있다면 이런경우 매우 효과적으로 처리 할 수 있다.

OS를 만드는 사람이 조금 생각하고 고민해야한다는 점과 전체 프로그램을 물리 메모리에 통째로 올려서 구동할때보다는 성능이 떨어진다는 점만 제외한다면 다른 모든 이점들이 단점을 상쇄하고도 남기때문에 오늘날의 대부분의 OS는 페이징 방식을 차용해서 메모리 매니징을 제공한다.

2) 페이징의 원리

물리주소는 순수하게 해당 메모리의 어디 위치에 데이터가 있느냐에 관한 것이지만 페이징에서 사용하는 선형 주소는 비슷하지만 조금 다르다. 물리주소를 얼마의 크기로 나누냐에 따라서 단계가 다르지만 기본적으로 선형주소의 특정 부분으로 각 단계를 알아낼 수 있다는 점에서 동일하다.

32bit 보호모드에서 물리주소를 4KB로 나눌때로 예시를 들어보겠다. 해당 예시를 그림으로 그리면 다음과 같다.
img.png

예시로 든 경우 그림을 보면 선형주소가 디렉터리, 테이블, 오프셋 세부분으로 나눠져 있는 것을 볼 수 있다. 이 세 부분은 각각 나타내는 부분이 있는데 이건 필요한 페이지를 갖고 오기 위한 절차를 살펴보면 잘 알수가 있다. 맨 처음 필요한 페이지를 찾기 위해서는 CR3라는 컨트롤 레지스터에서 페이지 디렉터리 기준 위치를 갖고온다. 그리고 선형 주소에서 디렉터리 부분을 갖고와서 기준 주소에서 선형주소의 디렉터리를 엔트리 인덱스로 삼아 찾아가면 페이지 테이블의 기준 주소를 찾을 수 있고, 해당 기준 주소로 페이지 테이블을 찾아가서 선형 주소의 테이블 값을 엔트리 인덱스로 찾아가면 4KB의 페이지의 기준 주소를 찾아갈 수 있으며 마지막 선형 주소의 OFFSET으로 해당 페이지의 어느 위치에 데이터인지 알 수 있다.

모드에 따라 페이지의 사이즈와 절차의 수는 다르지만 이렇게 필요한 테이블을 순차적으로 타고가는 구조는 동일하며 세부적인 비트만 달라진다.

3) 페이징의 종류

가. 32bit 보호 모드

32bit 보호모드의 경우에는 물리주소를 4KB로 나누고 선형주소를 3단계로 나누거나, 물리주소를 4MB를 2단계로 나누고 선형주소를 2단계로 나누는 두가지 방법이 있다. 물론 물리주소 확장 기능을 쓰면 물리주소를 4KB로 나누고 4단계로 나누거나, 물리주소를 2MB로 나누고 3단계로 나눌 수 있다.

나. 64bit IA-32e 모드

PAE(물리 페이지 확장) 기능이 자동으로 활성화되어 작동하게 된다. 64bit IA-32e 모드의 경우 물리주소를 4KB로 나눌 경우 선형주소를 5단계로 나누거나, 2MB로 나눌경우 선형 주소를 4단계로 나눌 수 있다. 이는 운용가능한 물리주소가 더욱 커졌기 때문에 당연히 단계를 늘어난 것이고, 큰 방향이 달라지진 않았다.

참고 문헌

  1. 64Bit 멀티코어 OS의 구조 - 한승훈 저
This post is licensed under CC BY 4.0 by the author.