메모리 계층
•
컴퓨터의 메모리를 속도, 용량, 비용 등의 측면에서 여러 단계로 분류한 것을 의미한다.
•
크게 레지스터, 캐시 메모리, 메인 메모리(주기억장치), 보조 메모리(보조기억장치)로 구성된다.
◦
레지스터
▪
CPU 내부에 위치해 있다.
▪
레지스터의 용량은 매우 제한적이지만, 그만큼 데이터에 대한 엑세스 속도가 빠르다.
◦
캐시 메모리
▪
레지스터와 메인 메모리 사이에 위치해 있으며, 높은 속도를 가지고 있다.
▪
자주 사용되는 데이터나 명령을 임시로 저장하는 역할을 한다.
▪
L1, L2, L3 등 여러 레벨로 구성되어있다.
▪
레벨은 메모리의 크기와 속도, 그리고 CPU와의 거리를 나타낸다.
(L1은 가장 빠르고 가까워서 용량이 작으며, L3는 가장 느리고 멀지만 용량이 크다.)
◦
메인 메모리 (주기억장치)
▪
일반적으로 RAM으로 알려져 있으며, 컴퓨터가 직접 접근할 수 있는 유일한 메모리이다.
▪
컴퓨터가 실행 중인 프로그램을 저장한다.
▪
컴퓨터가 켜져 있는 동안 프로그램에 필요한 데이터와 명령어를 저장한다.
▪
컴퓨터가 꺼지면 모든 데이터를 잃어버리는 휘발성 메모리이다.
◦
보조 메모리 (보조기억장치)
▪
하드 디스크, SSD 등이 이에 해당하며, 큰 용량을 가지고 있지만 접근 속도가 느리다.
▪
컴퓨터가 꺼져도 데이터가 지워지지 않는 특성을 가지고 있다.
•
메모리 계층의 필요성
◦
속도를 높이면 용량이 부족해지고, 용량을 높이면 속도가 느려지는 단점이 발생
◦
따라서 성능을 위해 속도와 용량의 상호보완을 위해 고안한 방법
◦
자주 쓰이는 데이터는 반복해서 쓰인다는 것을 참조 지역성이라고 한다.
즉 자주 쓰는 데이터는 계속 자주 쓰이고, 자주 쓰이지 않는 데이터는 계속 자주 쓰이지 않는다는 것이다. 따라서 자주 쓰일 것 같은 데이터는 메모리에 캐시로 읽어와, 메모리까지 가지 않고 한동안 캐시에서 해결이 가능하므로 시간을 단축시킬 수 있다. 자주 쓰이는 데이터는 전체 데이터 양에 비해 작은 양이기 때문에 캐시는 메모리보다 더 작아도 된다.
즉, 메모리 계층 구조의 아이디어는 프로세서가 필요로 하는 데이터를 최대한 가까운 곳에 위칫켜 속도를 향상시키는 것이다.
캐시
•
데이터를 미리 복사해 놓는 임시 저장소
•
빠른 장치와 느린 장치에서 속도 차이에 따른 병목 현상을 줄이기 위한 메모리
•
속도 차이를 해결하기 위해 계층과 계층 사이에 있는 계층을 캐싱 계층이라고 한다.
•
지역성의 원리
◦
캐시를 직접 설정할 때는 지역성을 근거로 자주 사용하는 데이터를 기반하여 설정해야 한다.
•
시간 지역성
◦
시간 지역성은 최근 사용한 데이터가 가까운 미래에 다시 사용될 가능성이 높다는 개념
◦
이 원리를 이용하여 한번 참조된 데이터를 캐시에 저장해두면 다음에 같은 데이터를 참조할 때 바르게 접근할 수 있다.
public class TemporalLocality {
public static void main(String[] args) {
int[] arr = new int[100];
// 시간 지역성을 보여주는 예시
// 같은 위치의 데이터를 반복적으로 참조
for (int i = 0; i < 10000; i++) {
arr[0] = i;
System.out.println(arr[0]);
}
}
}
Java
복사
•
공간 지역성
◦
공간 지역성은 한 메모리의 위치를 참조하면 그 근처의 위치도 곧 참조될 가능성이 높다는 개념
◦
이 원리를 이용하여 데이터를 참조할 때 그 주변의 데이터도 함께 캐시에 저장해두면 근처의 데이터를 참조할 때 빠르게 접근할 수 있다.
public class SpatialLocality {
public static void main(String[] args) {
int[] arr = new int[100];
// 공간 지역성을 보여주는 예시
// 인접한 위치의 데이터를 순차적으로 참조
for (int i = 0; i < arr.length; i++) {
arr[i] = i;
System.out.println(arr[i]);
}
}
}
Java
복사
캐시히트와 캐시미스
•
캐시히트
◦
CPU가 데이터를 찾을 때 캐시 메모리에 해당 데이터가 존재하는 경우
◦
이 경우, CPU는 빠르게 데이터에 접근할 수 있다.
•
캐시 미스
◦
CPU가 데이터를 찾을 때 캐시 메모리에 해당 데이터가 존재하지 않는 경우
◦
이 경우, CPU는 더 느린 메인 메모리로부터 데이터를 가져와야 한다.
캐시 매핑
•
캐시 메모리는 메인 메모리의 일부를 복사해 저장하기 때문에 메인 메모리의 어떤 부분이 캐시 메모리에 저장되어 있는지를 추적해야 한다. 이를 위해 캐시 매핑이 사용된다.
•
캐시 매핑에는 크게 직접 매핑, 연관 매핑, 그리고 집합 연관 매핑이 있다.
•
직접 매핑 (Direct Mapping)
◦
메인 메모리의 각 블록을 캐시 메모리의 한정된 위치에만 저장할 수 있는 방식
◦
매핑이 간단하다는 장점이 존재, 캐시 충돌이 발생할 확률이 높다는 단점이 있다.
캐시 충돌?
•
연관 매핑 (Associative Mapping)
◦
순서를 일치시키지 않고 관련 있는 캐시와 메모리를 매핑한다.
◦
충돌이 적지만 모든 블록을 탐색해야 해서 속도가 느리다.
•
집합 연관 매핑 (Set Associative Mapping)
◦
직접 매핑과 연관 매핑의 중간 형태로, 캐시를 여러 세트로 나눈 후 각 세트 내에서는 연관 매핑을 사용하는 방식.
◦
직접 매핑의 단순홤과 연관 매핑의 유연성을 동시에 얻을 수 있다는 장점이 있다.
웹 브라우저의 캐시
•
웹 브라우저에도 캐시 기능을 사용하여 최근 방분한 웹 페이지의 데이터를 저장하고, 재방문 시 빠르게 로드할 수 있도록 한다.
•
쿠키, 로컬 스토리지, 세션 스토리지 등 다양한 형태로 존재한다.
•
쿠키
◦
웹 사이트가 사용자의 브라우저에 저장하는 작은 텍스트 파일
◦
사용자의 웹 사이트 이용 정보를 저장하여, 사용자가 사이트를 재방문할 때 같은 설정을 유지하도록 한다.
•
로컬 스토리지
◦
웹 페이지의 데이터를 사용자의 컴퓨터에 영구적으로 저장하는 방법
◦
쿠키와 비교하여 용량이 크고, 서버로 자동 전송되지 않아 보안성이 높다.
◦
사용자의 설정, 사이트의 상태 등을 저장하고 유지하는데 사용
•
세션 스토리지
◦
로컬 스토리지와 비슷하지만, 브라우저 세션이 종료되면 데이터가 삭제되는 특징이 존재
◦
사용자가 사이트를 이용하는 동안 일시적으로 필요한 데이터를 저장하는 데 사용된다.