본문 바로가기
Computer Science/운영체제

[운영체제] 메모리 계층과 캐시

by brother_stone 2023. 4. 24.

메모리 계층

면접을 위한 CS 전공지식 노트 p.143

메모리를 필요에 따라 여러 가지 종류로 나누어 둔 것.

메모리 계층은 레지스터, 캐시, 주기억장치, 보조기억장치로 구성되어 있다.

 

메모리를 계층 구조화한 이유

경제성과 캐시 때문이다.

컴퓨터의 모든 메모리를 속도가 가장 빠른 레지스터로 구성하면 더할 나위 없이 좋겠지만, 메모리는 속도가 빨라질수록 가격이 비싸지기 때문에 용량이 줄어든다. 따라서 당장 필요한 데이터는 빠른 메모리에 저장하고 그렇지 않은 데이터는 상대적으로 느린 메모리에 저장함으로써 한정된 자원 내에서 성능을 최적화한 것이다.

캐시

캐시는 데이터를 미리 복사해 놓는 임시 저장소이며, 빠른 장치와 느린 장치에서 속도 차이에 따른 병목 현상을 줄이기 위한 메모리이다.

CPU가 자주 사용하는 데이터나 명령어를 미리 저장하여 이후부터는 빠르게 접근할 수 있도록 도와준다.

 

CPU에서는 다수의 캐시 메모리가 사용된다. 그 계층에 따라 L1, L2, L3캐시로 분류할 수 있다.

  • L1: CPU에 내장
  • L2: CPU에 내장, L1보다 느리지만 크기가 더 크다.
  • L3: CPU혹은 메인보드에 내장

CPU는 데이터를 찾을 때 가장 먼저 L1캐시에 접근한다. L1캐시에 데이터가 없으면 L2캐시에 접근하며, L2캐시에도 데이터가 없으면 L3캐시에 접근, 그마저도 없으면 주기억장치까지 내려가서 데이터를 찾는 식이다.

 

 

캐시 히트와 캐시 미스

캐시에 접근해 원하는 데이터를 찾는 것을 캐시 히트라고 하며, 캐시에서 찾지 못하고 주기억장치까지 가서 데이터를 찾아오는 것을 캐시 미스라고 한다.

면접을 위한 CS 전공지식 노트 p.145

캐시 히트를 하게 되면 CPU내부버스 기반으로 작동하기 때문에 속도가 빠르다. 반면, 캐시미스 발생 시 시스템 버스 기반으로 작동하기 때문에 속도가 느리다.

 

**버스: 컴퓨터 안의 부품들 간에, 또는 컴퓨터 간에 데이터와 정보를 전송하는 통로(통신 시스템)이다.

캐싱 계층

메모리장치 사이의 속도 차이를 해결하기 위해 계층과 계층 사이에 있는 계층을 캐싱 계층이라고 한다.

예를 들어 캐시 메모리와 보조기억장치 사이에 있는 주기억장치를 보조기억장치의 캐싱 계층이라고 할 수 있다.

 

지역성의 원리

앞서 캐시 히트와 캐시 미스에 대해 설명했다. 캐시 미스보다 캐시 히트율이 높아야 캐시 성능이 좋다고 말할 수 있을 것이다. 따라서 캐시의 성능을 높이기 위해 어떤 데이터들이 더 자주 사용될 것인가에 대한 예측이 필요하며 이때, 자주 사용하는 데이터를 판단하기 위한 근거로 시간 지역성(Temporal Locality)공간 지역성(Spatial Locality) 개념을 사용한다.

 

예시 코드

public class LocalityTest {
    public static void main(String[] args) {
        int[] arr = new int[10];

        for (int i = 0; i < 10; i++) {
            arr[i] = i;
        }
    }
}

시간 지역성(temporal locality)

최근 사용한 데이터에 다시 접근하려는 특성을 말한다.

위 예시 코드에서는 반복문 내 지역변수 i에 계속 접근하며 연산한다. 여기서 데이터는 변수 i이고 최근에 사용했기 때문에 계속 접근해서 +1을 연이어 하는 것을 볼 수 있다.

 

공간 지역성(spatial locality)

최근에 접근한 데이터를 이루고 있는 공간 혹은 이와 인접한 공간에 접근하려는 특성을 말한다.

위 예시 코드에서는 공간을 나타내는 배열 arr의 각 요소들에 새로운 값을 할당하며 해당 배열에 지속적으로 접근하는 것을 볼 수 있다.

 

캐시 매핑

캐시 매핑이란 캐시가 히트되기 위해 매핑하는 방법을 말한다.

