가상 메모리(virtual memory)는 주기억장치의 이용 가능한 기억 공간보다 훨씬 큰 주소 지정을 할 수 있도록 한 개념으로, 일반적으로 유닉스를 포함한 현대의 범용 컴퓨터들은 가상 메모리를 사용하고 있다. 그러나 매우 빠르고 일정한 응답 시간이 요구되는 내장형 시스템이나 특정 목적을 지닌 컴퓨터 시스템에서는 일반적으로 가상 메모리를 사용하지 않는다.
가상 메모리는 하나의 프로세스 전체가 한 번에 주기억장치 내에 존재하지 않고 일부만 있어도 수행하게 하는 방법을 제공한다. 따라서 가상 메모리를 사용하면 사용자는 실제 주소 공간의 크기에 구애받지 않고 보다 큰 가상 주소 공간상에서 프로그래밍을 할 수 있을 뿐만 아니라, 주기억장치보다 크기가 큰 프로세스를 수행시킬 수 있다.
가상 주소 공간을 구성하는 것을 가상 메모리라 하고, 실제 주소 공간을 구성하는 것을 주기억장치(real memory, main memory)라 한다.
가상 메모리와 아틀라스 컴퓨터
가상 메모리라는 용어는 1962년 영국 맨체스터 대학교에서 제작된 아틀라스(Atlas) 컴퓨터에서 처음 등장했다. 맨체스터 대학교와 영국 페란티(Ferrant) 시, 플레시(Plessey) 사가 공동으로 개발한 아틀라스 컴퓨터의 첫 번째 제품은 맨체스터 대학교에 설치했고, 1962년 12월에 공식적으로 서비스했다. 아틀라스 컴퓨터는 트랜지스터를 사용한 2세대 컴퓨터에 해당한다.
가상 메모리 시스템의 모든 프로세스는 물리 메모리와 별개로 자신이 메모리의 어느 위치에 있는지 상관없이 0번지부터 시작하는 연속된 메모리 공간을 가진다. 논리 주소는 물리 메모리의 주소 공간에 비례하고, 가상 주소는 물리 메모리 공간이 아닌 가상의 주소 공간을 가진다. 가상 메모리의 구성은 크게 프로세스가 바라보는 메모리 영역과 메모리 관리자가 바라보는 메모리 영역으로 나뉜다.
이론적으로 가상 메모리는 무한대의 크기를 갖는다. 그러나 실제로 가상 메모리의 최대 크기는 그 컴퓨터 시스템이 가진 물리 메모리의 최대 크기로 한정된다.
3장에서도 설명했듯이 CPU의 비트에 따라 결정된다. 32bit CPU의 경우 32bit로 표현할 수 있는 최댓값인 16진수 FFFFFFFF, 즉 약 4GB가 메모리의 최대 크기이고, 가상 메모리의 최대 크기도 약 4GB이다.
예를 들면 32bit CPU의 최대 메모리 크기는 4GB이다. 이 시스템에서 각각 4GB 주소 공간을 차지하는 10개의 프로세스를 동시에 실행하려면 운영체제를 포함하여 적어도 4GB의 메모리가 필요하다. 이 경우 가상 메모리 시스템에서는 물리 메모리의 내용 중 일부를 하드디스크의 일부 공간, 즉 스왑 영역으로 옮긴다. 스왑 영역은 하드디스크에 존재하지만, 메모리 관리자가 관리하는 영역으로서 메모리의 일부이며, 가상 메모리의 구성 요소 중 하나이다. 메모리 관리자는 물리 메모리의 부족한 부분을 스왑 영역으로 보충한다. 즉 물리 메모리가 꽉 찼을 때 일부 프로세스를 스왑 영역으로 보내고(스왑-아웃), 몇 개의 프로세스가 작업을 마치면 스왑 영역에 있는 프로세스를 메모리로 가져온다(스왑-인)
가상 메모리의 크기
가상 메모리에서 메모리 관리자가 사용할 수 있는 메모리의 전체 크기는 물리 메모리(실제 메모리)와 스왑 영역을 합한 크기이다.
가상 메모리 시스템에서 메모리 관리자는 물리 메모리와 스왑 영역을 합쳐서 프로세스가 사용하는 가상 주소를 실제 메모리의 주소로 변환하며, 이러한 작업을 동적 주소 변환(DAT : Dynmamic Address Translation)이라고 한다. 동적 주소 변환을 거치면 프로세슥사 아무 제약 없이 사용자의 데이터를 물리 메모리에 배치할 수 있고, 이 과정에서 메모리 관리자는 물리 메모리를 어떤 방법으로 나눌지, 사용자 프로세스를 어디에 배치할지, 부족한 물리 메모리를 어떻게 처리할 지 등의 복잡한 문제를 처리한다.
실제 메모리에 있는 물리 주소 0번지는 운영체제 방식으로 일반 프로세스가 사용할 수 없다. 따라서 가상 처리 메모리 시스템에서는 운영체제를 제외산 나머지 메모리 영역을 일정한 크기로 나눠 프로세스에 할당한다. 메모리 분할 방식은 크게 가변 분할 방식과 고정 분할 방식으로 나뉜다고 했는데 가상 메모리 시스템도 마찬가지다. 가상 메모리 시스템에서 가변 분할 방식을 이용한 메모리 관리 기법은 세그먼테이션, 고정 분할 방식을 이용한 메모리 기법은 페이징이라고 한다.
이 중 세그먼테이션 기법은 가변 분할 방식의 단점인 외부 단편화 등의 문제 때문에 잘 사용하지는 않는다. 또한 페이징 기법은 페이지 관리에 어려움이 있다. 따라서 가상 메모리 시스템에서는 두 기법의 단점을 보완한 세그먼테이션-페이징 혼용 기법을 주로 사용한다.
예를 들면 자리가 8개뿐인 식당이 있다고 가정하자. 이 식당은 항상 많은 손님들로 붐빈다. 보통은 도착한 순서대로 자리를 배정하지만 일행이 다 오지 않았을 때는 순서를 바꾸는 경우도 있을 수 있다. 밀려드는 손님들의 자리 배정과 주문을 관리하는 가장 좋은 방법은 다음과 같이 대기 번호표로 관리하는 것이다.
메모리를 관리할 때도 이와 마찬가지로 매핑 테이블을 작성하여 관리한다. 가상 메모리 시스템에서 가상 주소는 실제로 물리 주소나 스왑 영역 중 한 곳에 위치하며, 메모리 관리자는 가상 주소와 물리 주소를 일대일 매핑 테이블로 관리한다.
메모리 매핑 테이블을 나타낸 것으로 가상 주소가 물리 메모리의 어느 위치에 있는지 알 수 있다. 가상 주소 상의 프로세스 A는 물리 메모리의 세그먼트 0에 위치하고, 프로세스 B는 세그먼트 1에 위치한다. 한편, 프로세스 D의 경우 물리 메모리가 아니라 스왑 영역에 있다. 프로세스 A의 어떤 값이 필요할 때는 물리 메모리의 세그먼트 0에서 원하는 데이터를 가져오면 된다.
매핑 테이블은 물리 메모리가 세그먼테이션으로 분할된 경우뿐 아니라 페이징으로 분할된 경우도 똑같은 방식으로 적용된다. 페이징 기법에서는 사용하는 매핑 테이블은 페이지 매핑 테이블 또는 페이지 테이블이라고 부르며, 세그먼테이션 기법에서 사용하는 매핑 테이블은 세그먼텍이션 테이블 또는 세그먼테이션 매핑 테이블이라고 한다.
고정 분할 방식으로 메모리를 분할하여 관리하는 페이징 기법에서 가상 주소를 물리 주소로 변환하는 방법과 매핑 테이블 관리 방법을 알아본다.
페이징 기법은 고정 분할 방식을 이용한 가상 메모리 관리 기법으로, 물리 주소 공간을 같은 크기로 사용한다. 왼쪽의 가상 주소는 프로세스 입장에서 바라본 메모리 공간으로 항상 0번지부터 시작한다. 가상 주소의 분할된 각 영역은 페이지라고 부르며 첫 번째 영역은 페이지 0, 두 번째 영역은 페이지 1부터 같이 번호를 지정해 관리한다. 물리 메모리의 각 영역은 가상 주소의 페이지와 구분해 프레임이라고 부른다. 프레임도 페이지와 마찬가지로 번호를 지정해 관리한다. 페이지의 프레임의 크기와 같다.
화살표는 가상 주소의 각 페이지가 물리 메모리의 어디에 위치하는지를 나타내고, 페이지와 프레임은 크기가 같기 때문에 페이지는 어떤 프레임에도 배치될 수 있다. 그림에서는 무작위로 배치하여 페이지 0은 프레임 2에, 페이지 1은 프레임 3에, 페이지 3은 프레임 1에 있다. 모든 페이지의 위치 정보 즉 어떤 페이지가 어떤 프레임에 있는지에 대한 연결(매핑) 정보는 페이지 테이블에 담겨 있다.
페이지 테이블은 하나의 열(column)로 구성된다. 모든 페이지의 정보를 순서대로 가지고 있기 때문에 위에서부터 차례대로 페이지 0, 페이지 1, 페이지 2와 같은 프레임 번호를 가지고 있어 추가 열이 없다. 그림에서 페이지 테이블의 첫 번째 칸에 있는 2는 페이지 0이 프레임 2에 있다는 것을 의미하는 것이며, 페이지 테이블에는 숫자만 있는 것이 아니라 페이지 5는 물리 메모리에 없기 때문에 페이지 테이블에 invalid
라고 표시되고, invalid
는 해당 페이지가 스왑 영역에 있다는 의미이다.
그림은 페이징 기법에서 가상 주소가 물리 주소로 어떻게 변환되는지를 보여준다. 예를 들어 가상 주소 공간과 물리 주소 공간을 똑같이 10Byte로 나누었고, 이에 따라 한 페이지 또는 한 프레임은 총 10갸의 주소를 가진다. 즉 페이지 0에는 0~9번지의 10갸의 주소가 페이지 1에는 10 ~ 19 번지의 10개 주소가 있다. 물리 주소 공간도 마찬가지로 각 프레임에 10개의 주소가 있다.
프로세스가 30번지의 내용을 읽으려고(read)할 때의 주소 변환 과정
가상 주소 30번지가 어느 페이지에 있는지 찾는다. 30번지는 페이지 3의 0번째 위치에 있다.
페이지 테이블의 페이지 3으로 가서 해당 페이지가 프레임 1에 있다는 것을 의미한다
최종적으로 물리 메모리 프레임 1의 0번째 위치에 접근한다. 이 주소가 가상 주소 30번지의 물리 주소이다.
프로세스가 가상 주소 18번지에 어떤 값을 저장하려고(write)할 때의 주소 변환 과정
가상 주소 18번지가 어느 페이지에 있는지 찾아본다. 18번지는 페이지 1의 8번째 위치에 있다.
페이지 테이블의 페이지 1로 가서 해당 페이지가 프레임 3에 있다는 것을 알아낸다.
프로세스가 저장하려는 값을 프레임 3의 8번 위치에 저장한다.
가상 주소의 표현
페이징 기법에서의 가상 주소 표현은 다음과 같다
VA = <P, D>
VA
: 가상 주소(Virtual Address)
P
: 페이지(Page)
D
: 페이지의 처음 위치에서 해당 주소까지의 거리(Distance) 또는 오프셋(Offset)이라고 정의하기도 한다.
그림에서 가상 주소 30번지를 VA = <P,D>
방식으로 정의하면 VA = <3,0>으로 작성할 수 있다. 이는 가상 주소 페이지 3의 0번째 주소라는 의미이다. 같은 방법으로 가상 주소 18번지는 VA = <1,8>로 작성하며, 이는 페이지 1의 8번째 주소라는 의미이다. 여기서는 페이지 하나의 크기를 10Byte로 규정했기 때문에 정형화된 표기법으로 작성하기가 쉽다. 또 다른 예를 들면 8번째는 VA=<0,8>
물리 주소 표현
페이징 기법에서의 주소 변환은 가상 주소 VA = <P,D>를 물리주소, PA = <F,D>로 변환하는 것이다.
PA = <F,D>
PA
: 물리 주소, 실제 주소
F
: 프레임(Frame)
D
: 프레임의 처음 위치에서 해당 위치에서 해당 주소까지의 거리(Distance)
페이징 기법의 주소 변환 과정
VA = <3,0>이 PA = <1,0>으로 변환되었다는 것은 가상 주소 30번지가 물리 주소 프레임 1의 0번 위치로 변환되었다는 말이다. 결론적으로 페이징 기법의 주소 변환은 다음과 같이 정의할 수 있다.
공식 페이징 기법의 주소 변환 과정
VA = <P,D> -> PA = <F,D>
페이징 기법의 정형화된 주소 변환 과정을 보여준다. VA=<P,D>가 PA = <F,D>로 변환될 때 페이지 테이블을 사용하여 P는 F로 바뀌고, D는 변경 없이 그대로 쓴다. D를 변경하지 않는 이유는 페이지와 프레임의 크기를 똑같이 나누었기 때문이다.
페이지 테이블을 이용하면 간단하게 가상 주소를 물리 주소로 변환할 수 있다. 페이지 테이블에서 페이지 번호를 찾아 해당 프레임 번호를 쫓아가면 된다. 페이지 테이블은 페이지 번호, 프레임 번호로 구성하며, 각각의 한 줄은 페이지 테이블 엔트리(PTE : Page Table Entry)라고 부른다. 다시 말해 페이지 테이블은 페이지 번호, 프레임 번호로 구성된 페이지 테이블 엔트리의 집합이다. 앞서 설명했듯이 페이징 기법에서 페이지 테이블 엔트리는 프레임 번호만 가진다. 페이지 테이블에 페이지 번호가 0부터 순서대로 정리되어 있기 때문에 굳이 페이지 번호를 표시할 필요가 없는 것이다. 페이지 테이블 엔트리가 페이지 번호, 프레임 번호로 구성된 것은 페이지 번호가 순서대로 저장되지 않는 경우이다.
(3) 16bit CPU의 주소 변환 예
한 페이지를 10Byte로 나누면 주소 변환 과정은 그리 어렵지 않다. 예를 들면 가상 주소 30번지는 VA = <3,0>으로 간단하게 만들 수 있다. 그러나 컴퓨터는 2진법을 사용하므로 한 페이지의 크기는 2의 지수 승, 즉 512 Byte, 1024 Byte, 2048 Byte, 4096 Byte, 8192 Byte 등으로 분할된다. 실제로 유닉스 계열의 운영체제인 VAX는 한 페이지의 크기가 512Byte이고, 마이크로소프트의 윈도우 NT는 4096 Byte, 오라클의 솔라리스는 8192 Byte이다. 이렇게 페이지의 크기가 다양한 경우 가상 주소를 <P,D>로 변환하는 공식은 다음과 같다
[공식] 가상 주소를 <P,D> 변환
P = 나눗셈(가상 주소/한 페이지의 크기)의 몫
D = 나눗셈(가상 주소/한 페이지의 크기)의 나머지 [단위 : Byte]
16 bit CPU의 페이지 시스템 구성
16 bit CPU의 컴퓨터에서 한 페이지의 크기가 2048Byte일 때 컴퓨터에서 한 프로세스가 하용할 수 있는 가상 메모리의 크기는 65536 Byte이다. 사용자는 0번지부터 65535번지까지 가상 주소 공간을 사용할 수 있다. 한 페이지의 크기가 2048 Byte이기 때문에 가상 주소로 사용할 수 있는 16bit 중 6bit는 페이지 번호로, 10bit는 페이지의 처음 위치에서 해당 주소까지의 거리로 사용한다.
그림은 이 컴퓨터의 가상 주소 VA의 구성을 보여준다. 가상 주소 VA=<P,D>에서 P는 6bit, D는 10bit이다. 이는 시스템의 페이지가 0~63번까지 총 64개이고, 페이지 하나가 0~1023번까지 총 1024개 번지로 구성되어 있다는 의미이다.
16bit CPU의 페이징 시스템
16bit CPU에서 한 페이지의 크기가 2048Byte인 페이징 시스템에서 CPU가 16bit이므로 가상 주소는 시작 주소 0번지부터 맨 마지막 주소 65535번지까지이다. 한 페이지의 크기가 1024Byte이므로 전체 페이지의 수는 64, 즉 64개이고 페이지 0번부터 63번까지 존재한다. 한 페이지의 크기가 1024Byte이므로 가상 주소의 페이지 0은 0~1023번지, 페이지 1은 1024~2047, 페이지 63은 64512 ~ 65535번지로 구성된다.
물리 주소도 가상 주소와 마찬가지로 1024Byte로 나눈다. 그림의 물리 주소에는 프레임 0부터 프레임 31까지만 있다. 이론적으로 16bit CPU는 최대 65k Byte의 메모리를 가질 수 있지만 그림에서는 물리 메모리의 크기를 32kByte로 도식화했다. 32bit CPU는 최대 4GByte의 물리 메모리를 가질 수 있지만 2GByte의 물리 메모리에서도 작동한다. 이처럼 실제 메모리가 최대가 아니더라도 잘 작동한다는 것을 보여주기 위해 일부러 물리 메모리의 크기를 작게 도식화했다. 이 경우 부족한 물리 메모리는 스왑으로 처리하면 된다. 따라서 물리 주소의 부족한 부분은 페이징 시스템에서 문제가 되지 않는다.
가상 주소의 각 페이지가 어떤 프레임에 있는지는 페이지 테이블을 보면 알 수 있다. 그림에서 페이지 테이블은 페이지 엔트리가 0 ~ 63으로 총 64개이다. 페이지 테이블의 크기는 물리 주소의 크기가 아니라 프로세스의 크기에 비례한다. 물리 주소의 크기와 상관없이 가상 주소를 많이 사용하면 페이지 테이블의 크기가 늘어나고, 적게 사용하면 페이지 테이블의 크기가 줄어든다. 그림에서는 프로세스가 65535번지까지 다 사용하고 있기 때문에 페이지 테이블의 엔트리가 64개이다.
그림에서 프로세스가 980번지에 저장된 데이터를 요청했을 때 가상주소가 물리 주소로 바뀌는 과정
가상 주소 980번지의 페이지 P와 거리 D를 구한다.
P = 980/1024의 몫, D= 980/1024의 나머지 980이므로 VA = <0,980>이다.
페이지 테이블로 가서 페이지 0이 프레임 2에 저장되어 있다는 것을 확인하다.
물리 메모리의 프레임 2 시작 지점으로부터 980번지 떨어진 곳에 접근하여 데이터를 가져온다.
ex
같은 방법으로 가상 주소 1364번지를 물리 주소로 변환하면 VA = <1,340>이 PA = <3,340>이 되어 프레임 3의 340번지에 있는 데이터를 가져올 것이다.
페이지 테이블 관리가 복잡한 이유는 시스템에 여러 개의 프로세스가 존재하고 프로세스마다 페이지 테이블이 하나씩 있기 떄문이다. 그림에서는 프로세스 A, B, C가 하나의 물리 메모리를 사용하고 있다. 프로세스는 메모리에 올라와야 실행 가능하므로 모든 프로세스의 일부 페이지가 물리 메모리의 프레임에 올라와 있고, 어떤 페이지가 어떤 프레임에 있는지 관리하기 위해 프로세스마다 페이지 테이블을 운영 중이다. 프로세스 A의 페이지 0은 프레임 1에, 프로세스 B의 페이지 0은 프레임 3에 프로세스 C의 페이지 0은 프레임 0에 있다. 메모리 관리자는 특정 프로세스가 실행될 때마다 해당 페이지 테이블을 참조하여 가상 주소를 물리 주소로 변환하는 작업을 반복한다.
(2) 페이지 테이블의 조건
페이지 테이블은 메모리 관리자가 자주 사용하는 자료구조이므로 필요 시 빨리 접근할 수 있어야 한다. 따라서 페이지 테이블은 물리 메모리 영역 중 운영체제 영역의 일부분에 모아 놓는다.
시스템 내에 여러 개의 프로세스가 존재하고 프로세스마다 하나의 페이지 테이블이 있기 때문에 전체 페이지 테이블의 크기는 프로세스의 수에 비례해서 커진다.
한 번에 실행하는 프로세스의 수가 많으면 페이지 테이블의 크기가 같이 커지고, 이에 따라 프로세스가 실제로 사용할 수 있는 메모리 영역이 줄어든다.
(3) 페이지 테이블 관리의 문제점
페이지 테이블 관리의 가장 큰 문제는 페이지 테이블의 크기가 작지 않다는 것이다. 예를 들어 32bit CPU에 한 페이지가 512 Byte인 페이징 시스템이 있다고 가정해 보자. 이 시스템이 가질 수 있는 물리 메모리의 최대 크기는 4GyBte이다. 512 Byte로 페이지를 나눈 이 시스템에서 페이지 테이블의 최대 크기는 약 24.11MByte이다. 24.11MByte는 페이지 테이블 하나의 크기이다. 만약 프로세스가 약 40개라면 페이지 레이블의 크기는 1GByte의 물리 메모리 중 1/4읓 차지할 수도 있다는 말이다. 따라서 페이지 테이블의 크기를 적정하게 유지하는 것은 페이지 테이블 관리의 핵심이다.
(4) 물리 메모리 페이지 테이블의 구조
그림은 물리 메모리 내 페이지 테이블의 구조를 나타낸 것이다. 페이지 테이블 영역에 프로세스별로 페이지 테이블이 배열되어 있는데 프로세스 A의 페이지 테이블은 상단에 프로세스 B의 페이지 테이블은 하단에 있다. 페이지 테이블의 수가 늘어나거나 페이지 테이블의 크기가 늘어나면 운영체제 영역이 늘어나 그만큼 사용자 영역이 줄어든다. 물리 메모리의 크기가 작을 때는 프로세스만 스왑 영역에 옮겨지는 것이 아니라 페이지 테이블의 일부도 스왑 영역을 옮겨진다.
페이지 테이블에 빠르게 접근하기 위해 래지스터가 존재한다. 각 프로세스가 메모리에 접근하려고 할 때 메모리 관리자는 페이지 테이블의 위치를 재빨리 파악할 필요가 있다. 그래서 각 페이지 테이블의 시작 주소를 페이지 테이블 기준 레지스터(PTR : Page Table Base Register)에 보관한다.
페이지 테이블 기준 레지스터는 각 프로세스의 프로세스 제어 블록에 저장되는 데이터로, 물리 메모리 내에 페이지 테이블의 시작 주소를 가지고 있다.
시스템 내에 있는 여러 개의 프로세스가 존재하고, 각 프로세스는 하나의 페이지 테이블을 가지며, 페이지 테이블은 운영체제 영역이 있다. 따라서 페이지 테이블의 크기가 너무 커지면 프로세스가 실제로 사용할 수 있는 메모리 영역이 줄어든다. 사용할 수 있는 물리 메모리 영역이 적을 경우 프로세스만 스왑 영역으로 옮겨지는 것이 아니라 페이지 테이블의 일부도 스왑 영역으로 옮겨진다. 따라서 페이지 테이블 전체를 메모리에서 관리하느냐, 일부를 스왑 영역에서 관리하느냐에 따라 가상 주소를 물리 주소로 변환 방법이 달라지므로 페이지 테이블이 위치한 곳에 따른 다양한 페이지 테이블 매핑 방식이 있으며 직접 매핑, 연관 매핑, 집합 - 연관 매핑, 역 매핑이 있다.
(1) 페이지 테이블 매핑 방식의 특징
직접 매핑(Direct Mapping)
직접 매핑은 페이지 테이블 전체가 물리 메모리의 운영체제 영역에 존재하는 방식이다
별다른 부가 작업이 없이 바로 주소 변환이 가능하기 때문에 직접 매핑이라고 부른다.
주소 변환 시 원하는 프레임의 번호를 한 번에 따로 얻을 수 있다.
그림의 (a)에서 직접 매핑은 페이지 10이 프레임 4에 있다는 것을 마로 알 수 있다.
연관 매핑(Associative Mapping)
연관 매핑은 페이지 테이블 전체를 스왑 영역에서 관리하는 방식이다.
물리 메모리의 여유 공간이 작을 때 사용하는 방식으로, 모든 페이지 테이블을 저장장치의 스왑 영역에 저장하고 그중 일부만 물리 메모리에 가지고 있다.
연관 매핑은 페이지 테이블의 일부만 무작위로 가져온다. 일부 내용만 무작위로 배치하기 때문에 페이지 번호와 프레임 번호 둘 다 표시한다. 따라서 페이지 테이블의 열은 직접 매핑이 1개, 연관 매핑이 2개이다.
주소 변환 시 물리 메모리 내의 페이지 테이블을 다 검색한다. 만약 이렇게 했는데도 원하는 프레임 번호를 얻지 못하면 스왑 영역에 있는 페이지 테이블을 검색한다.
그림의 (b)에서 연관 매핑은 위에서부터 검색해야만 찾을 수 있고, 검색 실패 시 스왑 영역에서 다치 찾아야 하므로 시간을 낭비하게 된다.
집합 - 연관 매핑(Set-Associative Mapping)
집합 - 연관 매핑은 연관 매핑의 문제를 개선한 방식이다.
모든 페이지 테이블을 스왑 영역에서 관리하고 일부만 물리 메모리로 가져온다는 것은 연관 매핑과 동일하다.
페이지 테이블을 일정한 집합으로 자르고, 자른 덩어리 단위로 물리 메모리로 가져온다.
그림의 (c)의 집합 - 연관 매핑에서는 페이지 테이블을 5개씩 자르고 이를 관리하는 페이지 테이블을 하나 더 생성한다. 새로 생성한 집합 테이블(set table)에는 일정하게 자른 페이지 테이블이 물리 메모리에 있는지, 스왑 영역에 있는지에 대한 위치 정보를 표시한다. 그림에서 I(Invalid) 표시는 스왑 영역을 의미하고, 집합 2에 속한 페이지(페이지 테이블 엔트리 10~14)는 물리 메모리의 180번지에 있다는 의미이다.
연관 매핑과 비교했을 때 이 방식은 집합 테이블을 통해 원하는 페이지 테이블 엔트리가 스왑 영역에 있는지 물리 메모리에 있는지 간단히 파악할 수 있다.
그러므로 연관 매핑에서처럼 물리 메모리의 모든 페이지 테이블을 검사할 필요가 없어 주소 변환 시간이 단축된다.
역 매핑(Invert Mapping)
직접 매핑, 연관 매핑, 집합-연관 매핑에서는 페이지 번호를 기준으로 테이블을 구성하지만, 역 매핑에서는 물리 메모리의 프레임 번호를 기준으로 테이블을 구성한다.
프로세스의 수와 상관없이 테이블이 하나만 존재한다. 다른 방식에서는 프로세스마다 페이지 테이블을 만들지만, 역 매핑에서는 물리 메모리를 기준으로 프레임 테이블을 만들기 때문에 전체 시스템에서 테이블의 수가 단 1개이다. 따라서 테이블의 크기가 매우 작다는 것이 장점이다.
프로세스가 가상 메모리에 접근할 때 프로세스과 아이디와 페이지 번호를 모두 찾아야 한다. 또한 모든 페이지를 검색한 후에야 해당 페이지가 스왑 영역에 있다는 것을 알게 되므로 속도가 느린 단점이 있다.
(2) 직접 매핑
특징
직접 매핑은 모든 페이지 테이블을 물리 메모리에 가지고 있는 가장 단순한 방식이다. 물리 메모리가 충분할 때 사용할 수 있으며, 모든 페이지를 물리 메모리에 가지고 있기 때문에 주소 변환 속도가 빠르다
구조
직접 매핑에서는 페이지 테이블 전체가 물리 메모리에 저장되기 때문에 가상 주소 VA = <P,D>를 물리 주소 PA = <F,D>로 변환하려면 페이지 테이블의 P번째 위치(PTEP)에서 원하는 프레임 값을 얻을 수 있다. 페이지 테이블의 시작 주소는 페이지 테이블 기준 레지스터(PTBR)가 가지고 있으므로 물리 메모리상 페이지 테이블의 P번째 주소가 시작 주소(PTBR)로부터 P번째 위치가 존재한다.
(3) 연관 매핑
특징
연관 매핑은 전체 페이지 테이블을 스왑 영역