3.2 메모리

·2023년 9월 17일
0

CS

목록 보기
9/23

3.2.1 메모리 계층

레지스터, 캐시, 메모리, 저장장치로 구성
위로 갈수록 빠르고 비용이 높으며, 아래로 갈수록 용량이 크다

  • 레지스터 : CPU 안에 있는 작은 메모리
  • 캐시 : L1, L2 캐시를 지칭
  • 주기억장치 : RAM을 가리킴
  • 보조기억장치 : HDD, SSD

캐시

  • 자주 사용하는 데이터를 임시로 저장해 놓은 장소
  • 빠른 장치(CPU)와 느린 장치(메모리)에서 속도 차이에 따른 병목 현상을 줄이기 위한 메모리
  • 첫 작업 이후에 이 데이터에 대한 요청이 있을 경우, 데이터의 기본 저장 공간에 접근할 때보다 더 빠르게 요청을 처리
  • 캐싱을 사용하면 이전에 검색하거나 계산한 데이터를 효율적으로 재사용
  • 단점 : 비용이 많이 든다

지역성의 원리
캐시에 저장 할 수 있는 데이터의 양은 많지 않기 때문에, 자주 사용되는 데이터를 넣어줘야 한다. 이때 근거가 되는 것은 지역성이다

  • 시간 지역성
    • 특정 데이터가 한번 참조된 경우, 가까운 미래에 또 한번 참조될 가능성이 높은 것
  • 공간 지역성
    • 특정 데이터와 인접한 주소의 데이터가 참조될 가능성이 높은 것

캐시 히트와 캐시 미스

캐시 히트 : 캐시에서 원하는 데이터를 찾은 경우
캐시 미스 : 원하는 데이터가 캐시에 없는 경우 주 메모리에 가서 데이터를 찾아오는 것

캐시매핑

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

  • 직접 매핑(direected mapping)

    • 주기억장치의 블록들이 지정된 한 개의 캐시 라인으로만 매핑
    • 장점 : 간단하고 구현 비용 적게 듬
    • 단점 : 적중률이 낮음
  • 연관 매핑(associative mapping)

    • 순서를 일치시키지 않고 관련 있는 캐시와 메모리를 매핑
    • 장점 : 직접 매핑의 단점을 보완. 적중률이 높음
    • 단점 : 모든 태그들을 병렬로 검사하기 위한 복잡한 회로가 필요. 비용이 많이 든다.
  • 집합 연관 매핑(set associative mapping)

    • 직접 매핑과 연관 매핑의 장점을 합침
    • 순서는 일치시키지만 집합을 두어 저장. 블록화되어 검색 좀 더 효율적
    • 적중률 : 직접 매핑 < 집합 연관 매핑 < 연관 매핑

웹 브라우저의 캐시

  • 사용자의 커스텀한 정보나 인증 모듈 관련 사항들을 웹 브라우저에 저장해 추후 서버에 요청할 때 자신을 나타내는 아이덴티티나 중복 요청 방지를 위해 쓰임
  • 대표적 캐시 : 쿠키, 로컬 스토리지, 세션 스토리지

1. 쿠키

  • 만료 기한이 있는 키-값 저장소
  • HTTP의 일종으로 서버가 사용자 웹 브라우저 즉 로컬에 저장하는 데이터
  • 일시적으로 필요한 가벼운 데이터 저장이 필요할 때(ex. 로그인 자동 완성, 오늘 더 이상 창을 보지 않음 팝업 등)

2. 로컬 스토리지

  • 만료 기한이 없는 키-값 저장소
  • 브라우저를 닫아도 유지
  • 도메인 단위로 저장. 생성
  • 지속적으로 필요한 데이터 저장이 필요할 때(ex. 자동 로그인)

3. 세션 스토리지

  • 만료 기한이 없는 키-값 저장소
  • 탭을 닫을 때 해당 데이터 삭제
  • 탭 단위로 생성
  • 일시적으로 필요한 데이터 저장이 필요할 때(ex. 일회성 로그인, 입력 폼 저장, 비로그인 장바구니)

3.2.2 메모리 관리

가상 메모리(virtual memory)

  • 메모리 관리 기법의 하나. 컴퓨터가 실제 이용 가능한 메모리 자원을 추상화하여 매우 큰 메모리로 보이게 만드는 것
  • 프로세스의 사용하는 부분만 메모리에 올리고, 나머지는 디스크에 보관
  • 가상 주소는 메모리관리장치(MMU)에 의해 실제 주소로 변환. -> 실제 주소 의식할 필요 없기 프로그램 구축 가능
  • 대표적 가상 메모리 기법 : 페이징(Paging), 세그멘테이션(Segmentation)

스와핑

  • 가상 메모리에는 존재하지만 실제 메모리 RAM에는 존재하지 않을 경우 페이지 폴트 발생.
  • 이때 메모리에서 당장 사용하지 않는 영역을 하드디스크로 옮기고 하드디스크의 일부분을 마치 메모리처럼 불러와 쓰는 것

