본문 바로가기
CS/운영체제

8)가상 메로리의 기초

by 에드박 2020. 9. 19.

1. 가상 메모리의 개념

물리 메모리의 크기와 상관없이 프로세스에 커다란 메모리 공간을 제공하는 기술입니다.

메모리의 크기는 컴퓨터마다 다른데 운영체제가 물리 메모리의 크기에만 의존한다면 2GB의 메모리에서 동작하는 프로그램이 1GB의 메모리에서는 동작하지 않을 수 있습니다. 
현대 메모리 관리의 가장 큰 특징은 물리 메모리의 크기와 프로세스가 올라갈 메모리의 위치를 신경쓰지 않고 프로그래밍 하도록 지원한다는 것입니다. 이러한 메모리 시스템을 가상 메모리라고 부릅니다.

프로세스는 운영체제가 어디에 있는지, 물리 메모리의 크기가 어느 정도인지 신경 쓰지 않고 메모리를 마음대로 사용할 수 있습니다.

 

2. 가상 메모리의 크기와 주소

- 가상 메모리의 크기

가상 메모리에서 메모리 관리자가 사용할 수 있는 메모리의 전체 크기는 물리 메모리와 스왑 영역을 합한 크기입니다.

 

- 가상 메모리의 주소

가상 메모리 시스템에서 메모리 관리자는 물리 메모리와 스왑 영역을 합쳐서 프로세스가 사용하는 가상 주소를 실제 메모리의 물리 주소로 변환하는데 이러한 작업을 동적 주소 변환(Dynamic Address Translation, DAT) 라고 합니다.

 

3. 가상 메모리의 메모리 분할 방식

실제 메모리의 물리 주소 0번지는 운영체제 영역이므로 일반 프로세스가 사용할 수 없습니다. 따라서 가상 메모리 시스템에서는 운영체제를 제외한 나머지 메모리 영역을 일정한 크기로 나누어 일반 프로세스에 할당합니다.

 

가상 메모리 시스템은 메모리 분할 방식과 마찬가지로 가변 분할 방식과 고정 분할 방식으로 나뉩니다.

  • 고정 분할 방식을 이용한 메모리 관리 기법은 페이징
  • 가변 분할 방식을 이용한 메모리 관리 기법은 세그먼테이션

고정 분할 방식은 페이지 관리에 어려움이 있고, 가변 분할 방식은 외부 단편화 등의 문제 때문에 잘 사용되지 않습니다.

따라서 가상 메모리 시스템에서는 두 기법의 단점을 보완한 세그먼테이션-페이징 혼용 기법을 주로 사용합니다.

 

구분 가상 메모리 물리 메모리
최대 메모리 크기 CPU의 비트 값에 의존  CPU의 비트 값에 의존
메모리 분할 방식 세그먼테이션 가변 분할 방식
페이징 고정 분할 방식
세그먼테이션-페이징 혼용 기법  
주소 지정 방식 가상 주소 절대 주소, 상대 주소

4. 매핑 테이블

가상 주소가 물리 메모리의 어느 위치에 있는지 알 수 있도록 정리한 표입니다.

페이징 기법에서는 페이지 매핑 테이블 또는 페이지 테이블이라고 부르며,
세그먼테이션 기법에서는 세그먼테이션 매핑 테이블 또는 세그먼테이션 테이블이라고 부릅니다. 

 

매핑 테이블

5. 페이징 기법

고정 분할 방식을 이용한 가상 메모리 관리 기법으로, 물리 주소 공간을 같은 크기로 나누어 사용합니다.


가상 주소의 분할된 각 영역은 페이지라고 부르며,
물리 메모리의 각 영역은 가상 주소의 페이지와 구분하기 위해 프레임이라고 부릅니다.

 

아래 그램에서 가상 주소공간과 물리 주소 공간을 똑같이 10B로 나누었고, 이에 따라 한 페이지 또는 한 프레임은 총 10개의 주소를 가집니다.

 

페이징 기법의 주소 변환

페이징 기법에서는 가상 주소를 VA = <P, D>로 표현하는데,
여기서 VA 는 가상 주소(virtual address),
P는 페이지 (Page),
D는 페이지의 처음 위치에서 해당 주소까지의 거리(distance)를 의미합니다.

 

