검색
회원가입로그인
AI와 함께 공부하기 : 컴퓨터 구조

Memory: 메모리 계층 구조 설계 고려

메모리 계층 설계를 위한 네 가지 핵심 질문에 대한 해답을 확인해보겠습니다.


1. 블록은 어디에 놓일 수 있는가? (Where Can a Block Be Placed?)

  • 직접 매핑 (Direct Mapped): 주 메모리 블록이 캐시 내의 정확히 한 위치에만 매핑됩니다. 가장 간단한 방식입니다.(Set의 수 = 블록 수)

  • 세트 연관 (Set Associative): 주 메모리 블록이 캐시 내의 특정 '세트'에 매핑되지만, 그 세트 내의 어떤 블록 위치에도 저장될 수 있습니다. 연관도(Associativity)는 한 세트 내의 블록 수를 의미합니다 (일반적으로 2~16, Set의 수 = 블록 수 / Associativity).

  • 완전 연관 (Fully Associative): 주 메모리 블록이 캐시 내의 어떤 위치에도 저장될 수 있습니다. 이는 하나의 세트만 가지며, 그 세트 안에 캐시의 모든 블록이 있는 형태입니다. (Set의 수 = 1)

연관도 증가의 영향:

  • 장점: 일반적으로 미스율(Miss Rate)을 감소시킵니다. 특히 다이렉트 매핑에서 2-way 세트 연관으로 갈 때 가장 큰 미스율 감소 효과를 보입니다 (약 15% 감소).

  • 단점: 히트 시간(Hit Time)을 증가시킵니다. 높은 연관도는 더 많은 비교기(Comparator)를 필요로 하여 하드웨어 복잡성을 높입니다.


2. 블록은 어떻게 찾아지는가? (How Is a Block Found?)

블록을 찾는 방법은 블록 배치 방식에 따라 달라집니다.

  • 직접 매핑: 인덱스(Index)만으로 해당 블록 위치를 직접 지정합니다. 비교는 1개만 필요합니다.

  • 세트 연관: 인덱스를 통해 세트를 선택한 후, 해당 세트 내의 모든 블록(연관도 N만큼)에 대해 태그(Tag)를 병렬적으로 검색하고 비교합니다.

  • 완전 연관: 모든 캐시 엔트리에 대해 태그를 병렬적으로 검색하고 비교합니다. 캐시의 크기만큼 많은 비교기가 필요하여 구현 비용이 매우 높습니다.


3. 캐시 미스 시 어떤 블록을 교체할 것인가? (Which Block Should Be Replaced on a Cache Miss?)

  • 직접 매핑: 교체할 수 있는 후보 블록이 오직 하나뿐이므로, 해당 위치의 블록을 무조건 교체합니다.

  • 세트 연관/완전 연관: 여러 후보 블록 중에서 교체할 블록을 선택해야 합니다.

    • LRU (Least Recently Used): 가장 오랫동안 사용되지 않은 블록을 교체합니다. 이는 미스율을 낮추는 데 효과적이지만, 연관도가 높을수록 구현이 복잡하고 비용이 많이 듭니다.

    • Random (무작위): 후보 블록 중 하나를 무작위로 선택하여 교체합니다. LRU보다 구현이 간단하지만, 성능은 낮을 수 있습니다.

  • 가상 메모리: Miss Penalty(페이지 폴트)가 매우 크기 때문에, LRU를 근사한 방식이라도 사용하여 미스율을 최대한 줄이는 것이 매우 중요합니다.


4. 쓰기 작업 시 어떤 일이 발생하는가? (What Happens on a Write?)

  • 라이트 스루 (Write-Through): 데이터를 캐시에 쓰는 동시에 하위 계층(예: 주 메모리)에도 씁니다.

    • 장점: 구현이 비교적 쉽고, 캐시와 하위 계층의 데이터 일관성을 항상 유지합니다.

    • 단점: 모든 쓰기 작업마다 느린 하위 계층에 접근해야 하므로 쓰기 성능이 저하될 수 있습니다. 쓰기 버퍼(Write Buffer)를 사용하여 이 문제를 완화할 수 있습니다.

  • 라이트 백 (Write-Back): 데이터를 캐시에만 먼저 쓰고, 수정된 블록(Dirty Bit을 통해 표시)은 해당 블록이 캐시에서 교체될 때만 하위 계층에 기록합니다.

    • 장점: 한 블록 내에서 여러 번의 쓰기 작업이 발생해도 하위 계층에는 한 번만 쓰면 되므로 쓰기 성능이 향상됩니다.

    • 단점: 캐시와 하위 계층 간의 데이터 일관성 유지가 더 복잡하고, 시스템 충돌 시 데이터 손실의 위험이 있습니다.

  • 가상 메모리: 페이지 폴트 페널티(디스크 접근)가 너무 크기 때문에, 거의 write back 정책만 실용적입니다.


미스의 세 가지 원인 (Source of Misses)

모든 캐시 미스는 다음 세 가지 범주 중 하나에 속합니다.

  1. 필수 미스 (Compulsory Misses) / 콜드 스타트 미스 (Cold-Start Misses):

    • 캐시가 처음 시작되거나, 블록에 대한 첫 번째 접근 시 발생하는 미스입니다. 해당 블록이 캐시에 한 번도 존재한 적이 없기 때문에 발생합니다.

    • 캐시 크기나 연관도를 늘려도 이 미스는 줄어들지 않습니다.

  2. 용량 미스 (Capacity Misses):

    • 프로그램 실행에 필요한 모든 블록을 캐시가 담을 수 없어서 발생하는 미스입니다. 캐시가 너무 작아서 이전에 로드했던 블록이 교체되고 나중에 다시 필요해질 때 발생합니다.

    • 해결책: 캐시 크기를 늘립니다.

  3. 충돌 미스 (Conflict Misses) / 콜리전 미스 (Collision Misses):

    • 세트 연관 또는 직접 매핑 캐시에서, 여러 블록이 동일한 세트에 매핑되어 서로 경쟁하면서 발생하는 미스입니다. 캐시에 공간이 있음에도 불구하고 특정 위치에 대한 충돌로 인해 발생합니다.

    • 해결책: 연관도를 증가시킵니다. (다이렉트 매핑에서 2-way로 늘릴 때 가장 효과적입니다. )


메모리 계층 설계의 도전 과제

  • 캐시 크기: 미스율을 줄이지만 접근 시간(Access Time)을 늘릴 수 있습니다.

  • 연관도: 미스율을 줄이지만 접근 시간(Access Time)을 늘릴 수 있습니다.

  • 블록 크기: 공간 지역성(Spatial Locality)을 활용하여 미스율을 줄일 수 있지만, 너무 크면 미스 페널티(Miss Penalty)가 증가하거나 오히려 미스율이 증가할 수 있습니다.


공유하기
카카오로 공유하기
페이스북 공유하기
트위터로 공유하기
url 복사하기