캐시 메모리
CPU에서 메모리에 접근하는 속도는 CPU의 연산속도보다 느리기 때문에, 매 연산마다 메모리와 데이터를 직접 주고 받으면
CPU가 아무리 빠른 연산 속도를 갖춘다고 하더라도 의미가 퇴색된다.
그렇기 때문에 캐시 메모리가 사용되며 캐시라는 개념은 CPU 메모리 외에도 GPU 내부 캐시와 같은 하드웨어 캐시에서도 사용하고,
페이지 캐시와 웹 브라우저 캐시와 같은 소프트웨어 캐시도 사용한다
캐시 메모리에 대해 설명하기 전 메모리 계층 구조(Memory Hierarchy)에 대해 설명하자면,
저장 장치는 일반적으로 다음과 같은 명제를 따른다.
CPU와 가까울 수록 속도가 빠르며, 속도가 빠를 수록 저장 용량이 작고, 비싸다
이와 같은 명제에 따라, 아래와 같은 피라미드 형태로 나타낼수 있다.
위로 올라갈 수록 속도는 빠르고, 용량은 작고, 가격은 비싸다는 것을 나타내는 피라미드 구조이다.
캐시 메모리는 CPU와 메모리 사이에 위치하여 자주 사용되는 데이터를 저장해두는 SRAM 기반 저장장치이며,
위 피라미드 구조에 캐시 메모리까지 포함시키면 다음과 같이 된다.
캐시 메모리에는 여러 종류가 있는데, L1 캐시, L2 캐시, L3 캐시가 있으며 L1 캐시와 L2 캐시는 코어 내부에,
L3 캐시는 코어(CPU)와 메모리 사이에 위치하게 된다.
L1 ~ L3 캐시까지 포함한 피라미드 구조는 다음과 같이 된다.
그런데 위에 피라미드에서도 표현했듯, 캐시 메모리의 크기는 일반적으로 주 기억장치에 비해 매우 작은 크기를 갖고 있다.
어떤 데이터를 캐시 메모리에 넣어두고 사용할 지 선택하는 과정에 있어서, 참조 지역성의 원리에 따라 결정한다.
참조 지역성의 원리는 시간 지역성과, 공간 지역성 두 가지가 있다.
- 시간 지역성 : 최근 접근했던 메모리 공간에 다시 접근하려는 경향이 있다. 가장 자주 볼 수 있는 예시로는 반복문을 통해 어떤 변수에 자주 접근 하는 경우, 해당 변수를 캐시 메모리에 저장하면 효율적으로 프로그램을 구성할 수 있다.
- 공간 지역성 : 기존에 접근했던 메모리 공간 근처의 다른 공간을 접근하려는 경향이 있다. 이러한 이유에는 대체로 비슷하거나 연관된 프로그램끼리 모여있는 경우가 있기 때문이다.
이러한 원리를 바탕으로 캐시 메모리에 데이터가 저장되고, CPU에서 찾는 데이터가 캐시 메모리에 있을 경우
이를 캐시 히트(Cache hit)라고 한다. 반대로 없는 경우, 캐시 미스(Cache miss)라고 하며
캐시 적중률 = 캐시 히트 횟수 / (캐시 히트 횟수 + 캐시 미스 횟수) 로 계산된다.
앞서 말했듯, 캐시 메모리의 크기는 주 기억장치에 비해 작은 크기를 갖고 있어 메인 메모리의 데이터를 그대로 옮겨가는 것은 불가능하다.
그래서 일부 데이터만을 캐시 메모리에 저장해두고 CPU에서 캐시 메모리를 우선 탐색하는데,
어느 데이터가 캐시 메모리에 있는지 순회하는 과정에서 매번 모든 데이터를 순회해야한다면 시간 단축을 위해 사용하는
캐시 메모리의 장점이 무의미해지기 때문에 캐시 메모리에 저장될 때 몇 가지 매핑 프로세스를 사용하며 다음과 같은 방식이 있다.
- Direct Mapping
- Fully Associative Mapping
- Set Associative Mapping
1)Direct Mapping
직접 사상 방식이라고도 하며, DRAM의 여러 주소가 캐시 메모리의 한 주소에 대응되는 N:1 대응 방식이다.
그림을 참고하여 간단히 설명하자면, 캐시 메모리와 동일한 크기로 메인 메모리를 분할하여 각각 분할된 위치에 맞는 데이터를 저장하는 방식이다.
위의 예시에서 캐시 메모리는 8개의 공간을, 메인 메모리는 32개의 공간을 가지고 있으므로 메인 메모리를 총 4개의 구간으로 분할하여,
분할된 각각의 공간에 맞게 캐시 메모리에 할당하는 방식이다. 하지만 위의 예시에서 만약 회색 공간의 데이터는 캐시에 필요가 없고,
주황색 공간의 데이터는 2개 이상을 캐시 메모리에 저장해야된다면 캐시 메모리의 활용도가 굉장히 떨어져 현대에는 잘 사용되지 않는 방식이다.
2)Fully Associative Mapping
완전 연관 사상 방식이라 불리며, 비어있는 캐시 메모리가 있으면 맘대로 주소를 저장하여 캐시 메모리에 저장할 당시에는 공간 활용도가 높지만,
CPU에서 접근 시에 비효율적인 방식이다. 이를 위해 비싸다는 단점을 갖고 있는 CAM(주로 네트워크 라우팅 테이블에서 사용) 형태의
메모리 구조를 사용하고, 일반적으로 TLB에서 주로 사용 된다.
TLB(Translation Lookaside Buffer)는 가상 메모리 주소를 물리적인 주소로 변환하는 주소 변환 캐시이다.
3)Set Associative Mapping
Direct Mapping 방식과 Fully Associative Mapping 방식을 합쳐놓은 방식으로 Direct Mapping 방식에서 사용했던 집합을 나눠서 저장하지만,
해당 집합 내에서 빈 캐시 메모리 공간 중 아무 곳에나 넣는 Fully Associative Mapping 방식을 따른다.
RAID
RAID는 여러 저장 장치에 데이터를 분산 저장하는 방식을 나타내는 방법을 나타낸다. 가장 대중적인 방식으로는
RAID 0, RAID 1, RAID 4, RAID 5, RAID 6이 있다.
1)RAID 0
데이터의 담긴 값을 여러 저장 장치에 걸쳐 순서대로 분산하여 저장하는 방법이다.
하나의 저장 장치에 저장하는 방식보다 읽고 쓰는 속도가 훨씬 빠르지만, 하나의 저장 공간만 문제가 생겨도
모든 데이터에 문제가 발생할 수 있다는 단점이 있다.
2)RAID 1
RAID 0의 단점을 보완하기 위해 구상된 방식으로, 기존의 저장된 데이터의 복사본을 다른 저장소에 그대로 저장하는 방식이다.
데이터를 총 2번씩 저장해야하기 때문에 저장 속도가 2배가 들지만, 데이터의 손실로부터 안전하다는 장점이 있다.
하지만 같은 데이터를 중복 저장하기 때문에, 저장 공간의 효율성은 많이 떨어지게 된다.
3)RAID 4
RAID 1 방식처럼 데이터를 복구하는 대신, 패리티 비트를 이용하여 오류를 검출하고 복구하는 저장공간을 따로 두는 방식이다.
패리티만 저장된 공간을 따로 두고, 오류 발생시 탐색하기 때문에 RAID 1 방식에 비해 저장 공간의 효율성이 향상된다.
하지만 패리티가 저장된 디스크에 병목 현상이 발생할 수 있다는 문제점이 있다.
4)RAID 5
RAID 4 방식의 병목 현상을 해결하기 위해, 패리티를 각각의 저장 공간에 분산 저장하는 방식이다. 각각에 필요한 패리티를
찾기 위해 서로 다른 저장 공간을 탐색하기 때문에 병목 현상을 해결할 수 있다.
5)RAID 6
RAID 5 방식에서, 각각의 저장 공간마다 서로 다른 두 패리티를 두어 저장 공간이나 속도를 줄이고 안전성을 택하는 방식이다.
패리티 비트란?
정보의 전달 과정에서 오류가 생겼는지를 검출하기 위해 추가하는 비트로, 문자열 내 1비트의 모든 숫자가 짝수 또는 홀수인지 보증하기 위해 2가지 종류의 패리티 비트(짝수, 홀수)를 더하여 보내는 형태이다.
다만, 패리티 비트를 통해서 오류의 발생 여부만 확인 가능할 뿐 어떤 비트에서 오류가 발생했는 지를 알 수 없어 수정이
불가능하다.
RAID에서 패리티 비트를 사용하여 복구가 가능한 이유는, XOR 연산된 패리티 비트를 참조하여
다른 저장 공간이 손실되었다고 하더라도 다시 XOR 연산을 하게되면 손실된 위치의 값을 알 수 있기 때문이다. (하단 Reference 참고)
6)Nested RAID
여러 표준 레이드 레벨을 동시에 하나로 구현한 레이드 레벨을 의미한다.
대표적으로 RAID 0+1, RAID 10(1+0), RAID 50(5+0), RAID 51(5+1), RAID 61(6+1) 등이 있다.
- RAID 0+1 : 저장 공간을 RAID 0 방식대로 스트라이핑 한 후, 미러링(RAID 1)하는 방식이며, 최소 4개의 저장 공간이 필요하다.
- RAID 10(1+0) : 저장 공간을 RAID 1 방식대로 먼저 미러링한 뒤, 스트라이핑(RAID 0)하는 방식이며 최소 4개의 저장 공간이 필요하다.
Reference
[운영체제(OS)] 10. 캐시 메모리(Cache Memory)
[운영체제/OS] 캐시(Cache)와 지역성(Locality) & 캐싱라인(Caching Line)
[컴퓨터구조] RAID5 디스크 복구, 패리티 계산 방법
혼자 공부하는 컴퓨터 구조+운영체제(강민철 저, 한빛미디어)
'Dev > CS' 카테고리의 다른 글
[운영체제] 프로세스와 스레드, CPU 스케쥴링 (0) | 2023.10.17 |
---|---|
[컴퓨터 구조, 운영체제] 입출력장치, 운영체제 시작하기 (1) | 2023.10.10 |
[컴퓨터 구조] CPU의 작동 원리, 성능 향상 기법 (0) | 2023.09.26 |
CS스터디 1주차 추가 정리 (0) | 2023.09.25 |
[컴퓨터 구조] 데이터, 명령어 (0) | 2023.09.20 |
댓글