메모리 관리 전략

Onni·2022년 1월 16일
0

📌메모리 관리 배경

각각의 프로세스 는 독립된 메모리 공간을 갖고, 운영체제 혹은 다른 프로세스의 메모리 공간에 접근할 수 없는 제한이 걸려있다. 단지, 운영체제 만이 운영체제 메모리 영역과 사용자 메모리 영역의 접근에 제약을 받지 않는다.

📌 프로세스 바인딩

프로세스의 메모리 범위를 결정하는 것을 바인딩(Binding)이라고 하며, 바인딩을 수행하는 시점에 따라 다음과 같이 분류할 수 있다.

✔ Compile-Time Binding

  • 프로그램을 컴파일 할 때 메모리 범위를 결정.
  • 범위가 달라지면 재컴파일 해야한다.
  • 다른 프로그램의 메모리 범위가 겹치지 않도록 프로그래머가 주의해야 함.
  • 도스 시절에나 쓰던 방식.

✔ Load-Time Binding

  • 프로그램이 램에 적재되기 전에 BASE와 LIMIT을 결정.
  • 다른 프로그램의 메모리 범위가 겹치지 않도록 운영체제가 관리함.
  • 현대 시스템에 채택됨.

✔ Run-Time Binding

  • 실행중에 운영체제에 의해 다른 메모리 주소로 옮겨질 수 있음.
  • 적재시간 바인딩을 기본적으로 포함함.
  • 특수한 하드웨어가 필요함.

📌 스와핑

✔ 정의

  • 메모리의 관리를 위해 사용되는 기법. 표준 Swapping 방식으로는 round-robin 과 같은 스케줄링의 다중 프로그래밍 환경에서 CPU 할당 시간이 끝난 프로세스의 메모리를 보조 기억장치(e.g. 하드디스크)로 내보내고 다른 프로세스의 메모리를 불러 들일 수 있다.

✔ 특징

  • swap-in : 주 기억장치(RAM)으로 불러오는 과정
  • swap-out : 보조 기억장치로 내보내는 과정
  • swap 에는 큰 디스크 전송시간이 필요하기 때문에 현재에는 메모리 공간이 부족할때 Swapping 이 시작된다.

✔ 디스패처

  • 스와핑에 의해 작업이 메모리에 적재되어 있지 않을 가능성이 생겼으므로, 실행할 작업이 메모리 적재되어 있는지 검사하는 프로그램

  • 메모리에 적재되어 있는지 검사하고, 메모리에 없다면 이미지를 재적재

✔ 단점

  • 문맥교환 비용의 증가

고전적 스와핑은 보조 기억장치에 작업을 백업하기 때문에, 기억장치의 속도가 느리면 스와핑의 속도도 같이 느려졌습니다. 스와핑은 문맥교환시에 발생하므로 문맥교환의 비용이 대폭 증가한 것과 같습니다. 이것은 짧은 주기의 라운드 로빈 시스템에서 매우 치명적입니다.

  • 시스템 처리율 감소 :

그리고 스와핑에만 매달리는 바람에 작업을 수행할 시간이 부족하므로 시스템의 처리율도 감소합니다.

  • 재배치 이슈 :

스와핑에 의해 보조기억장치로 날아간 작업이 다시 돌아와야 할 때 BASE 레지스터를 어떻게 할것인지에 대한 고민도 필요합니다. 이전과 같은 장소로 배치된다면 좋겠지만, 항상 그것이 보장되어 있는 것은 아닙니다. Run-Time Binding이 허용되는 시스템이라면 좋겠지만, 모든 시스템이 이를 지원하는 것도 아닙니다.

📌 메모리 할당의 분류

✔ 단편화

  • 프로세스들이 메모리에 적재되고 제거되는 일이 반복되다보면, 프로세스들이 차지하는 메모리 틈 사이에 사용 하지 못할 만큼의 작은 자유공간들이 늘어나게 되는데, 이것이 단편화 이다. -

  • 종류
    - 외부 단편화: 메모리 공간 중 사용하지 못하게 되는 일부분. 물리 메모리(RAM)에서 사이사이 남는 공간들을 모두 합치면 충분한 공간이 되는 부분들이 분산되어 있을때 발생한다고 볼 수 있다.
    - 내부 단편화: 프로세스가 사용하는 메모리 공간 에 포함된 남는 부분. 예를들어 메모리 분할 자유 공간이 10,000B 있고 Process A 가 9,998B 사용하게되면 2B 라는 차이 가 존재하고, 이 현상을 내부 단편화라 칭한다.

