맨위로가기

메모리 계층 구조

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

메모리 계층 구조는 CPU가 데이터에 접근하는 속도, 참조 지역성, 경제성을 고려하여 설계된 컴퓨터 메모리 시스템이다. CPU 레지스터, 캐시, 주 메모리, 디스크 스토리지 등으로 구성되며, 상위 계층은 접근 속도가 빠르지만 용량이 작고, 하위 계층은 용량이 크지만 접근 속도가 느리다. 메모리 계층 구조의 효율적인 활용은 시스템 성능 향상에 중요하며, 프로그래머, 하드웨어, 컴파일러의 협력을 통해 최적화된다.

더 읽어볼만한 페이지

  • 계층 - 존재의 대사슬
    존재의 대사슬은 신에서 광물로 이어지는 계층적 구조로, 각 단계는 고유한 속성을 지니며 상위 단계가 하위 단계의 속성을 포함하는 특징을 보이는 개념으로, 과거에는 불변의 질서로 여겨졌으나 진화론적 사고에 영향을 주었고 현대 과학에서는 주류 이론으로 받아들여지지 않는다.
  • 계층 - 분류 체계
    분류 체계는 사물이나 정보를 일정한 기준에 따라 체계적으로 배열하고 정리하는 방법으로, 다양한 분야에서 활용되며 넓게는 그룹핑이나 나열을 포함하지만 지식 관리 측면에서는 온톨로지보다 좁은 의미로 해석된다.
  • 컴퓨터 메모리 - 플래시 메모리
    플래시 메모리는 전기적으로 데이터의 쓰기 및 삭제가 가능한 비휘발성 메모리 기술로, 마스오카 후지오 박사가 발명하여 카메라 플래시와 유사한 소거 방식으로 인해 명명되었으며, NOR형과 NAND형으로 나뉘어 각기 다른 분야에 적용된다.
  • 컴퓨터 메모리 - 비휘발성 메모리
    전원이 끊겨도 데이터가 유지되는 비휘발성 메모리는 마스크 ROM, PROM, EPROM, EEPROM, 플래시 메모리 등 다양한 종류가 있으며, FeRAM, MRAM, PCM, ReRAM과 같은 차세대 기술도 개발 중이다.
메모리 계층 구조
개요
정의컴퓨터 시스템에서 사용되는 기억 장치를 계층적으로 구성하는 것
목적비용 절감
접근 속도 향상
저장 용량 증대
계층 구조
최상위 계층CPU 레지스터
상위 계층CPU 캐시 (L1 캐시, L2 캐시, L3 캐시)
중간 계층주기억장치 (RAM)
하위 계층보조 기억 장치 (SSD, HDD)
동작 원리
지역성 원리시간적 지역성: 최근에 접근한 데이터는 다시 접근될 가능성이 높음
공간적 지역성: 최근에 접근한 데이터 주변의 데이터는 접근될 가능성이 높음
캐시 적중률상위 계층에서 원하는 데이터를 찾을 확률을 높여 평균 접근 시간을 단축
페이지 폴트하위 계층에서 데이터를 가져와 상위 계층에 저장
성능 지표
접근 시간기억 장치에 접근하는 데 걸리는 시간
대역폭단위 시간당 전송할 수 있는 데이터 양
용량기억 장치에 저장할 수 있는 데이터 양
비용단위 용량당 가격
메모리 관리 기법
캐싱자주 사용되는 데이터를 상위 계층에 저장
가상 메모리물리적인 메모리 용량보다 더 큰 메모리 공간을 사용하는 것처럼 보이게 함
페이지 교체 알고리즘가상 메모리에서 페이지 폴트 발생 시 어떤 페이지를 교체할지 결정
장단점
장점비용 효율적인 시스템 구축
빠른 데이터 접근 속도
대용량 데이터 저장 가능
단점복잡한 메모리 관리 필요

2. 메모리 계층 구조의 필요성

CPU는 작은 메모리에 더 빠르게 접근할 수 있다. 이는 디코딩 속도, 참조 지역성, 경제성과 관련이 있다.

2. 1. 디코딩 속도

크기가 1k인 메모리와 2k인 메모리가 각각 다른 CPU에 연결되어 있다고 가정해 보자. 2k 메모리는 1k 메모리 2개로 구성된다. 1k 메모리는 CPU와 데이터 버스([14])로 직접 연결된다. 반면 2k 메모리는 디코더를 통해 CPU가 두 개의 1k 메모리 중 어느 쪽에 접근하려는지 파악해야 한다.

가운데


