2024. 5. 1. 03:45ㆍComputer Science/컴퓨터 구조
1) 캐시(Cache)란?
캐시는 데이터를 임시 보관하는 것을 의미합니다. 즉, 영원히 데이터를 저장하는 것이 목적이 아닌, 필요에 의해서 '임시'로 보관하는 것입니다.
어떤 Web Site에 방문한 경우를 예로 들어봅시다. 첫 방문시엔 HTML, CSS, 이미지 등 Web data를 불러오기까지 약간의 답답함이 있습니다. 하지만, 해당 사이트를 재방문하면 방문과 동시에 Web Site가 나타나는 것을 경험한 적이 있을 겁니다. 이는 우리가 사용하는 브라우저에서 방문한 Web Site의 data를 임시 보관(캐싱)하여 재방문시에 보다 빠른 액세스가 가능했기 때문입니다.
이처럼 캐시 개념은 Server-Client, CDN(Content Delivery Network) 그리고 CPU-메모리 등 다양한 곳에 사용되고 있습니다. 우리는 CPU와 Main 메모리 사이의 캐시 메모리에 대해 알아보겠습니다.
2) 메모리의 저장 단위
Page : Disk와 주 메모리가 데이터를 교환하는 단위
Block : 주 메모리와 캐시 메모리가 데이터를 교환하는 단위
Word : 캐시 메모리와 CPU가 데이터를 교환하는 단위, 명령어 크기와 일치
총 세 가지의 메모리 단위가 있으며 Page > Block > Word 의 크기 정렬을 가집니다.
그렇다면 메모리 단위가 필요한 이유는 무엇이며, 각 장치 사이에는 왜 다른 데이터 단위를 사용할까요!?
우선, 메모리의 단위가 없으면 메모리 관리 효율이 저하됩니다. 만약 1000개의 데이터를 저장하는 캐시메모리가 있다고 가정해봅시다. CPU는 캐시메모리에서 원하는 데이터가 있는지 찾기 위해 1000개의 데이터를 모두 탐색해야합니다. 그런데 캐시메모리를 10개의 Block 단위로 나누어 Tag를 통해 Block을 식별할 수 있게하면, 원하는 데이터를 찾기위해 10개의 블럭을 먼저 탐색하고 그 안의 100 개의 데이터만 탐색하게 되어 훨씬 효율적입니다.
또한, 각 메모리에 저장된 데이터 특성에 맞게 단위가 결정됩니다. Disk에는 용량이 큰 프로그램이 저장되기 때문에 Page 단위로 교환하고, 캐시는 매우 작은 용량을 가지므로 작은 단위인 Block을 사용하기 때문에, 다른 데이터 단위를 사용하여 데이터 교환 효율성을 높입니다.
3) 캐시메모리의 필요성
CPU와 메모리의 속도차이로 연산 과정에 병목현상이 생기는데, 이를 보완하고자 캐시메모리가 등장했습니다. CPU는 명령어를 수행하면서 매번 캐시 메모리를 참조하는데, 이 때 필요한 데이터가 캐시에 있으면 Cache Hit라고 하며, 없으면 Cache Miss로 메모리까지 접근해야 합니다. 이처럼 캐시에는 원하는 데이터가 있을 수도 있고 없을 수도 있는데, Cache에 있을 확률을 Hit Ratio 라고 합니다.
캐시 메모리는 비싼 가격 때문에 상대적으로 매우 낮은 용량을 가지고 있습니다. 한 번에 많은 데이터를 넣을 수가 없으므로 가장 필요한 데이터만 효율적으로 저장해야 했습니다. 즉, CPU가 많이 접근하는 데이터가 우선적으로 저장되어야 합니다. 여기서 공간적 지역성(spatial locality of reference)과 시간적 지역성(temporal locality of reference) 개념이 등장합니다.
4) 지역성(locality)
CPU가 메모리의 모든 주소를 골고루 액세스하는 것이 아니라 특정 부분 위주로 참조하는 것을 의미합니다. 이러한 지역성을 고려하여 운영체제의 메모리 관련 부분을 설계하면 성능을 높일 수 있습니다. 지역성은 크게 공간적 지역성과 시간적 지역성의 두 가지로 나뉩니다.
공간적 지역성
: 배열(array)은 연속된 메모리 공간에 할당이 됩니다. 따라서, 배열의 요소에 접근할 때 연속된 메모리 공간을 참조할 가능성이 높습니다. 이처럼 참조한 데이터의 주변 메모리 주소를 위주로 참조할 가능성이 높아지는 것을 공간적 지역성이라 합니다.
시간적 지역성
: 반복문 안에서는 특정 변수 주소를 반복적으로 참조하는 경우가 많습니다. 이처럼 최근에 참조한 데이터를 다시 참조할 가능성이 높아지는 것을 시간적 지역성이라 합니다.
이러한 지역성은 블록의 크기에 영향을 많이 받습니다. 블록이 클수록 공간적 지역성을 고려하기 때문에, Hit ratio가 높아지게 됩니다. 다만, Miss시에 블록을 교체할 경우 오버헤드가 발생할 수 있습니다. 따라서 Hit ratio는 최대로, 오버헤드는 최소로 하는 블럭 size로 설계하는 것이 중요합니다.
다음 시간에는 캐시 메모리의 데이터 저장 방법론과 Cache Memory의 주소 매핑방식, 그리고 Block 교체 알고리즘에 대해 알아보겠습니다.
'Computer Science > 컴퓨터 구조' 카테고리의 다른 글
[컴퓨터 구조] 메모리(Memory)란? (0) | 2024.04.23 |
---|---|
[컴퓨터 구조] CPU / 명령어 사이클( Instruction Cycle ) (1) | 2024.04.18 |
[컴퓨터 구조] 명령어란? (0) | 2024.04.17 |
[컴퓨터 구조] 컴퓨터를 구성하는 요소 (0) | 2024.04.17 |