본문 바로가기

Hub Development/Computer Science

[CS] 메모리 계층 구조(Memory Hierachy) (CS 스터디 - OS 6주차)

728x90

[CS 스터디 주소]

 

GitHub - techInterview-study/Tech_Interview_for_Beginner: 신입 개발자 CS 면접 대비 & SSAFY 11기 서울 6반 CS 스터

신입 개발자 CS 면접 대비 & SSAFY 11기 서울 6반 CS 스터디 📖🔥. Contribute to techInterview-study/Tech_Interview_for_Beginner development by creating an account on GitHub.

github.com

📚 메모리 계층 구조(Memory Hierachy)


 

계층 구조의 특징

 

🔹 메모리 계층 구조는 메모리를 속도, 용량, 비용간의 절충 관계를 고려하여 필요에 따라 여러 가지 종류로 나타낸 구조를 의미한다.

 

계층 구조에서 위쪽으로 올라갈수록 CPU 코어에 가까워지기 때문에 CPU가 메모리에 더 빨리 접근할 수 있지만, 그만큼 비용이 많이 들며 저장 용량이 적다.

자주 쓰이는 데이터는 반복해서 쓰인다는 것을 참조 지역성(locality of reference)라고 한다. 즉, 메모리 계층 구조의 아이디어는 프로세서가 필요로 하는 데이터를 최대한 가까운 곳에 위치시켜 속도를 향상 시키는 것이다.

 

계층 구조의 목적

 

  • 컴퓨터의 설계에 있어 각각의 특징이 있는 서로 다른 여러 종류의 저장 장치를 함께 사용하여 최적의 효율을 낼 수 있게 하는 것
  • 상황에 맞게 여러 저장 장치를 각각 사용할 수 있도록 하여 저렴하고 성능 좋은 컴퓨터를 구현하는 설계

명칭 위치 접근속도 기억용량 휘발성여부
레지스터 CPU 내부 가장 빠름 가장 적음 휘발성
캐시 CPU 내부 혹은 외부 빠름 적음 휘발성
메모리(주기억장치) CPU 외부 보통 보통 휘발성
보조기억장치 ( HDD, SDD ) CPU 직접 접근 불가 낮음 많음 비휘발성

하드디스크의 경우 데이터를 메모리로 이동시켜 접근가능하기 때문에 속도가 낮음

 

⚙️ 레지스터 (Register)


CPU가 요청을 처리하는 데 필요한 데이터를 일시적으로 저장하는 기억장치

CPU에 위치한 고속 메모리로 CPU가 바로 사용할 수 있는 데이터를 저장한다.

 

CPU는 자체적으로 데이터를 저장할 방법이 없으므로 메모리로 직접 데이터를 전송할 수 없음

    ◈ 연산을 위해서 반드시 레지스터를 거쳐야 하며, 이를 위해 레지스터는 특정 주소를 가리키거나 값을 읽어올 수 있음

 

프로세서에 위치한 고속 메모리로, 프로세스가 바로 사용할 수 있는 데이터(소량의 데이터, 처리 중인 중간 결과 등)를 담고 있는 영역

종류 설명
프로그램 계수기(PC, Program Counter) 다음에 실행할 명령어(instruction)의 주소를 가지고 있는 레지스터
누산기(AC, ACcumulator) 연산 결과 데이터를 일시적으로 저장하는 레지스터
명령어 레지스터(IR, Instruction Register) 현재 수행 중인 명령어를 가지고 있는 레지스터
상태 레지스터(SR, Status Register) 현재 CPU의 상태를 가지고 있는 레지스터
메모리 주소 레지스터(MAR, Memory Address Register) 메모리로부터 읽어오거나 메모리에 쓰기 위한 주소를 가지고 있는 레지스터
메모리 버퍼 레지스터(MBR, Memory Buffer Register) 메모리로부터 읽어온 데이터 또는 메모리에 써야할 데이터를 가지고 있는 레지스터
입출력 주소 레지스터(I/O AR, I/O Address Register) 입출력 장치에 따른 입출력 모듈의 주소를 가지고 있는 레지스터
입출력 버퍼 레지스터(I/O BR, I/O Buffer Register) 입출력 모듈과 프로세서 간의 데이터 교환을 위해 사용되는 레지스터

 

⛓ 캐시


캐시는 대용량의 메인 메모리 접근을 빠르게 하기 위해 CPU 칩 내부나 바로 옆에 탑재하는 작은 메모리이다.

 

