어제의 나보다 성장한 오늘의 나

[운영체제] 메모리 관리 전략 (Memory Management Strategy) 본문

CS/운영체제

[운영체제] 메모리 관리 전략 (Memory Management Strategy)

NineOne 2021. 5. 7. 03:14

메모리 관리 전략

  • 성능을 향상하기 위해서는 주 메모리에 여러 개의 프로세스가 올라와 있어야 한다.
  • 즉! 여러 프로세스들이 동시에 주 메모리를 공유해야 하는 상황이다.
  • 따라서 메모리 용량이 증가함에 따라 프로그램의 크기 또한 계속 증가하고 있기 때문에 메모리는 언제나 부족하다.
  • 제한된 물리 메모리의 효율적인 사용과 메모리 참조 방식을 제공하기 위한 전략

 

그렇다면 메모리를 어떻게 관리해야지 효율적인지 정책들을 보자.

메모리 관리 정책

  • 가져오기 정책(fetch policy) : 필요로 하는 데이터를 언제 메모리로 가져올지 결정
  • 배치 정책(placement policy) : 가져온 데이터를 메모리 어느 위치에 올려놓을지 결정
  • 교체 정책(replacement policy) : 어떤 데이터를 메모리에서 내보내고 가져올지 결정

가져오기/적재 (fetch/load)

  • 요구 적재(demand fetch) : 요청 시 메모리에 적재
    • ex) 요구 페이징(demand paging)
    • dynamic loading
  • 예상 적재(anticipatory fetch) : 미리 예상하여 메모리에 적재
    • ex) 참조 가능성이 높은 페이지 미리 적재

배치 전략(placement)

메모리에는 다양한 크기의 자유 공간이 여기저기 산재하게 된다. 프로세스가 공간을 필요로 할 때 OS에서는 이 자유 공간들의 집합에서 적절한 공간을 찾아야 하는 것이다. 

만약 찾는 자유 공간이 요청한 공간보다 크면 나누어 프로세스에게 할당하고, 남은 조각은 자유 공간으로 다시 소속시킨다. 따라서 새로 적재되어야 할 데이터를 주기억장치 영역 중 어느 곳에 배치할지를 결정하는 전략이다.

  • 최초 적합 전략 (first-fit strategy)
    • 사용 가능한 공간을 검색하여 첫 번째로 찾아낸 곳을 할당하는 방식
    • 맨 앞(또는 지난번 탐색이 끝난 곳)에서부터 수용 가능한 첫 번째 공간을 선택
    • 장점 : 가용 공간 정렬 불필요
    • 단점 : 큰 공간을 쪼개어 사용하게 될 수 있음
  • 최적 적합 전략 (Best-fit strategy)
    • 사용 가능한 공간들 중에서 가장 작은 것을 선택하는 방식
    • 가용 공간을 정렬하여 필요한 크기 이상의 공간 중 가장 작은 것을 할당하는 방법
    • 장점 : 큰 공간을 쪼개어 쓰는 일이 적음
    • 단점 : 정렬이 필요하다, 작은 틈새 공간이 많이 발생
  • 최악 적합 전략 (Worst-fit strategy)
    • 사용 가능한 공간들 중에서 가장 큰 것을 선택하는 방식
    • 가용 공간을 정렬하여 수용 가능한 공간 중 가장 큰 곳을 할당하는 방법
    • 장점 : 남은 공간이 큼직큼직함 다른 프로세스가 유용하게 사용할 수 있음
    • 단점 : 정렬 필요, 공간 낭비 발생

교체(replacement)

논리 vs 물리 주소 공간

  • CPU가 생성하는 논리 주소, 메모리가 취급하는 주소를 물리 주소라 한다.
  • 프로그램 실행 중에는 이와 같은 가상 주소를 물리 주소로 바꿔줘야 하는데, 이 매핑 작업은 메모리 관리기(Memory Management Unit)에서 실행된다.

이미지 출처 https://dduddublog.tistory.com/28

 

효과적인 메모리 사용

Swapping(스와핑)

  • 프로세스가 실행되기 위해서는 메모리에 있어야 하지만, 프로세는 실행 중에 임시로 예비저장장치(backup store)에 내보내여졌다가 실행을 계속하기 위해 다시 메모리로 돌아올 수 있다.

이미지 출처 https://dduddublog.tistory.com/28

  1. 시스템은 실행 준비가 끝난 프로세스들을 준비 완료 큐에 대기시킨다.
  2. CPU 스케쥴러는 다음 프로세스를 고를 때 Dispatcher(디스패처)를 호출한다.
  3. Dispatcher는 이 큐에 있는 다음 프로세스가 메모리에 적재되어 있는지를 확인하고, 만약 올라와 있지 않다면 디스크에서 불러들여야 한다.
  4. 만약 프로세스를 불러들이기 위한 공간이 메모리에 부족하다면 현재 메모리에 적재된 프로세스들을 내보내고 (swap out) 원하는 프로세스를 불러들인다 (swap in)
  5. 그 후 CPU의 모든 레지스터를 실행해야 할 프로세스의 것으로 다시 적재 후 제어를 프로세스에게 넘긴다.

위를 보고 생각한다면 Context-switching이 발생할 것이라고 예상할 수 있다. 또한 스와핑을 위해서는 메모리의 프로세스가 완전히 휴지 상태(idle) 임을 확인해야 한다. 또는 입출력 장치에 관한 작업을 진행 중이라면 스와핑을 해선 안된다.

현대 운영체제들은 이러한 비효율성 때문에 사용하지 않지만, 변형하여 사용하기도 한다. 평상시에는 작동하지 않다가, 자유 메모리가 임계량 보다 부족하게 될 경우 작동을 시작하는 경우 혹은 프로세스 전체가 아닌, 일부만 스와핑 하는 경우이다.

 

메모리 관리 기법

1. 연속 메모리 관리

  • 프로그램 전체가 하나의 커다란 공간에 연속적으로 할당되어야 함

2. 비연속 메모리 할당

  • 여러 조각으로 나누어, 비연속적인 메모리 공간에 할당하는 방법
  • ex) 동적 메모리 할당(dynamic memory allocation)

 

메모리 분할

고정 분할 기법

  • 주기억장치가 고정된 파티션으로 분할

단점
  • 내부 단편화(internal fragmentation)가 발생한다.
  • 할당된 공간은 요구된 공간보다 약간 over 할 수 있다.

 

동적 분할 기법

  • 파티션들이 동적 생성되며 자신의 코기와 같은 파티션에 적재
  • 프로세스들이 필요한 공간만 차지한다.
  • 내부 단편화 문제가 없다.
  • 정확히 프로세스의 크기에 따라 파티션 할당하기 때문에 자원 낭비가 없다.

단점

  • 외부 단편화 (external fragmentation)가 발생한다.
    • 프로세스 제거 시 발생한다.
    • 계속되는 배치에 의한 홈을 생성하게 된다.
외부 단편화를 위한 조치

1. 병합(coalescing)

2. 메모리 압축(memory compaction) 

  • 오버헤드가 크다.

 

가상 메모리의 가장 대표적인 기법 세그멘테이션페이징 기법이 외부 단편화의 또 다른 해결책이다.

 

출처

Comments