메모리

임찬형·2022년 6월 28일

CS 공부

목록 보기
8/19

메모리 계층

보조기억장치 - 주기억장치 - 캐시 - 레지스터

메모리속도용량예시특징
보조기억장치느림많음HDD, SDD비휘발성
주기억장치보통보통RAM휘발성
캐시빠름적음L1, L2, L3캐시휘발성
레지스터가장 빠름가장 적음CPU 안의 작은 메모리휘발성

캐시

데이터를 미리 복사해 놓는 임시 저장소.
빠른 장치와 느린 장치의 속도 차이에 따른 병목 현상을 줄이기 위한 메모리.

  • 캐싱 계층 - 메모리와 CPU 속도 차이가 매우 크므로 속도 차이를 해결하기 위해 존재

  • 지역성의 원리 - 캐시 설정 시 자주 사용하는 데이터를 기반으로 설정하는 원리.

  1. 시간 지역성: 최근 사용한 데이터에 다시 접근하려는 특성
    ex) for(i = 0; ~ ) 포문에서 i에 계속해서 접근하는 경우

  2. 공간 지역성: 최근 접근한 데이터를 이루는 공간이나 그 가까운 공간에 접근하는 특성
    ex) 배열 순회 포문에서 배열에 연속적으로 접근

  • 캐시히트 - 캐시에서 원하는 데이터를 찾은 경우

  • 캐시미스 - 해당 데이터가 캐시에 없을 경우 (주 메모리에서 찾아옴)

  • 캐시매핑 - CPU 레지스터와 RAM 간에 데이터 주고받을 때 캐시가 히트되기 위해 매핑하는 방법. 레지스터는 메모리에 비해 매우 작으므로 매핑이 중요함.

  1. 직접 매핑: 메모리 1~100, 캐시 1~10이면 1: 1~10, 2: 1~20 처럼 직접 매핑. 처리가 빠르나 충돌이 잦음.

  2. 연관 매핑: 순서를 일치시키지 않고 매핑. 충돌이 적지만 탐색 시간이 길다.

  3. 집합 연관 매핑: 위 두 방법을 합한 것. 순서는 일치시키지만 집합을 두어 저장.

웹 브라우저의 캐시

  • 쿠키 - 만료 기한이 있는 키-값 저장소. 4KB까지 저장 가능.
  • 로컬 스토리지 - 만료 기한이 없는 키-값 저장소. 10MB까지 저장 가능. 웹 브라우저 닫아도 유지되며 도메인 단위로 저장 및 생성.
  • 세션 스토리지 - 만료 기한이 없는 키-값 저장소. 5MB까지 저장 가능. 탭 단위로 생성하며 탭 닫으면 삭제.

메모리 관리

가상 메모리

실제 사용 가능한 메모리를 추상화하여 사용자에게 무제한의 메모리를 가진 것처럼 보이도록 함.

실제 주소(physical address)와 가상 주소(logical address)를 MMU를 통해 매핑하고 페이지 테이블로 관리하여 사용함. 이 때 TLB(메모리와 CPU 사이 일종의 캐시)를 사용하여 성능 향상.

  • 스와핑 - 가상 메모리에는 존재하지만 RAM에는 없는 데이터나 코드에 접근할 경우 Page fault 발생. 이를 방지하기 위해 사용하지 않는 영역을 하드디스크로 옮기고 필요할 때 RAM으로 불러오고 반복하며 효과적으로 관리하는 방법.

  • 페이지 폴트 - 프로세스 주소 공간에는 존재하지만 RAM에는 없는 데이터에 접근하면 발생.

  1. CPU가 invalid 상태의 페이지에 접근하면 Trap을 발생시켜 운영체제에 알림.
  2. 운영체제가 CPU 동작을 잠시 멈춤.
  3. 운영체제가 페이지 테이블을 확인하여 가상 메모리에 페이지 있는지 확인 후 없으면 프로세스 중단 후 현재 물리 메모리에 비어 있는 프레임 있는지 확인. 물리 메모리에도 없다면 스와핑.
  4. 비어 있는 프레임에 페이지 로드 후 테이블 최신화
  5. CPU 재시작

스레싱(Thrashing)

메모리의 페이지 폴트율이 높은 것 - 심각한 성능 저하

메모리에 너무 많은 프로세스 올라감 - 스와핑 자주 발생 - CPU 이용률 저하 - 더 많은 프로세스 올림 악순환.

해결 방법: 메모리 크기를 늘려 스와핑을 줄임. HDD를 SDD로 바꾸어도 좋음.

메모리 할당

  • 연속 할당 - 메모리에 연속적으로 공간을 할당.
  1. 고정 분할 방식: 메모리 미리 나누어 할당. 내부 단편화 발생 가능
  2. 가변 분할 방식: 매 시점 동적으로 메모리 나누어 할당. 외부 단편화 발생 가능.

+) 내부 단편화: 메모리 나눈 크기보다 프로그램 작아 들어가지 못함
ex)100MB 공간에 각각 10MB, 20MB, 30MB, 40MB 프로세스가 존재. 30MB 프로세스 끝난 후 그자리에 20MB 프로세스가 들어가고, 10MB의 작은 공간이 남음 (적은 크기의 잔여 메모리 발생)

추가) 페이징 기법을 사용할 경우 내부 단편화의 비중이 커진다.
(페이지 1024byte인데 프로세스가 512byte를 요구하면 512byte만큼 내부 단편화)

+) 외부 단편화: 메모리 나눈 크기보다 프로그램이 커서 들어가지 못함.
ex) 100MB 공간에 10MB, 20MB, 30MB, 40MB 프로세스가 존재하다 20, 40 프로세스가 종료됨. 다음 50MB 프로세스가 들어가려 하지만 60MB 공간이 남았음에도 불구하고 순차적이어서 들어가지 못함.

  • 불연속 할당 - 메모리를 동일한 크기인 페이지로 나누고 프로그램마다 페이지 테이블을 두어 메모리에 프로그램을 할당.

페이지 교체 알고리즘

  1. FIFO - 가장 먼저 온 페이지부터 교체
  2. LRU(Least Recently Used) - 참조가 가장 오래된 페이지부터 교체
  3. LFU(Least Frequently Used) - 참조 횟수가 적은 페이지부터 교체
  4. NUR(Not Used Recently) - clock 알고리즘. 1은 최근 참조 0은 참조X 비트를 두고 시계 방향으로 돌며 0을 찾음

0개의 댓글