페이징 기법에서 주소 변환은 가상 주소 VA = <P, D>를 물리 주소 PA = <F, D>로 변환하는 것입니다.

F는 프레임(frame), D(distance)는 처음 위치에서 해당 주소까지의 거리를 의미합니다.

 

페이징 기법의 주소 변환 과정
VA = <P, D> -> PA = <F, D>

가상 주소를 <P, D>로 변환하는 공식
P = 나눗셈(가상 주소 / 한 페이지의 크기)의 몫
D = 나눗셈(가상 주소 / 한 페이지의 크기)의 나머지

주소 변환 될 때 P는 F로 바꾸고 D는 변경없이 그대로 씁니다. 페이지와 프레임의 크기를 똑같이 나누었기 때문에 해당 주소까지의 거리는 동일합니다.

 

각 프로세스가 메모리에 접근하려고 할 때 메모리 관리자는 페이지 테이블의 위치를 재빨리 파악할 필요가 있습니다.

그래서 각 페이지 테이블의 시작 주소를 페이지 테이블 기준 레지스터(Page Table Base Register, PTBR)에 보관합니다.

페이지 테이블 기준 레지스터는 각 프로세스의 프로세스 제어 블록에 저장되는 데이터로, 물리 메모리 내에 페이지 테이블의 시작 주소를 가지고 있습니다.

 

6. 페이지 테이블 매핑 방식

  • 직접 매핑 : 페이지 테이블 전체가 물리 메모리의 운영체제 영역에 존재하는 방식입니다.

    - 별다른 부가 작업 없이 바로 주소 변환이 가능하기 때문에 직접 매핑이라고 부릅니다.
  • 연관 매핑 : 페이지 테이블 전체를 스왑 영역에서 관리하는 방식으로, 물리 메모리의 공간이 작을 때 사용합니다.

    - 모든 페이지 테이블을 저장장치 스왑 영역에 저장하고 그중 일부만 물리 메모리에 가지고 있습니다.
    - 열관 매핑은 페이지 테이블의 일부 내용만 무작위로 가져와서 배치하기 때문에 페이지 테이블의 열이 2개 입니다.
       (페이지 번호, 프레임 번호 / 직접매핑은 배열의 인덱스를 페이지 번호로 사용합니다. 따라서 직접매핑은 열이 1개 입니다.)
    - 연관 매핑은 원하는 프레임 번호를 얻기 위해서는 페이지 테이블을 다 검색해야 합니다. 만약 물리메모리에서 찾지 못한다면 스왑 영역에 있는 페이지 테이블을 검색합니다. 따라서 시간을 낭비하게 됩니다.
  • 집합 - 연관 매핑 : 연관 매핑의 문제를 개선한 방식으로, 페이지 테이블을 일정한 집합으로 자르고, 자른 덩어리 단위로 물리 메모리에 가져옵니다.

    - 연관 매핑은 원하는 프레임 번호를 얻기 위해 모든 테이블을 검색해야하는 문제가 있습니다.

    - 페이지 테이블을 일정한 집합으로 자르고, 자른 덩어리 단위로 물리 메모리에 가져옵니다.

    - 이렇게 페이지 테이블을 자른 덩어리를 집합 테이블(Set Table)이라는 페이지 테이블을 생성해 일정하게 자른 페이지 테이블이 물리 메모리에 있는지 스왑 영역에 있는지에 대한 위치 정보를 표시합니다. 이를 이용해 원하는 페이지 테이블 엔트리가 스왑 영역에 있는지, 물리 메모리에 있는지 간단한 검사를 할 수 있습니다. 
  • 역매핑 : 위의 세 가지 매핑과 달리 물리 메모리의 프레임 번호를 기준으로 테이블을 구성합니다.

7. 세그먼테이션 기법

가변 분할 방식을 이용한 가상 메모리 관리 기법으로, 물리 메모리를 프로세스의 크기에 따라 가변적으로 나누어 사용합니다.

 

8. 세그먼테이션 - 페이징 혼용기법

사용자 입장에서는 세그먼테이션 기법을 사용하고 메모리 관리자 입장에서는 페이징 기법을 사용하는 가상 메모리 관리 기법입니다. 메모리 보호 및 중복 정보를 세그먼테이션 테이블에서 관리함으로써 메모리 관리를 효율적으로 할 수 있습니다.

 

