개발자는 기록이 답이다

혼공 컴퓨터구조 + 운영체제 6. 메모리와 캐시 메모리 본문

CS/운영체제

혼공 컴퓨터구조 + 운영체제 6. 메모리와 캐시 메모리

slow-walker 2024. 1. 13. 11:43

 

 

우리가 실행하는 프로그램은 모두 RAM에 저장되어 있다. RAM의 하드웨어적 특성과 종류에 대해 학습해보자.

또한 저장 장치 계층 구조를 통해 저장 장치의 큰 그림을 그리고 CPU와 메모리 사이에 위치한 캐시 메모리에 대해 학습해보자.


1. RAM의 특징과 종류

 

1장에서 '주기억장치의 종류에는 크게 RAM과 ROM, 2가지가 있고 '메모리'라는 용어는 그 중에서 RaM을 지칭하는 경우가 많다"라고 언급되어 있다. RAM의 용량이 컴퓨터 성능에 어떤 영향을 미치고, DRAM, SRAM, SDRAM, DDR, SDRAM은 무엇이고 어떤 특징을 가지는지 살펴보자.

 

RAM의 특징

 

전원을 끄면 RAM에 저장된 명령어와 데이터가 모두 날아간다.

  • 휘발성 저장 장치 : 전원을 끄면 저장된 내용이 사라지는 저장 장치
  • 비휘발성 저장 장치 : 전원이 꺼져도 저장된 내용이 유지되는 저장 장치
    • 하드디스크, SSD, CD-ROM, USB메모리와 같은 보조 기억 장치가  대표적인 비휘발성 저장 장치이다.

 

보조기억장치는 전원을 꺼도 내용을 유지하지만, CPU는 보조기억장치에 직접 접근하지 못한다.

일반적으로 보조기억장치인 비휘발성 저장 장치에는 '보관할 대상'을 지정하고,

휘발성 저장장치인 RAM에는 '실행할 대상'을 저장한다.

CPU가 실행하고 싶은 프로그램이 보조기억장치에 있다면 RAM으로 복사하여 저장한 뒤 실행한다.

 

 

RAM의 용량과 성능

 

RAM용량은 컴퓨터 성능에 어떤 영향을 미칠까? RAM 용량이 크면 어떤 점이 좋을까?

 

CPU가 실행하고 싶은 프로그램이 보조기억장치에 있다면 이를 RAM으로 가져와야 할텐데, RAM용량이 적다면 보조기억장치에서 실행할 프로그램을 가져오는 일이 잦아 실행 시간이 길어진다.

 

예를 들어 RAM용량이 프로그램 A,B,C 중 하나만 저장할 수 있을 만큼 작다면 CPU가 프로그램 A를 실행하고 싶을 때는 보조기억장치에서 프로그램 A를 RAM으로 가져오고, 프로그램 B를 실행하고 싶을 때는 다시 보조기억장치에서 RAM으로 가져오고, 프로그램 C를 실행하고 싶을 때는 다시 보조기억장치에서 RAM으로 가져와야 한다.

 

하지만 RAM용량이 충분히 크다면 보조기억장치에서 많은 데이터를 가져와 미리 RAM에 저장할 수 있따.

많은 프로그램을 동시에 실행하는데 유리하다. 위의 예시의 경우 RAM용량이 충분히 크다면 프로그램 A, B, C를 보조기억장치에서 여러번 가져오는 수고를 덜 수 있다.

 

  • CPU가 실행할 프로그램 : 책
  • RAM : 책을 읽을 수 있는 책상
  • 보조기억장치 : 책이 꽂혀져 있는 책장

책상이 크다면 많은 책을 미리 책상으로 가져와 여러 권을 동시에 읽을 수가 있기 땨문에 책을 가지러 왔다갔다하는 시간을 절약할 수 있다.

 

그러면 RAM용량이 무지막지하게 크다면 프로그램 실행 속도는 그에 비례해서 빨라질까? NO

