CS공부/운영체제

1.4-1.6 메모리 관리 전략, 가상 메모리, 캐시 메모리

Jaemin0604 2024. 7. 15. 00:12

1.4.1 논리 메모리와 물리 메모리

논리 메모리 영역(또는 가상 메모리 영역)

  • 프로세스가 보는 메모리 영역

물리 메모리 영역

  • 실제로 사용되는 메모리 영역(RAM)

CPU가 프로세스를 실행하며 보는 주소 값논리 주소 또는 가상 주소

실제 메모리에서 사용되는 주소물리 주소

-> 값이 다르므로 CPU가 프로세스를 실행할 때 논리 주소를 물리 주소로 변환해야 함

-> 메모리 관리 장치(MMU, memory management unit)가 함

  • CPU에 위치
  • CPU에서 메모리에 접근하기 전에 MMU에 거쳐 논리 주소에 해당하는 물리 주소를 얻는다.
  • 보호해야하는 메모리 영역에 대한 접근을 제한해 메모리를 보호

1.4.2 연속 메모리 할당

연속 메모리 할당

  • 멀티 프로세스 환경에서 여러 프로세스를 메모리에 연속적으로 로드하는 방법

고정 분할 방식

  • 메모리 영역을 분할한 뒤 각 영역에 프로세스를 할당하는 방식
  • 분할된 영역의 크기는 서로 다를 수 있지만, 분할된 크기는 고정
  • 단점 - 메모리에 올릴 수 있는 프로세스 수와 각 프로세스 크기가 제한됨, 단편화 문제

단편화

  • 외부 단편화 - 총 사용 가능한 메모리 공간은 충분하지만 실제로 할당할 수 없는 경우
  • 내부 단편화 - 분할된 크기보다 작은 프로세스가 할당되어 메모리 공간이 남는 경우

가변 분할 방식

  • 할당할 프로세스의 크기에 따라 메모리 공간을 분할하는 방식
  • 메모리 할당 알고리즘을 이용해 가용 메모리 공간에서 프로세스가 로드될 수 있는 메모리 공간을 찾음
  • 최초 적합, 최적 접합, 최악 접합

최초 적합(first-fit)

  • 가용 메모리 공간에서 프로세스 크기만큼 비어 있는 메모리 공간을 찾아 차례대로 프로세스를 로드하는 방식

최적 적합(best-fit)

  • 할당하려는 프로세스 크기 이상인 가용 메모리 공간 중에서 가장 작은 공간에 프로세스를 할당하는 방식

최악 적합(worst-fit)

  • 할당하려는 프로세스 크기보다 큰 가용 메모리 공간 중에서 가장 큰 공간에 프로세스를 할당하는 방식

1.4.3 비연속 메모리 할당

페이징

  • 프로세스의 논리 메모리 영역과 물리 메모리 영역을 각각 일정한 크기의 페이지와 프레임으로 나눔
  • 페이지와 프레임의 크기는 동일
  • 페이지와 프레임에 각각 번호를 할당해 프로세스의 페이지와 메모리의 프레임을 매핑 -> 페이지 테이블 사용
  • 페이지 테이블은 프로세스의 페이지 정보와 페이지에 매핑하는 프레임의 주소값을 저장
  • 각 프로세스의 PCB에 저장

  • 페이지를 물리 메모리에 연속으로 할당할 필요가 없어서 외부 단편화 문제를 해결
  • 하지만 프로세스의 크기가 페이지 수로 나누어 떨어지는지 보장하지 않음 -> 마지막 페이지가 페이지 크기보다 작을 수 있으므로 내부 단편화 문제가 발생할 수 있음
  • 페이지 테이블을 저장하기 위한 메모리 공간이 추가로 필요

세그먼테이션

  • 프로세스의 메모리 영역을 논리적 단위인 세그먼트로 분할해 메모리를 할당
  • 세그먼테이션 테이블을 사용해 세그먼트의 논리 주소를 물리 주소로 매핑
    • 세그먼트 테이블 - 세그먼트 번호를 인덱스로 사용, 세그먼트별 시작 주소인 base와 세그먼트 길이인 limit을 저장

  • 프로세스의 메모리 영역을 논리적 단위로 나눠 저장하므로 단위별로 데이터를 보호하기 쉽다는 장점
  • 세그먼트의 크기가 균등하지 않아서 프로세스의 할당/해제를 반복하는 과정에서 외부 단편화 문제가 발생
  • 메모리에 로드된 스택 세그먼트 영역에서 오버플로가 발생하면 다른 프로세스와 메모리 영역이 겹칠 수 있음