🔹 캐시(cache)는 데이터를 미리 복사해 놓는 임시 저장소이자 빠른 장치와 느린 장치에서 속도 차이에 따른 병목 현상을 줄이기 위한 메모리를 말한다. 이를 통해 데이터를 접근하는 시간이 오래 걸리는 경우를 해결하고 무언가를 다시 계산하는 시간을 절약할 수 있다.

 

예를 들어, 프로세서가 아무리 빨라도 계산에 필요한 데이터를 얻기 위해서는 상대적으로 느린 메인메모리에 접근해야 하기 때문에 전체적인 시스템 성능 향상에 한계가 생긴다. 그래서 CPU 와 메인메모리 사이에 캐시를 두게 되었다. CPU -> 캐시-> 메인 메모리 따라서, 캐시는 CPU 와 메인 메모리 사이의 속도 간극을 줄여주는 완충재이며 버퍼라고 불리기도 한다.

 

캐시를 관통하는 중요한 개념은 데이터 지역성이다. 데이터 지역성을 활용하여 메인 메모리에 있는 데이터를 캐시 메모리에 불러와두고, CPU 가 상대적으로 접근 시간이 느린 메인 메모리 대신 캐시 메모리에 우선적으로 접근하게 하면 성능의 향상을 기대할 수 있다.

 

캐시에는 보통 가격이 비싸고 속도가 빠르지만 용량 대비 크기가 큰 SRAM 을 사용하고, 메인 메모리에는 가격이 싸고 속도가 느린 DRAM 을 사용한다. 이때, SRAM은 DRAM의 100배 이상으로 접근 속도가 빠르지만 구조가 복잡하여 공간을 많이 차지하므로 집적도를 높이기 어려워 가격이 비싸고 대용량으로 제작하기가 어렵다고 한다.

 

Processor

    프로세서는 컴퓨터 운영을 위해 기본적인 명령어들을 처리하고 반응하기 위한 논리회로. (Processor >= CPU, CPU는 디바이스가 해야 할 일을 총지휘하는 프로세서라고 보면 됨)

 

Core

    코어는 각종 연산을 하는 프로세서의 핵심 요소로 프로세서의 내부에는 코어를 제외하고 컨트롤러, 캐시 메모리 등이 있습니다. 1개의 코어를 싱글코어, 2개인 코어를 듀얼코어라고 하며, 코어 수가 많을수록 병렬 처리 효율이 증가합니다.

 

캐시의 종류

L은 Level을 의미합니다.

 

L1 캐시

 

🖋 L1 캐시는 일반적으로 코어안에 내장되어 데이터 사용/참조에 가장 먼저 사용된다. L1 캐시는 보통 8~64KB 정도의 용량으로 CPU가 가장 빠르게 접근하며, L1 캐시에서 데이터를 찾지 못하면 L2 캐시를 참조한다.

 

L2 캐시

 

🖋 L2 캐시는 L1와 비슷하지만 상대적으로 속도가 느리고, 64KB~4MB의 용량으로 상대적으로 많은 용량을 저장할 수 있다.

 

L3 캐시

 

🖋 L3 캐시도 동일한 원리로 작동하지만, 웬만한 프로세서에서는 L3 캐시 메모리를 사용하지 않는다. L3 캐시는 CPU 패키지 외부 ( 보통 메인보드 ) 에 위치한다. ( L2 캐시로 충분히 커버 가능)

 

캐시를 언제 사용하면 좋을까?

  1. 단순한 데이터(정보)
  2. 동일한 데이터를 반복적으로 제공해야하는 경우
  3. 데이터의 변경주기가 빈번하지 않고, 단위 처리 시간이 오래걸리는 경우
  4. 데이터의 최신화가 반드시 실시간으로 이뤄지지 않아도 서비스 품질에 영향을 거의 주지 않는 데이터

이렇게 캐시를 사용하면 서버간 불필요한 트래픽을 줄일 수 있으며, 그로 인해 웹 어플리케이션 서버의 부하가 감소된다. 또한 캐시에 저장된 데이터를 빠르게 읽어와 어플리케이션을 사용하는 고객에게 쾌적한 서비스 경험을 제공 할 수 있다.

 

📌 메인 메모리


주기억장치로 컴퓨터에서 수치, 명령, 자료 등을 기억하는 컴퓨터 하드웨어 장치이다.

 

메인 메모리의 구성

 

RAM(Random Access Memory)

    빠른 접근을 위해 데이터를 단기간 저장하는 구성 요소

      사용자가 요청하는 프로그램이나 문서를 스토리지 디스크에서 메모리로 로드하여 각각의 정보에 접근

      휘발성 기억 장치(전원 종료시 기억된 내용 삭제)

      어느 위치에서든 똑같은 속도로 접근하여 읽고 쓸 수 있음

      전원이 유지되는 동안 CPU의 연산 및 동작에 필요한 모든 내용 저장

 