어느정도 증가하는 것은 맞지만, 용량이 필요없는 이상으로 커졌을때 속도가 그에 비례하여 증가하지 않는다.

 

책을 100권 이상 올려놓을 수 있는 책상에서 책을 읽든, 1000권 이상 올려놓을 수 있는 책상에서 책을 읽든 

책장을 오가는 시간에는 별 차이가 없는것과 같다.

 

RAM의 종류

 

1. DRAM

 

Dynamic RAM의 준말이다. Dynamic은 '동적의'라는 의미를 가지는데, 저장된 데이터가 동적으로 변하는(사라지는) RAM을 의미한다.

즉, DRAM은 시간이 지나면 저장된 데이터가 점차 사라지는 RAM이다.

그래서 DRAM은 데이터의 소멸을 막기 위해 일정 주기로 데이터를 재활성화(다시 저장)해야 한다.

 

위와 같은 단점에도 불구하고 일반적으로 메모리로 자주 사용된다.

소비 전력이 비교적 낮고, 저렴하고, 집적도가 높기(더 작고 빽빽하게 만들 수 있다) 때문에 대용량으로 설계하기가 용이하기 때문이다.

 

2. SRAM

 

Static RAM의 준말이다. Static은 '정적의'라는 의미를 가지는데, 저장된 데이터가변하지 않는 RAM을 의미한다.

시간이 지나면 저마 저장된 내용이 소멸되는 DRAM과 달리 SRAM은 시간이 지나도 저장된 데이터가 사라지지 않는다.

주기적으로 데이터를 재활성화할 필요가 없고 SRAM이 DRAM보다 속도가 더 빠르다.

 

시간이 지나도 저장된 데이터가 사라지지 않는다고해서 SRAM이 비휘발성 메모리인것은 아니고, 전원이 공급되지 않으면 저장된 내용이 날아간다.

 

하지만 위의 장점에도 불구하고, SRAM은 직접도가 낮고, 소비 전력도 크며, 가격도 더 비싸다. 메모리가 아닌 '대용량으로 만들어 질 필요는 없지만 속도가 빨라야 하는 저장 장치(캐시메모리)에 사용된다. 

 

  DRAM SRAM
재충전 필요 필요없음
속도 느림 빠름
가격 저럼 비쌈
집적도 높음 낮은
소비 전력 적음 높음
사용 용도 주기억장치(RAM) 캐시 메모리

 

 

3. SDRAM

 

SRAM과 DRAM의 합성어가 아니다. Synchronous Dynamic RAM의 준말이다. 클럭 신호와 동기화된, 발전된 형태의 DRAM이다.

 

'클럭 신호와 동기화되었다' 라는 말은 클럭 타이밍에 맞춰 CPU와 정보를 주고받을 수 있음을 의미한다.

즉, SDRAM은 클럭에 맞춰 동작하며 클럭마다 CPU와 정보를 주고받을 수 있는 DRAM이디.

 

4. DDR SDRAM

 

Double Data Rate SDRAM의 준말이다. 최근 가장 흔히 사용되는 RAM이다.

대역폭을 넓혀 속도를 빠르게 만든 SDRAM이다. 여기서 대역폭이란 '데이터를 주고받는 길의 너비'를 의미한다.

 

대역폭은 자동차 도로에 비유할 수 있는데,

한 클럭에 하나씩 정보를 주고받을 수 있는 SDRAM과 비교했을때 DDR SDRAM은 너비가 두 배인 도로와 같다.

즉, 한 클럭에 한 번씩 CPU와 데이터를 주고 받을 수 있는 SDRAM에 비해 2 배의 대역폭으로 한 클럭 당 2 번씩 CPU와 데이터를 주고 받을 수 있다. 당연히 전송속도도 2배 가량 빠르다.

 

