기어가더라도 제대로

[운영체제-김덕수 교수님]메모리 관리(3/3) - 가변 파티션 할당 본문

CS/운영체제

[운영체제-김덕수 교수님]메모리 관리(3/3) - 가변 파티션 할당

Damagucci-juice 2022. 8. 10. 13:57
  • 초기에는 전체가 하나의 영역
  • 프로세스를 처리하는 과정에서 메모리 공간이 동적으로 분할
  • No internal fragmentation

시나리오1

메모리 관리(3/3) - 가변 파티션 할당 image

위의 테이블 엔트리가 유동적으로 변화하는것이 포인트

메모리 관리(3/3) - 가변 파티션 할당 image

프로세스가 메모리 공간을 요청할 때마다 메모리 공간을 케이크 띠어 주듯이 뚝 할당해 주기 때문에, 내부 단편화는 발생하지 않는다.
그러나 프로세스가 자원을 반납하면, 빈공간이 생긴다.

메모리 관리(3/3) - 가변 파티션 할당 image

5MB의 프로세스를 할당할 때 어떻게 하면 좋을까?


배치 전략

  • First-fit(최초 적합)
    • 충분한 크기를 가진 첫 번째 Partition을 선택
    • Simple and low overhead
    • 공간 활용률이 떨어질 수 있음

메모리 관리(3/3) - 가변 파티션 할당 image

  • Best-fit(최적 적합)
    • 프로세스가 들어갈 수 있는 파티션 중 가장 작은 곳을 선택
    • 탐색시간이 오래걸림
      • 모든 파티션을 살펴봐야함
    • 크기가 큰 파티션을 유지할 수 있음
    • 작은 크기의 파티션이 많이 발생
      • 활용하기에 너무 작은 파티션
      • 예를 들어 6kb의 파티션에 5kb 의 프로세스가 할당되면, 남은 1kb의 메모리 공간은 사용될 확률이 적다.
  • Worst-fit(최악 적합)
    • 프로세스가 들어갈 수 있는 파티션 중 가장 큰 곳 선택
    • 탐색시간이 오래걸림
      • 모든 파티션을 살펴봐야 함
    • 작은 크기의 파티션 발생을 줄일 수 있음
    • 큰 크기의 파티션 확보가 어려움
      • 큰 프로세스에게 필요한 큰 파티션이 적어짐
  • Next-fit(순차 최초 적합)
    • 최초 적합 전략과 유사
    • 스테이트 테이블에서 마지막으로 탐색한 위치부터 탐색
    • 메모리 영역의 사용 빈도 균등화
    • 작은 오버헤드

‏‏‎ ‎


‏‏‎ ‎

외부 단편화를 어떻게 극복할 것인가?

  • Coalescing holes(공간 통합)
    • 인접한 빈영역을 하나의 파티션으로 통합
      • 프로세스가 메모리를 릴리즈하고 나가면 수행
      • 적은 오버헤드

메모리 관리(3/3) - 가변 파티션 할당 image

  • Storage Compaction(메모리 압축)
    • 모든 빈 공간을 하나로 통합
    • 프로세스 처리에 필요한 적재공간 확보가 필요할 때 수행
    • 높은 오버헤드
      • 모든 프로세스 재배치
      • 많은 시스템 자원을 소비

메모리 관리(3/3) - 가변 파티션 할당 image

‏‏‎ ‎

요약

연속적인 메모리 할당

  • Uni-programming
  • Fixed Partition multi-programming
  • variable partition multi-programming

프로그램을 만들때 메모리풀을 사용해서, new, malloc 요청(시스템 콜)하지 않고,
크게 할당한 메모리 영역에 변수를 카피만 하면 되도록한다.

매번 동적할당(시스템콜을 통해 메모리 할당 요청)을 하는 것보다, 카피(크게 떼어 놓고 변수 할당)를 하는 것이 성능상 이점이 있다.

Comments