4 minute read

캐시 메모리

- 캐시 메모리

    CPU의 주기억장치의 속도 차이를 보완하기 위하여 그 사이에 설치하는 반도체 기억장치

    액세스 시간이 주기억장치보다 짧지만 가격이 높아지고 설치 공간도 제한됨

- 캐시 검사

    CPU가 기억장치로부터 어떤 데이터 읽어려 할 때 먼저 그 데이터를 캐시에 있는 지 검사한 뒤 유/무에 따라 주기억장치로 인출하는 것

- 캐시 적재

    주기억장치로부터 인출된 데이터가 일단 캐시에 적재된 다음 다시 인출되어 CPU로 인출되는 것

- 캐시 적중

    CPU가 원하는 데이터가 이미 캐시에 적재되어 있는 상태

    - 캐시 적중률

        기억장치 액세스들 중 캐시에 적중되는 비율

    - 캐시 미스

        CPU가 원하는 데이터가 캐시에 없는 상태

    - 미스율

        기억장치 액세스들 중 캐시에 적중되지 않는 비율

    - 평균 기억장치 액세스 시간

        전체 기억 장치 액세스에서 캐시 적중과 캐시 미스를 퍼센테이지에 각각 곱한 후 합친 것

    - 캐시 인출 시간

        캐시 적재를 합친 시간

    - 지역성

        CPU가 주기억장치의 특정 위치에 저장되어 있는 명령어들이나 데이터를 빈번히 혹은 집중적으로 액세스하는 현상

        - 시간적 지역성

            최근에 액세스된 프로그램코드나 데이터가 가까운 미래에 다시 액세스될 가능성이 높아지는 것

        - 공간적 지역성

            기억장치 내에 서로 인접하여 저장되어있는 데이터들이 연속적으로 액세스될 가능성이 높아지는 특성

        - 순차적 지역성

            분기가 발생하지 않는 한, 명령어들이 기억장치에 저장된 순서대로 인출되어 실행되는 것

