메모리에 저장된 위치는 주소로 표현한다.
사실 주소는 한 가지만 있는게 아니라 두 가지가 있다. 하드웨어는 물리주소를 사용하고, CPU나 실행 중인 프로그램은 논리주소를 사용한다.
물리주소와 논리주소
https://dev-dx2d2y-log.tistory.com/197
[컴퓨터구조] OOO, OoOE, 토마슬로 알고리즘을 통한 비순차적 명령어 처리 + 혼공컴구 독서 #6 - CPU
아니 열람실에서 공부중인데 6시 이후로 급격하게 추워짐 뭐야이거 개추워https://dev-dx2d2y-log.tistory.com/191 [컴퓨터구조] 혼공컴구 독서 #5 - 명령어 사이클과 인터럽트https://dev-dx2d2y-log.tistory.com/189 [
dev-dx2d2y-log.tistory.com
이전에 Register Renaming에 대해서 다뤘을 때 보면 알 수 있듯이, CPU는 컴퓨터의 그많은 물리주소들에 어떤 값이 저장되어있는지 알지 못한다. 메모리는 실시간으로 정보가 변하기 때문에 그 많은 메모리들에 무슨 정보가 저장되어 있는지 일일이 알지 못한다.
그래서 CPU는 논리 주소를 사용하는데, 논리 주소란 실행 중인 프로그램 각각에게 부여된 주소다. 현재 내가 쓰고 있는 크롬 브라우저와 함께 카카오톡, 메모장이 켜져 있다면, 이 프로그램들은 다른 프로그램들의 저장된 위치를 알 필요가 없다. 다시말해서 크롬 브라우저는 부여받은 메모리 공간에서 명령어의 주소들과 가져올 데이터의 주소만 알면되지, 현재 실행 중이지도 않은 인텔리제이의 저장위치를 알 필요까지는 없다. 왜냐하면 실행 중이지 않으면 언제든지 사라질 수 있기 때문에.
그리고 각 실행 중인 프로그램은 물리 주소가 아닌, 0부터 시작하는 자신만의 논리 주소를 가진다. 그러니까 주소 01010은 크롬도 가지고 게임도 가지고 카톡도 가진다는 소리.
MMU를 통한 논리주소와 물리주소의 변환
하지만 물리 주소와 논리 주소 간의 변환 역시 필요하다. CPU가 크롬이 점유하고 있는 메모리 중에서 01010에 접근하라고하면 물리주소를 사용하는 메모리는 이를 알아듣지 못한다. 따라서 논리 주소 간 변환은 MMU(메모리 관리 장치, Memory Management Unit)이 담당한다.
MMU에는 베이스 레지스터라는 것이 저장되는데, 여기에는 타겟 프로그램의 첫 번째 물리 주소를 저장한다. 그 후에 CPU가 크롬이 점유하는 메모리 중에서 01010에 접근하라고하면 베이스 레지스터에는 크롬 브라우저의 첫 번째 메모리 주소가 적히고 베이스 레지스터와 CPU에서 전해준 01010을 합쳐서 실제 물리 주소로 변환한다.
가령 베이스 레지스터가 3000이고, CPU에서 500을 준다. 그러면 타겟 프로그램의 첫 번째 물리주소가 3000이고, 그 프로그램 내부에서 사용하는 메모리 주소 500을 3000 + 500 = 3500으로 물리주소로 변환한다.
여기 가산기 쓰이나 머리아파
메모리 보호하기
물리주소 5000부터 5999까지 크롬 브라우저가 먹고 있다고치자. 크롬 브라우저가 물고 있는 부분의 데이터를 바꾸려고한다. 따라서 베이스 레지스터는 5000이 될 것이다.
그런데 만약, CPU가 크롬 브라우저가 물고 있는 곳의 논리주소 1500에 접근하라고 했다. 그러면 MMU는 베이스 레지스터 5000 + CPU가 전해준 값 1500을 통해 메모리 논리주소 6500에 접근한다.
그런데 문제는 논리주소 6500은 크롬 브라우저가 물고 있는 범위가 아니다. 즉, 크롬 브라우저가 담당하고있는 데이터에 접근해야하나 엉뚱한 프로그램이 물고 있는 데이터에 접근할 수 있다.
따라서 MMU에서는 한계 레지스터(limit register)를 사용한다.
한계 레지스터는 베이스 레지스터에서 시작한 논리주소의 최대범위을 저장한다. 그러니까 위의 경우에는 한계 레지스터가 999가 될 것이다. 따라서 MMU는 "크롬 브라우저가 5000번지에서 시작하고, 한계 레지스터에 999가 저장되어있으니까 5999까지 크롬 브라우저가 점유하는구나. 그런데 논리주소 6500은 잘못된 요청이구나"라고 생각한다.
따라서 CPU가 접근하라고 지시하는 논리주소는 한계 레지스터에서 저장한 범위를 벗어날 수 없다. 즉, 크롬 브라우저의 1300번지를 제거하라는 의미는, MMU의 베이스 레지스터에 의해서 6300번지에 접근하게된다.
CPU는 메모리에 접근하기 전 논리 주소가 한계 레지스터보다 작은지를 항상 검사한다. 만약 한계 레지스터를 벗어난 범위에 접근하려면 인터럽트 (트랩)을 발생시킨다.
[컴퓨터구조] 혼공컴구 독서 #5 - 명령어 사이클과 인터럽트
https://dev-dx2d2y-log.tistory.com/189 [컴퓨터구조] 혼공컴구 독서 #4 - CPU 레지스터https://dev-dx2d2y-log.tistory.com/188 [컴퓨터구조] 혼공컴구 독서 #3 - CPU - ALU, 플래그, 제어장치https://dev-dx2d2y-log.tistory.com/185 [
dev-dx2d2y-log.tistory.com
트랩 인터럽트 설명
캐시 메모리
CPU는 메모리에 저장된 데이터를 자주 필요로한다. 그런데 CPU가 메모리에 접근하는 시간은, 보조기억장치보다는 빠르다고하나 어쨌든 느린 편이다. 문제는 "자주 접근하는 데이터는 어딘가 빨리 접근할 수 있는 곳에 두면 되지 않을까?"에서 출발한다.
그렇다고 레지스터를 쓰자니 우선은 레지스터의 수가 한정되어있기도하고, 비싸다. 앞서 캐시 메모리에 DRAM보다 성능좋고 비싼 SRAM을 사용한다고했는데, 레지스터는 이거보다 훨씬 더 빠르고 훨씬 더 비싼 부품을 요한다.
저장 장치 계층 구조
캐시 메모리의 출발점을 이미 말했지만, 캐시 메모리의 탄생배경에는 먼저 저장 장치 계층 구조가 필요하다.
모든 저장장치는 다음의 명제를 따른다.
1. CPU와 가까우면 빠르고, 멀면 느리다. (레지스터는 CPU의 ALU 바로 옆에 있다.)
2. 저장 장치의 속도가 빠르면 저장용량이 작고, 가격이 비싸다.
이는 DRAM와 SRAM의 비교에서 알 수 있다. DRAM은 구조가 SRAM에 비해 아주 단순한 편이기에 가격이 싸지만, 그 특유의 구조 때문에 속도가 느리다. 다만 대규모로 설계가 가능해 저장공간이 크다. SRAM은 DRAM보다 빠르지만, 비싸기 때문에 대규모로 구축할 수 없다.
따라서 빠른 속도와 큰 저장용량은 양립할 수 없다. 그래서 일반적으로는 레지스터, RAM, 보조기억장치 등 다양한 저장 장치를 사용한다.

