Ch. 08 가상메모리의 기초

지니🧸·2023년 9월 19일
0

운영체제

목록 보기
4/28

<쉽게 배우는 운영체제> 조성호 지음. 을 읽으며 작성한 개인노트입니다.

가상메모리: 물리 메모리의 크기와 상관없이 메모리를 이용할 수 있도록 지원하는 기술

1. 가상 메모리의 개요

1) 가상 메모리 시스템

1.1 가상 메모리의 개념

가상 메모리가 필요한 배경

  • 메모리의 크기는 컴퓨터마다 다름
  • 운영체제가 물리 메모리의 크기에만 의존한다면, 컴퓨터의 메모리의 크기에 따라 프로그램이 동작할 수도 안할 수도 있음
  • 메모리 크기에 맞는 응용 프로그램만 개발해야 함

가상 메모리 덕에 물리 메모리 크기와 상관없이 프로세스에 커다란 메모리 공간을 제공할 수 있음

프로세스는 운영체제의 위치와 물리 메모리의 크기에 상관없이 메모리를 사용할 수 있음

1.2 가상 메모리의 크기와 주소

가상 메모리 시스템의 모든 프로세스는 물리 메모리와 별개로 자신이 메모리의 어느 위치에 있던지 0번지부터 시작하는 연속된 메모리 공간을 가짐

논리 주소: 물리 메모리의 주소 공간에 비례함
가상 주소: 물리 메모리 공간이 아닌 가상의 주소 공간을 가짐

[이미지 출처]

이론적으로 가상 메모리는 무한대의 크기를 가지지만, 실제로 가상 메모리의 최대 크기는 그 컴퓨터 시스템이 가진 물리 메모리의 최대 크기로 한정되고, CPU의 비트에 따라 결정됨

32bit CPU면 32bit로 표현할 수 있는 최댓값인 2^32 - 1 >> 총 4GB 메모리

4GB 메모리를 무한대 크기의 메모리처럼 사용하기

가상 메모리 시스템에서 물리 메모리의 내용 중 일부를 하드디스크의 일부 공간 (스왑영역)으로 옮김

물리 메모리가 꽉 찼을 때 일부 프로세스를 스왑 영역으로 보내고 (swap-out),
몇 개의 프로세스가 작업을 마치면 스왑 영역에 있는 프로세스를 메모리로 가져온다 (swap-in)

스왑 영역: 하드디스크에 존재하지만 메모리 관리자가 관리하는 영역이자 가상 메모리의 구성 요소

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

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

  • DAT의 결과: 프로세스가 아무 제약 없이 사용자의 데이터를 물리 메모리에 배치할 수 있음
  • 중요 결정 요소: 물리 메모리를 어떤 방법으로 나눌지, 사용자 프로세스를 어디에 배치할지, 부족한 물리 메모리를 어떻게 처리할지

1.3 가상 메모리의 메모리 분할 방식

실제 메모리에 있는 물리주소 0번지는 운영체제 영역이므로 일반 프로세스가 사용할 수 없음

가상 메모리 시스템에서는 운영체제를 제외한 나머지 메모리 영역을 일정한 크기로 나눠 일반 프로세스에 할당함

메모리 분할 방식: 가변 분할 방식과 고정 분할 방식

Segmentation

가상 메모리시스템에서 가변 분할 방식을 이용한 메모리 관리 기법

  • 외부 단편화 문제 발생 가능

외부 단편화 (External fragmentation): 남아있는 메모리 공간이 요청한 공간보다 크지만, 그 공간이 연속적이지 않아 프로세스에 할당하지 못하는 현상

Paging

가상 메모리시스템에서 고정 분할 방식을 이용한 메모리 관리 기법

  • 페이지 관리리에 어려움

그래서 가상 메모리 시스템은 주로 세그먼테이션-페이징 혼용 기법을 사용한다

2) 매핑 테이블의 필요성과 역할

가상 메모리 시스템에서 가상 주소는 실제로 물리 주소나 스왑 영역 중 한 곳에 위치함

