메모리 계층

이태곤·2023년 9월 1일
0

Operating System

목록 보기
3/13
post-thumbnail

1. 메모리 계층

  • 계층구조: 메모리를 용량과 접근 속도에 따라 여러 계층으로 구분한다.

    1. 레지스터: CPU안에 있는 작은 메모리
      → 휘발성, 속도 가장 빠름, 용량 가장 작음
    2. 캐시: CPU안에 있는 L1, L2 캐시
      → 휘발성, 속도 빠름, 용량 작음
      • L1 캐시: CPU 칩안에 내장되어 데이터 사용 및 참조에 가장 먼저 사용
      • L2 캐시: CPU 회로판에 별도의 칩으로 내장되어 있으며, L1 캐시를 통해 원하는 데이터를 얻지 못하면 참조
    3. 주기억 장치: RAM (Random Access Memory)
      → 휘발성, 속도 보통, 용량 보통
    4. 보조기억 장치: HDD, SSD
      → 비휘발성, 속도 느림, 용량 큼
  • 계층이 존재하는 이유

    1. 빠른 접근속도와 처리속도: 자주 사용하는 데이터들을 속도가 더 빠르고 용량이 작은 캐시에 저장 → 작은 용량 속에서 더 빠르게 접근하여 더 빠르게 데이터 처리
    2. 자원의 효율적 사용: 자주 사용하는 데이터들을 빠른 메모리에, 비교적 사용이 적은 데이터들을 느린 메모리에 저장함으로써 자원을 효율적으로 사용
    3. 비용의 효율성: 피라미드의 형태로 상위계층으로 갈수록 빠르고 비싸며 용량이 작고 하위계층으로 갈수록 용량이 크고 가격이 저렴하다.
      • 입출력의 경제성 확보: 가격은 최소화 하면서 원하는 데이터에 빠른 접근속도와 대용량의 크기를 제공
      • 계층화 없이 레지스터 또는 캐시를 보조기억장치와 같이 고용량으로 구현하면 비용↑

2. 캐시

  • 자주 사용되는 데이터나 명령어를 미리 메모리에 복사하여 저장하는 임시 저장소이며, 빠른 장치와 느린 장치 간의 속도 차이로 인한 병목 현상을 줄이기 위해 사용

    • 병목현상: 어떤 시스템 내 데이터의 처리 속도가 지연됨에 따라 다음에 오는 데이터 처리가 지연되는 현상
  • 캐싱 계층: 속도 차이가 큰 두 개의 메모리 사이에서 이러한 속도 차이를 완화하기 위해 사용되는 메모리 계층 구조

    • CPU와 메모리 사이의 속도 차이가 크기 때문에 중간에 레지스터 계층을 둠으로써 이 속도 차이를 해결
      → CPU가 처리하는 속도 > 메모리
    • 캐시 메모리와 보조기억장치 간의 속도 차이가 크기 때문에 중간에 주기억장치를 캐싱 계층으로 둠으로써 이 속도 차이를 해결
  • 캐시 설정

    • Temporal locality: 최근에 접근 된 데이터 또는 명령어는 가까운 미래에 다시 액세스될 가능성이 높음
    • Spatial locality: 액세스된 데이터 또는 명령어와 인접한 데이터 또는 명령어가 가까운 미래에 액세스될 가능성이 높음
    • 예시 : i는 시간지역성, arr는 공간지역성
  • 캐시히트 & 캐시미스

    • 캐시히트: CPU가 데이터 또는 명령어를 요청하고 해당 데이터가 캐시 메모리에 이미 존재하는 경우
      → CPU 내부 버스를 기반으로 동작하기 때문에, 데이터를 빠르게 찾아 사용할 수 있어 시스템 성능을 향상
    • 캐시미스: CPU가 데이터 또는 명령어를 요청하고 해당 데이터가 캐시 메모리에 없어 메인 메모리로부터 데이터를 가져와야 하는 경우
      → 시스템 버스를 기반으로 동작하며, 데이터를 주 메모리에서 가져오는 데 추가적인 시간이 소요되어 시스템 성능 저하
  • 활용 I: 서버 앞단에 Nginx를 프록시 서버로 두어 캐싱 계층으로 사용

  • 활용 II: 클라이언트와 데이터베이스 사이에 Redis 데이터베이스를 캐싱 계층으로 사용

  • 활용 III: 웹 브라우저의 캐시로 쿠키, 세션 스토리지 및 로컬 스토리지를 활용한다.
    → 커스텀 정보 및 인증 모듈과 관련된 데이터를 저장하고, 추후 서버에 요청 시 자신을 나타내는 아이덴티티를 유지하거나 중복 요청을 방지하는 데 사용된다.

    • 쿠키: 서버에서 발급하는 데이터 조각으로 만료기한이 있는 Key-Value 저장소
      • 서버에서 만료 기한 설정
    • 세션 스토리지: 만료 기한이 없는 Key-Value 저장소로, 탭 단위로 세션을 생성하며 탭을 닫을 경우 해당 데이터가 삭제
      • 클라이언트에서만 수정 가능
      • HTML5를 지원하는 웹 브라우저에서 사용 가능
      • 5MB
    • 로컬 스토리지: 만료 기한이 없는 Key-Value 저장소로, 도메인 단위로 데이터를 생성 및 저장하며 브라우저를 닫아도 유지
      • 클라이언트에서만 수정 가능
      • HTML5를 지원하는 웹 브라우저에서 사용 가능
      • 10MB