그래서 한 클럭당 하나 씩 데이터를 주고 받는 SDRAM을 SDR SDRAM(Single Data Rate SDRAM)이라 부른다.

 

  • DDR2 SDRAM은 DDR SDRAM보다 대역폭이 2배 넓고, SDRAM의 4배이다.
  • DDR3 SDRAM은 DDR2 SDRAM보다 대역폭이 2배 넓고, SDRAM의 8배이다.
  • DDR4 SDRAM은 DDR4 SDRAM보다 대역폭이 2배 넓고, SDRAM의 16배이다 (가장 최근에 흔히 사용하는 메모리)

 

2. 메모리의 주소 공간

메모리에 저장된 정보의 위치는 주소로 나타낼 수 있다고 했지만 사실 주소는 2 종류가 있다.

바로 물리 주소와 논리 주소이다.

 

  • 물리 주소 : 메모리 하드웨어가 사용하는 주소
  • 논리 주소 : CPU와 실행 중인 프로그램이 사용하는 주소

 

물리 주소와 논리 주소

 

"CPU와 실행 중인 프로그램은 현재 메모리 몇 번지에 무엇이 저장되어 있는지 다 알고 있을까요?"

 

언뜻 생각하면 당연히 그럴 것 같지만, 실제로 그렇지 않다.

CPU와 메모리에 저장되어 실행중인 프로그램은 메모리 몇 번지에 무엇이 저장되어 있는지 다 알지 못한다.

 

그 이유는 메모리에 저장된 정보는 시시각각 변하기 때문이다.

메모리에는 새롭게 실행되는 프로그램이 시시때때로 적재되고, 실행이 끝난 프로그램은 삭제된다.

게다가 같은 프로그램을 실행하더라도 실행할때마다 적재되는 주소가 달라질 수 있다.

1500번지에 적재되었던 프로그램을 다시 실행하면 3000번지, 또 다시 실행하면 2700번지에 적재될 수 있다.

 

이런 상황에서 CPU와 실행 중인 프로그램이 현재 메모리 몇 번지에 무엇이 저장되어 있는지 모조리 알고 있기란 어렵다.

 

그렇다면 CPU와 실행중인 프로그램이 이해하는 주소는 무엇일까?

 

주소에는 메모리가 사용되는 물리 주소가 있고, CPU와 실행중인 프로그램이 사용하는 논리 주소가 있다.

 

 

  • 메모리가 사용하는 물리주소 : 실제로 저장된 하드웨어상의 주소를 의미한다
  • CPU와 실행중인 프로그램이 사용하는 논리 주소 : 실행중인 프로그램 각각에 부여된 0번지부터 시작되는 주소

예를 들어, 현재 메모리에 메모장, 게임, 인터넷 브라우저 프로그램이 적재되어 있다고 가정해보자.

메모장, 게임, 인터넷 브라우저 프로그램은 현재 다른 프로그램들이 메모리 몇 번지에 저장되어 있는지, 다시 말해 다른 프로그램들의 물리 주소가 무엇인지 굳이 알 필요 없다. 새로운 프로그램이 언제든 적재될 수 있고, 실행되지 않은 프로그램은 언제든 메모리에 사라질 수 있기 때문이다.

 

그래서 메모장, 게임, 인터넷 브라우전느 모두 물리 주소가 아닌 0번지부터 시작하는 자신만을 위한 주소인 논리 주소를 가지고 있다.

 

예를 들어, '10번지'라는 주소는 메모장에도, 게임에도, 인터넷 브라우저에도 논리 주소로써 존재할 수 있다.

프로그램마다 같은 논리 주소가 얼마든지 있을 수 있다는 뜻이다. CPU는 이 논리 주소를 받아들이고, 해석하고, 연산한다.

 

 

그런데 CPU가 이해하는 주소가 논리주소라고 해도 CPU가 메모리와 상호작용하려면 논리 주소와 물리 주소간의 변환이 이루어져야 한다.

