컴퓨터의 '저장 공간'은 한 가지 종류가 아니라, 성능과 용도에 따라 여러 단계(계층)로 이루어져 있습니다. 이 계층 구조는 레지스터, 캐시, 메모리, 저장장치로 구성됩니다.

- 레지스터 : CPU 칩 내부에 있는 아주 작은 '초고속 임시 보관함'입니다. 휘발성이고 속도가 가장 빠르지만, 용량은 가장 적습니다.
- 캐시 : L1, L2 캐시 등을 말하며, CPU와 메모리 사이의 속도를 중재합니다. 휘발성이고 속도는 매우 빠르지만, 용량은 여전히 적습니다. (L3 캐시도 있습니다.)
- 주기억장치 : 우리가 흔히 말하는 RAM(램)입니다. 휘발성이며 속도와 용량은 중간 정도입니다.
- 보조기억장치 : HDD(하드디스크)나 SSD 같은 '저장 장치'입니다. 비휘발성(전원이 꺼져도 안 지워짐)이고 속도는 느리지만, 용량은 아주 큽니다.
RAM(메모리)은 하드디스크 같은 느린 저장장치로부터 데이터를 미리 가져와서 임시로 저장해두고, CPU가 필요할 때마다 빠르게 전달해주는 '중간 작업대' 역할을 합니다.
이 계층 구조는 위로 올라갈수록 (레지스터 쪽) 가격이 비싸고, 용량은 작아지지만, 속도는 엄청나게 빨라집니다.
이렇게 여러 단계로 계층을 나눈 이유는 '경제성'(모든 저장 공간을 레지스터처럼 빠르고 비싸게 만들 수는 없으니까)과 '성능 향상(캐시)' 때문입니다. 우리가 게임을 실행할 때 '로딩 중...' 화면을 보는 것도, 가장 느린 보조기억장치(HDD/SSD)나 인터넷에서 데이터를 읽어와서 그보다 빠른 주기억장치(RAM)로 옮기는 과정이 아직 안 끝났다는 뜻입니다.
⚡ 캐시(cache)
데이터를 미리 복사해두는 '임시 저장소'입니다. 속도가 '빠른 장치'와 '느린 장치' 사이에서 발생하는 속도 차이(병목 현상)를 줄여주는 고마운 존재죠.
덕분에 느린 장치까지 매번 데이터를 가지러 갈 필요가 없어져서, 데이터 접근 시간을 절약하고 반복적인 계산을 피할 수 있습니다.
사실, CPU와 메모리(RAM) 사이에도 속도 차이가 어마어마하게 큽니다. 그래서 그 중간에 '캐시 메모리'(L1, L2 등)라는 또 다른 캐싱 계층을 둡니다. 이처럼 속도 차이를 해결하기 위해 중간에 끼어있는 더 빠른 임시 저장소를 '캐싱 계층'이라고 부릅니다.
예를 들어, '보조기억장치'(HDD)와 '캐시 메모리' 사이의 '주기억장치(RAM)' 역시, 보조기억장치 입장에서 보면 더 빠른 '캐싱 계층'이라고 볼 수 있습니다.
⏱️ 시간 지역성 (Temporal Locality)
"'최근에 사용한 데이터'는 곧 '다시 사용될 가능성이 높다'"는 특성입니다.
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,1,2,3,4,
5,6,7,8,9
]
*/
위 코드의 for 반복문에서 변수 i를 보세요. i라는 데이터에 방금 접근했는데, 곧바로 또 접근해서 +1을 하죠. 이렇게 '최근에 쓴 놈'을 '바로 다시 쓰는' 성질이 시간 지역성입니다.
📍 공간 지역성(Spatial Locality)
"'방금 접근한 데이터'와 '가까운 곳에 있는 데이터'가 곧이어 사용될 가능성이 높다"는 특성입니다.
앞의 코드에서 배열 arr을 보세요. arr[0]에 접근한 다음, 곧바로 그 '가까운 공간'인 arr[1], arr[2]에 연속적으로 접근하고 있습니다. 이게 바로 공간 지역성입니다.
🎯 캐시히트와 캐시미스(Cache Hit / Cache Miss)
CPU가 원하는 데이터를 캐시에서 바로 찾으면 '캐시 히트(Cache Hit)'라고 합니다.
만약 데이터가 캐시에 없으면 '캐시 미스(Cache Miss)'라고 부르며, 어쩔 수 없이 더 느린 주 메모리(RAM)까지 데이터를 찾으러 갑니다.
- 캐시 히트가 나면 CPU 내부의 빠른 길(내부 버스)을 통해 데이터를 바로 가져오므로 속도가 엄청나게 빠릅니다.
- 반면, 캐시 미스가 나면 CPU 바깥의 느린 길(시스템 버스)을 통해 메모리까지 다녀와야 하므로 시간이 훨씬 오래 걸립니다.
🔗 캐시매핑(Cache Mapping)
캐시 매핑이란, 주 메모리(RAM)의 데이터를 '어떤 규칙으로' 캐시에 가져와 저장할지 정하는 '주소 연결(매핑) 방법'입니다.
주 메모리는 엄청나게 크고, 캐시는 아주 작습니다. 이 작은 캐시 공간을 효율적으로 사용해서 '캐시 히트' 확률을 높이려면, 이 매핑 방법이 아주 중요합니다.
| 이름 | 설명 |
| 직접 매핑 (directed mapping) | 메모리 1~100, 캐시 1~10이 있다면, 메모리 1, 11, 21...은 캐시 1번에만, 메모리 2, 12, 22...은 캐시 2번에만" 이런 식으로 위치를 고정해서 1:1로 매핑하는 방식입니다. 처리가 빠르지만, 같은 캐시 자리를 두고 충돌이 자주 일어날 수 있습니다. |
| 연관 매핑 (associative mapping) | "관련 있는 데이터라면 캐시의 아무 빈자리에나 저장"하는 방식입니다. 순서를 따지지 않고 유연하게 저장해서 충돌은 적지만, 원하는 데이터를 찾으려면 캐시 전체를 다 뒤져야 해서(탐색) 속도가 느릴 수 있습니다. |
| 집합 연관 매핑 (set associative mapping) | 직접 매핑과 연관 매핑을 합친 방식입니다. 캐시를 몇 개의 '집합(Set)'으로 나누고, "메모리 1~50의 데이터는 1번 집합 안의 빈자리에 자유롭게" 저장하는 식입니다. 검색(탐색)이 훨씬 효율적입니다. |
🌐 웹 브라우저의 캐시
우리에게 가장 친숙한 소프트웨어 캐시입니다. 쿠키, 로컬 스토리지, 세션 스토리지가 여기에 속합니다.
이들은 웹 브라우저(내 컴퓨터)에 정보를 임시로 저장해둡니다. 나중에 서버에 다시 요청할 때 '내가 누군지'(인증) 알려주거나, 중복 요청을 막기 위해 사용됩니다. 이 데이터는 특정 '오리진(origin, 사이트 주소)'에 묶여있습니다.
- 용어 설명:
- 쿠키(Cookie):
만료기한이 있는 작은 데이터(키-값) 저장소입니다. 4KB까지 저장 가능하며, 서버에 요청을 보낼 때마다 자동으로 같이 전송될 수 있습니다. (same site 옵션이 중요합니다.) 보안을 위해 httponly 옵션(자바스크립트 접근 방지)을 거는 것이 좋고, 보통 서버에서 만료기한을 정해줍니다. - 로컬 스토리지(Local Storage):
만료기한이 없습니다. 5MB까지 넉넉하게 저장할 수 있고, 웹 브라우저를 껐다 켜도 데이터가 유지됩니다. 클라이언트(내 컴퓨터)에서만 수정할 수 있습니다. (HTML5 지원 필요) - 세션 스토리지(Session Storage):
'웹 브라우저 탭'이 살아있는 동안에만 유지되는 키-값 저장소입니다. 5MB까지 저장 가능하며, 해당 탭을 닫으면 데이터가 사라집니다.
- 쿠키(Cookie):
🗄️ 데이터베이스의 캐싱 계층
데이터베이스(DB)도 마찬가지입니다. 사용자들이 자주 찾는 데이터를 매번 느린 메인 DB(HDD)까지 가서 읽어오면 힘듭니다. 그래서 그 앞에 '레디스(Redis)' 같은 초고속 인메모리 DB를 '캐싱 계층'으로 두어, DB의 '읽기 성능'을 폭발적으로 향상시키곤 합니다.
1. 메모리 계층에 대해 설명해보세요.
메모리는 CPU와 가장 가까운 레지스터와 캐시부터, 메인 메모리, 보조기억장치 순으로 구성된 계층 구조를 가집니다. 위로 갈수록 속도는 빠르지만 용량은 작고 비용이 비싸며, 아래로 갈수록 속도는 느려지지만 용량이 크고 비용이 낮습니다. 이런 계층 구조를 통해 비용 대비 성능을 최적화합니다.
'Computer Science > Operating System' 카테고리의 다른 글
| 🚦 CPU 스케줄링 알고리즘 (0) | 2025.11.18 |
|---|---|
| 🧵 프로세스와 스레드 (0) | 2025.11.18 |
| 🗂️ 메모리 관리 (0) | 2025.11.05 |
| 🧱 컴퓨터의 요소 (0) | 2025.11.05 |
| 🧑⚖️ 운영체제의 역할과 구조 (0) | 2025.11.05 |