TIL 240320

hyeo71·2024년 3월 20일
0

2024 내배캠 AI 트랙

목록 보기
56/108

메모리 심화

캐시

데이터를 미리 복사해 놓는 임시 저장소

  • 빠른 장치와 느린 장치에서 속도 차이에 따른 병목 현상을 줄이기 위한 메모리
  • 데이터 접근이 오래 걸리는 시간을 절약

-> 계층과 계층 사이에서 속도 차이를 해결하기 위한 임시 저장소

레지스터: 메모리와 CPU 사이의 속도 차이를 해결
주 기억 장치: 캐시 메모리와 보조기억장치 사이의 속도 차이를 해결

지역성

자주 사용되는 데이터의 특성
캐시를 직접 설정할 때 자주 사용되는 데이터를 기반으로 설정하는 특성

  1. 시간 지역성: 최근 사용한 데이터에 다시 접근하려는 특성
  2. 공간 지역성: 최근 접근한 데이터를 이루고 있는 공간이나 그에 가까운 공간에 접근하려는 특성

캐시히트 & 캐시미스

캐시히트

캐시에서 원하는 데이터를 찾는 것

  • CPU 내부버스를 기반으로 작동하여 빠름
  • 제어장치를 거쳐 가져옴

캐시미스

캐시에 원하는 데이터가 없어서 주메모리로 가서 데이터를 찾는 것

  • 시스템 버스를 기반으로 작동하여 느림

캐시매핑

캐시가 히트되기 위해 매핑되는 방법

  1. 직접 매핑

    • 메모리(1~100), 캐시(1~10) / 1:1~10, 2:1~20처럼 직접 매핑
    • 처리는 빠르지만 충돌 발생이 찾다
  2. 연관 매핑

    • 순서를 맞추지 않고 관련 있는 캐시와 메모리를 매핑
    • 충돌이 적지만 속도가 느림
  3. 집합 연관 매핑

    • 직접 매핑 + 연관 매핑
    • 순서는 일치
    • 집합을 사용하여 저장하여 블록화하여 검색이 효율적

메모리 할당

메모리에 프로그램을 할당할 때 시작 메모리 위치, 메모리 할당 크기를 기반으로 할당

  • 연속 할당
  • 불연속 할당

연속 할당

메모리에 연속적으로 공간을 할당하는 것

  1. 고정 분할 방식

    메모리를 미리 나누어 관리하는 방식

  • 내부 단편화 발생

  1. 가변 분할 방식

    매 시점 프로그램 크기에 맞게 동적으로 메모리를 나눠서 사용하는 방식

    2-1. 최초적합: 위에서부터 바로 보이는 공간에 할당
    2-2. 최적적합: 가장 크기에 맞는 공간부터 채우고 나머지 할당
    2-3. 최악적합: 가장 크기가 큰 공간부터 채우고 나머지 할당

  • 외부 단편화 발생

내부 단편화
-> 메모리를 나눈 크기보다 프로그램이 작아서 들어가지 못하는 공간이 많이 발생하는 현상

외부 단편화
-> 메모리를 나눈 크기보다 프로그램이 커서 들어가지 못하는 공간이 많이 발생하는 현상


불연속 할당

운영체제는 여러개의 작업을 효율적으로 수행하기 위해 불연속 할당을 사용

  • 단점
    - 메모리 할당, 헤제 시 오버헤드가 발생할 수 있음
    - 메모리 공간이 분산되어 있어 프로세스가 불연속 공간에 할당될 경우 페이지 교체 등 작업이 복잡해질 수 있음

  • 운영체제에서 불연속 할당을 사용하는 방법
    - 링크드 리스트: 공간 낭비가 발생할 수 있음
    - 비트맵: 블록을 0, 1(사용 가능, 불가능)로 표시
    - 페이지 테이블: 가상 메모리 시스템에서 사용하는 방법
    물리적인 주소 공간을 페이지로 나누어 사용
    프로세스틑 각각 페이지 테이블을 가지고 이는 물리적인 주소와 가상 주소를 매핑하는 역할
    위 두가지 방법보다 효율적
    가상 메모리를 구현하는데 필요한 기술

기법

  1. 페이징

    • 동일 크기의 페이지 단위를 나눠 메모리의 서로 다른 위치에 프로세스 할당
    • 빈 데이터의 크기가 균일하지 않을 문제는 없어지지만 주소 변환이 복잡
  2. 세그멘테이션

    • 의미 단위인 세그먼트로 나누는 방식
    • 코드, 데이터, 함수 단위로 나눌 수 있음
    • 공유와 보안 측면에서 좋음
    • 빈 데이터의 크기가 균일하지 않음
  3. 페이지드 세그멘테이션

    • 공유, 보안은 세그먼트로 나눔
    • 물리적 메모리는 페이지로 나눔

페이지 교체 알고리즘

메모리 내에 저장된 페이지 중에서 어떤 페이지를 교체할지 결정하는 알고리즘

  • 물리적인 공간이 한정되어 있을 때 페이지 부재가 발생하는 상황에서 새로운 페이지를 적재하기 위해 기존 페이지 중 어떤 페이지를 제거할지 결정하는 역할

  1. 오프라인 알고리즘

    먼 미래에 참조되는 페이지와 현재 할당하는 페이지를 바꾸는 알고리즘

  • 입력 데이터가 모두 주어진 상태에서 실행되는 알고리즘
  • 실행 중 새로운 입력이 들어오지 않음
  • 미래에 사용되는 프로세스는 알 수 없음
  • 메모리 할당에서 사용할 수 없는 알고리즘이지만 다른 알고리즘과의 성능 비교에 대한 기준을 제공

ex) 정렬 알고리즘


  1. 시간 기반 알고리즘
  • FIFO (First In First Out)
    - 새로운 데이터가 들어오면 가장 오래전에 들어온 데이터를 제거하고 새로운 데이터를 추가
    - 오래된 데이터가 최근에 데이터와 비슷한 경우에 성능이 저하될 수 있음

  • LRU (Least Recently Used)
    - 참조가 가장 오래된 페이지를 교체하는 방법
    - 캐시 히트율을 높일 수 있음
    - 데이터를 저장하는데 추가적인 비용이 듬

  • NUR (Not Used Recently) or Clock 알고리즘
    - 최근 사용여부를 0, 1로 표시하여 교체하는 방법 (1이 참조)
    - 시계방향으로 돌면서 0을 찾는 순간 프로세스 교체
    LRU: 데이터를 사용할 때마다 최근 사용 시간을 갱신
    NUR: 사용하지 않은 데이터를 주기적으로 스캔, 최근 사용 여부를 판단


  1. 빈도 기반 알고리즘
  • LFU (Least Frequently Used)
    - 가장 참소 횟수가 적은 페이지를 교체
    - 사용 빈도가 낮은 데이터를 제거 -> 캐시 히트율을 높임
    - 일부 데이터가 빈번하게 사용되는 경우 성능 저하

0개의 댓글