[CS] 3.2 메모리

angie·2022년 9월 5일
0

CS

목록 보기
3/8
post-thumbnail
post-custom-banner

** 본 포스팅은 '면접을 위한 CS 전공지식 노트'를 바탕으로 공부한 내용을 정리한 것입니다.

CPU는 메모리에 올라와 있는 프로그램의 명령어들을 실행할 뿐!

메모리 계층

메모리 계층은 레지스터, 캐시, 메모리, 저장장치로 구성

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

메모리 계층이 있는 이유?

  • 경제성과 캐시 때문
  1. 캐시

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

    • 빠른 장치와 느린 장치에서 속도 차이에 따른 병목 현상을 줄이기 위한 메모리

      → 메모리와 CPU 사이의 속도차이가 너무 커서 그 중간에 레지스터 계층을 두어 속도 차이를 해결한다.

      → 이러한 속도 차이를 위해 만든 계층을 캐싱 계층이라 한다.

  2. 지역성의 원리

    • 자유 사용하는 데이터를 설정하는 근거
    1. 시간 지역성
      • 최근 사용한 데이터에 다시 접근하려는 특성
    2. 공간 지역성
      • 최근 접근한 데이터를 이루고 있는 공간 혹은 그 가까운 공간에 접근하는 특성
  3. 캐시히트와 캐시미스

    • 캐시히트 : 캐시에서 원하는 데이터를 찾은 것
    • 캐시미스 : 해당 데이터가 캐시에 없다면 주 메모리로 가서 데이터를 찾아오는 것
    1. 캐시매핑
      • 캐시가 히트되기 위해 매핑하는 방법
      • CPU의 레지스터와 주 메모리(RAM) 간에 데이터를 주고 받을 때를 기반으로 설명
    2. 웹 브라우저의 캐시
      • 쿠키
        • 만료기한이 있는 키-값 저장소
      • 로컬 스토리지
        • 만료기한이 없는 키-값 저장소
        • 웹 브라우저를 닫아도 유지되고 도메인 단위로 저장, 생성
        • 클라이언트에서만 수정 가능
      • 세션 스토리지
        • 만료기한이 없는 키-값 저장소
        • 탭 단위로 세션 스토리지를 생성, 탭을 닫을 때 해당 데이터가 삭제
        • 클라이언트에서만 수정 가능
    3. 데이터베이스의 캐싱 게층
      • 데이터베이스 위에 레디스 데이터 베이스 게층을 ‘캐싱 계층’으로 두어 성능을 향상

메모리 관리

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

    • 컴퓨터가 실제로 이용 가능한 메모리 자원을 추상화하여 사용자들에게 매우 큰 메모리로 보이게 만드는 것
    • 가상 메모리는 가상 주소와 실제 주소가 매핑되어 있음
    • 프로세스의 주소 정보가 들어있는 ‘페이지 테이블’로 관리
    1. 스와핑
      • 당장 사용하지 않는 영역을 하드디스크로 옮겨 필요할 때 다시 RAM으로 불러와 올리고, 사용하지 않으면 다시 하드디스크로 내림을 반복하여 RAM을 효과적으로 관리하는 것
      • 가상 메모리에는 존재하지만 실제 RAM에는 없는 데이터에 접근할 때 발생하는 페이지 폴트를 방지하기 위함
    2. 페이지 폴트
      • 프로세스의 주소 공간에는 존재하지만 지금 이 컴퓨터의 RAM에는 없는 데이터에 접근했을 경우 발생
  2. 스레싱

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

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

    1. 작업세트
      • 프로세스의 과거 사용 이력인 지역성을 통해 결정된 페이지 집합을 만들어서 미리 메모리에 로드
    2. PFF (Page Fault Frequency)
      • 페이지 폴트 빈도를 조절하는 방법
      • 상한선과 하한선을 만들어, 상한선에 도달하면 페이지를 늘리고 하한선에 도달하면 페이지를 줄임
  3. 메모리 할당

    • 시작 메모리 위치, 메모리의 할당 크기를 기반으로 할당
    1. 연속 할당
      • 프로세스를 순차적으로 공간에 할당하는 것
      • 고정 분할 방식 : 메모리를 미리 나누어 관리
      • 가변 분할 방식 : 매 시점 프로그램의 크기에 맞게 동적으로 메모리를 나눠 사용
    2. 불연속 할당
      • 페이징 : 동일한 크기의 페이지 단위로 나누어 메모리의 서로 다른 위치에 프로세스를 할당
      • 세그멘테이션 : 의미단위인 세그먼트로 나눈다.
      • 페이지드 세그멘테이션 : 공유나 보안을 의미 단위의 세그먼트로 나누고, 물리적 메모리는 페이지로 나누는 것
  4. 페이지 교체 알고리즘

    • 페이지 교체 알고리즘을 기반으로 스와핑 발생
    1. 오프라인 알고리즘 : 먼 미래에 참조되는 페이지와 현재 할당하는 페이지를 바꾸는 것
    2. FIFO (First In First Out)
      • 가장 먼저 온 페이지를 교체 영역에 먼저 놓는 방법
    3. LRU (Least Recentle Used)
      • 참조가 가장 오래된 페이지를 바꾸는 것
      • 해시 테이블과 이중 연결 리스트로 구현
    4. LFU (Least Frequently Used)
      • 가장 참조 횟수가 적은 페이지를 교체 (많이 사용되지 않은 것)
profile
better than more
post-custom-banner

0개의 댓글