[코비] 3.2 메모리

최정윤·2023년 8월 25일
0

코비

목록 보기
10/38
post-custom-banner

3.2.1 메모리 계층

메모리 계층

  • 크기가 작을수록(상위계층) 속도가 빠르며 용량이 작다.
  1. 레지스터: CPU안에 있는 작은 메모리, 휘발성, 속도 가장 빠름, 기억 용량이 가장 적음
  2. 캐시: L1, L2 캐시를 지칭
  3. 주기억장치: 메모리 즉 RAM 지칭
  4. 보조기억장치: HDD, SDD 지칭

메모리 계층이 있는 이유?

  • 경제성과 캐시 때문

캐시

  • 데이터를 미리 복사해놓은 임시저장소
  • 빠른 장치와 느린 장치에서 속도 차이에 따른 병목 현상을 줄이기 위한 메모리
    • 메모리와 CPU 사이의 속도차이가 너무 커서 그 중간에 레지스터 계층을 두어 속도 차이를 해결한다.
    • 속도 차이를 위해 만든 계층을 캐싱 계층이라 한다.

지역성의 원리

  • 자유 사용하는 데이터를 설정하는 근거

1. 시간 지역성

  • 최근 사용한 데이터에 다시 접근하려는 특성

2. 공간 지역성

  • 최근 접근한 데이터를 이루고 있는 공간 혹은 그 가까운 공간에 접근하는 특성

캐시히트와 캐시미스

  • 캐시히트: 캐시에서 원하는 데이터를 찾은 것
  • 캐시미스: 해당 데이터가 캐시에 없다면 주 메모리로 가서 데이터를 찾아오는 것

1. 캐시매핑

  • 캐시가 히트되기 위해 매핑하는 방법
  • CPU의 레지스터와 주 메모리(RAM) 간에 데이터를 주고 받을 때를 기반으로 설명

2. 웹 브라우저의 캐시

  • 쿠키
    • 만료기한이 있는 키-값 저장소
  • 로컬 스토리지
    • 만료기한이 없는 키-값 저장소
    • 웹 브라우저를 닫아도 유지되고 도메인 단위로 저장, 생서
    • 클라이언트에서만 수정 가능
  • 세션 스토리지
    • 만료기한이 없는 키-값 저장소
    • 탭 단위로 세션 스토리지를 생성, 탭을 닫을 때 해당 데이터가 삭제
    • 클라이언트에서만 수정 가능

3. 데이터베이스의 캐싱 계층

  • 데이터베이스 위에 레디서 데이터 베이스 계층을 '캐싱 계층'으로 두어 성능을 향상

3.2.2 메모리 관리

  • 운영체제의 대표적인 할일 중 하나
  • 컴퓨터 내의 한정ㅇ된 메모리를 극한으로 활용하는 것

가상 메모리

  • 컴퓨터가 실제로 이용 가능한 메모리 자원을 추상화하여 사용자들에게 매우 큰 메모리로 보이게 만드는 것
  • 가상 메모리는 가상 주소와 실제 주소가 매핑되어 있음
  • 프로세스의 주소 정보가 들어있는 '페이지 테이블'로 관리

스와핑

  • 당장 사용하지 않는 영역을 하드디스크로 옯겨 필요할 때 다시 RAM으로 불러와 올리고, 사용하지 않으면 다시 하드디스크로 내림을 반복하여 RAM을 효과적으로 관리하는 것
  • 가상 메모리에는 존재하지만 실제 RAM에는 없는 데이터에 접근할 때 발생하는 페이지 폴트를 방지하기 위함

페이지 폴트

  • 프로세스의 주소 공간에는 존재하지만 지금 이 컴퓨터의 RAM에는 없는 데이터에 접근했을 경우 발생

스레싱

  • 메모리의 페이지 폴트율이 높은 것 -> 심각한 성능 저하를 초래
  • 메모리에 너무 많은 프로세스가 동시에 올라가면 스와핑이 많이 일어나서 발생
  • 페이지 폴트 발생 ▶️ CPU 이용률 낮아짐 ▶️ 더 많은 프로세스를 메모리에 올림 ▶️ 악순환 반복... => 스레싱 발생

운영체제에서 스레싱을 해결하는 법

1. 작업세트

  • 프로세스의 과거 사용 이력인 지역성을 통해 결정된 페이지 집합을 만들어서 미리 메모리에 로드

2. PFF

  • 페이지 폴트 빈도를 조절하는 방법
  • 상한선과 하한선을 만들어, 상한선을 도달하면 페이지를 늘리고 하한선에 도달하면 페이지를 줄임

메모리 할당

  • 시작 메모리 위치, 메모리의 할당 크기를 기반으로 할당

연속 할당

  • 프로세스를 순차적으로 공간에 할당하는 것
  • 고정 분할 방식: 메모리를 미리 나누어 관리
  • 가변 분할 방식: 매 시점 프로그램의 크기에 맞게 동적으로 메모리를 나눠 사용

불연속 할당

  • 페이지: 동일한 크기의 페이지 단위로 나누어 메모리의 서로 다른 위치에 프로세스를 할당
  • 세그멘테이션: 의미단위인 세그먼트로 나눈다.
  • 페이지드 세그멘테이션: 공유나 보안을 의미 단위의 세그먼트로 나누고, 물리적 메모리는 페이지로 나누는 것

페이지 교체 알고리즘

  • 페이지 교체 알고리즘을 기반으로 스와핑 발생

오프라인 알고리즘

  • 먼 미래에 참조되는 페이지와 현재 할당하는 페이지를 바꾸는 것

FIFO

  • 가장 먼저 온 페이지를 교체 영역에 먼저 놓는 방법

LRU

  • 참조가 가장 오래된 페이지를 바꾸는 것
  • 해시 테이블과 이중 연결 리스트로 구현

LFU

  • 가장 참조 횟수가 적은 페이지를 교체 (많이 사용되지 않은 것)

[참고자료]

profile
개발 기록장
post-custom-banner

0개의 댓글