CPU는 3개의 버스를 통해 메모리에 접근한다.

  • '''주소 전달''' 버스: CPU가 메모리의 어느 부분의 데이터에 접근할지 나타낸다.
  • '''데이터 전달''' 버스: CPU가 접근한 메모리 부분에서 CPU로 데이터를 보내거나, CPU에서 메모리로 데이터를 보내는 데 사용된다.
  • '''컨트롤 신호''' 버스: CPU가 메모리에 접근할지 여부를 나타낸다. 주소 전달, 데이터 전달 버스에 어떤 값이 있더라도 컨트롤 신호를 보내지 않으면 CPU와 메모리는 아무런 동작도 하지 않는다.


위 그림과 같은 경우에는 컨트롤 신호를 보내는 즉시 CPU가 메모리에 접근할 수 있다.

가운데


1k 메모리 2개를 사용해 2k 메모리로 사용하고 있다. CPU는 두 메모리 중 원하는 메모리에 접근해야 한다. 이 경우 한 메모리에는 컨트롤 신호를 전송하지 않고, 다른 한 메모리에 컨트롤 신호를 전송함으로써 둘 중 한 메모리에만 접근할 수 있다. 문제는 디코딩에도 시간이 걸린다는 점이다.

만약 2k가 아니라 4k 메모리를 사용한다면, 디코딩에는 더 많은 시간이 소요된다. 최근에 사용하는 메모리가 기가바이트 단위임을 고려하면, CPU가 특정 메모리에 접근하려면 매우 많은 디코딩 시간이 필요할 것으로 예상할 수 있다.

이러한 관점에서 CPU가 빠르게 데이터에 접근하기 위해서는 데이터를 저장하는 메모리가 작아야 한다. 실제로 레지스터캐시보다 더 작은 용량을, 캐시는 메모리보다, 메모리는 하드 디스크 드라이브(HDD)보다 더 작은 용량을 가진다.

2. 2. 참조 지역성 (Locality)

컴퓨터 프로그램은 특정 시간 동안 특정 메모리 영역에 집중적으로 접근하는 경향이 있는데, 이를 참조 지역성이라고 한다. 자주 사용되는 데이터는 계속 자주 사용되고, 자주 사용되지 않는 데이터는 계속 자주 사용되지 않는 경향이 있다.[1] 운영체제나 CPU는 이러한 특성을 이용하여 자동으로 자주 사용되는 데이터나 자주 사용될 것 같은 데이터를 메모리에서 캐시로 읽어온다. 자주 쓰이는 데이터는 전체 데이터 양에 비해 적기 때문에, 캐시는 메모리보다 더 작아도 된다. 메모리와 하드 디스크의 관계도 마찬가지이다.[1]

2. 3. 경제성

레지스터, 캐시, 메모리, 하드 디스크는 만드는 방법이 하드웨어적으로 다를 때가 많다. 그리고 메모리 구조에서 상층에 속할수록 더 비싸다. 비싼 하드웨어는 꼭 필요한 만큼의 크기만 사용하고, 싼 하드웨어를 넉넉한 크기만큼 사용하기 때문에 메모리 계층 구조가 피라미드 모양으로 나타나는 것이다.

3. 메모리 계층 구조의 속성

메모리 계층 구조는 복잡성이 증가하면 속도가 느려진다.[2] 데이터를 조작하기 위해 메모리 계층 구조의 어느 수준까지 내려가야 하는지를 최소화하는 것이 시스템 성능을 높이는 주요 방법 중 하나이다.[4]

CPU는 작은 메모리에 더 빨리 접근할 수 있는데, 이는 크기가 작은 메모리일수록 CPU에서 메모리로 데이터를 보내고 받는데 필요한 디코딩 시간이 줄어들기 때문이다. 예를 들어, 1k 메모리는 CPU와 직접 연결되지만, 2k 메모리는 디코더를 통해 CPU가 원하는 메모리 위치를 파악해야 한다. 메모리 용량이 커질수록 디코딩 시간은 더욱 증가한다.

이러한 이유로, CPU가 빠르게 데이터에 접근하려면 데이터를 저장하는 메모리가 작아야 한다. 실제로 레지스터캐시보다 작고, 캐시는 메모리보다 작으며, 메모리는 하드 디스크보다 작다.

하지만 큰 메모리를 사용하더라도 모든 데이터를 고르게 접근하지는 않는다. 자주 사용되는 데이터는 계속 자주 사용되고, 그렇지 않은 데이터는 계속 사용되지 않는다. 운영체제나 CPU는 이러한 특성을 이용하여 자주 사용되는 데이터나 자주 사용될 것 같은 데이터를 메모리에서 캐시로 읽어온다.

레지스터, 캐시, 메모리, 하드 디스크는 하드웨어적으로 만들어지는 방법이 다를 때가 많으며, 메모리 계층 구조에서 상층에 속할수록 더 비싸다. 따라서 비싼 하드웨어는 꼭 필요한 만큼만 사용하고, 싼 하드웨어를 넉넉한 크기만큼 사용하기 때문에 메모리 계층 구조가 피라미드 모양으로 나타난다.

