CPU는 그저 ‘메모리’에 올라와 있는 프로그램의 명령어들을 실행할 뿐이다.
메모리 계층은 레지스터, 캐시, 주기억장치, 보조기억장치로 구성되어 있다.
계층 | 속도 | 용량 |
---|---|---|
레지스터 | 1 | 4 |
캐시 (L1, L2 캐시) | 2 | 3 |
메모리(RAM) / 주기억장치 | 3 | 2 |
저장장치(HDD, SSD) / 보조기억장치 | 4 | 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
]
*/
공간 지역성
최근 접근한 데이터를 이루고 있는 공간이나 그 가까운 공간에 접근하는 특성
캐시가 히트되기 전에 매핑하는 방법
이름 | 설명 |
---|---|
직접 매핑 (Directed Mapping) | 메모리가 1~100이 있고 캐시가 1~10이 있다면 1:1~10, 2:11~20 순으로 매핑하는 것. 처리가 빠르지만 충돌이 잦다. |
연관 매핑 (Associative Mapping) | 순서를 일치시키지 않고 관련 있는 캐시와 메모리를 매핑. 충돌이 적지만 모든 블록을 탐색해야 해서 속도가 느림 |
집합 연관 매핑 (Set Associative Mapping) | 직접 매핑과 연관 매핑을 합쳐 놓은 것. 순서는 일치시키지만 집합을 둬서 저장하며 블록화되어 있기 때문에 검색은 좀 더 효율적임. |
예를 들어 메모리가 1~100이 있고 캐시가 1~10이 있다면 캐시 1~5에는 1~50의 데이터를 무작위로 저장시킴 |
사용자의 커스텀한 정보나 인증 모듈 관련 사항들을 웹브라우저에 저장해서 추후 서버에 요청할 때 자신을 나타내는 아이덴티티나 중복 요청 방지를 위해 쓰임.
cf) 데이터베이스의 캐싱 계층 : 레디스(redis)
데이터베이스 시스템을 구축할 때에도 메인 데이터베이스 위에 레디스(redis) 데이터베이스 계층을 ‘캐싱 계층’으로 둬서 성능을 향상시키기도 함