1. 페이징: 더 빠른 변환(TLB)
- 페이징은 주소 공간을 작은 크기(페이지)로 나누고 각 페이지의 실제 위치(매핑 정보)를 메모리에 저장한다. 매핑 정보를 저장하는 자료 구조를 페이지 테이블이라 한다.
- 페이징은 성능 저하를 유발할 수 있다.
- 가상 주소에서 물리 주소로의 주소 변환을 위해 메모리에 존재하는 매핑 정보를 읽어야 한다는 사실은 페이지 테이블 접근을 위한 메모리 읽기 작업이며 이는 엄청난 성능 저하를 유발한다.
- 주소 변환을 빠르게 하기 위해서 우리는 변환-색인 버퍼(translation-lookaside buffer) 또는 TLB를 도입한다.
- TLB는 칩의 메모리 관리부(memory-management unit, MMU)의 일부이다.
- 자주 참조되는 VirtualMemory-PhysicalMemory 변환 정보를 저장하는 하드웨어 캐시이다.
- 가상 메모리 참조 시, 하드웨어는 먼저 TLB에 원하는 변환 정보가 있는지를 확인한다. 만약 있다면 페이지 테이블을 통하지 않고 변환을 빠르게 수행한다. 실질적으로 TLB는 페이징 성능을 엄청나게 향상시킨다.
1.1 TLB의 기본 알고리즘
- 주소 변환부는 단순한 선형 페이지 테이블(배열로 이루어진 페이지 테이블) 과 하드웨어로 관리되는 TLB로 구성되어 있다.
- 하드웨어 부분의 알고리즘은 다음과 같이 동작한다. (TLB Hit 과 Miss로 나뉨)
- TLB Hit
- 가상주소에서 가상 페이지 번호(virtual page nubmer, VPN)을 추출한 후, 해당 VPN을 TLB 존재 여부를 검사한다.
- 만약 존재한다면 TLB 히트이고 TLB가 변환 값을 갖고 있다는 것을 뜻한다.
- 해당 TLB 항목에서 페이지 프레임 번호(page fame number, PFN)을 추출한다.
- 해당 페이지에 대한 접근 권한 검사가 성공하면
- 그 정보를 원래 가상 주소의 오프셋과 합쳐서 원하는 물리 주소를 구성하고 메모리에 접근한다.
- TLB Miss
- 위의 2번에서 TLB Miss되면
- 하드웨어가 변환 정보를 찾기 위해서 페이지 테이블에 접근한다.
- 프로세스가 생성한 가상 메모리 참조가 유효하고 접근 가능하다면
- 해당 변환정보를 TLB로 읽어들인다.(시간이 많이 소요되는 작업, 테이블 접근을 위한 메모리 참조 때문)
- TLB가 갱신되면 하드웨어는 명령어를 재실행한다.
- TLB는 프로세싱 코어와 가까운 곳에 위치하고 있고, 매우 빠른 하드웨어로 구성되기 때문에, 주소 변환 작업은 그다지 부담스러운 작업이아니다.
- TLB 미스가 많이 발생할수록 메모리 접근 횟수가 많아진다.
- TLB 미스가 발생하는 경우를 최대한 피해야 한다.
1.2 예제: 배열 접근
- 위의 그림과 같이 배열의 데이터가 저장되어 있다고 가정하자.
- index 0부터 9까지 배열을 읽으면 index0을 읽을 때 TLB는 초기화 되어있기 때문에 TLB미스가 발생하고 VPN 06번 페이지를 TLB를 가져온다.
- 이후 1번과 2번 index를 읽을 때는 TLB히트가 발생하여 바로 가져올 수 있다.
- 다시 3번 index를 읽을 때는 TLB미스가 발생하여 VPN 07번 페이지를 TLB로 가져온다.
- 위의 예제를 통해 배열이 처음으로 접근되었지만, TLB는 공간 지역성으로 인해서 성능을 개선할 수 있다.
- 만약 TLB가 모든 주소 변환 정보를 저장할 정도로 충분히 크다면 히트, 히트, 히트, 히트, … 히트 를 얻는다.
- 이 경우에는 시간 지역성으로 인해 TLB의 히트율이 높아진다.
- 프로그램이 공간 혹은 시간 지역성을 보이는 경우, TLB 사용 효과가 더욱 두드러지게 나타날 것이다.
1.3 TLB 미스는 누가 처리할까
- TLB 미스의 처리는 두 가지 방법이 있다.
- 하드웨어와 소프트웨어이다.
CISC(complex-instruction set computers): TLB 미스를 하드웨어가 처리하도록 설계
- 이를 위해서 하드웨어가 페이지 테이블에 대한 명확한 정보를 가지고 있어야 한다.
- 메모리 상 위치(page-table base register를 통해서)와 정확한 형식을 파악하고 있어야 한다.
- 미스 발생시 다음과 같은 일을 한다.
- 페이지 테이블에서 원하는 페이지 테이블 엔트리를 찾고
- 필요한 변환 정보를 추출하여
- TLB를 갱신한 후
- TLB 미스가 발생한 명령어를 재실행한다.
- x86 CPU가 하드웨어로 관리 되는 TLB의 대표적인 예다.
- 멀티 레벨 페이지 테이블을 사용한다.
RISC(reduced instruction set computing): 소프트웨어 관리 TLB 사용
- RISC 기반 컴퓨터에서 TLB 미스를 처리하는 과정은 다음과 같다.
- TLB에서 주소 찾는 것이 실패하면, 하드웨어는 예외 시그널을 발생시킨다.
- 예외 시그널을 받은 운영체제는 명령어 실행을 잠정 중지하고, 실행 모드를 커널 모드로 변경하여, 커널 코드 실행을 준비한다.
- 실행 모드를 커널 모드로 변경하는 작업의 핵심은 커널 주소 공간을 접근할 수 있또록 특권 레벨(privilege level)로 상향 조정하는 것이다.
- 커널 모드로 변경이 되면 트랩 핸들러(trap handler)를 실행한다.
- 이 때 실행되는 트랩 핸들러는 TLB 미스의 처리를 담당하는 운영체제 코드이다.
- 이 트랩 핸들러는 페이지 테이블을 검색하여 변환 정보를 찾고, TLB 접근이 가능한 “특권” 명령어를 사용하여 TLB를 갱신한 후에 리턴한다.
- 트랩 핸들러에서 리턴되면 하드웨어가 명령어를 재실행한다.
- TLB 미스를 처리하는 트랩 핸들러는 시스템 콜 호출 시 사용되는 트랩 핸들러와의 차이가 있다.
- TLB 미스 처리의 경우 다음 명령어의 PC값을 트랩을 발생시킨 명령을 다시 실행해야한다.
-
TLB 미스 핸들러를 실행할 때, TLB 미스가 무한 반복되지 않도록 주의해야 한다.
- TLB를 소프트웨어로 관리하는 방식의 주된 장점은 유연성과 단순함이다.
1.4 TLB의 구성: 무엇이 있나?
- TLB는 32, 64, 또는 128개의 엔트리를 가지며, 완전 연관(fully associative) 방식으로 설계된다.
- 완전 연관 방식에서 변환 정보는 TLB 내에 어디든 위치할 수 있으며, 원하는 변환 정보를 찾는 검색은 TLB 전체에서 병렬적으로 수행된다.
- TLB의 구성: VPN \ PFN \ offset(다른 비트들)
- 하드웨어 측면에서 보자면, TLB는 완전 연관 캐시이다.
- TLB는 일반적으로 valid bit을 갖고 있다.
- 특정 항목이 유효한 변환 정보를 갖고 있는지 여부를 나타낸다.
- 보호(protection)비트라는 것도 있다.
- 보호 비트들은 페이지가 어떻게 접근될 수 있는지를 나타낸다.
- 더티 비트(dirty bit)라는 것도 있다.
- 페이지가 변경되었는지에 대한 정보를 가지고 있다.
1.5 TLB의 문제: 문맥 교환
- TLB에 있는 가상 주소와 실제 주소 간의 변환 정보는 그것을 탑재시킨 프로세스에서만 유효하다.
- 새로운 프로세스에서는 이전에 실행하던 프로세스의 변환 정보를 사용하지 않도록 주의해야 한다.
- 위의 그림은 TLB의 예이다.(문제가 있음)
- 하지만 위의 TLB에서는 VPN이 10이 두개가 있으며(process 1과 2의 가상 주소 10) 어떤 프로세스의 가상주소인지 확인할 수 없다.
-
TLB가 정확하고 효율적으로 멀티 프로세스 간의 가상화를 지원하기 위해서는 추가적 기능이 필요하다.
- 한 방법은 문맥 교환을 수행할 때 다음 프로세스가 실행되기 전에 기존 TLB 내용을 비우는 것이다.
- 하지만 TLB 내용이 비어지면 문맥 교체가 빈번히 발생되면 TLB 미스가 많아진다.
- 다른 방법은 TLB 내에 주소 공간 식별자(address space identifier, ASID) 필드를 추가하는 것이다.
- ASID는 프로세스 식별자(process identifier, PID)와 대략적으로 유사하다.
- 위의 그림은 ASID가 추가된 TLB의 모습이다.
- ASID로 프로세스를 구분할 수 있게 됐다.
- ASID를 사용하면 코드 페이지를 위의 그림처럼 공유하여 프로세스가 사용하는 물리 페이지의 수를 줄일 수 있다.
1.6 이슈: 교체 정책
-
모든 캐시가 그러하듯이 TLB에서도 캐시 교체(cache replacement) 정책이 매우 중요하다.
- 한 가지 흔한 방법은 가장 오래 전부터 사용되었던 최저 사용 빈도(least-recently-used, LRU) 항목을 교체하는 것이다.
- LRU는 메모리 참조 패턴에서의 지역성을 최대한 활용하는 것이 목적이다.
- 다른 방법은 랜덤(random) 정책이다.
- 랜덤 정책에서는 교체 대상을 무작위로 정한다.
- 랜덤 교체 정책은 구현이 간단하고 예상치 못한 예외 상황의 발생을 피할 수 있다는 장점이 있다.
1.7 요약
- 지금까지 주소 변환을 더 빠르게 처리하기 위한 하드웨어 기법에 대해 살펴보았따.
- TLB를 주소 변환 캐시로 사용하여 대부분의 메모리 참조들은 메인 메모리 상의 페이지 테이블을 읽지 않고도 처리가 가능하게 되었따.
- 프로그램이 짧은 시간 동안 접근하는 페이지들의 수가 TLB에 들어갈 수 잇는 수보다 많다면 TLB 미스를 발생할 것이고 느리게 동작하게 될 것이다.
2. 페이징: 더 작은 테이블
- 페이징의 두 번째 문제점은 페이지 테이블의 크기이다. 페이지 테이블이 크면 많은 메모리 공간을 차지한다.
- 단순한 배열 기반의 페이지 테이블은(흔히 선형 페이지 테이블이라고 불림) 크기가 크며 일반적인 시스템에서 메모리를 과도하게 차지한다.
2.1 간단한 해법: 더 큰 페이지
- 페이지 테이블의 크기를 간단하게 줄일 수 있는 방법이 한 가지 있다.
- 페이지 크기를 증가시키면 된다.
- 하지만 페이지 크기의 증가는 부작용을 수반한다.
- 가장 큰 문제는 페이지 내부의 낭비 공간이 증가하는 것이다.
- 이를 내부 단편화라 한다(할당된 페이지 내부에서 낭비가 발생하기 때문이다).
2.2 하이브리드 접근 방법: 페이징과 세그멘트
- 페이징과 세그멘테이션을 결합하여 페이지 테이블 크기를 줄이는 아이디어가 있다.
- 결합 방식을 생각해 보자. 프로세스의 전체 주소 공간을 위해 하나의 페이지 테이블을 두는 대신, 논리 세그멘트마다 따로 페이지 테이블을 두면 어떨까?
- 코드, 힙 그리고 스택 세그멘트에 대해 페이지 테이블을 각각 두는 것이다.
- 세그멘트와 비슷하게 베이스 레지스터와 바운드 또는 리미트 레지스터를 사용하여 페이지 테이블의 시작과 끝을 나타낸다.
- 위의 그림은 페이징과 세그먼트를 이용한 주소 공간이다.
- 상위 2비트를 소속 세그멘트를 나타내기 위해 사용한다.
- 하지만, 하이브리드 접근 방법 또한 문제가 있다.
- 여전히 세그멘테이션을 사용한다 ; 빈 공간이 많은 힙의 경우에는 테이블의 낭비를 면치 못할 수가 있다.
- 하이브리드 기법은 외부 단편화를 유발한다.
2.3 멀티 레벨 페이지 테이블
- 멀티 레벨 페이지 테이블에서는 선형 페이지 테이블을 트리 구조로 표현한다.
- 멀티 레벨 페이지 테이블의 기본 개념은 간단하다.
- 먼저, 페이지 테이블을 페이지 크기의 단위로 나눈다.
- 그다음, 페이지 테이블의 페이지가 유효하지 않은 항목만 있으면, 행당 페이지를 할당하지 않는다.
- 페이지 디렉터리(page directory)라는 자료 구조를 사용하여 페이지 테이블 각 페이지의 할당 여부와 위치를 파악한다.
- 페이지 디렉터리는 페이지 테이블을 구성하는 각 페이지의 존재 여부와 위치 정보를 가지고 있다.
- 위의 그림은 선형 테이블과 멀티 레벨 페이지 테이블이다.
- 간단한 2단계 테이블에서, 페이지 디렉터리의 각 항목은 페이지 테이블의 한 페이지를 나타낸다.
- 페이지 디렉터리는 페이지 디렉터리 항목(page directory entries, PDE)들로 구성된다.
- 유효(valid) 비트와 페이지 프레임 번호(page frame number, PFN)을 갖고 있다.
- 멀티 레벨 페이지 테이블의 장점
- 사용된 주소 공간의 크기에 비례하여 페이지 테이블 공간이 할당된다.
- 보다 작은 크기의 페이지 테이블로 주소 공간을 표현할 수 있다.
- 페이지 테이블을 페이지 크기로 분할함으로써 메모리 관리가 매우 용이하다.
- 페이지 테이블을 할당하거나 확장할 때, 운영체제는 free페이지 풀에 잇는 빈 페이지를 가져다 쓰면 된다.
- 페이지 테이블의 각 페이지들이 물리 메모리에 산재해 있더라도 페이지 디렉터리를 이용하여 그 위치를 파악할 수 있으므로 ,페이지 테이블을 위한 공간 할당이 매우 유연하다.
- 사용된 주소 공간의 크기에 비례하여 페이지 테이블 공간이 할당된다.
- 멀티 레벨 페이지 테이블의 유의 사항
- TLB 미스 시, 주소 변환을 위해 두 번의 메모리 로드가 발생하여 추가 비용이 발생한다.
- 복잡도
2.4 역 페이지 테이블
- 획기적인 공간 절약 방법으로 역 페이지 테이블(inverted page table)이 있다.
- 시스템에 단 하나의 페이지 테이블만 둔다.
- 페이지 테이블은 물리 페이지를 가상 주소 상의 페이지로 변환한다.
2.5 페이지 테이블을 디스크로 스와핑하기
- 어떤 시스템들은 페이지 테이블들을 커널 가상 메모리에 위치시키고, 메모리가 부족할 경우 페이지 테이블들을 디스크로 스왑(swap)한다.
2.6 요약
- 테이블을 위한 자료 구조에는 시간과 공간이라는 모순적 선택 사항이 존재한다.
- 공간을 많이 소모하는 테이블 구조를 사용할 수록 TLB미스의 처리속도가 빨라진다.
- 공간을 작게 차지한는 테이블 구조를 사용하면 상황은 반대가 된다.
댓글남기기