CS 전공지식

23.12.28 메모리 계층

김용글 2023. 12. 28. 16:10

1. 메모리 계층

    - 레지스터, 캐시, 메모리, 저장장치로 구성 됨

    - 계층 위로 올라갈 수록 가격은 비싸지는데 용량은 작아지고 속도는 빨라짐

    - 계층이 있는 이유는 경제성과 캐시 때문 

    - 예) 16GB RAM 은 9만원이면 사지만 16GB SSD 는 훨씬 더 싼 가격에 살수 있다 이러한 경제성 때문에 계층을

            두어 관리

    - 게임을 실행하다 보면 로딩 중 이라는 메세지가 나오는 것을 볼 수 있는데 이는 하드디스크 또는 인터넷에서

      데이터를 읽어 RAM 으로 전송하는 과정이 아직 끝나지 않음을 의미함

  * 레지스터

       - CPU 안에 있는 작은 메모리, 휘발성, 속도가 가장 빠름, 기억 용량이 가장 작다

  * 캐시

       - L1, L2 캐시를 지칭. 휘발성, 속도 빠름, 기억용량이 적다 참고로 L3 캐시도 있다

  * 주기억장치

       - RAM 을 가리킴. 휘발성, 속도 보통, 기억 용량 보통

       - 하드디스크로부터 일정량의 데이터를 복사해서 임시 저장하고 이를 필요시마다 CPU 에 빠르게 전달하는 역할

  * 보조기억장치

       - HDD, SSD 를 일컬으며 비휘발성, 속도 낮음, 기억용량이 많다

 

 

  1) 캐시

       - 데이터를 미리 복사해 놓는 임시 저장소이자 빠른 장치와 느린 장치에서 속도 차이에 따른 병목 현상을

         줄이기 위한 메모리

       - 데이터를 접근 하는 시간이 오래 걸리는 경우를 해결하고 무언가를 다시 계산하는 시간을 절약할 수 있다

       - 실제로 메모리와 CPU 사이의 속도 차이가 너무 크기 때문에 그 중간에 레지스터 계층을 둬서 속도 차이를

         해결하는데 이렇게 계층과 계층 사이에 있는 계층을 캐싱 계층이라 함

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

 

     (1) 지역성의 원리

           - 캐시를 직접 설정할 때에는 자주 사용하는 데이터를 기반으로 설정해야 한다 이에 대한 근거가 바로 지역성이다

           - 지역성은 시간 지역성(temporal locality)과 공간 지역성(spatial locality)으로 나뉨

           A) 시간 지역성

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

               - 예) for 반복문으로 이루어진 코드 안의 변수 i 에 계속해서 접근이 이루어 질때 데이터는 변수 i 이고

                      최근에 사용했기 때문에 계속 접근해서 +1을 연이어 하는 것을 볼 수 있다

let arr = Array.from({length : 10}, ()=> 0);
console.log(arr)
for (let i = 0; i < 10; i += 1) {
    arr[i] = i;
}
console.log(arr)
/*
[
    0, 0, 0, 0, 0,
    0, 0, 0, 0, 0
]
[
    0, 1, 2, 3, 4,
    5, 6, 7, 8, 9
]
*/

           B) 공간 지역성

               - 최근 접근한 데이터를 이루고 있는 공간이나 그 가까운 공간에 접근하는 특성

               - 앞의 코드에서 공간을 나타내는 배열 arr 의 각 요소들에 i 가 할당되며 해당 배열에 연속적으로 접근하는 것

 

  2) 캐시히트와 캐시미스

       - 캐시에서 원하는 데이터를 찾았다면 캐시히트

       - 해당 데이터가 캐시에 없다면 주메모리로 가서 데이터를 찾아오는 것을 캐시미스라고 한다

       - 캐시히트를 하게 되면 해당 데이터를 제어장치를 거쳐 가지고 오게 됨 위치도 가깝고 CPU 내부 버스를

         기반으로 작동하기 때문에 빠르다

       - 캐시미스가 발생되면 메모리에서 가져오게 되는데 시스템 버스를 기반으로 작동하기 때문에 느리다

       

           A) 캐시매핑

               - 캐시매핑이란 캐시가 히트되기 위해 매핑하는 방법

               - CPU 의 레지스터와 주 메모리(RAM) 간에 데이터를 주고 받을 때를 기반으로 설명한다

               - 레지스터는 주 메모리에 비하면 굉장히 작고 주 메모리는 굉장히 크기 때문에 작은 레지스터가

                 캐시 계층으로써 역할을 잘해 주려면 이 매핑을 어떻게 하느냐가 중요

 이 름  설 명
 직접 매핑
 (directed mapping)
 메모리가 1 ~ 100 이 있고 캐시가 1 ~ 10 이 있다면 1:1 ~ 10, 2:1 ~20 ... 이런식으로
 매핑하는 것을 말함.
 처리가 빠르지만 충돌 발생이 잦다
 연관 매핑
 (associcative mapping)
 순서를 일치시키지 않고 관련 있는 캐시와 메모리를 매핑함
 충돌이 적지만 모든 블록을 탐색해야 해서 속도가 느리다
 집합 연관 매핑
 (set associative mapping)
 직접 매핑과 연관 매핑을 합쳐 놓은 것
 순서는 일치시키지만 집합을 둬서 저장하며 블록화되어 있기 때문에 검색은 좀 더 효율적
 예) 메모리가 1 ~ 100 이 있고 캐시가 1 ~ 10 이 있다면 캐시 1 ~ 5 에는 1 ~ 50 의 데이터를
       무작위로 저장시키는 것을 말함

           B) 웹 브라우저의 캐시

               - 소프트웨어적인 대표적인 캐시로는 웹 브라우저의 작은 저장소 쿠키, 로컬 스토리지, 세션 스토리지가 있다

               - 보통 사용자의 커스텀한 정보나 인증 모듈 관련 사항들을 웹 브라우저에 저장해서 추후 서버에 요청할 때

                 자신을 나타내는 아이덴티티나 중복 요청 방지를 위해 쓰임

                 (A) 쿠키

                       - 만료기한이 있는 키-값 저장소

                       - same site 옵션을 strict 로 설정하지 않았을 경우 다른 도메인에서 요청했을 때 자동 전송됨

                       - 4KB 까지 데이터를 저장할 수 있고 만료기한을 정할 수 있다.

                       - 설정할 때는 document.cookie 로 쿠키를 볼 수 없게 httponly 옵션을 거는 것이 중요하고

                         클라이언트 또는 서버에서 만료기한 등을 정할 수 잇는데 보통 서버에서 정함

                 (B) 로컬 스토리지

                       - 만료기한이 없는 키-값 저장소

                       - 10MB 까지 저장할 수 있으며 웹 브라우저를 닫아도 유지되고 도메인 단위로 저장, 생성 된다

                       - HTML5 를 지원하지 않는 웹 브라우저에서는 사용할 수 없으며 클라이언트에서만 수정 가능

                 (C) 세션 스토리지

                       - 만료기한이 없는 키-값 저장소

                       - 탭 단위로 세션 스토리지를 생성하며, 탭을 닫을 때 해당 데이터가 삭제 됨

                       - 5MB 까지 저장이 가능하며 HTML5 를 지원하지 않는 웹 브라우저에서는 사용할 수 없고

                         클라이언트에서만 수정 가능

           C) 데이터베이스의 캐싱 계층

               - DB 를 구축할 때도 메인 DB 위에 레디스(redis) DB 계층을 캐싱 계층으로 둬서 성능을 향상 시키기도 함