지연 시간과 대역폭은 캐시의 중요한 지표이며, 메모리 계층 구조의 구성 요소에 따라 달라진다.[5] 데이터가 메모리 계층 구조의 어디에 위치하는지 예측하기 어렵다.[5]

4. 메모리 계층 구조의 예시

AMD 불도저 서버의 메모리 계층 구조


메모리 계층 구조의 단계 수는 시간이 지남에 따라 증가했으며, 각 단계의 성능도 향상되었다.[6] 메모리 또는 저장 구성 요소의 유형도 시간이 지남에 따라 변화하였다.

2013년경 인텔 하스웰 모바일 프로세서의 메모리 계층 구조는 하위 섹션에서 자세히 다루고 있으며, 다음과 같이 요약할 수 있다.

계층 구조의 하위 레벨(디스크 아래)은 계층형 스토리지라고도 하며, 온라인, 니어라인, 오프라인 스토리지로 구분된다.[12]

현대 CPU는 매우 빠르기 때문에 메모리 접근의 참조 지역성과 계층 구조의 효율성이 프로그램 성능에 큰 영향을 미친다. 메모리 계층 구조를 최적으로 활용하기 위해서는 프로그래머, 하드웨어, 최적화 컴파일러의 협력이 필요하다.

4. 1. 현대 컴퓨터의 메모리 계층 구조 (2013년 인텔 하스웰 프로세서 기준)

2013년경 인텔 하스웰 모바일[7] 프로세서를 기준으로 현대 컴퓨터의 메모리 계층 구조는 다음과 같다.

  • 프로세서 레지스터: 가장 빠른 접근 속도(보통 1 CPU 사이클)를 가지며, 크기는 수천 바이트 정도이다.[6]
  • CPU 캐시:
  • L0 (레벨 0) 마이크로 연산 캐시: 6 KiB[8]
  • L1 (레벨 1) 명령어 캐시: 128 KiB
  • L1 (레벨 1) 데이터 캐시: 128 KiB, 최고 접근 속도는 약 700GB[9]
  • L2 (레벨 2) 명령어 및 데이터 (공유): 1 MiB, 최고 접근 속도는 약 200GB[9]
  • L3 (레벨 3) 공유 캐시: 6 MiB, 최고 접근 속도는 약 100GB[9]
  • L4 (레벨 4) 공유 캐시: 128 MiB, 최고 접근 속도는 약 40GB[9]
  • 주 메모리(RAM): 수 GiB 크기이며, 최고 접근 속도는 약 10GB이다.[9] NUMA 환경에서는 접근 시간이 균일하지 않을 수 있다.
  • 디스크 스토리지(HDD, SSD): 수 TB 크기이며, 2017년 기준 소비자용 SSD의 최고 접근 속도는 약 2000MB이다.[10]
  • 니어라인 스토리지: 최대 수 Exabyte 크기이며, 2013년 기준 최고 접근 속도는 약 160MB이다.[11]
  • 오프라인 스토리지


계층 구조의 하위 레벨(디스크 스토리지 아래)은 계층형 스토리지라고도 한다. 온라인, 니어라인, 오프라인 스토리지 간의 공식적인 차이점은 다음과 같다.[12]

  • 온라인 스토리지는 I/O에 즉시 사용할 수 있다.
  • 니어라인 스토리지는 즉시 사용할 수 없지만, 사람의 개입 없이 빠르게 온라인 상태로 만들 수 있다.
  • 오프라인 스토리지는 즉시 사용할 수 없으며, 온라인 상태로 전환하려면 사람의 개입이 필요하다.


예를 들어, 항상 켜져 있는 회전 디스크는 온라인, 대규모 유휴 디스크 배열(예: MAID)처럼 회전이 멈추는 회전 디스크는 니어라인, 테이프 라이브러리와 같이 자동으로 로드되는 테이프 카트리지는 니어라인, 수동 로드가 필요한 카트리지는 오프라인이다.

현대 CPU는 매우 빨라 프로그램의 병목 현상은 참조 지역성과 캐싱 및 메모리 전송 효율성에 있다.[6] CPU는 메모리 I/O 완료를 기다리며 유휴 상태로 많은 시간을 보낸다. 이를 "공간 비용"이라고도 한다. 더 큰 메모리 객체는 작고 빠른 레벨을 오버플로하여 더 크고 느린 레벨을 사용해야 할 가능성이 높기 때문이다. 메모리 사용량은 "압력"이라고 알려져 있다 (각각 "레지스터 압력", "캐시 압력", "메모리 압력"). 상위 레벨에 없어 하위 레벨에서 가져와야 하는 데이터는 레지스터 스필링(레지스터에서 캐시로), 캐시 미스(캐시에서 주 메모리로), 페이지 폴트(주 메모리에서 디스크로)라고 한다.

