메모리

김하밍·2023년 7월 15일

CS 스터디

목록 보기
7/11

메모리
컴퓨터 시스템에서 데이터를 저장하고 읽고 쓰는 장소

메모리는 데이터와 명령어를 저장하는 장소로, CPU가 필요한 데이터와 명령어에 접근하여 처리할 수 있도록 제공됩니다.

CPU는 메모리에 올라와 있는 프로그램의 명령어들을 실행할 뿐입니다. 메모리에 실행할 것이 없으면 파일로 내려가서 찾아옵니다.

즉, 당장 빠르게 사용할 일부 데이터들을 메모리에 저장해놓기 때문에 어떤 데이터들을 메모리에 올려둘 것인지 생각해봐야 합니다.

메모리 계층


  • 메모리를 필요에 따라 여러가지 종류로 나누어 둡니다.

  • 레지스터
    : CPU 안에 있는 작은 메모리, 휘발성, 가장 빠름, 용량이 가장 작습니다.

  • 캐시 (L1, L2)
    : 휘발성, 레지스터 다음으로 빠름, 용량이 작습니다. L3 캐시도 존재합니다.
    CPU와 주 메모리 사이에 위치한 임시 저장 공간입니다.
    주 메모리로부터 데이터를 미리 가져와 CPU가 빠르게 액세스할 수 있습니다.

  • 주기억장치 (RAM)
    : 휘발성, 속도 보통, 용량 보통
    CPU와의 빠른 데이터 교환을 지원하기 위해 매우 빠른 액세스 속도를 가지고 있습니다.
    컴퓨터 시스템에서 일반적으로 사용되는 메모리 유형입니다.

  • 보조기억장치 (스토리지)
    : 비휘발성, 속도 느림, 용량 큼
    일반적으로, 하드 디스크 드라이브(HDD)와 SSD(Solid State Drive)가 저장장치로 사용됩니다.
    주 메모리나 캐시보다 액세스 속도가 느리지만 데이터를 영구적으로 보존하는 역할을 합니다.

캐시 - 히트와 미스


캐시
캐시는 데이터를 미리 복사해 두는 임시 저장소 역할을 합니다. 메모리의 속도가 느리고, 레지스터의 용량이 작아서 생기는 문제를 중간에서 줄여주는 역할을 합니다.

캐시 역시 메모리에 비하면 크기가 작으므로, 어떤 값을 캐시에 보관하고 어떤 값을 비울지 전략적으로 접근해야 합니다.

캐시를 직접 설정할 때는, 자주 사용하는 데이터를 기반으로 설정해야 합니다. 이의 근거가 되는 개념을 지역성 (locality)라고 합니다. 지역성에는 시간 지역성(temporal locality)과 공간 지역성 (spatial locality)로 나뉩니다.

  • 시간 지역성

    • 가장 최근 사용한 데이터에 다시 접근하려는 특성
    • 예: for문을 사용하는 경우 변수 i에 반복적으로 접근하게 된다.
  • 공간 지역성

    • 최근 접근한 데이터를 이루고 있는 공간이나 그 가까운 공간에 접근하려는 특성
    • 예: for문을 통해 배열 ard의 원소에 접근하는 경우

캐시에 원하는 내용이 들어 있는 경우 캐시 히트 라고 하며,
내용이 별로 없는 경우를 캐시 미스라고 합니다.

가상 메모리


운영체제의 역할 중 하나인 메모리 관리 방법의 하나로, 컴퓨터에게 주어진 한정된 메모리를 효율적으로 사용하는 방법입니다.

  • 실제 메모리보다 사용 가능한 메모리 크키가 훨씬 크게 느껴지도록 하는 기법
  • 사용자는 가상 메모리 주소를 통해 메모리에 접근하면, 해당 주소는 실제 메모리 주소로 변환되어 사용됩니다.
  • 가상 메모리 주소 - 실제 메모리 주소 변환은 '페이지 테이블'을 통해 이루어집니다.

스와핑

  • 가상 메모리에는 존재하지만 실제 메모리 (RAM)에는 현재 데이터나 명령어 코드가 없는 경우, 페이지 폴트가 발생합니다.
  • 이를 방지하기 위해 가장 덜 사용할 것 같은 영역을 스토리지에 옮겨 놓고, 만약 해당 내용을 필요로 하면 다시 RAM으로 올리는 작업을 스와핑이라고 부릅니다.

페이지 폴트


페이지 폴트

  • 가상 메모리에는 존재하지만 실제 메모리(RAM)에는 없는 데이터에 접근하는 경우 페이지 폴트가 발생합니다. (캐시미스와 비슷한 개념)

스레싱

  • 페이지 폴트율이 높은 현상을 의미합니다.
  • 발생하면 안되는 상황입니다. CPU는 놀고 있게 되고, 메모리와 스토리지는 계속 데이터가 올라갔다 내려갔다 반복하며 불필요한 리소스 (시간)가 소모됩니다.

메모리 단편화

  • 내부 단편화: 메모리를 나눈 크기보다 프로그램이 크기가 작을 때, 해당 프로그램이 들어가고 나도 메모리 공간이 남게 되는 현상
  • 외부 단편화: 메모리를 나눈 크기보다 프로그램이 크기가 클 때, 해당 메모리 공간이 남게 되는 현상