논리 주소와 물리 주소간에 어떠한 변환도 이루어져 있지 않는다면 CPU와 메모리는 서로 이해할 수 없는 주소 체계를 가지고 각자 다른 이야기를 할뿐 상호 작용을 할 수 없을 것이다.

 

 

그렇다면 논리 주소는 어떻게 물리 주소로 변환이 될까?

 

논리주소와 물리 주소 간의 변환은 CPU와 주소 버스 사이에 위치한 메모리 관리 장치(MMU)라는 하드웨어에 의해 수행된다.

 

 

MMU는 CPU가 발생시킨 논리 주소에 베이스 레지스터 값을 더하여 논리 주소를 물리 주소로 변환한다.

예를 들어, 현재 베이스 레지스터에 15000이 저장되어 있고, CPU가 발생시킨 논리 주소가 100번지라면 이 논리 주소는 아래 그림처럼 물리 주소 15100번지 (100+15000)로 변환된다.

 

물리 주소 15000번지부터 적재된 프로그램 A의 논리 주소 100번지에는 이렇게 접근이 가능한 것이다.

 

 

  • 베이스 레지스터 : 프로그램의 가장 작은 물리 주소, 즉 프로그램의 첫 물리 주소를 저장
  • 논리 주소 : 프로그램의 시작점으로부터 떨어진 거리

 

메모리 보호 기법

 

  • 메모장 프로그램의 물리 주소가 1000번지부터 1999번지,
  • 인터넷 브라우저 프로그램의 물리주소가 2000번지부터 2999번지,
  • 게임 프로그램의 물리주소가 3000번지부터 3999번지라고 가정을 해보자.

 

▶ 예시 1

만약 메모장 프로그램 명령어 중'(논리 주소) 1500번지에 숫자 100을 저장하라'와 같은 명령어가 있다면

숫자 100은 어떤 물리 주소에 저장될까? 이 명령어는 실행되어도 안전할까?

 

 

예시 2

만약 인터넷 브라우저 프로그램 명령어 중 '(논리 주소) 1100번지의 데이터를 삭제하라'와 같은 명령어가 있다면 

어떤 물리 주소의 데이터가 삭제될까? 이 명령어는 실행되어도 안전할까?

 

 

이런 명령어는 실행되어선 안된다. 프로그램의 논리 주소 영역을 벗어났기 때문이다.

위 명령어들이 실행된다면 메모장 프로그램 명령어는 애꿎은 인터넷 브라우저 프로그램에 숫자 10을 저장할 것이다.

또한 인터넷 브라우저 프로그램 명령어는 자신과 전혀 관련 없는 게임 프로그램 정보를 삭제한다.

 

 

이렇게 다른 프로그램의 영역을 침범할 수 있는 명령어는 위험하기 때문에 논리 주소 범위를 벗어나는 명령어 실행을 방지하고, 실행중인 프로그램이 다른 프로그램에 영향을 받지 않도록 보호할 방법한계 레지스터가 담당한다.

 

  • 베이스 레지스터 : 실행 중인 프로그램의 가장 적은 물리 주소를 저장
    • 논리 주소와 더해져 물리 주소로 변환되는데 사용됨
  • 한계 레지스터 : 논리 주소의 최대 크기를 저장
    • 명령어가 다른 프로그램 범위를 침범하는지 검사

 

즉, 프로그램의 물리 주소 범위는 베이스 레지스터 값 이상, 베이스 레지스터 값 + 한계 레지스터 값 미만이 된다.

 

CPU가 접근하려는 놀리 주소는 한계 레지스터가 저장한 값보다 커서는 안된다.

한계 레지스터보다 높은 주소 값에 접근하는 것은 곧 프로그램의 범위에 벗어난 메모리 고악ㄴ에 접근하는 것과 같다.

 

 

▶ 예시 1

베이스 레지스터에 100, 한계 레지스터에 150이 저장되어 있다고 해보자.