9. 캐시 매핑 기법

캐시 매핑 기법에는 페이지 테이블의 매핑 방식 직접 매칭, 연관 매핑, 집합-연관 매핑 과 비슷하게 사용됩니다.

캐시의 크기는 메모리보다 작기 때문에 항상 메모리의 일부 페이지만 가지고 있습니다.
캐시 직접 매핑 에서는 캐시된 데이터가 매번 같은 자리로 올라오기 때문에 캐시 테이블 전체를 찾아보지 않아도 캐시 히트나 캐시 미스를 바로 알 수 있습니다.

  • 캐시 직접 매핑

    - 메모리의 페이징 방식과 마찬가지로 캐시로 메모리를 일정 크기로 나눈 덩어리를 페이지 P 라고 부릅니다.

    - CPU가 메모리에 접근 하려고 할 때 사용하는 주소를 <P, D>로 표현하는데 여기서 P는 페이지 번호, D는 페이지 내에서 거리를 의미합니다.

    - 메모리는 N개의 페이지로, 캐시는 M개의 페이지로 구성된다고 하면 캐시는 메모리보다 작기 때문에 N이 M보다 훨 씬 많습니다.(N >> M)

    - 직접 매핑에서는 메모리의 페이지 수 N 을 M으로 나누고 이를 블록(block)이라고 부릅니다. 따라서 'N = M X 블록의 수' 입니다.

    - 직접 매핑에서는 메모리의 블록이 캐시로 올라올 때 항상 같은 위치에 올라옵니다. 즉 블록의 첫 번째 페이지는 캐시의 첫 번째 페이지로, 블록의 두 번째 페이지는 캐시의 두 번째 페이지로만 올라옵니다.

    - 캐시의 블록에는 번호를 부여하는데 이를 태그(tag) 라고 합니다. CPU가 메모리에 접근하려는 주소 <P, D>는 
    <tag, bd, D>로 바꿀 수 있고, 원하는 데이터를 캐시에 얻기 위해 <tag, D>를 사용합니다.
    여기서 bd는 블록에서의 거리(block distance)를 의미합니다.

    - 직접 매핑의 장점은 메모리의 페이지가 캐시의 같은 위치에 올라오기 때문에 태그만 확인하면 캐시 히트나 캐시 미스를 빠르게 확인할 수 있다는 것입니다.

    - 직접 매핑의 단점은 페이지가 같은 위치에만 올라오기 때문에 자리다툼이 발생한다는 것입니다. 예를들어 CPU가 1100, 1000, 0100을 연달아 필요로 하면 매번 bd == 00 에 있는 데이터만 캐시로 올라왔다가 금세 쫒겨나는 현상이 발생합니다.

  • 캐시 연관 매핑
    - 연관 매핑은 캐시가 메모리 워드의 주소를 전부 가지고 있습니다. 캐시 메모리를 자유롭게 사용할 수 있다는 것이 장점이지만 캐시 히트인지 캐시 미스인지 확인하기 위해서는 캐시의 모든 주소를 검색해야 한다는 단점이 있습니다.
  • 캐시 집합-연관 매핑
    - 직접 매핑과 연관 매핑의 장점만 취한 방식입니다. 집합-연관 캐시를 K개의 집합으로 나누고 각 집합에 직접 매핑을 사용합니다. 
    - 직접 매핑에서는 끝이 00(bd)로 끝나는 페이지는 캐시에 하나밖에 없기 때문에 자리다툼이 일어납니다. 집합-연관 매핑은 직접 매핑을 하는 캐시 메모리를 K개로 나눔으로써 같은 끝자리를 가진 캐시 메모리도 K개가 되기 때문에 직접 매핑의 자리다툼 문제가 완화됩니다.
    - 또한 집합 내에서 직접 매핑을 사용하기 때문에 연관 매핑처럼 모든 캐시를 뒤지는 일 없이 바로 캐시 히트 여부를 알 수 있습니다.

'CS > 운영체제' 카테고리의 다른 글

10) 입출력 시스템과 저장장치  (0) 2020.09.29
9)가상 메모리 관리  (0) 2020.09.22
7) 물리 메모리 관리  (0) 2020.09.16
6) 교착 상태  (0) 2020.09.14
5) 프로세스 동기화  (0) 2020.09.10

댓글