메모리 관리자는 가상 주소와 물리 주소를 1:1 매핑 테이블로 관리함


[이미지 출처]

세그먼테이션/페이징으로 분할된 경우 모두 똑같은 방식으로 적용됨

  • 페이징 기법) page mapping table
  • 세그먼테이션) segmentation mapping table

2. 페이징 기법

고정분할 방식으로 메모리를 분할함

1) 페이징 기법의 구현

페이징 기법: 고정 분할 방식을 이용한 가상 메모리 관리 기법


[이미지 출처]

위 이미지의 가상 주소(논리 주소)는 프로세스 입장에서 본 메모리 공간으로 항상 0번지부터 시작함

페이지: 가상 주소(논리 주소)의 분할된 각 영역
프레임: 물리 메모리의 각 영역

페이지와 프레임의 크기는 같다

그래서 페이지는 어떤 프레임에도 배치될 수 있다

페이지 테이블은 어떤 페이지가 어떤 프레임에 있는지에 대한 매핑 정보를 담는다

페이지 테이블

  • 하나의 열로 구성됨
  • 모든 페이지의 정보를 0부터 순서대로 번호를 매겨 가지고 있음
  • 페이지 테이블에는 숫자 또는 invalid 값을 가짐
    • invalid: 해당 페이지가 스왑 영역에 있음

2) 페이징 기법의 주소 변환

2.1 주소 변환 과정

프로세스가 30번지의 내용을 읽으려고 한다


[이미지 출처]

  1. 가상 주소 30번지가 어느 페이지에 있는지 찾는다 (30번지는 페이지 3의 0번째 위치에 있음)
  2. 페이지 테이블의 페이지 3으로 가서 해당 프ㅔ이지가 프레임 1에 있다는 것을 알아낸다
  3. 물리 메모리 프레임 1의 0번째 위치에 접근한다. 이 주소가 가상주소 30번지의 물리 주소다

프로세스가 가상 주소 18번지에 어떤 값을 저장하려고 한다

  1. 가상 주소 18번지가 어느 페이지에 있는지 찾는다 (18번지는 페이지 1의 8번째에 있음)
  2. 페이지 테이블의 페이지 1로 가서 해당 페이지가 프레임 3에 있다는 것을 알아낸다
  3. 프로세스가 저장하려는 값을 프레임 3의 8번 위치에 저장한다

2.2 정형화된 주소 변환

VA = <P, D>

  • VA (virtual address): 가상 주소
  • P (page): 페이지
  • D (distance, offset): 페이지의 처음 위치에서 해당 주소까지의 거리

가상 주소 30번지는 VA = <3, 0>: 가상 주소 페이지 3의 0번째 주소

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

  • PA: 물리 주소, 실제 주소
  • F: 프레임, frame
  • D: 프레임의 처음 위치에서 해당 주소까지의 거리

가상 주소 30번지가 물리 주소 프레임 1의 0번 위치로 변환되면 VA = <3, 0> -> PA = <1, 0>

페이지와 프레임의 크기가 같기 때문에 정형화된 주소 변환 과정에서는 D의 값은 바뀌지 않는다


[이미지 출처]

페이지 테이블

  • 구성: 페이지 번호와 프레임 번호
  • Page Table Entry: 페이지 테이블의 각 줄
  • 페이지 테이블은 페이지 번호와 프레임 번호로 구성된 페이지 테이블 엔트리의 집합

2.3 16bit CPU의 주소 변환

가상 주소를 <P, D>로 변환하는 공식

  • P = (가상 주소) // (한 페이지의 크기)
  • D = (가상 주소) % (한 페이지의 크기)
    • 나머지

16bit CPU의 컴퓨터에서 한 페이지의 크기가 2^10B임을 가정하자

  • 16bit CPU의 컴퓨터에서 한 프로세스가 사용할 수 있는 가상 메모리의 크기는 2^16 B
  • 사용자는 0번지 ~ 2^16 - 1 번지의 가상 주소 공간를 사용할 수 있음
  • 한 페이지의 크기는 2^10 B
    • 가상 주소로 사용할 수 있는 16bit 중 6bit는 페이지 번호
    • 10bit는 페이지의 처음 위치에서 해당 주소까지의 거리로 사용