이는 물리 주소 시작점이 100번지, 프로그램의 크기(논리 주소의 최대 크기)는 150임을 의미한다.

따라서 이 프로그램은 150번지를 넘어서는 노리 주소를 가질 수 없다.

 

 

 예시 2

베이스 레지스터에 1500, 한계 레지스터에 1000이 저장되어 있다고 해보자.

이는 물리 주소 시작점이 1500번지, 프로그램의 크기는 1000임을 의미한다.

따라서 이 프로그램은 1000번지를 넘어서는 노리 주소를 가질 수 없다.

 

 

CPU는 메모리에 접근하기 전에 접근하고자 하는 논리 주소가 한계 레지스터보다 작은지를 항상 검사한다. 만약 CPU가 한계 레지스터보다 높은 주소에 접근하려고 하면 인터럽트(트랩)을 발생시켜 실행을 중단한다.

 

 

이런식으로 실행 중인 프로그램의 독립적인 실행 공간을 확보하고 하나의 프로그램이 다른 프로그램을 침범하지 못하게 보호한다.

 

3. 캐시 메모리

 

CPU는 프로그램을 실행하는 과정에서 메모리에 저장된 데이터를 빈번하게 사용한다.

하지만 CPU가 메모리에 접근하는 시간은 CPU의 연산 속도보다 느리다.

CPU가 연산을 빨리 한다 해도 메모리에 접근하는 시간이 느리면 CPU의 빠른 연산 속도는 아무런 쓸모가 없다.

이를 극복하기 위한 저장 자치가 캐시 메모리이다.

 

 

저장 장치 계층 구조

 

사용자들은 "빠르고 동시에 용량이 큰 저장 장치"를 원한다.

 

하지만 '빠른 저장장치''용량이 큰 저장 장치'는 양립하기 어렵다. 왜냐하면 일반적으로 아래와 같은 명제를 따르기 때문이다.

 

  1. CPU와 가까운 저장 장치는 빠르고, 멀리 있는 저장 장치는 느리다
  2. 속도가 빠른 저장 장치는 저장 용량이 적고, 가격이 비싸다

 

CPU와 가장 가까운 레지스터는 일반적으로 RAM보다 용량이 작지만, 접근 시간이 압도적으로 빠르고 가격이 비싸다.

그리고 USB메모리보다 CPU에 더 가까운 RAM은 접근 시간이 훨씬 더 빠르지만, 같은 용량이라고 할지라도 가격은 더 비싸다.

 

저장 장치들의 장단점이 명확한데, 어느 하나의 저장 장치만 사용할 수 없기에 일반적으로 컴퓨터는 다양한 저장 장치를 모두 사용한다.

 

컴퓨터가 사용하는 저장 장치들은 'CPU에 얼마나 가까운가'를 기준으로 계층적으로 나타낼 수 있다.

이를 저장 장치 계층 구조(memory hierarchy)라고 한다.

위에 있는 영문의 '메모리'라는 용어는 RAM이 아닌 일반적인 저장 장치를 의미한다.

 

캐시 메모리

 

CPU가 메모리에 접근하는 속도는 레지스터에 접근하는 속도보다 느리다.

그럼에도 불구하고 CPU는 프로그램을 실행하는 과정에서 메모리에 빈번히 접근해야만 한다.

CPU연산 속도가 아무리 빨라도 메모리에 접근하는 속도가 그에 따라가지 못한다면 CPU의 발전은 아무런 소용이 없다.

 

 

그래서 등장한 저장 장치가 캐시메모리(cache memory)이다.

CPU와 메모리 사이에 위치하고, 레지스터보다 용량이 크고 빠른 SRAM 기반의 저장 장치이다.

CPU의 연산속도와 메모리 접근 속도의 차이를 줄이기 위한 나타났다.

 

  • CPU : 집
  • 메모리에 접근하는 행위 : 물건 사러가기
  • 메모리 : 물건은 많지만 집과 멀리 떨어져 왕복이 오래걸리는 대형마트
  • 캐 메모리 : 물건은 많지 않아도 집과 가까이 있는 편의점

 

 

