연속 메모리 할당

이찬영·2021년 9월 1일
0

OS

목록 보기
29/35

연속 메모리 할당

메인 메모리는 운영체제뿐만 아니라 사용자 프로세스도 수용해야 한다. 이때 우리는 여러 사용자 프로세스가 메모리에 상주하기를 원하며, 메모리에 적재되기를 기다리는 프로세스에게 사용 가능한 메모리를 할당하는 방법을 고려해야한다.
연속적 메모리 할당은 각 프로세스는 다음 프로세스가 적재된 영역과 인접한 하나의 메모리 영역에 적재 된다.

메모리 보호

연속적인 메모리 할당에서 인접한 영역에 적재가 된다면 우리는 메모리 영역을 보호할 필요가 생긴다. 이전 글에 설명한 메모리를 보호하는 방법에서 base register, limit register를 이용하여 목적을 달성할 수 있다. 간단하게 다시 설명해보겠다.

  1. 논리주소가 limit register 값보다 작으면 base register 값에 더해져 물리주소로 변환 된다.
  2. 만약 limit register보다 크게 되면 trap이 발동 되어 오류를 처리한다.

가상 메모리 시스템에서는 MMU가 이러한 역할을 하게 된다. 추가적으로 재배치 레지스터를 변경하여 프로세스가 점유할 수 있는 메모미 영역을 동적으로 제어할 수 있다. 예를 들어 장치 드라이버에 대한 버퍼 공간이 있다. 만약 해당 드라이버가 사용중이 아니라면 이 공간은 유지될 필요가 없다. 필요할때가 되면 동적으로 메모리를 할당 받으면 된다.

메모리 할당

가장 간단한 방법 중 하나는 프로세스를 메모리의 가변 크기 파티션에 할당하는 것이다. 각 파티션에는 정확히 하나의 프로세스만 적재될 수 있다. 이 가변 파티션 기법에서 운영체제는 사용 가능한 메모리 부분과 사용 중인 부분을 나타내는 테이블을 유지한다. 메모리가 할당되지 않은 영역을 hole이라고 하겠다.

가변 파티션

위 그림을 보면 5,8,2 프로세스가 점유돼있다. 이후에 8번이 종료되면 차지하던 영역만큼 hole이 생긴다. 이후 9번 프로세스가 할당되고 5번 프로세스가 종료되면 총 2개의 hole이 발생한다.

위에서 보듯 프로세스가 시스템에 들어오면 프로세스가 요구하는 메모리에 따라 어느 hole에 할당할지가 중요하다. 만약 적절한 hole을 배치할 수 없게되면 프로세스를 거부하거나, 대기큐에 넣는 방법이 있다.

일반적으로 hole은 할당과 반납을 하다보면 여러곳에서 발생하게 된다. 이 hole들이 연속되지 못해 하나의 hole로 합쳐지지 못하면 hole의 총 크기는 메모리를 할당 해줄수 있을만큼 크지만 하나의 hole의 크기는 작기 때문에 메모리를 할당할 수 없는 문제가 발생한다. 이러한 문제를 줄이는 3가지 방법이 있다.

최초 적합 (first fit)

최초 적합은 메모리에 첫번째 사용 가능한 공간을 확인하면 해당 공간을 프로세스에게 할당해준다. 검색은 처음부터 하거나 이전에 찾은 지점부터 검색할 수 있다.

최적 적합 (best fit)

사용 가능한 공간 중에서 가장 작은것을 택한다. 리스트가 크기 순으로 관리되지 않으면 처음부터 검색해야한다.

최악 적합 (worst fit)

가장 큰 가용 공간을 선택한다. 리스트가 크기 순으로 관리되지 않으면 처음부터 검색해야한다.

단편화

외부 단편화

최초 적합과 최적 적합은 외부 단편화의 문제를 가진다. 외부 단편화란 메모리가 적재되고 제거됨이 반복되어 작은 hole들이 발생할때, 비연속적인 hole들의 전체 크기는 요청된 프로세스의 메모리를 할당해줄 수 있지만 연속된 하나의 hole의 크기는 프로세스의 요청을 들어줄 수 없는 문제를 말한다. 이러한 외부 단편화 문제는 어떤 알고리즘을 사용하더라도 발생한다.

외부 단편화를 해결하는 문제에서는 압축과 페이징 기법이 있다.
압축을 하는 방법은 프로세스들의 주소가 동적으로 재배치 될 수 있을 때만 가능하다. 사용 중인 데이터를 옮긴 후 base register값만 변경해준다면 반영할 수 있지만 모든 프로세스의 사용중인 데이터를 옮기게 되면 매우 큰 비용이 발생한다.
다른 방법으로 페이징 기법이 있다. 여러 개의 비연속적인 공간으로 나누어 필요한 크기의 공간이 가용해지는 경우 할당하는 방법이다.

내부 단편화

우리가 일정한 크기(4KB)로 메모리를 할당한다고 생각하자. 우리가 3KB 만큼의 영역이 필요하여 메모리 할당 요청을 하면 메모리는 4KB만큼 할당 해주게 된다. 이때 우리는 1KB영역이 사용되지 않음을 알 수 있다. 이러한 문제를 내부 단편화라고 한다.

0개의 댓글