✔ 외부 단편화 해결

  • 압축 : 외부 단편화를 해소하기 위해 프로세스가 사용하는 공간들을 한쪽으로 몰아, 자유공간을 확보하는 방법론 이지만, 작업효율이 좋지 않다.
  • 외부 단편화는 애초에 연속적 할당에서만 발생하므로, 비연속적 할당 방식인 페이징을 사용하여 외부 단편화를 방지

✔ 연속적 메모리 할당

(1) 고정 크기 할당

  • 메모리를 동일한 크기로 자른 뒤, 각 프로세스마다 블럭 하나만 주는 방식
  • 전체 메모리가 N분할 되었다면 적재될 수 있는 프로세스도 최대 N개이므로 다중 프로그래밍 정도는 블럭의 개수와 같으며, 모든 프로세스는 할당된 메모리 크기가 서로 같다.
  • 현대에서는 사용되지 않는 방식

(2) 동적 크기 할당

  • 고정 할당과 달리 각 프로세스에게 할당된 메모리 크기가 다를 있음

  • 고정 할당과 달리 할당과 해제를 반복하다보면, 중간중간에 생기는 제대로 사용할 수 없는 빈 공간인 외부 단편화(External Fragmentation)라는 문제를 발생

  • 각각의 단편화의 크기는 작을지라도, 전부 모으면 새로운 프로세스를 하나 더 적재할 수 있을만큼 커지기 때문에 동적 할당의 고질적인 단점

  • 종류

    • 최초 적합

      - 처음으로 만난 적당한 빈 공간에 프로세스를 적재
      - 처음으로 만난 빈 공간에 바로 할당해주면 되므로, 다른 두 방식보다 시간복잡도가 낮음

    • 최적 접합

      - 최적 적합(Best-Fit)은 적당한 빈 슬롯 중 가장 작은 공간에 프로세스를 적재
      - 모든 빈 공간을 탐색해야 하므로 시간복잡도가 높으며, 매우 작은 크기의 빈공간을 생성

    • 최악 접합

      - 적당한 빈 슬롯 중 가장 큰 공간에 프로세스를 적재
      - 모든 빈 공간을 탐색해야 하므로 시간복잡도가 높으며, 매우 큰 크기의 빈공간을 생성

✔ 비연속적 메모리 할당

Paging(페이징)

  • 하나의 프로세스가 사용하는 메모리 공간이 연속적이어야 한다는 제약을 없애는 메모리 관리 방법이다.

  • 외부 단편화와 압축 작업을 해소 하기 위해 생긴 방법론으로, 물리 메모리는 Frame 이라는 고정 크기로 분리되어 있고, 논리 메모리(프로세스가 점유하는)는 페이지라 불리는 고정 크기의 블록으로 분리된다.(페이지 교체 알고리즘에 들어가는 페이지)

  • 페이징 기법을 사용함으로써 논리 메모리는 물리 메모리에 저장될 때, 연속되어 저장될 필요가 없고 물리 메모리의 남는 프레임에 적절히 배치됨으로 외부 단편화를 해결할 수 있는 큰 장점이 있다.

  • 하나의 프로세스가 사용하는 공간은 여러개의 페이지로 나뉘어서 관리되고(논리 메모리에서), 개별 페이지는 순서에 상관없이 물리 메모리에 있는 프레임에 mapping 되어 저장된다고 볼 수 있다.

  • 단점 : 내부 단편화 문제의 비중이 늘어나게 된다. 예를들어 페이지 크기가 1,024B 이고 프로세스 A 가 3,172B 의 메모리를 요구한다면 3 개의 페이지 프레임(1,024 * 3 = 3,072) 하고도 100B 가 남기때문에 총 4 개의 페이지 프레임이 필요한 것이다. 결론적으로 4 번째 페이지 프레임에는 924B(1,024 - 100)의 여유 공간이 남게 되는 내부 단편화 문제가 발생하는 것이다.

Segmentation(세그멘테이션)

  • 페이징에서처럼 논리 메모리와 물리 메모리를 같은 크기의 블록이 아닌, 서로 다른 크기의 논리적 단위인 세그먼트(Segment)로 분할 사용자가 두 개의 주소로 지정(세그먼트 번호 + 변위) 세그먼트 테이블에는 각 세그먼트의 기준(세그먼트의 시작 물리 주소)과 한계(세그먼트의 길이)를 저장

  • 단점 : 서로 다른 크기의 세그먼트들이 메모리에 적재되고 제거되는 일이 반복되다 보면, 자유 공간들이 많은 수의 작은 조각들로 나누어져 못 쓰게 될 수도 있다.(외부 단편화)

🧩 Reference

profile
꿈꿈

0개의 댓글