3. 캐시매핑

  • Block: 캐시에 로드될 때 공간지역성에 의해서 인접한 영역까지 묶어서 저장하는 단위

  • Tag: 메인 메모리의 몇번째 Block인지 알려준다.

  • 직접매핑(Direct Mapping)

    • 메인 메모리를 일정한 크기의 블록으로 나누고, 각 블록을 캐시 내에서 고정된 위치로 매핑하는 방식
    • 예를 들어, 캐시 메모리가 10개의 슬롯을 가지고 있다면 메인 메모리를 10개의 서로 다른 블록으로 나누고 캐시 슬롯 중 하나에만 매핑
    • 특정 메모리 블록을 캐시 슬롯에 직접 매핑시키므로 캐시 미스시에 탐색 시간이 적다.
    • 직접 매핑은 적중율이 낮을 수 있으며, 이로 인해 캐시 미스가 자주 발생하여 Swapping이 빈번하게 일어나 성능이 떨어질 수 있다.
  • 연관매핑(Full Associative Mapping)
    • 캐시 슬롯의 위치에 영역에 구애받지 않고 원하는 메모리값을 저장
    • 캐시 슬롯을 사용할 때 어떤 구역에 해당하는 것이 아니므로 적중율이 비교적 높을 수 있다.
    • 검색 시 메모리의 모든 영역을 병렬적으로 검색해야 하므로 검색 비용이 높아질 수 있다.
  • 집합 - 연관매핑(Set Associative Mapping)
    • 직접 매핑과 연관 매핑의 장점을 결합한 방식으로, 캐시를 여러 그룹으로 나누고, 각 그룹 내에서는 데이터가 연관 매핑 방식으로 저장된다.
      → 직접 매핑보다 유연한 매핑 구조
    • 예를 들어 캐시 메모리는 10, 메인 메모리는 100이라면 메인 메모리의 1 ~ 50은 캐시 1 ~ 5, 메인 메모리의 51 ~ 100은 캐시 6 ~ 10에 자유롭게 Mapping 하는 방법
    • 캐시의 일부 그룹과 메모리의 특정 블록이 매핑되어 있으므로 탐색 비용과 시간 감소
    • 연관매핑의 특징을 가짐으로써 Swapping을 완화시킬 수 있다.

0개의 댓글