어셈블리 언어나 C의 인라인 어셈블러에서는 레지스터 접근이 가능하지만, 현대 프로그래밍 언어는 주 메모리와 디스크 스토리지를 두 개의 메모리 레벨로 가정한다. 메모리 계층 구조를 최적으로 활용하려면 프로그래머, 하드웨어, 최적화 컴파일러의 협력이 필요하다.

  • 프로그래머는 파일 I/O를 통해 디스크와 메모리 간 데이터 이동을 담당한다.
  • 하드웨어는 메모리와 캐시 간 데이터 이동을 담당한다.
  • 최적화 컴파일러는 하드웨어가 캐시와 레지스터를 효율적으로 사용하도록 코드를 생성한다.


많은 프로그래머는 하나의 메모리 레벨을 가정하고, 이는 응용 프로그램이 성능 한계에 부딪힐 때까지 잘 작동한다. 그 후 코드 리팩토링 과정에서 메모리 계층 구조를 평가한다.

5. 현대 프로그래밍과 메모리 계층 구조

현대 CPU는 매우 빨라 대부분의 프로그램 작업에서 메모리 접근의 참조 지역성과 계층 구조의 여러 레벨 간 캐싱 및 메모리 전송 효율성이 병목 현상이 된다.[9] 이를 "공간 비용"이라고도 하는데, 더 큰 메모리 객체는 작고 빠른 레벨을 채워서 더 크고 느린 레벨을 사용해야 할 가능성이 더 높기 때문이다. 결과적인 메모리 사용량은 "압력"이라고 알려져 있다 (각각 "레지스터 압력", "캐시 압력", "메모리 압력"). 더 높은 레벨에서 누락되어 더 낮은 레벨에서 가져와야 하는 데이터에 대한 용어는 레지스터 스필링(레지스터에서 캐시로), 캐시 미스(캐시에서 주 메모리로), (하드) 페이지 폴트(주 메모리에서 디스크로)이다.

현대 프로그래밍 언어는 주로 주 메모리와 디스크 스토리지를 두 개의 메모리 레벨로 가정하지만, 어셈블리 언어 및 C와 같은 언어의 인라인 어셈블러에서는 레지스터에 직접 접근할 수 있다. 메모리 계층 구조를 최적으로 활용하려면 프로그래머, 하드웨어, 컴파일러의 협력이 필요하다 (운영 체제의 기본 지원도 필요).


  • '''프로그래머'''는 파일 I/O를 통해 디스크와 메모리 간 데이터를 이동하는 역할을 한다.
  • '''하드웨어'''는 메모리와 캐시 간 데이터를 이동하는 역할을 한다.
  • '''최적화 컴파일러'''는 실행 시 하드웨어가 캐시와 레지스터를 효율적으로 사용하도록 코드를 생성하는 역할을 한다.


많은 프로그래머는 하나의 메모리 레벨을 가정한다. 이 방법은 응용 프로그램이 성능 문제에 부딪힐 때까지 잘 작동한다. 그런 다음 코드 리팩토링 중에 메모리 계층 구조를 평가한다.

참조

[1] 서적 Computer Hardware/Software Architecture https://archive.org/[...] Prentice Hall
[2] 문서 Write-combining
[3] 웹사이트 Memory Hierarchy http://www.unitysemi[...] Unitity Semiconductor Corporation 2009-09-16
[4] 웹사이트 Multi-Core http://www.pixelbeat[...] 2009-09-16
[5] 논문 Memory Hierarchy in Cache-Based Systems http://www.sun.com/b[...] Sun Microsystems
[6] 웹사이트 Memory & Storage - Timeline of Computer History - Computer History Museum http://www.computerh[...]
[7] 뉴스 Dissecting Intel's top graphics in Apple's 15-inch MacBook Pro - CNET http://news.cnet.com[...] News.cnet.com 2014-07-31
[8] 웹사이트 Intel's Haswell Architecture Analyzed: Building a New PC and a New Intel http://www.anandtech[...] AnandTech 2014-07-31
[9] 웹사이트 SiSoftware Zone http://www.sisoftwar[...] Sisoftware.co.uk 2014-07-31
[10] 웹사이트 Samsung 960 Pro M.2 NVMe SSD Review http://www.storagere[...] storagereview.com 2016-10-20
[11] 웹사이트 Ultrium - LTO Technology - Ultrium GenerationsLTO http://www.lto.org/t[...] Lto.org 2014-07-31
[12] 웹사이트 Correct use of the term Nearline. https://www.ibm.com/[...] 2015-08-16
[13] 서적 Microprocessor Technical Publications
[14] 문서 폰 노이만 구조의 버스(bus)



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com