ROM(Read Only Memory)

      컴퓨터에 지시사항을 영구히 저장하는 비휘발성 메모리(고정 기억 장치)

      변경 가능성이 희박한 기능 및 부품에 사용

      이러한 계층 구조는 일상 생활에서도 경험할 수 있다. 게임을 실행하다 보면 로딩 중이라는 메세지를 볼 수 있는데, 이는 하드디스크 또는 인터넷에서 데이터를 읽어 RAM으로 전송하는 과정이 아직 끝나지 않았음을 의미한다.

 

RAM을 주기억장치라고 표현하는 이유는?

 

실제 사용 중일 때 즉, 우리가 어떠한 프로그램을 컴퓨터에서 실행해서 그 컴퓨터가 동작을 하는 과정에서는 RAM과 CPU에서의 동작으로 이루어진다.

  1. 보조기억장치에서 주기억장치로 프로그램을 불러온다. (부팅 또는 로딩)
  2. 주기억장치에서 프로그램을 기억하고 CPU와 통신할 준비를 한다. (동작 및 구동)
  3. 주기억장치와 CPU에서 데이터를 주고받으며 프로그램을 구동한다. (동작 및 구동)

대략적으로 이런 메커니즘을 통해 PC에서 프로그램에 대한 동작이 이루어지게 된다. 따라서 컴퓨터 입장에서는 SSD 또는 HDD는 필요한 것을 꺼내는 창고와 같고, RAM은 작업실, CPU는 작업자와 같은 역할을 하게 된다. 이러한 RAM의 역할 덕분에 주기억장치라고 RAM을 표현할 수 있게된다.

 

🔗 하드 디스크 드라이브(Hard Disk Drive, HDD)


 

개념

  • 하드 디스크(Hard Disk), 하드 드라이브(Hard Drive), 고정 디스크(Fixed Drive)
  • 비휘발성, 순차접근이 가능한 컴퓨터의 보조 기억 장치
  • 비휘발성 데이터 저장소 가운데 가장 대중적이며 용량 대비 가격이 가장 저렴

작동 원리

  • 보호 케이스 내부의 플래터를 회전 → 플래터에 자기 패턴으로 정보 기록
  • 플래터 표면의 코팅된 자성체에 데이터 기록
  • 회전하는 플래터 위에 부상하는 입출력 헤드에 의해 자기적으로 데이터 기록 및 조회 가능

🔍 메모리 계층 구조의 필요성


1) 디코딩(명령어 해독 단계) 속도

🔹 CPU가 메모리에 접근할 때 컨트롤 신호를 복호화하여 해석해야 하는데 큰 메모리 용량을 사용할 경우 디코딩하는데 더 많은 시간이 소요됩니다. CPU가 빠르게 데이터에 접근하기 위해서는 더 작은 메모리를 사용해야 합니다.

2) 자주 쓰는 데이터는 계속 자주 쓰임(참조의 지역성)

🔹 큰 메모리를 사용한다 해도 그 메모리 안에 있는 모든 데이터를 고르게 접근하지 않는다. 자주 쓰이는 데이터는 계속 자주 쓰이고, 자주 쓰이지 않는 데이터는 계속 자주 쓰이지 않으며 자주 쓰이는 데이터는 전체 데이터의 일부이기 때문에 상위 메모리의 용량이 하위 메모리의 용량보다 적어도 된다.

 

즉, 자주 쓰이는 데이터는 전체 데이터 양에 비해 작은 양이므로 캐시는 메모리보다, 메모리는 하드디스크보다 더 작아도 됨

3) 경제성

  • 메모리 구조에서 상층에 속할수록 더 비쌈
  • 비싼 하드웨어는 꼭 필요한 만큼의 크기만 사용
  • 싼 하드웨어를 넉넉한 크기만큼 사용

📸 참조


https://velog.io/@steadygo247/%EB%A9%94%EB%AA%A8%EB%A6%AC-%EA%B3%84%EC%B8%B5%EA%B5%AC%EC%A1%B0
https://nayoungs.tistory.com/entry/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EA%B3%84%EC%B8%B5-%EA%B5%AC%EC%A1%B0Memory-Hierachy

https://c4u-rdav.tistory.com/88

https://ko.wikipedia.org/wiki/%EB%A9%94%EB%AA%A8%EB%A6%AC_%EA%B3%84%EC%B8%B5_%EA%B5%AC%EC%A1%B0