가상 주소 VA = <P, D>에서 P는 6bit, D는 10bit

  • 시스템의 페이지는 0 ~ 2^6 - 1번지까지 총 64개 존재
  • 각 페이지는 0 ~ 2^10 - 1번지까지 총 1024 번지로 구성

물리 주소도 1024B로 나눔

3) 페이지 테이블의 관리

시스템에는 여러 프로세스가 존재하고, 각 프로세스마다 페이지 테이블을 하나씩 갖는다

  • 프로세스는 메모리에 올라와야 실행 가능함
  • 모든 프로세스의 일부 페이지가 물리 메모리의 프레임에 올라와있고, 어떤 페이지가 어떤 프레임에 있는지 관리하기 위해 프로세스마다 페이지 테이블을 운영함
  • 자주 사용되는 자료구조인 페이지 테이블은 접근 속도가 빨라야 함
  • & 페이지 테이블의 크기는 프로세스의 수에 비례해서 커짐
    • 한 번에 실행하는 프로세스의 수가 많음 >> 페이지 테이블의 크기가 커짐 >> 프로세스가 실제로 사용할 수 있는 메모리의 영역이 줄어듬
  • 그래서 페이지 테이블은 물리 메모리의 운영체제 영역에 모아둔다

페이지 테이블 관리의 문제점

  • 페이지 테이블의 크기가 작지 않음
  • 페이지 테이블의 크기가 늘어남 >> 운영체제 영역이 늘어남 >> 사용자 영역 줄어듬
  • 물리 메모리의 크기가 작을 때는 프로세스 뿐만 아니라 페이지 테이블의 일부도 스왑 영역으로 옮겨짐

레지스터

  • 페이지 테이블에 빠르게 접근하기 위해 레지스터가 존재함
  • 각 프로세스가 메모리에 접근하고자 할 때 메모리 관리자는 페이지 테이블의 위치를 빠르게 파악하기 위해 각 페이지 테이블의 시작 주소를 페이지 테이블 기준 레지스터(PTBR, page table base register)에 저장한다
  • PTBR:
    • 각 프로세스의 프로세스 제어 블록에 저장되는 데이터
    • 물리 메모리 내에 페이지 테이블의 시작 주소를 가짐

4) 페이지 테이블 매핑 방식

  • 페이지 테이블의 크기가 너무 커지면 프로세스가 실제로 사용할 수 있는 메모리 영역이 줄어듬
  • 사용할 수 있는 메모리 영역이 작으면 프로세스와 페이지 테이블의 일부도 스왑 영역으로 옮겨짐
  • 페이지 테이블 전체를 메모리에서 관리하는지, 일부를 스왑 영역에서 관리하는지에 따라 가상 주소를 물리 주소로 변환하는 방법이 달라짐


[이미지 출처]

직접 매핑

  • Direct mapping
  • 페이지 테이블 전체가 물리 메모리의 운영체제 영역에 존재
  • 부가 작업 없이 바로 주소 변환 가능

연관 매핑

  • Associative mapping
  • 물리 메모리의 여유 공간이 작을 때
  • 페이지 테이블 전체를 스왑 영역에서 관리함
  • 모든 페이지 테이블을 저장장치의 스왑 영역에 저장함
    • 일부만 무작위로 물리메모리에 가져옴
      • 무작위라서 페이지 번호와 프레임 번호 둘다 명시적으로 표시함
      • 그래서 테이블이 2개의 열을 가짐
  • 주소 변환 과정:
    • 물리 메모리 내의 페이지 테이블을 다 검색해야 함
    • 이래도 못 찾으면 스왑 영역의 페이지 테이블을 검색해야 함
    • 시간 효율성 떨어짐