페이지 폴트(page fault)

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

페이지 폴트 작동 방식
1. CPU는 물리 메모리를 확인해 해당 페이지가 없다면 트랩을 발생해 운영체제에게 알림
2. 운영체제는 CPU의 동작을 잠시 멈춤
3. 운영체제는 페이지 테이블을 확인해 가상 메모리에 페이지가 존재하는지 확인. 없다면 프로세스를 중단.
4. 페이지폴트이면, 현재 물리 메모리에 비어있는 프레임(Free Frame)이 있는지 찾는다.
5. 비어있는 프레임에 해당 페이지를 로드하고, 페이지 테이블을 최신화 한다.
6. 중단되었던 CPU 다시 시작.

스레싱(thrashing)

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

    페이지 폴트 발생 -> CPU 이용률 낮아짐 -> 운영체제 : "CPU 한가하니? 프로세스 더 올려줄게" -> 악순환 반복되며 스레싱 발생

  • 해결 방법

    • 메모리 늘리기
    • HDD 사용 시 HDD를 SSD로 바꾸기
    • 운영체제적 방법 : 작업 세트, PFF

작업 세트(working set)

  • 프로세스의 과거 사용 이력인 지역성을 통해 결정된 페이지 집합을 만들어 미리 메모리에 로드하는 방법. 탐색 비용과 스와핑 줄일 수 있음

PFF(Page Fault Frequency)

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

메모리 할당

  • 메모리에 프로그램을 할당할 때 메모리 위치, 메모리의 할당 크기를 기반으로 할당
  • 연속 할당불연속 할당

연속 할당

  • 메모리에 연속적으로 공간을 할당하는 것
    A, B, C가 순차적으로 공간에 할당되었다. 이는 메모리를 미리 나누어 관리하는 고정 분할 방식과 매 시점 프로그램의 크기에 맞게 메모리를 분할하여 사용하는 가변 분할 방식이 있다.

고정 분할 방식

  • 메모리를 미리 나누어 관리하는 방식.
  • 미리 나뉘어 있어 융통성이 없음
  • 내부 단편화 발생 : 메모리를 나눈 크기보다 프로그램이 작아 들어가지 못하는 공간이 많이 발생하는 현상.

가변 분할 방식

  • 매 시점 프로그램의 크기에 맞게 동적으로 메모리를 나눠 사용
  • 내부단편화 발생x, 외부 단편화는 발생할 수 있음
  • 외부 단편화 : 메모리를 나눈 크기보다 프로그램이 커서 들어가지 못하는 공간이 많이 발생하는 현상. 예를 들어 45,55 공간이 있는데 프로그램이 70이어서 들어가지 못함
  • 최초적합(first fit), 최적적합(best fit), 최악적합(worst fit)

불연속 할당

  • 메모리를 연속적으로 할당하지 x
  • ex) 페이징 기법, 세그멘테이션, 페이지드 세그멘테이션

페이징(paging)

  • 동일한 크기의 페이지 단위로 나누어 메모리의 서로 다른 위치에 프로세스 할당
  • 비어 있는 메모리 공간의 크기가 균일하지 않은 문제 없어짐
  • but 주소 변환 복잡해짐

세그멘테이션(segmentation)

  • 세그먼트 단위로 나눔
  • 논리적 내용을 기반으로 나눔(stack, code, data 영역 등으로 나눔)
  • 공유와 보안 good(페이징은 일정한 크기로 나뉘어 영역이 섞이기 때문에 까다로움)
  • 세그먼트의 크기가 다양하기 때문에 홀의 크기가 균일하지 않음. 외부 단편화 발생

페이지 교체 알고리즘

스와핑이 적게 일어나도록 설계하기 위한 페이지 교체 알고리즘.

오프라인 알고리즘 : 비교를 위한 가장 좋은 알고리즘

FIFO

  • First In First Out.
  • 가장 먼저 메모리에 올라온 페이지를 가장 먼저 내보내는 알고리즘
  • 구현은 간단하지만 성능은 그닥..

LRU

  • Least Recently Used.
  • 가장 오랫동안 사용되지 않는 페이지를 교체
  • 성능이 좋은 편이며 가장 많은 운영체제가 사용하는 알고리즘
  • '오래된'것 파악 위해 각 페이지마다 계수기, 스택을 두어야 하는 문제점이 있다

NUR

  • Not Used Recently.
  • 최근에 사용되지 않은 페이지를 교체
  • 참조 비트(Referenced bit) R, 변형 비트(modified bit) M
  • R0, M0 -> R1, M0 or R0, M1 -> R1, M1 순으로 내쫓김

LFU

  • Least Frequently Used.
  • 가장 참조 횟수가 적은 페이지를 교체

Reference

주홍철 작가님의 '면접을 위한 CS 전공지식 노트'를 기반으로 작성되었습니다.

0개의 댓글