정의
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 : 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의 동작방식
- 데이터 요청이 들어오면 먼저 캐시에서 데이터 탐색
- 캐시가 없거나(cache miss), 오래된(expiration)의 경우 원본 데이터가 저장된 곳에서 데이터를 조회한 후 캐시에도 데이터를 복사/갱신
- 캐시에 데이터가 있으면(Cache Hit) 캐시의 저장된 데이터를 제공
- 오래된 데이터는 삭제(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
- https://parksb.github.io/article/29.html → 이분의 사진이 너무 예뻤다... 글도 좋은거 같은데 나는 아직 이해불가, 한번이라도 보고 오기
- https://gyoogle.dev/blog/computer-science/computer-architecture/%EC%BA%90%EC%8B%9C%20%EB%A9%94%EB%AA%A8%EB%A6%AC.html
'Computer Science > OS (운영체제)' 카테고리의 다른 글
[linux] GUI 환경 vs CLI 환경, linux 명령어 몇개 (0) | 2023.04.01 |
---|---|
[OS] 운영체제 메모리 관리와 가상메모리 (0) | 2022.03.27 |
[OS] 저장장치의 구조 (0) | 2022.03.20 |
[OS] 입출력 시스템(I/O system) (0) | 2022.03.20 |
[OS] 컴퓨터 시스템의 발전 (0) | 2022.03.18 |