집합-연관 매핑

  • Set-associative mapping
  • 연관 매핑의 문제점을 개선함
  • 모든 페이지 테이블을 스왑 영역에서 관리 & 일부만 물리 메모리로 가져옴
  • 페이지 테이블을 일정 집합으로 잘라서 자른 덩어리 단위로 물리 메모리에 가져옴
    • 무작위로 가져오는 연관 매핑의 문제점 개선
  • 페이지 테이블을 구성하는 단위의 집합을 관리하는 페이블을 새로 생성함
    • 집합 테이블(set table)에는 일정하게 자른 페이지 테이블의 위치 정보를 표시함
      • 위치 정보: 물리 메모리에 있는지, 스왑 영역에 있는지
    • invalid - 스왑 영역에 있음
    • 숫자 - 물리 메모리의 xx번지에 있음

역매핑

  • invert mapping

  • 물리 메모리의 프레임 번호를 기준으로 테이블을 구성함

    • 페이지 번호 기준으로 테이블을 구성하는 직접/연관/직접-연관 매핑과 차이
  • 물리 메모리의 프레임에 어떤 프로세스의 어떤 페이지가 올라와있는지 표시함

    • 직접 매핑) 페이지 0이 프레임 1에 있음
    • 역매핑) 프레임 1이 프로세스 1의 페이지 0에 있음
  • 프로세스의 수와 상관없이 테이블이 하나만 존재함

    • 프로세스마다 페이지 테이블을 만들 필요 없음
    • 전체 시스템에 테이블 1개 존재
  • 장점: 테이블이 하나라서 테이블 크기가 매우 작음

  • 단점: 프로세스가 가상 메모리에 접근할 때 프로세스 아이디와 페이지 번호를 모두 찾아야 함

4.1 직접 매핑

  • 모든 페이지 테이블을 물리 메모리에 가짐
  • 물리 메모리가 충분할 때
  • 모든 페이지를 물리 메모리에 가지고 있어서 주소 변환 속도가 빠름
  • VA = <P, D>PA = <F, D>로 변환: 페이지 테이블의 P번째 위치에서 원하는 프레임 값을 얻을 수 있음
  • 페이지 테이블의 시작 주소는 페이지 테이블 기준 레지스터 (PTBR)가 가짐
    • 물리 메모리상 페이지 테이블의 P번째 주소가 시작주소(PTBR)로부터 P번째 위치에 존재함

4.2 연관 매핑


[이미지 출처]

  • 전체 페이지 테이블을 스왑 영역에 둠
    • 페이지 테이블의 일부를 물리 메모리에 가져옴
  • 물리 메모리에는 일부 페이지만 무작위로 저장됨
    • TLB (Translation Look-aside Buffer)/연관 레지스터(Associate register): 물리 메모리에 저장된 일부 테이블
      • 페이지 번호와 프레임 번호로 구성된 작은 크기의 테이블
  • 메모리 접근 방식
    • TLB를 검색한다
    • 찾으면 TLB hit >> 바로 물리 주소로 변환
    • 없으면 TLB miss >> 스왑 영역에 저장된 직접 매핑 테이블을 사용하여 프레임 번호로 변환
  • 장점
    • 메모리 절약: 전체 페이지 테이블을 물리 메모리에 보관하지 않음
  • 단점
    • TLB miss가 자주 발생하면 시스템의 성능이 떨어짐
    • TLB는 페이지 테이블 일부를 무작위로 가지기 때문에 전체 TLB을 검색해야 miss 여부 확정 가능

4.3 직접-연관 매핑

  • directory mapping
  • 연관 있는 테이블을 덩어리 모아 놓음
  • 페이지 테이블을 같은 크기의 여러 묶음으로 나눔
    • 각 묶음의 시작 주소를 가진 디렉터리 테이블을 새로 만들어 관리함
  • 테이블의 위치
    • 전체 페이지 테이블은 스왑 영역에 있음
    • 일부 테이블은 묶음 단위로 메모리로 옮김
  • 그래서 해당 묶음이 메모리에 있는지 스왑 영역에 있는지를 표시하는 디렉터리 테이블이 필요함
    • 이렇게 전체 테이블을 찾아보지 않아도 TLB miss를 알 수 있음

