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

[OS / 메모리] 캐시메모리(Cache Memory), SRAM(Static RAM)

by SIXXXX_ 2022. 3. 27.
728x90

정의

Cache Memory = SRAM(Static Memory)

 

앞선 컴퓨터의 구조와 주기억장치인(RAM : Random Access Memory)에 대해 조금 살피고 가자.

 

컴퓨터의 구조

 

 

1. CPU : 계산하는 역할 AIU+레지스터(메모리의 명령들이 계산을 통해 연산)

 

  • 중앙처리장치(일종의 두뇌), 프로세서
  • 스마트폰 같은 모바일 기기에서 CPU 이외에 다른 구성요소들을 포함한 하나의 칩에 구성한 AP(Application Processor, 단일 칩 시스템의 일종)
  • 캐시메모리(Cache Memory) : 데이터의 임시보관소
  • 명령어를 CPU로 처리
  • 여러 개의 프로그램을 실행할 수 있다 이는 한 개의 CPU에 하나의 프로세스
  • 시분할 : 시간으로 나누는 것
  • 스케줄링 : 어떤 것을 먼저 실행할지 스케줄링 한다고 표현, 대표적인 스케줄링은 선점형

 

 

2. Memory

  • 임시저장공간
  • RAM(Random Access Memory) : 램, 메모리, 기억장치
  • 램은 CPU의 연산결과를 저장하고 처리할 수 있는 공간으로 프로그램 실행시 프로그램들이 메모리에 읽혀져 동작한다.
  • 전원이 꺼질경우 내용이 지워지는 휘발성을 갖고 있다.
  • 종류에 메인메모리(DRAM: Dynamic RAM)과 캐시메모리(SRAM: Static RAM)이 있다.

 

주기억장치(RAM: Random Access Memory)

  • 프로세스가 올라가는 공간
  • 프로세서(CPU)가 직접 접근할 수 있는 대량 저장 장치로서 워드의 배열로 구성되어 있다.
  • 흔히 주기억장치와 RAM 은 같은 의미로 사용된다.
  • 워드란 것은 CPU가 한 번에 처리할 수 있는 단위로서 운영체제가 32bit 시스템이라면 워드는 32 bit가 된다.
  • 주기억장치는 CPU와 상호작용할 수 있으며 상호작용을 할 때는 특정 기억장치 주소에 일련의 Load 혹은 Store 명령 등을 통해 수행이 이뤄진다.
  • Load 명령은 주기억장치에서 CPU 내부의 레지스터로 한 워드만큼의 데이터를 이동시키는 명령, Store 명령은 CPU 내부의 레지스터의 내용을 주기억장치로 이동시키는 명령이다.
  • 명령이 실행되는 사이클은

1) 기억장치로부터 명령을 인출해서 CPU 내부의 명령 레지스터에 저장한다. 

2) CPU가 명령을 해독한다.

3) 피연산자를 CPU 내부의 레지스터에 저장한다.

4) 명령을 실행한다.

5) 결과를 기억장치에 저장한다.

 

  • 주기억장치는 모든 프로그램과 자료를 영구히 저장하기에 용량이 작으며 그 대신 보조기억장치보다 접근 속도가 훨씬 빠르다.
  • 결과적으로 전원이 공급되지 않으면 그 내용을 잃어버리는 휘발성 저장장치

 

Cache Memory의 특징

  • 구조가 복잡하고 비싸다
  • 처리속도가 DRAM(메인메모리)에 비해 훨씬 빠르다
  • 용량이 적다
  • 캐시메모리 크기가 작은 이유는 SRAM 가격이 매우 비싸기 때문
  • 속도가 빠른 장치와 느린 장치에서 속도 차이에 따른 병목현상을 줄이기 위한 메모리

ex1) CPU core와 Memory 사이 병목현상완화

ex2) 웹 브라우저 캐시 파일은 하드 디스크와 웹페이지 사이의 병목현상을 완화

 

  • 캐시의 성능은 CPU가 참조할 정보가 캐시메모리에 어느 정도 들어있느냐에 따라 결정

CPU 접근 순서는 레지스터 -> L1 캐시(SRAM) -> L2 캐시 -> 주기억장치(DRAM) -> 보조기억장치순으로 접근

DRAM에서 저장된 데이터를 읽어올때 자주 사용하는 데이터를 캐시메모리에 저장한 뒤 주기억장치가 아닌 다음에 이용할때 캐시메모리에서 먼저 가져온다면, 속도를 향상할 수 있다~

 

 

 

 