메모리 할당

  • 시작 메모리 위치, 메모리의 할당 크기를 기반으로 연속 할당과 불연속 할당으로 나뉩니다.

  • 연속 할당 - 고정 분할 방식: 메모리를 미리 나누어 관리하는 방식, 융통성이 없고 내부 단편화가 발생하는 단점이 있습니다.

  • 연속 할당 - 가변 분할 방식: 매 시점 프로그램의 크기에 맞게 동적으로 메모리를 나눠 사용하는 방식, 내부 단편화는 발생하지 않으나, 외부 단편화는 발생할 수 있습니다.

  • 불연속 할당 - 페이징: 동일한 크기의 페이지 단위로 나누어 관리하는 방법. 내부 단편화가 생기게 되며, 주소 변환이 복잡해집니다.

  • 불연속 할당 - 세그멘테이션: 프로세스를 의미 단위인 세그먼트로 나누어 관리하는 방법. 공유와 보안 높아지지만, 홀 크기가 균일하지 않다는 단점이 있습니다.

  • 불연속 할당 - 페이지드 세그멘테이션: 공유나 보안을 의미 단위인 세그먼트로 나누고, 물리적 메모리는 동일한 크기의 페이지 단위로 관리하는 방법.

페이지 교체 알고리즘

메모리 스와핑을 가장 덜 일어나도록 하는 다양한 알고리즘이 존재합니다.

  • 오프라인 알고리즘: 먼 미래에 사용되는 페이지와 현재 할당하는 페이지를 바꾸는 방법.
    미래에 사용할 프로세스를 모르므로, 현실성이 떨어집니다.
    - 사용할 수 없는 알고리즘이지만, 주로 다른 알고리즘과의 성능 비교의 기준점이 됩니다.
  • FIFO (First In First Out)
    - 먼저 온 페이지를 먼저 내보내는 것
    - 똑똑한 알고리즘은 아닙니다.
  • LRU (Least Recently Used)
    • 가장 덜 최근에 사용한 페이지를 우선하여 내보내는 것
      • 비교적 효율적인 페이징 방법이지만, 오래된 정도를 파악하기 위하여 각 페이지마다 계수기, 스택을 두어야 하는 문제점이 있습니다.

면접 예상 질문

1. 메모리 계층의 순서

속도가 빠르고, 저장 용량이 작은 순서

  • 레지스터
  • 캐시(L1, L2)
  • 메모리(RAM)/ 주기억장치
  • 저장장치(HDD, SSD)/ 보조기억장치

2. 캐시(Cache)란 ?

프로그램이 수행될 때 나타나는 지역성을 이용하여 메모리나 디스크에서 사용되었던 내용을 특별히 빠르게 접근할 수 있는 곳에 보관하고 관리함으로써 이 내용을 다시 필요로 할 때 보다 빠르게 참조하도록 하는 것입니다.

3. 캐시히트와 캐시미스란 ?

캐시히트
캐시 메모리에 찾는 데이터가 존재할 때

캐시미스
캐시 메모리에 찾는 데이터가 존재하지 않을 때를 나타내며, 메모리 저장소로부터 필요한 데이터를 찾아 캐시 메모리 로드합니다.

4. 가상 메모리 (Virtual Memory)란 ?

프로세스에서 사용하는 가상 메모리 주소와 실제 물리적 메모리 주소는 다를 수 있습니다. 따라서 메모리 == 실제 메모리 + 가상 메모리라고 생각하면 안됩니다.
메모리가 부족해서 가상 메모리를 사용하는 것은 맞지만, 가상 메모리를 쓴다고 실제 메모리처럼 사용하는 것은 아닙니다.
실제 메모리 안에 공간이 부족하면, 현재 사용하고 있지 않은 데이터를 빼내어 가상 메모리에 저장해두고, 실제 메모리에선 처리만 하게 하는 것이 가상 메모리의 역할입니다.

즉, 가상 메모리가 하는 일은 실제 메모리에 놀고 있는 공간이 없게 계속 일을 시키는 것 입니다.

5. 페이징의 장점과 단점은 ?

페이징은 동일한 크기의 페이지 단위로 나누어 메모리의 서로 다른 위치에 프로세스를 할당합니다. 홀의 크기가 균일하지 않은 문제가 없어지지만, 주소 변환이 복잡해집니다.

6. 세그먼테이션(Segmentation) 이란 ?

사용자/프로그래머 관점의 메모리 관리 기법. 페이징 기법은 같은 크기의 페이지를 갖는 것 과는 다르게 논리적 단위(세그먼트)로 나누므로 미리 분할하는 것이 아니고 메모리 사용할 시점에 할당됩니다.

7. 페이지 교체 알고리즘이란 ?

페이징 기법으로 메모리를 관리하는 운영체제에서 필요한 페이지가 주기억장치에 적재되지 않았을 시(페이징 부재시) 어떤 페이지 프레임을 선택해 교체할 것인지 결정하는 방법을 페이지 교체 알고리즘이라고 합니다.

FIFO(first in first out)
메모리가 할당된 순서대로 페이지를 교체

LRU(least-recently-used)
최근에 가장 오랫동안 사용하지 않은 페이지를 교체
문제점: 오래된 것을 파악하기 위해 각 페이지마다 계수기, 스택을 두어야 합니다.

LFU(least-frequently-used)
참조 횟수가 가장 작은 페이지를 교체

MFU(most-frequently-used)
LFU 알고리즘과 반대로, 참조 횟수가 가장 많은 페이지를 교체

8. 주기억장치란 ?

주기억장치의 종류에는 크게 RAM과 ROM 두 가지가 있고, 메모리 라는 용어는 그 중 RAM을 지칭하는 경우가 많습니다.

컴퓨터 내부에서 현재 CPU가 처리하고 있는 내용을 저장하고 있는 기억장치입니다.
비교적 용량이 크고 처리 속도가 빠릅니다.
CPU의 명령에 의해 기억된 장소에 직접 접근하여 읽고 쓸 수가 있습니다.

profile
나만의 언어로 기록하며 성장하기 !

1개의 댓글

comment-user-thumbnail
2023년 7월 17일

잘 읽었습니다 😀

답글 달기