편의점에 내가 필요한 물품이 있다면 굳이 멀리 있는 대형마트까지 갈 필요없이 내가 원하는 물품을 얻을 수 있는 것처럼 캐시 메모리에 CPU가 필요로하는 데이터가 있다면 필요한 데이터로의 접근 시간을 줄일 수 있다.

 

 

캐시메모리까지 반영한 저장 장치 계층 구조는 아래와 같이 그릴 수 있다.

 

 

우리가 사용하는 컴퓨터 내부에는 여러 개의 캐시 메모리가 있따.

그리고 이 캐시 메모리들은 CPU(코어)와 가까운 수서대로 계층을 구성한다.

코어와 가장 가까운 캐시 메모리를 L1(levle 1)캐시, 그 다음 가까운 캐시 메모리를 L2(level2)캐시, 그 다음 가까운 캐시 메모리를 L3(level3)캐시 라고 부른다.

 

일반적으로 L1캐시와 L2캐시는 코어 내부에, L3 캐시는 코어 외부에 위치해 있다.

 

저장 장치 계층 구조를 이해했다면 짐작할 수 있다시피

캐시 메모리의 용량은 L1,L2,L3 순으로 커지고, 속도는 L3, L2, L1순으로 빨라진다. 일반적으로 가격도  L3, L2, L1순으로 비싸다.

 

CPU가 메모리 내에 데이터가 필요하다고 판단한다면 우선 L1캐시에 해당하는 데이터가 있는지를 알아보고, 없다면 L2, L3캐시 순으로 데이터를 검색한다.

 

멀티 코어 프로세스에서 L1 - L2 -L3캐시는 일반적으로 아래와 같이 구현된다. L1 캐시와 L2 캐시는 코어마다 고유한 캐시 메모리로 할당되고, L3 캐시는 여러 코어가 공유하는 형태로 사용된다.

 

 

 

이제 캐시 메모리 계층 구조를 알았으니, 저장 장치 계층 구조를 더 세부적으로 그릴 수 있다.

 

이 구조를 외울 필요는 전혀 없다. 클라우드 서비스에서 제공하는 원격 스토리지와 같이 이 책에서 다루지 않은 저장 장치도 얼마든지 저장 장치 계층 구조에 추가될 수 있으니까. 중요한 것은 상위 계층을 이루고 있는 저장 장치의 특징과 하위 계층을 이루고 있는 저장 장치의 특징을 이해하고 차이를 이해하는 것이다.

 

참조 지역성 원리

 

캐시 메모리는 메모리보다 용량이 적다. 당연하게도 캐시 메모리는 메모리에 있는 모든 내용을 가져다 저장할 수 없다.

메모리가 보조 기억 장치의 일부를복사하여 저장하는 것 처럼, 캐시 메모리는 메모리의 일부를 복사해 저장한다.

 

그렇다면 캐시 메모리는 무엇을 저장해야 할까?

 

  • 보조기억장치 : 전원이 꺼져도 기억할 대상을 저장
  • 메모리 : 실행중인 대상을 저장
  • 캐시 메모리 : CPU가 사용할 법한 대상을 예측하여 저장

 

자주 사용될 것으로 예측한 데이터가 실제 들어맞아 캐시 메모리 내 데이터가 CPU에서 활용될 경우 캐시 히트(cache hit)라고 한다.

 

 

반대로 자주 사용될 것으로 예측하여 캐시 메모리에 저장했지만, 예측이 틀려 메모리에서 필요한 데이터를 직접 가져와야 하는 경우를 캐시미스(cache miss)라고 한다. 캐시미스가 발생하면 CPU가 필요한 데이터를 메모리에서 직접 가져와야 하기 때문에 캐시 메모리의 이점을 활용할 수 없다. 캐시 미스가 자주 발생하면 성능이 떨어진다는 의미다.

 