VA = <P1, P2, D>

  • P1 - 디렉터리 테이블에서의 위치 정보
  • P2 - 묶음 내에서의 위치 정보

직접-연관 매핑의 주소 변환

페이지 테이블을 10개씩 한 묶음으로 나누면, 0~9번 테이블이 0번 디렉터리에 속함. 10~19번 테이블은 1번 디렉터리에 속함

그래서 가상 주소 32번지는 <0, 3, 2>로 변환됨: 0번 디렉토리의 3번 테이블의 2번째

가상 주소 127번지는 <1, 2, 7>로 변환됨

4.4 역매핑


[이미지 출처]

  • 물리 메모리의 프레임 번호를 기준으로 테이블 작성
    • 물리 메모리가 어떤 프로세스의 어떤 페이지를 가지고 있는지
  • 역매핑 테이블의 구성
    • <프레임 번호, 프로세스 ID, 페이지 번호>
    • 페이지 테이블의 행 수 == 실제 프레임의 수
    • 프로세스의 수와 상관없이 항상 일정 크기의 페이지 테이블을 유지함
      • 테이블의 크기가 매우 작음

역매핑의 주소 변환

  • 역매핑 테이블에 주소 변환 해야 하는 프로세스의 ID(=PID)와 페이지 번호가 물리 메모리에 있는지 검색한다
  • 없으면 스왑 영역에서 가져온다
  • 페이지 테이블 전체를 검사하고 없으면 저장장치에 접근한다
    • 단점: 검색 시간 낭비함

3. 세그먼테이션 기법

가변 분할 방식 기반 가상 메모리 관리 기법

물리 메모리를 프로세스의 크기에 따라 가변적으로 나눠 사용함

1) 세그먼테이션 기법의 구현


[이미지 출처]

Segmentation table/Segmentation mapping table

  • 구성 요소
    • Limit: 세그먼트의 크기
      • 메모리를 같은 크기의 페이지 단위로 분할하는 페이징과 다르게 세그먼테이션은 프로세스의 크기에 따라 메모리를 분할해서 크기 정보를 저장해야 함
      • 각 세그먼트는 자신에게 주어진 메모리 영역을 넘치면 안됨
    • Address: 물리 메모리상의 시작 주소

세그먼테이션 기법

  • 물리 메모리가 부족하면 스왑 영역을 사용함
  • 가변 분할 방식을 사용함
  • 장점
    • 메모리를 프로세스 단위로 관리함
    • 그래서 페이지 테이블이 작고 단순함
  • 단점
    • 물리 메모리의 외부 단편화
    • 그래서 물리 메모리 관리가 복잡함

2) 세그먼테이션 기법의 주소 변환

VA = <S, D>

  • S - 세그먼트 번호
  • D - 세그먼트 시작 지점에서 해당 주소까지의 거리
    • 가상 메모리 시스템에서 사용자에게 보이는 메모리는 항상 0부터 시작함
    • D는 사용자가 지정한 주소 그 자체임

프로세스 A의 32번지에 접근한다

  1. 가상 주소를 구한다 (프로세스 A는 세그먼트 0으로 분할되었으니 S = 0, D = 32, VA = <0, 32>)
  2. 세그먼테이션 테이블에서 세그먼트 0의 시작 주소를 알아낸다
  3. 시작 주소에 거리를 더하여 물리 주소를 구한다 (120 + 32 = 152)
  4. 메모리 관리자는 거리가 세그먼트의 크기보다 큰지 점검한다
  5. 물리 주소 152번지에 접근해 원하는 데이터 작업을 처리한다

거리가 세그먼트의 크기보다 크면 메모리를 벗어났다는 뜻. 메모리 오류를 출력하고 프로세스를 강제 종료한다
Trap: 세그먼트의 크기보다 더 큰 주소에 접근하고자 할 때 발생하는 오류. 사용자가 의도치 않게 일으키는 인터럽트
Trap이 발생하면 운영체제는 사용자에게 Segmentation fault 메시지를 보낸다

