본문 바로가기

Computer Science/운영체제

[운영체제] CH8. Memory Management(2)

Allocation of Physical Memory

물리적인 메모리를 어떻게 관리할 것인가?

메모리는 일반적으로 두 영역으로 나뉘어 사용된다.

  • OS 상주 영역 - interrupt vector와 함께 낮은 주소의 영역을 사용한다.
  • 사용자 프로세스 영역 - 높은 주소의 영역을 사용한다.

 

사용자 프로세스 영역의 할당 방법

Contiguous allocation -> 옛날 방식

각각의 프로세스가 메모리의 연속적인 공간에 적재(load)되도록 하는 방법이다.

  • Fixed partition allocation (고정 분할 방식)
  • Variable partition allocation (가변 분할 방식)

Noncontiguous allocation

하나의 프로세스가 메모리의 여러 영역에 분산되어 올라갈 수 있도록 하는 방법이다.

  • Paging
  • Segmentation
  • Paged Segmentation

 

Contiguous Allocation

고정 분할(Fixed partition) 방식

물리적 메모리를 미리 몇 개의 영구적인 파티션으로 나눈다.

파티션의 크기가 모두 동일한 방식과 서로 다른 방식이 존재한다.

파티션당 하나의 프로그램이 적재된다.

이 방법은 융통성이 없다.

  • 동시에 메모리에 적재되는 프로그램의 수가 고정된다.
  • 최대 수행 가능 프로그램의 크기가 제한된다.

Internal fragmentationExternal fragmentation이 발생한다.

Internal fragmentation (내부 조각)

프로그램 크기보다 파티션의 크기가 큰 경우 발생한다.

하나의 파티션 내부에서 발생하는 사용되지 않는 메모리 조각이다.

파티션이 특정 프로그램에 배정되었지만 사용되지 않는 공간이다.

External fragmentation (외부 조각)

프로그램 크기보다 파티션의 크기가 작은 경우 발생한다.

아무 프로그램에도 배정되지 않는 빈 파티션임에도 프로그램이 올라갈 수 없는 작은 파티션을 말한다.

 

가변 분할(Variable partition) 방식

프로그램의 크기를 고려해서 할당한다.

분할의 크기, 개수가 동적으로 변한다.

기술적 관리 기법이 필요하다.

External fragmentation이 발생한다.

 

Hole

hole이란 프로세스 사이사이에 가용한 메모리 공간을 뜻한다.

다양한 크기의 hole들이 메모리 여러 곳에 흩어져 있다.

프로세스가 도착하면 수용 가능한 hole을 할당받게 된다.

OS는 다음 정보를 유지하고 있어야 한다.

  • 할당 공간
  • 가용 공간(hole)

 

Dynamic Storage-Allocation Problem

가변 분할 방식에서 size가 n인 요청을 만족하는 가장 적절한 hole을 찾는 문제이다.

First-fit

Size가 n 이상인 것들 중에서 가장 먼저 찾아지는 hole에 할당하는 방식이다.

가장 빠른 방식이다.

Best-fit

Size가 n 이상인 가장 작은 hole을 찾아서 할당하는 방식이다.

Hole들의 리스트가 크기순으로 정렬되지 않은 경우 모든 hole을 탐색해야 한다.

비슷한 크기의 hole에 많이 할당되면 다른 프로세스들에 할당될 수 없는 많은 수의 아주 작은 hole들이 발생하게 되는 단점이 있다.

Worst-fit

가장 큰 hole에 할당하는 방식이다.

Best-fit과 마찬가지로 모든 리스트를 탐색해야 한다.

상대적으로 아주 큰 hole들이 생성된다.

First-fit과 Best-fit이 Worst-fit보다 속도와 공간 이용률 측면에서 효과적인 것으로 알려져 있다. (실험적인 결과)

 

Compaction

External fragmentation 문제를 해결하는 방법 중 하나이다.

사용중인 메모리 영역을 한군데로 몰고 hole들을 다른 한 곳으로 몰아 큰 block(hole)을 만드는 방법이다.

매우 많은 비용이(Overhead) 든다.

프로세스의 주소가 Run time에 동적으로 재배치가 가능한 경우에만 수행될 수 있다.

 

 

Noncontiguous Allocation

하나의 프로세스가 메모리의 여러 영역에 분산된어 올라갈 수 있도록 하는 방법이다.

 

Paging

프로그램의 virtual memory를 일정한 크기로 잘라서(page) 이 페이지 단위로 physical memory에 올리거나 backing store에 내리는 기법이다.

이 때, Physical memory도 페이지 단위만큼 잘라놓는다. 이를 페이지 프레임(frame)이라고 한다.

페이지 프레임이 있으면 hole이 생기지 않는다. 대신, 주소 변환을 페이지 별로 해야 하기 때문에 Address binding이 복잡해진다.

주소 변환은 page table을 사용하여 logical address를 physical address으로 변환한다.

External fragmentation은 발생하지 않는다.

Internal fragmentation은 발생할 수 있다. (page frame의 크기 > 마지막 page의 크기)

 

Segmentation

프로그램의 주소 공간(virtual memory)을 의미있는 단위로 자르는 기법이다.

크게 code, data, stack segment로 자른다. 세그먼트는 의미 단위이기 때문에 이보다 더 잘게 자를 수도 있다. 예를 들어 함수 별로 세그먼트로 자를 수도 있다.

크기가 균일하지 않기 때문에 연속 할당방식에서 발생했던 문제점(Dynamic Storage-Allocation Problem)이 동일하게 발생할 수 있다.

 

 

 

 

 

 

본 포스팅은 이화여대 반효경 교수님의 강의와 경북대 탁병철 교수님의 강의를 토대로 작성한 글입니다.