위 계층으로 올라갈수록 CPU와 가깝고 용량은 적지만 빠르다.
그래서 캐시 메모리는 저장장치계층구조에서 메모리와 레지스터의 교두보 역할을 하기 위해 등장했다. 레지스터보다 용량이 크고, 메모리보다 빠른, SRAM 기반의 저장 장치이다.
또한 캐시 메모리 역시 컴퓨터 내부에 여러 개가 존재하는데, CPU(코어)와 가까운 순서대로 L1, L2, L3 캐시가 있다. 일반적으로 L1 캐시와 L2 캐시는 코어 내부에, L3 캐시는 코어 외부에 존재한다. 따라서 멀티코어 CPU의 경우에는 L1과 L2 캐시는 코어마다 존재하고, L3 캐시는 코어 외부에 존재하여 모든 코어들이 공용으로 사용한다.
역시 CPU와 가까운 순서에서 예측할 수 있듯이 L1이 제일 빠르며, L3가 용량이 가장 많다. 가격도 L3가 제일 싸고.
CPU는 우선순위대로, L1-L2-L3 캐시 순으로 데이터를 검색한다.
분리형 캐시(split cache)도 존재하는데, L1 캐시의 접근속도를 최대한 향상시키기 위해, L1 캐시를 쪼개서 명령어만 저장하는 L1I 캐시, 데이터만을 저장하는 L1D 캐시로 분리하는 경우도 존재한다.
참조 지역성원리
캐시 메모리는 빠른 동시에 메모리보다 용량이 적기 때문에 저장할 내용을 신중히 골라야한다. 메모리가 보조기억장치에서 복사해와 메모리에 데이터를 저장하는 것처럼, 캐시 메모리는 메모리에서 데이터를 복사해와서 캐시에 데이터를 저장한다.
캐시는 CPU가 사용할만한 대상을 예측해서 저장한다. 만약 예측해서 저장한 데이터를 CPU가 실제로 사용했다면 이를 캐시 히트(cache hit)라고한다. 반대로, CPU가 필요한 데이터가 캐시에 없어서 직접 메모리에 접근해야하는 경우를 캐시 미스(cache miss)라고 칭한다. 그리고 전체 비중에서 캐시 히트 비율을 캐시 적중률이라고하며, 일반적인 컴퓨터의 캐시 적중률은 약 85~95% 이상이다.
그렇다면 "CPU가 사용할만한 대상을 예측"하는 방법을 알아야하는데, 이를 참조 지역성의 원리(locality of reference, principle of locality)라고 칭한다. CPU가 메모리에 접근할 때 띄는 경향성을 바탕으로 데이터를 캐시에 저장해둔다. 경향성은 아래와 같은데,
경향1: 시간 지역성 (temporal locality)
대표적인 예시가 변수. 변수는 한 번 선언하면 이곳저곳에서 사용된다. 변수에는 데이터가 저장되고, 이 데이터를 프로그램 이곳저곳에서 사용한다. 마찬가지로, CPU는 최근에 접근했던 메모리 공간을 다시 접근하는 경향이 있다. 이를 시간 지역성이라고한다.
경향2: 공간 지역성 (spatial locality)
CPU가 실행하려는 프로그램은 주로 비슷한 메모리에 위치한다. 즉, 메모장, 크롬 브라우저, 스팀 등, CPU가 실행할 프로그램은 서로 가까운 위치에 저장된다는 뜻이다. 그리고, 프로그램 메모리 내에서도 비슷한 데이터들은 모여서 저장된다. 웹 브라우저 프로그램에서 검색기능, 새로고침기능, 북마크 기능들이 있는데, 각각의 기능과 관련된 데이터들은 한데 모여서 저장된다.
따라서 CPU는 특정 프로그램과 특정 기능을 중심으로 접근하려는 경향이 있다. 크롬 브라우저를 켰으면 크롬 브라우저가 저장된 메모리 주변을 많이 접근할 것이고, 검색기능을 사용했다면 검색기능과 관련된 메모리 주변에 접근할 가능성이 크다.
따라서 이렇게 CPU는 접근한 메모리 공간 근처를 접근하려는 경향이 있다. 이를 공간 지역성이라고한다.
https://dev-dx2d2y-log.tistory.com/203
[컴퓨터구조] 혼공컴구 독서 #8 - RAM과 DRAM, SRAM의 형태와 성능
논회랑 컴구는 한 세트로 움직이는 것이 좋은듯. 지금은 둘이 별개로 진행하고있긴하지만... 이번에는 메모리에 대해 알아보고자한다. 컴퓨터의 핵심부품 중 하나였던 CPU를 지나서, 메모리를 알
dev-dx2d2y-log.tistory.com
원래는 이것과 함께 올라가야하는데, 앞 게시글의 내용이 너무 많아지다보니 어중간한 분량이 되어버렸다. 안타깝지만 여기 내용은 딱히 이 뒷내용과도 연결이 되지 않기 때문에 여기서 마무리.
'CS > 컴퓨터구조' 카테고리의 다른 글
| [컴퓨터구조] 혼공컴구 독서 #8 - RAM과 DRAM, SRAM의 형태와 성능 (0) | 2026.02.01 |
|---|---|
| [컴퓨터구조] 혼공컴구 독서 #7 - ISA와 CISC, RISC (0) | 2026.01.30 |
| [컴퓨터구조] OOO, OoOE, 토마슬로 알고리즘을 통한 비순차적 명령어 처리 + 혼공컴구 독서 #6 - CPU 성능향상 (1) | 2026.01.25 |
| [컴퓨터구조] 혼공컴구 독서 #5 - 명령어 사이클과 인터럽트 (0) | 2026.01.23 |
| [컴퓨터구조] 혼공컴구 독서 #4 - CPU 레지스터 (0) | 2026.01.20 |