CPU의 레지스터와 주기억장치간에 데이터를 주고받을 때를 기반으로 설명한다.

  1. 직접 매핑(Directed Mapping): 메모리가 1~100이 있고 캐시가 1~10이 까지 있다면 캐시 1번에는 메모리 1~10번, 캐시 2번에는 메모리 11~20번과 같이 매핑하는 것을 말한다. 가장 기본적인 구조로 처리가 빠르다는 장점이 있지만 잦은 충돌이 발생할 수 있다.
  2. 연관 매핑(Associative Mapping): 직접 매핑과 같이 순서를 일치시키지 않고, 연관된 캐시와 메모리를 매핑하는 방법이다. 충돌이 적다는 장점이 있지만 특정 캐시 내의 모든 블록을 탐색해야 하기 때문에 속도가 느리다.
  3. 집합 연관 매핑(Set Associative Mapping): 직접 매핑과 연관 매핑을 합친 방법이다. 예를 들어 메모리가 1~100이 있고 캐시가 1~10이 있다면, 캐시 1~5에는 메모리 1~50의 데이터를 무작위로 저장시키는 것을 말한다. 연관 매핑처럼 모든 블록을 탐색하는 것이 아닌 특정 집합의 내부만 탐색하면 되기 때문에 효율적인 탐색이 가능하다.

웹 브라우저의 캐시

쿠키

로컬 스토리지

세션 스토리지

 

데이터베이스의 캐싱 계층

레디스

 

면접을 위한 CS 전공지식 노트 p.147

 

면접 예상 질문

캐시의 지역성의 원리에 대해 설명해보시오.

 

캐시 메모리는 속도가 빠른 장치와 느린 장치간의 속도차에 따른 병목 현상을 줄이기 위한 범용 메모리이다. 이러한 역할을 수행하기 위해서는 CPU 가 어떤 데이터를 원할 것인가를 어느 정도 예측할 수 있어야 한다. 캐시의 성능은 작은 용량의 캐시 메모리에 CPU 가 이후에 참조할, 쓸모 있는 정보가 어느 정도 들어있느냐에 따라 좌우되기 때문이다.

이 때 적중율(Hit rate)을 극대화 시키기 위해 데이터 지역성(Locality)의 원리를 사용한다. 지역성의 전제조건으로 프로그램은 모든 코드나 데이터를 균등하게 Access 하지 않는다는 특성을 기본으로 한다. 즉, Locality란 기억 장치 내의 정보를 균일하게 Access 하는 것이 아닌 어느 한 순간에 특정 부분을 집중적으로 참조하는 특성인 것이다.

이 데이터 지역성은 대표적으로 시간 지역성(Temporal Locality)과 공간 지역성(Spatial Locality)으로 나뉜다.

  • 시간 지역성 : 최근에 참조된 주소의 내용은 곧 다음에 다시 참조되는 특성.
  • 공간 지역성 : 대부분의 실제 프로그램이 참조된 주소와 인접한 주소의 내용이 다시 참조되는 특성

캐시 매핑(캐싱 라인)에 대해 설명해보세요.

 

언급했듯이 캐시(cache)는 프로세서 가까이에 위치하면서 빈번하게 사용되는 데이터를 놔두는 장소이다. 하지만 캐시가 아무리 가까이 있더라도 찾고자 하는 데이터가 어느 곳에 저장되어 있는지 몰라 모든 데이터를 순회해야 한다면 시간이 오래 걸리게 된다. 즉, 캐시에 목적 데이터가 저장되어 있다면 바로 접근하여 출력할 수 있어야 캐시가 의미 있어진다는 것이다.

그렇기 때문에 캐시에 데이터를 저장할 때 특정 자료구조를 사용하여 묶음으로 저장하게 되는데 이를 캐싱 라인 이라고 한다. 프로세스는 다양한 주소에 있는 데이터를 사용하므로 빈번하게 사용하는 데이터의 주소 또한 흩어져 있다. 따라서 캐시에 저장하는 데이터에는 데이터의 메모리 주소 등을 기록해 둔 태그를 달아놓을 필요가 있다. 이러한 태그들의 묶음을 캐싱 라인이라고 하고 메모리로부터 가져올 때도 캐싱 라인을 기준으로 가져온다. 종류로는 대표적으로 세 가지 방식이 존재한다.

  1. Full Associative Mapping
  2. Set Associative Mapping
  3. Direct Mapping

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

[운영체제] 멀티 스레딩  (0) 2023.05.11
[운영체제] 멀티 프로세싱  (0) 2023.05.02