첨고로 캐시가 히트되는 비율을 캐시 적중률(cache hit ratio)라고 하고 아래처럼 계산한다.

캐시 히트 횟수 / ( 캐시 히트 횟수 + 캐시 미스 횟수 )

 

우리가 사용하는 컴퓨터의 캐시 적중률은 대략 85~95% 이상이다.

CPU가 필요할 것으로 예측한 데이터를 100번 중 85~95번 꼴로 맞추는 셈이다.

캐시 적중률이 높으면 CPU의 메모리 접근 횟수를 줄일 수 있다.

 

캐시 메모리의 이점을 제대로 활용하려면 CPU가 사용할 법한 데이터를 제대로 예측해서 캐시 적중률을 높여야 한다.

그렇다면 CPU가 사용할 법한 데이터를 어떻게 알 수 있을까?

 

캐시 메모리는  참조지역성 원리(locality of reference, principle of locality)에 따라 메모리로부터 가져올 데이터를 결정한다.

참조 지역성의 원리란 CPU가 메모리에 접근할 때의 주된 경향을 바탕으로 만들어진 원리이다.

 

  1. CPU는 최근에 접근했던 메모리 공간에 다시 접근하려는 경향이 있다
  2. CPU는 접근한 메모리 공간 근처를 접근하려는 경향이 있다

캐시 메모리는 2가지 참조 지역성의 원리에 입각해 CPU가 사용할 법한 데이터를 예측한다.

 

1) 최근에 접근했던 메모리 공간에 다시 접근하려는 경향

변수에 값을 저장하고 나면 언제든 변수에 다시 접근하여 변수에 저장된 값을 사용할 수있다.

이는 달리 말해 'CPU는 변수가 저장된 메모리 공간을 언제든지 다시 참조할 수 있다'는 것을 의미한다.

그리고 변수에 저장된 값을 일반적으로 한 번만 사용되지 않고 프로그램이 실행되는 동안 여러 번 사용된다.

즉, CPU는 최근에 접근했던 (변수가 저장된)메모리 공간을 여러 번 다시 접근할 수 있다.

 

 

위 코드에서 변수는 num과 i인데, 구구단 2단을 출력하는  과정에서 이 변수들이 여러 번 사용되고 있다.

이렇게 '최근에 접근했던 메모리 공간에 다시 접근하려는 경향'시간 지역성(temporal locality)라고 한다.

 

2) 접근한 메모리 공간 근처를 접근하려는 경향

CPU가 실행하려는 프로그램은 보통 관련 데이터끼리 한데 모여 있다.

 

가령 메모리 내에 워드 프로세서 프로그램, 웹 브라우저 프로그램, 게임 프로그램이 있다고 가정해보자.

이 세 프로그램은 서로 관련 있는 데이터끼리 모여서 저장된다.

워드 프로세서 프로그램은 워드 프로세스 관련 데이터들이 모여 저장되고, 웹 브라우저 프로그램은 웹 프라우저 관련 데이터들이 모여 저장되고, 게임 프로그램은 게임 관련 데이터들이 모여 저장된다.

 

그리고 하나의 프로그램 내에서도 관련 있는 데이터들은 모여서 저장된다.

가령 워드 프로세서 프로그램에 자동 저장기능, 입력 기능, 출력 기능이 있다고 했을때 각각의 기능과 관련한 데이터는 모두 모여 저장된다.

 

 

CPU가 워드 프로세서 프로그램을 실행할 적에는 워드 포르세서 프로그램이 모여 있는 공간 근처를 집중적으로 접근할 것이고,

사용자가 입력을 할 적에는 입력 기능이 모여있는 공간 근처를 집중적으로 접근할 것이다.

이렇게 '접근한 메모리 공간 근처를 접근하려는 경향'공간 지역성(spatial locality)라고 한다.