Signal: 트랩과 반대로, 사용자가 의도한 인터럽트. 외부 인터럽트의 종류
(예) 사용자가 강제로 Ctrl+C 키를 눌러 프로세스를 중지시키는 것


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

페이징 기법

  • 장점
    • 물리 메모리를 같은 크기로 나눠 관리
    • 메모리 관리가 수월함
  • 단점
    • 페이지 테이블의 크기가 큼
    • 사용자가 사용할 수 있는 메모리 영역의 크기가 줄어듬

세그먼테이션 기법

  • 장점
    • 페이지 테이블의 크기를 작게 유지할 수 있음
  • 단점
    • 물리 메모리의 외부 단편화 >> 추가적인 관리가 필요함

1) 메모리 접근 권한

메모리 접근 권한: 메모리의 특정 번지에 저장된 데이터를 사용할 수 있는 권한

(예) 읽기, 쓰기, 실행, 추가 권한

구분읽기쓰기실행비고
모드 0XXX접근 불가
모드 1XXO실행만 가능
모드 2XOX실제로 사용 안함
모드 3XOO실제로 사용 안함
모드 4OXX읽기 전용
모드 5OXO읽고 실행 가능
모드 6OOX읽고 쓰기 가능
모드 7OOO제한 없음

이론적으로 이 네가지 권한의 조합으로 여러 권한 모드가 가능하지만, 실제로는 그렇지 않음

  • 추가 권한의 경우 해당 데이터의 마지막에 새로운 데이터를 추가하는 것이므로 항상 쓰기 권한이 동반되어야 함


[이미지 출처]

  • 코드 영역: 읽기/실행만 가능
  • 데이터 영역
    • 일반적인 변수는 읽거나 쓰기 가능
    • 상수로 선언한 변수는 읽기 권한만

가상 주소에서 물리 주소로 주소 변환이 일어날 때마다 메모리 접근 권한을 검사한다

읽기만 가능한 메모리 영역에 쓰기를 하려고 하면 메모리 오류인 트랩이 발생한다

2) 세그먼테이션-페이징 혼용 기법의 도입

페이지마다 접근 권한이 다르기 때문에 페이지 테이블의 모든 행에 메모리 접근 권한과 관련된 권한 비트(Right bit)가 필요함


[이미지 출처]

  • 메모리 관리자는 주소 변환이 이루어질 때마다 페이지 테이블의 권한 비트를 확인해 유용한 접근인지 확인함
  • Right bit의 추가로 페이지 테이블의 크기가 커짐
    • 인접한 페이지의 메모리 접근 권한이 같은 것을 이용해 개선하자
    • 세그먼테이션 테이블을 이용하면 됨


[이미지 출처]

  • 페이지로 분할된 가상 주소 공간에서 서로 관련있는 영역을 하나의 세그먼트로 묶는다
    • 세그먼테이션 테이블로 관리
      • 권한 비트도 세그먼테이션 테이블에서 관리
  • 각 세그먼트를 구성하는 페이지를 해당 페이지 테이블로 관리
  • 각 세그먼테이션 테이블은 자신과 연결된 페이지 테이블의 시작 주소를 가짐

3) 세그먼테이션-페이징 혼용 기법의 주소 변환


[이미지 출처]

  • 사용자 입장
    • 세그먼테이션 기법
  • 메모리 관리자 입장
    • 페이징 기법

VA = <S, P, D>

  • S - 세그먼트 번호
  • P - 페이지 번호
  • D - 시작 주소로부터의 거리