1.5.1 가상 메모리란

가상 메모리

  • 프로세스의 일부만 메모리에 로드하고, 나머지는 디스크에 둔 상태로 프로세스를 실행하는 방식
  • 사용자에게는 프로세스 전체가 메모리에 로드된 것처럼 보이지만, 실제로는 전체가 로드된 것이 아니라 가상 메모리라고 함
  • 메모리에 프로세스 일부를 로드하고, 프로세스의 나머지 영역은 디스크에 두면 더 많은 프로세스를 메모리에 로드할 수 있음

장점

  • 프로그램이 메모리 크기에 대한 제약을 덜 받을 수 있음
  • 동시에 많은 프로그램을 실행하므로 CPU이용률과 처리율을 높일 수 있음
  • 필요한 영역만 메모리에 로드해 스와핑 횟수를 줄여서 프로그램 실행 속도를 높일 수 있음

1.5.2 요구 페이징

요구 페이징

  • 프로세스에서 필요한 페이지만 메모리에 로드하는 방식
  • 페이지를 모두 메모리에 로드하지 않고 초기에 필요한 영역만 로드한 후 다른 영역은 요청이 올 때 메모리에 로드

  • 프로그램을 실행하다가 물리 메모리에 필요한 페이지가 없을 때 이를 페이지 폴트라고 함
  • 페이지 폴트가 발생하면 디스크에서 필요한 페이지를 스왑 인

1.5.3 스레싱

스레싱

  • 동시에 일정 수 이상의 프로그램을 실행했을 때 오히려 CPU 이용률이 떨어지는 상황
    • 가상 메모리를 구현해 다중 프로그래밍을 하면 CPU 이용률이 높아짐
    • 하지만 일정 수 이상으로 다중 프로그래밍을 하면 페이지 폴트가 자주 일어남
    • 따라서 디스크 영역에서 필요한 페이지를 스왑 인하고 불필요한 페이지를 스왑 아웃하는 작업도 자주 함
    • 이처럼 다중 프로그래밍 정도가 일정 수준 이상 높아지면 페이징이 빈번히 일어나게 되고 실질적으로 CPU 이용률이 떨어지는 스레싱이 발생

  • 스레싱을 예방하려면 워킹 세트를 설정하는 방법이 있음
    • 워킹 세트 - 지역성을 기반으로 자주 사용하는 페이지를 저장해 두는 것

1.6.1 캐시 메모리와 지역성

캐시 메모리

  • CPU와 메인 메모리 간에 데이터 접근 시 속도 차이를 줄이기 위해 사용
  • CPU에서 메인 메모리에 있는 데이터를 가져올 때 자주 사용하는 데이터는 캐시 메모리에 따로 저장

지역성

  • CPU가 자주 참조하는 데이터가 고르게 분포되지 않고 특정 부분에 몰려 있는 것
    • 시간 지역성 - 최근 참조한 내용을 다시 참조할 가능성이 높음
    • 공간 지역성 - 실제 참조한 주소 근처의 내용을 참조할 가능성이 높음

1.6.2 캐시 메모리의 매핑 방식

  • 직접 매핑(direct mapping): 메인 메모리를 일정한 크기로 나누고 각 영역을 캐시 메모리에 매핑하는 방식. 메인 메모리는 캐시 메모리보다 크므로 나눠진 n개의 메모리 영역이 1개의 캐시 메모리에 매핑됨
  • 연관 매핑(associative mapping): 메모리 영역을 캐시 메모리에 규칙 없이 매핑하는 방식. 메모리 영역을 캐시 메모리에 적재할 때는 간단하지만, 캐시 메모리에서 필요한 메모리 영역을 찾을 때는 비효율적임
  • 집합 연관 매핑(set associative mapping): 직접 매핑과 연관 매핑을 결합해 단점을 보완한 방식으로 범용적으로 사용