Mapping(매핑, 사상)

  • 캐시 기억장치와 주기억장치(DRAM) 사이에서 정보를 옮기는 것
  • 3가지 방법
    • 직접 매핑(Direct Mapping)
    • 연관 매핑(Associate Mapping)
    • 집합연관 매핑(Set Associate Mapping)
  • 나중에 다룰 것!

 

Cache Memory의 종류

CPU와 Cache Memory와 Main Memory 사이

  • CPU : 2~3개의 캐시메모리 사용(L1, L2, L3)
  • 속도와 크기에 따라 분류
  • L1부터 사용(L1 → L2)
  • L1 : 텍스트 데이터를 다루는 I와 텍스트 외의 데이터를 다루는 D로 구성
  • CPU에서 제일 빠르게 접근하고 여기서 데이터를 찾지 못하면 L2로 간다.

 

Dual Core Processor 의 캐시메모리 종류

L1 : CPU 내부에 존재(각 코어마다 독립된 L1을 가진다)

  • IC(I$, Instruction Cache, 텍스트 영역 데이터)
  • DC(D$, Data Cache, 텍스트 영역을 제외한 모든 데이터)

L2 : CPU와 RAM 사이에 존재 (두 코어가 공유하는 L2), 용량이 크다

L3 : 보통 메인보드에 존재, 멀티 코어 시스템에서 여러 코어가 공유하는 캐시

만약 L1 캐시가 128kb면, 64/64로 나누어 64kb에 명령어를 처리하기 직전의 명령어를 임시 저장하고, 나머지 64kb에는 실행 후 명령어를 임시저장한다. (명령어 세트로 구성, I-Cache - D-Cache)

 

디스크 캐시

RAM 과 보조기억장치(하드디스크) 사이에 존재하는 캐시

 

Cache Memory의 동작방식

  1. 데이터 요청이 들어오면 먼저 캐시에서 데이터 탐색
  2. 캐시가 없거나(cache miss), 오래된(expiration)의 경우 원본 데이터가 저장된 곳에서 데이터를 조회한 후 캐시에도 데이터를 복사/갱신
  3. 캐시에 데이터가 있으면(Cache Hit) 캐시의 저장된 데이터를 제공
  4. 오래된 데이터는 삭제(eviction)

 

캐시의 지역성

  • Locality (지역성) : 기억 장치 내의 정보를 균일하게 Access하는 것이 아닌 어느 한 순간에 특정 부분을 집중적으로 참조하는 특성

 

  • 캐시 메모리는 속도가 빠른 장치와 느린 장치간의 속도차에 따른 병목현상을 줄이기 위한 범용 메모리이고
  • CPU는 데이터를 메모리에서 가져온다(주기억장치인 DRAM과 빠르게 가져오기 위한 SRAM)
  • CPU가 어떤 데이터를 원하는지 예측해야 한다.
  • 캐시 메모리에 CPU가 이후에 참조할 정보가 어느정도 있느냐에 따라 캐시 메모리의 성능이 좌우되기 때문
  • 지역성 전제 조건 : 프로그램은 모든 코드나 데이터를 균등하게 Access하지 않는다는 특성을 기본으로 가진다.
  • CPU가 요청한 데이터가 캐시에 있으면 'Cache Hit' → 캐시가 있는지 맞추는 정도 : 적중률(Hit rate)
  • 없어서 DRAM(주기억장치)에서 가져오면 'Cache Miss’ 

 

적중율(Hit rate)을 극대화 시키기 위해 데이터 지역성(Locality)의 원리를 사용한다.

  • 적중률 = 캐시 메모리 적중 횟수 / 전체 메모리 참조 횟수
  • Miss Ratio(실패율)은 1 - 적중률로 구한다.

 

시간 지역성(Temporal Locality)

  • for, while 반복문에 사용하는 조건 변수처럼 한번 참조된 데이터는 잠시 후에 또 참조될 가능성이 높다.
  • 최근에 참조된 주소의 내용은 곧 다음에 다시 참조되는 특성

 

공간 지역성(Spatial Locality)

  • A[0], A[1]과 같은 연속 접근 시, 참조된 데이터 근처에 있는 데이터가 잠시 후 또 사용될 가능성이 높다. → 참조 지역성의 원리가 존재
  • 대부분의 실제 프로그램이 참조된 주소와 인접한 주소의 내용이 다시 참조되는 특성
  • 캐시에 데이터 저장시, 참조 지역성(공간)을 최대한 활용하기 위해 해당 데이터 뿐 아니라 옆 주소의 데이터도 같이 가져와 미래에 쓰일 것을 대비

 