세그먼테이션-페이징의 주소 변환 과정

  1. 사용자가 어떤 주소에 있는 데이터를 요청한다
  2. 해당 주소가 몇번째 세그먼트의 몇번째 페이지로부터 얼마나 떨어져 있는지 계산한다
  3. VA = <S, P, D>를 구한다
  4. 세그먼테이션 테이블의 해당 세그먼트 번호로 가서 유용한 접근인지 확인한다
    • 자신의 영역을 벗어나는 불법 접근이 아닌지
      • 세그먼테이션 오류 발생시키고 프로세스 강제 종료
    • 권한이 없는 페이지에 접근하는지
  5. 페이지 테이블에서 해당 페이지가 어느 프레임에 저장되었는지 찾는다
  6. 물리 메모리에 프레임이 있으면 메모리에 바로 접근한다
  7. 없으면 스왑 영역에서 해당 페이지를 물리 메모리로 가져온다
  8. 물리 메모리에 있는 프레임의 처음 위치에서 D만큼 떨어진 곳에 접근한다

5. 캐싱 매핑 기법

캐시의 크기는 메모리보다 작아서 항상 메모리의 일부 페이지만 가진다

캐시의 직접 매핑에서는 캐시된 데이터가 매번 같은 자리로 오기 때문에 캐시 테이블 전체를 찾아보지 않아도 캐시 히트/미스를 알 수 있다

1) 캐시 직접 매핑

캐시도 메모리를 일정 크기로 나누고, 이 덩어리를 페이지 (P)라 부른다

<P, D>

  • CPU가 메모리에 접근하고자 할 때 사용하는 주소
  • P - 페이지 번호
  • D - 페이지 내에서 거리

메모리는 N개의 페이지로, 캐시는 M개의 페이지로 구성된다고 가정하자 (캐시는 메모리보다 작아서 N이 M보다 훨씬 큼)

  • 메모리를 캐시 크기(block)으로 자르자
  • 메모리의 페이지 수 N은 M * block 수가 된다
  • 직접 매핑에서 메모리의 블록이 캐시로 올라올 때 항상 같은 위치에 올라온다
  • 그래서 메모리의 어떤 블록에서 올라온 페이지인지만 확인하면 됨
  • Tag: 캐시에 명시하는 블록 번호
    • 캐시 히트/미스를 알려고 확인함
    • 메모리 주소의 앞 2bit에 해당함

  • 메인 메모리의 페이지가 캐시의 정해진 위치에만 들어갈 수 있음
    • 블록 00의 데이터는 캐시의 00 위치에만 올라감
  • 현재 캐시의 00 위치에 어느 메모리 블록에서 올라왔는지 확인하기 위해서 태그를 유지한다
    • 태그에 써있는 값이 어느 블록에서 올라온줌
    • 메모리 주소의 앞 2bit에 해당하는 값

메모리 워드 1101의 cobra를 찾아보자

  1. CPU는 캐시의 01 위치(block distance) (주소 뒷자리)에 가서 태그가 11인지 확인한다
  2. 태그가 11이므로 캐시 히트

0111의 crow를 찾아보자

  1. 캐시의 11(bd) 위치에 가서 태그가 01인지 확인한다
  2. 캐시 미스

직접 매핑

  • 장점
    • 메모리의 페이지가 캐시의 같은 위치에 올라와서 태그만 확인하면 캐시 미스/히트 확인이 쉬움
  • 단점
    • 페이지가 같은 위치에만 ㅇ로라와서 자리다툼 발생
      • 이 문제를 완화한 것이 연관 매핑

2) 캐시 연관 매핑

  • 메모리 워드가 캐시의 어느 위치에도 자유롭게 올라갈 수 있어서 캐시가 메모리 워드의 주소를 전부 가지고 있음
  • 장점
    • 캐시 메모리를 자유롭게 사용할 수 있음
  • 단점
    • 캐시 히트/미스 확인을 위해 캐시의 모든 주소를 검색해야 한다
    • 직접 매핑보다 느림

3) 캐시 집합-연관 매핑

  • 캐시를 K개의 집합으로 나눠 각 집합에 직접 매핑을 사용함
  • 캐시 메모리를 K개로 나눠 같은 끝자리를 가진 캐시 메모리가 K개임
    • 직접 매핑의 자리 다툼 문제 완화
  • 집합 내에서 직접 매핑
    • 연관 매핑처럼 모든 캐시를 뒤질 필요는 없음


연습문제

profile
우당탕탕

0개의 댓글