minhui study

4부 16장. 메모리의 구성, 관계 및 역할 본문

컴퓨터 구조/Windows System Programming

4부 16장. 메모리의 구성, 관계 및 역할

minhui 2020. 1. 31. 15:51

[목차]

1. 메모리 계층(Memory Hierarchy)

2. 캐쉬(Cache)와 캐쉬 알고리즘

3. 가상 메모리(Virtual Memory)


Section 01. 메모리 계층(Memory Hierarchy)

 

> 메모리의 범위와 종류

 

[메인 메모리(Main Memory)]

 : 거의 모든 컴퓨터가 메인 메모리로 램을 사용한다. 보다 정확히 말하면 D램(D-RAM)계열의 메모리이다.

 

[레지스터(Register)]

 : CPU 안에 내장되어 있어서 연산을 위한 저장소를 제공한다.

 

[캐쉬(Cache)]

 : 캐쉬는 D램보다 빠른 S램으로 구성하는데 캐쉬는 CPU와 램 사이에서 중간 저장소 역할을 하는 메모리이다. 

 

[하드디스크(Hard Disk)와 이외의 저장 장치들]

 : 하드디스크는 크고 작은 파일들을 저장하기 위한 용도로 사용되지만 프로그램 실행에 있어서도 중요한 의미를 지닌다.

SD 카드, CD-ROM과 같은 I/O(Input/Output)장치들도 메모리에 해당한다.

 

 

 

> 메모리 계층 구조(Memory Hierarchy)

 

프로그램이 실행되는 동안에 메모리가 하는 역할은 데이터의 입력 및 출력이다. 

그럼 어떠한 부분에서 차이가 있을까?

가장 큰 차이점은 CPU를 기준으로 얼마나 멀리 떨어져 있느냐이다. CPU와 가까이에 있을수록 빠르고 멀리 있을수록 속도가 느리다. 레지스터(CPU 내부) -> 캐쉬메모리(근처) -> 메인메모리 순으로 CPU와 점 점 멀어진다.

메인 메모리에 접근하기 위해서는 복잡한 과정을 거쳐야 되는데 그 이유가 버스 인터페이스 컨트롤(데이터 입력 및 출력을 위해서 메모리 버스를 거쳐야 함)이다. 

그럼 왜 굳이 하드디스크를 쓰는 것일까?

그 이유는 기술과 비용 때문이다. 하드디스크 용량을 수십 GB늘리는 것보다 캐쉬 메모리 1M바이트 늘리는 데 드는 비용이 훨씬 크다.

메모리는 다음과 같은 피라미드 계층 구조를 지닌다.

1. 레지스터 : 차지하고 있는 크기가 가장 작지만 가장 빠르다.

 

2. L1(Level 1) 캐쉬, L2(Level 2)캐쉬 : L1이 L2보다 CPU에 근접해있다.

 

3. 메인 메모리 : 캐쉬보다 크지만 상대적으로 느리다.

 

4. 하드디스크 : 가장 크지만 가장 느리다.

 

 

 

전반적인 흐름을 설명하자면 이렇다.

하드디스크에 있는 내용은 프로그램이 실행을 위해서 메인 메모리로 이동하고 그 중 일부가 캐쉬로 이동하고 이 중에서 연산이 필요한 데이터가 레지스터로 이동한다. 즉, 모든 메모리의 역할이 피라미드 구조에서 자신보다 아래에 있는 메모리를 캐쉬(자주 사용되는 메모리의 일부를 저장해서 속도를 향상시키는 것)하기 위해서 존재한다.

역순으로 다시 한번 살펴보자. 연산에 필요한 데이터가 레지스터에 존재하지 않는다면 L1 캐쉬를 확인하고 L1 캐쉬도 가지고 있지 않다면 L2 캐쉬를 확인하게 되고 이곳에도 없다면 메인 메모리를 확인한다. 그래도 존재하지 않는다면 결국은 하드디스크에서 읽어 들이게 된다.


Section 02. 캐쉬(Cache)와 캐쉬 알고리즘

 

> 컴퓨터 프로그램의 일반적인 특성

 

     ▶ 템퍼럴 로컬리티(Temporal Locality) : 프로그램 실행 시 한 번 접근이 이뤄진 주소의 메모리 영역은 자주 접근하 게 된다는 프로그램 특성

    

      ▶ 스페이셜 로컬리티(Spatial Locality) : 프로그램 실행 시 접근하는 메모리 영역은 이미 접근이 이루어진 영역의 근처일 확률이 높은 프로그램 특성

 

      ▶ 캐쉬 프렌드리 코드(Cache Friendly Code) : 캐쉬의 도움을 많이 받을 수 있도록 구현된 코드

 

 

> 캐쉬 알고리즘

캐쉬 알고리즘

ALU 연산과정 중에서 필요한 데이터가 있다면 이를 레지스터로 이동시켜야 한다. 이 데이터를 레지스터로 가져오기 우해서 L1 캐쉬에서 데이터가 존재하는 곳을 찾아봐야 하는데 이때 해당 데이터가 존재할 경우를 가리켜 캐쉬 힛(Cache Hit)이 발생했다고 한다. 반대로 L1 캐쉬에 해당 데이터가 존재하지 않을 경우 이를 가리켜 캐쉬 미스(Cache Miss)가 잘생했다고 하고 L2 캐쉬에도 데이터가 존재하지 않는다면 메인 메모리에서 데이터를 가져와야 한다.

 

프로그램이 실행되는 동안에는 하드 디스크를 제외한 모든 메모리가 항상 채워져 있다. 따라서 L1 캐쉬에서 캐쉬미스가 발생해서 L2 캐쉬로부터 데이터 블록을 읽어 들일 때 꽈 차 있는 L1 캐쉬에 데이터를 저장하려면 기존에 저장한 데이터를 밀어내야만 하는데 이 때 잘 정의된 블록 교체 알고리즘에 의해서 데이터를 밀어내게 된다. 블로 교체 알고리즘은 캐쉬교체 정책(Cache's Replacement Policy)에 따라서 달라질 수 있는데 가장 보편적인 것이 LRU(Least-Recently Used)알고리즘이다. (가장 오래 전에 참조된 블록을 밀어내는 알고리즘)

 

 


 

 

출처 : 윈도우즈시스템프로그래밍(한빛미디어)

Comments