OS

분산 메모리 할당 - 페이징

Debin 2021. 11. 18.
반응형

앞에서는 연속 메모리 할당에 대해 알아보았다.

이번에는 분산 메모리 할당이다. 고정 분할의 내부 단편화 문제를 가변 분할로 해결했다. 그러나 가변 분할에서 외부 단편화 문제가 발생했다. 이런 문제를 해결하고자 분산 메모리 할당이 등장했다. 

분산 메모리 할당은 한 프로세스의 메모리 할당 시 이 프로세스를 나누어서 분산적으로 메모리에 할당하는 것이다.

분산 메모리 할당의 종류는 페이징 기법, 세그먼트 기법, 페이지화된 세그먼트 기법이 있다.

먼저 2가지 단어 페이지와 프레임에 대해 알아야 한다.

페이지의 뜻 부터 알아보자. 페이지는 프로세스를 일정 크기의 블록으로 나눈 단위이다.

프레임은 메로리를 고정 크기 블록으로 나누는 단위이다.

페이징을 진행한다면 프로세스를 나눈 크기만큼 메모리도 똑같은 크기로 나누어야한다. 즉 페이지 크기 = 프레임 크기다.

페이징 시스템에서 물리주소 변환에 대해 알아보자. 우선 논리적 주소에서 물리적 주소로 주소 계산은 MMU를 사용한다.

 

프로세서가 생성한 논리 주소는 페이지 번호와 변위(offset)로 이루어진다. 페이지 번호는 페이지 테이블 색인이다. 테이블 색인을 통해 페이지 테이블을 살펴보면 메모리에서의 각 페이지의 기준주소를 가지고 있다. 변위는 상대주소(페이지 시작위치로부터 프레임내 위치 표시)다. 실제 메모리 주소 = 기준 주소 + 페이지 변위다.

어떤 페이지가 어느 프레임에 들어갔는지 알기 위해 페이지 테이블 (또는 페이지 맵 테이블)을 사용한다.

논리 메모리 주소를 보고 어디까지가 페이지 번호인지는 페이지 테이블 엔트리 개수를 보고 정할 수 있다.

또한 논리주소 범위와 물리 주소 범위는 다를 수 있다.

 

방금 설명한 것이 페이징 기법이다. 프로세스마다 페이지 테이블이 필요하다. 프로세스의 수가 증가하면 페이지 테이블의 수도 증가한다. 이는 메모리 공간의 수요가 증가한다는 것이다. 페이지 테이블의 크기를 줄이는 방법이 필요한데, 페이징 기법을 보완할 2가지 방법이 등장한다. 바로 워드 페이징 기법과 2차 레벨 페이징 기법이다.

 

먼저 워드 페이징 기법이다.

워드 페이징에서 워드란 무엇인가? 워드는 4바이트를 의미한다. 논리 주소의 영역을 크게 4개의 영역으로 나눈다. 논리 메모리의 크기는 4바이트고 물리 메모리는 8바이트다. 4바이트에 따라 논리 메모리와 물리 메모리의 영역을 나눈다. 이 논리 메모리와 물리 메모리를 매핑하는 과정이다. 페이지 테이블도 마찬가지로 4바이트로 구성된다.

 

워드페이징을 이용한 페이징 기법

 

위와 같은 과정으로 매핑된다. 논리 주소가 0이면 우선 페이지 테이블 5*4=20으로 매핑된다. 그러면 offset의 값을 보고 내부 위치가 결정되게 된다. 만약 논리주소가 3이면 5*4+offset=23이다. offset이 3이기 때문이다.

 

다음은 2차레벨 페이지 테이블 구성이다.

페이징 - 동적 재배치의 형태이다. 논리 주소는 실제 주소를 매핑한다.

메모리의 각 프레임에 대한 기준 레지스터 테이블을 사용하는 것과 유사하다.

먼저 논리주소는 1차 수준 테이블의 인덱스와 2차 수준 테이블의 인덱스와 변위(offset를)가지고 있다.

아래와 같이 그림 통해 확인할 수 있다.

 

2차레벨 페이지 기법

 

각 테이블 인덱스에는 다음 목표에 대한 주소 값이 들어있다.

 

페이지 스케줄링 - 장기 스케줄러는 프로세스 (n개 페이지)를 메모리에 할당하기 위해 n개 프레임이 준비되면 스케줄링한다. 그림과 같다.

 

페이지 스케줄링

 

페이지 테이블의 구현이다. 페이지 테이블은 프로세스 PCB에 저장된다.

우선 페이징 기법을 하면 2번의 메모리 접근이 일어난다. access for page table access와 access for data and instruction 때문이다. 보다 빠른 실행을 위해 여러가지 페이지 테이블의 구현 방법이 필요하다.

이런 페이지 테이블을 구현하기 위해 4가지 주소 변환 방식이 있다. 직접매핑, 연관매핑, 연관/직접매핑, 역매핑이 있다.

 

직접 매핑은 페이지 테이블 전체가 물리 메모리의 운영체제 영역에 존재하는 방식이다. 별다른 부가 작업 없이 바로 주소 변환이 가능하기 때문에 직접 매핑이라고도 부른다. 페이지 기본 주소를 레지스터에 둔다. 페이지 테이블 기준 주소는 페이지 테이블 기준 레지스터 PTBR에 저장된다. 이와 같이 논리 주소에는 페이지 번호 p와 변위 d가 존재한다. 그러면 페이징 테이블을 b+p로 위치를 찾아서 물리주소 값을 알아낸다. 이후 물리주소와 변위 d를 이용해 물리 메모리에 접근한다.

 

다음은 연관매핑이다.

이는 연관메모리 TLB를 이용하여, 페이지 테이블을 가져온다. TLB는 빠른 검색이 우수하며, 메모리 비용이 비싸다.

TLB를 이용하면 마치 캐시를 사용하는 것과 비슷하다. 직접 매핑 테이블에서에서 한번 물리 주소로 변환한적이 있으면 캐시처럼 변환 색인 버퍼(TLB)에 저장한다. 이러면 다음부터 접근할 때 속도가 훨씬 빠르다.

 

적중율 80%

레지스터 접근시간 : 50ms

메모리접근시간 : 750ms 일 때

메모리 유효접근시간은? 0.8 *50ms + 0.2 * 750ms= 190ms 이다.

 

집합 연관 매핑은 앞에서 언급한 2차레벨 페이지 테이블 구성 방법과 동일하다.

 

기존 매핑 방식은 논리주소를 기준(페이지번호)로 페이지테이블이 생성되는 구조다.

역매핑 방식은 물리주소를 기준(프레임번호)로 페이지테이블을 생성하는 역발상이다.

장점으로는 메모리 공간을 줄일 수 있다.

필요공간은 페이지 갯수 * 프로세스 개수, 프레임 수다.

반응형

댓글