순차적 지역성(Sequential Locality)

  • 분기가 발생하지 않는 한 명령어들은 기억장치에 저장된 순서대로 인출되어 실행
  • 데이터가 순차적으로 Access 되는 경향

 

 

 

Cache Miss : 데이터가 캐시에 없어서 DRAM에서 가져오는 방법

1. Cold start Miss(Compulsory miss)

  • 해당 메모리 주소를 처음 불러나는 미스

 

2. Conflict Miss

  • 캐시 메모리에 A와 B데이터를 저장해야 하는데 A와 B가 같은 캐시 메모리 주소에 할당되어 있어 나는 미스(Direct Mapped Cache에서 많이 발생)

 

3. Capacity Miss

  • 캐시 메모리의 공간이 부족해서 나는 미스(Conflit는 주소 할당 문제, Capacity는 공간 문제)
  • 캐시 크기를 키워 문제 해결시 캐시 접근 속도가 느려지고 파워를 많이 먹게 되는 단점이 있다.

 

캐싱라인 Caching Line

  • 캐시는 프로세서 가까이에 위치하면서 빈번하게 사용되는 데이터를 보관하는 장소이다.
  • 데이터가 어디에 저장되어 있는지 몰라 순회한다면 시간적 비용 발생
  • 캐시에 목적 데이터가 저장되어 있다면 바로 접근하여 출력할 수 있어야 캐시가 의미가 있어진다는 것
  • 캐시에 데이터를 저장할때 특정 자료구조를 사용하여 데이터에 데이터 메모리 주소 등을 기록해둔 태그를 달아두고 이러한 태그들의 묶음으로 저장하게 되는데 이를 캐싱라인이라 한다.

 

캐싱라인의 구성요소

Tag

  • 메모리와 캐시 메모리 간 mapping
  • Instruction Address 의 상위 bit이면서 Virtual Memory Address의 상위 bit

Data

  • 캐시 메모리가 가지고 있는 데이터

Valid bit

  • Miss시 0으로 표시
  • Invalidation Protocol에서 사용

Dirty bit

  • 어떤 block에 쓰기 동작이 일어났을때 메모리와 일관성이 유지되지 않는 상태를 표시

 

 

캐싱라인의 3가지 종류

  • Direct Mapped Cache
    • 가장 기본적인 구조
    • DRAM의 여러 주소가 캐시 메모리의 한 주소에 대응되는 다대일 방식

  • 현재 그림에서는 메모리 공간이 32개(00000~11111)이고, 캐시 메모리 공간은 8개(000~111)인 상황
  • 이때 001이 '인덱스 필드', 인덱스 제외한 앞의 나머지(00, 01, 10, 11)를 '태그 필드'라고 한다.
  • ex) 00000, 01000, 10000, 11000인 메모리 주소는 000 캐시 메모리 주소에 맵핑
  • ex. 00(태그필드) / 001(인덱싱필드)
    • 이처럼 캐시메모리는 인덱스 필드 + 태그 필드 + 데이터 필드로 구성된다.
    • 간단하고 빠른 장점이 있지만, Conflict Miss가 발생하는 것이 단점
    • 위 사진처럼 같은 색깔의 데이터를 동시에 사용해야 할 때 발생한다.

 

  • Fully Associative Cache
    • 비어있는 캐시 메모리가 있으면, 마음대로 주소를 저장하는 방식
    • 저장할 때는 매우 간단하지만, 찾을 때가 문제
    • 조건이나 규칙이 없어서 특정 캐시 Set 안에 있는 모든 블럭을 한번에 찾아 원하는 데이터가 있는지 검색해야 한다.
    • CAM이라는 특수한 메모리 구조를 사용해야하지만 가격이 매우 비싸다.

 

  • Set Associative Cache
    • Direct + Fully 방식이다
    • 특정 행(set)을 지정하고, 그 행안의 어떤 열이든 비어있을 때 저장하는 방식
    • Direct에 비해 검색 속도는 느리지만, 저장이 빠르고 Fully에 비해 저장이 느린 대신 검색이 빠른 중간형
    • 실제로 위 두가지보다 나중에 나온 방식이다.

 

REFERENCE