- 캐시 설계

    캐시의 활용을 높여 평균 기억장치 액세스 시간을 단축하기 위한 설계

    - 공통 목표

        캐시 적중률의 극대화, 캐시 액세스 시간의 최소화, 캐시 실패에 따른 지연시간 최소화, 주기억장치와 캐시간의 일관성 유지 및 그에 따른 오버헤드 최소화

        - 캐시 용량

            캐시의 용량이 커질 수록 적중률이 높아지기 때문에 용량과 비용이 상호 조정을 통하여 적절히 결정

            캐시 용량이 커질 수록 주소 해독, 정보 인출을 위한 주변회로가 더 복잡해짐

            칩이나 메인보드의 공간에 의해 제한 받음

        - 인출 방식

            주기억장치로부터 캐시를 인출해오는 방식도 캐시 적중률에 많은 영향 받음

            - 요구 인출

                필요한 정보만 인출해오는 방식

            - 선인출

                필요한 정보 외에 앞으로 필요할 것으로 예측되는 정보를 미리 인출해오는 방식

                정보 인출 시 근접한 위치에 있는 정보 함께 인출하여 캐시에 적재

                - 블록

                    주기억장치를 액세스할 때 함께 인출되는 정보들의 그룹

                - 캐시 라인

                    주기억장치로부터 캐시로 인출되는 단위인 한 블록이 적재되는 캐시 내 공간

                    주기억장치 블록 수보다 훨씬 적어 기억장치 블록들 중 일부분만 캐시에 적재될 수 있음

                    여러 개의 주기억장치 블록들에 의해 공유됨

                - 태그

                    캐시 라인을 공유하는 블록들 중에서 어느 것이 적재되어 있는지 가리키는 비트들

        - 사상 방식

            주기억장치 블록이 어느 캐시라인에 적재될 수 있는지 결정해주는 알고리즘

            - 직접 사상

                주기억장치 블록이 지정된 어느 한 라인에만 적재될 수 있는 사상 방식

                주기억장치 주소를 태그 필드, 라인 필드, 단어 필드로 구성된 것으로 해석됨

                - 라인 필드

                    블록이 적재될 수 있는 라인 지정 용도

                - 태그 필드

                    같은 캐시 라인 공유하는 주기억장치 블록들을 서로 구분하는 용도

                - 단어필드

                    각 블록내의 단어 구분 용도

            - 완전-연관 사상

                주기억장치 블록이 캐시의 어느 라인으로든 적재될 수 있는 사상 방식

                주기억장치 주소를 태그 필드, 단어 필드로 구성된 것으로 해석됨

                주기억장치 블록이 캐시의 어떤 라인이든 적재될 수 있으므로 적중 여부 검사하기 위해 모든 라인들의 태그들과 주 기억장치의 태그 필드 내용 비교하여 일치확인해야 함

                비어있는 라인 없으면 교체 알고리즘을 통해 라인 선택 후 새로운 블록 적재

            - 세트 연관 사상

                주기억장치 블록이 지정된 어느 한 세트로만 적재될 수 있으며 각 세트는 두 개 이상의 라인들로 구성된 사상방식

                직접 사상과 완전-연관 사상의 장점만을 취하기 위한 절충안

                - k-way 세트-연관 사상

                    세트당 라인이 k개씩 있는 사상방식

                    주기억장치 주소를 태그 필드, 세트 필드, 단어 필드로 나누어 해석함

                    - 세트 필드

                        주기억장치 블록이 적재될 수 있는 세트 선택 용도

        - 교체 알고리즘

            캐시 미스가 발생하여 새로운 블록이 주기억장치로부터 캐시에 올라왔을 때 그 블록이 적재될 수 있는 라인이 이미 다른 블록들로 채워져 있다면 그 블록 들 중 하나를 교체하는 알고리즘

            - 최소 최근 사용 알고리즘

                사용되지 않은 채로 가장 오랫동안 적재되어 있던 블록 교체하는 방식

                각 라인이 USE비트를 가지고 있도록 하고 라인이 액세스 되면 비트를 1로 세틀하고 다른 라인 비트를 0으로 리셋하여 새로운 블록이 그 세트로 적재된다면 0인 라인이 교체되는 방식으로 구현

            - FIFO 알고리즘

                캐시에 적재된 지 가장 오래된 블록 교체 방식

            - 최소 사용 빈도 알고리즘

                캐시에 적재된 이래 사용된 빈도가 가장 낮은 블록 교체하는 방식

                각 라인에 카운터를 설치해야 하기 때문에 하드웨어 복잡해 짐

        - 쓰기 정책

            주기억장치 내용이 복사된 캐시 데이터 변경 시 원본인 주기억장치도 갱신하는 방식

            - write-through

                모든 쓰기 동작들이 캐시와 주기억장치에 동시에 행해지는 방식

                주기억장치의 내용이 항상 캐시와 같음

                쓰기 동작에 걸리는 시간 길어짐

            - write-back

                쓰기 동작이 캐시까지만 이루어지는 방식

                M(modified)비트를 이용하며 라인이 교체될 때 그 라인 전체가 기억장치가 갱신된 다음에 교체됨

                - 문제점

                    캐시에서 수정된 내용이 갱신될 때까지 주기억장치의 해당 블록이 무효 상태에 있음

                    캐시 라인 상태 확인하고 갱신하는 동작 지원 위해 캐시 제어회로 복잡해짐

                    각 라인이 상태 비트 가지고 있어야 함

                    다중 프로세서의 경우 여러 캐시가 있어서 데이터 불일치 문제가 발생할 수 있음

        - 다중 캐시

            캐시들 계층적으로 설치하거나 기능별로 분리된 다수의 캐시를 사용하는 것

            각 계층의 캐시는 슈퍼 셋 관계를 가짐

            - 온-칩 캐시

                CPU 칩 내부에 포함된 캐시

            - 계층적 캐시

                여러 레벨의 캐시들을 계층적으로 설치한 구조

            - 분리 캐시

                명령어와 데이터를 분리하여 별도로 저장하는 캐시 구조

                명령어 인출 단계와 오퍼랜드 인출 단계 간에 캐시에 대한 충돌 현상 제거 가능

            - 계층적 캐시와 분리 캐시 혼합 구조

                최근 프로세서들의 구조

                계층적 캐시를 이용하여 명령어, 데이터 분리

                계층적 캐시로 슈퍼셋 관계 만들어 평균 속도 향상