맛동산이

메모리와, 연속 메모리 할당(contiguous memory allocation) 본문

CS/운영체제

메모리와, 연속 메모리 할당(contiguous memory allocation)

진ddang 2022. 6. 23. 23:00

메모리는 해당 위치를 알려주는 주소가 존재하며, 메모리 주소는 크게 두가지 종류로 나눠진다.

  1. 물리적 메모리주소 : 실제 메모리 상에 존재하는 주소를 의미한다.
  1. 논리적 메모리주소 : 프로세스에 메모리가 할당이 됐을때, 현재 물리메모리 안에서 실행중인 메모리의 위치를 나타내는 주소로, 프로세스 내부에서는 0~끝 까지를 의미하게 되며, 이말은 즉, 프로세스 내부에서 사용하는 메모리의 위치를 나타내는 값이다.

이러한 논리적 메모리를 읽기 위해서는 mmu라는 것이 필요하다.

MMU(memory allocator) : 논리주소를 물리주소에 매핑시켜주는 역할로, 실제 프로세스의 요구하는 정보 위치를 메모리에 할당하게 하는 녀석

이러한 과정에서 메모리테이블을 사용하기도 한다.

메모리할당

메모리 할당 방법은 크게 연속적 메모리 상에서 할당하는 방법과 비연속적 메모리상에서 할당하는 방법으로 나눌수 있으며 각각의 메모리할당 방법에는 크게 2가지 방법이 존재한다.

  1. 연속적 메모리 할당
    1. 고정크기 메모리할당
    1. 가변 크기 메모리할당
  1. 비연속적 메모리 할당
    1. 페이징(paging)
    1. 세그멘테이션(segmentation)

연속 메모리 할당(contiguous memory allocation)

연속적 메모리 할당은 연속된 하나의 큰 메모리에서 프로세스에 메모리를 할당시켜주는 방법이다.

  1. 고정크기 메모리할당 : 메모리를 고정된 크기로 나누고 프로세스를 할당시켜준다.
  1. 가변크기 메모리할당 : 프로세스마다 요구되는 메모리 크기에 맞춰서 메모리를 할당시켜준다.

하지만 이러한 두가지 방법에서는 큰 문제점이 발생하는데 바로 “단편화(fragmentation)"라는 문제가 발생한다.

단편화란 연속된 큰 하나의 메모리상에서, 메모리가 할당될때, 메모리가 할당될 크기는 아니지만, 메모리가 존재하는 공간을 뜻하며, hole이라고도 한다.

즉 프로세스가 할당되지는 못하는 낭비되는 메모리 공간을 의미한다.

메모리단편화는 크게 2가지 로 나뉜다.

  1. 내부 단편화 : 고정크기로 정해진 메모리 안에서 할당되고 남는 메모리
  1. 외부 단편화 : 프로세스 사이사이에 존재하는 단편화 메모리

이러한 메모리 단편화는 메모리 효율을 상당히 낮추게 되는데, 이를 해결하기 위한 방법으로 집약(coalescing)과 압축(compaction)을 한다.

Coalescing은 남는 메모리들 하나의 큰 블럭으로 연결해주는것이고, 압축(compaction)은 사용되고 있는 메모리들을 하나의 큰 메모리로 연결해주는 과정이다.

coalescing compaction

coalescing(집약) : 현재 위치의 메모리에서 단편화 메모리들 끼리 인접해 있는 경우 이를 하나의 큰 메모리로 만들어준다.

compaction(압축) : 비 연속적으로 존재하는 단편화 메모리들을 메모리 재배치를 통해 하나의 연속된 큰 메모리로 만들어 준다.

coalescing과 compaction의 차이는 메모리의 재배치가 일어나는가 아닌가에 의해 차이가 난다.

연속 메모리 할당의 구현

구현을 하기 위해서는 하드웨어의 지원이 필요하다. (메모리 주소를 정해 줘야하기 때문)

  1. Cpu레지스터
    1. Base 레지스터 : 할당된 물리 메모리의 시작 주소를 기억
    1. Limit 레지스터 : 현 프로세스에게 할당된 메모리 크기,
  • 그러면 현재 할당된 메모리의 크기는 base레지스터 부터 base+limit까지 임을 알아야 함.
  1. 주소 레지스터

    : 현재 액세스 하는 메모리의 논리 주소, 그리고 이러한 논리주소를 접근하기 위해서 필요한 mmu

  1. 운영체제의 지원
    1. 각 프로세스별 할당된 물리메모리의 시작주소와 크기를 관리 (cpu레지스터 관리)
    1. 비어있는 메모리 관리

메모리가 할당되는 과정

메모리 할당은 결과적으로 물리메모리를 얻기위한 계산을 하는 과정을 뜻한다. base레지스터와 limit 레지스터를 통해 할당되어진 메모리 범위를 가지고 할당할 논리주소의 크기를 해당 범위안에 들어가는지 확인한다.

들어간다면 mmu를 통해 논리주소를 물리주소에 매핑한다.

홀 선택 알고리즘

연속 메모리 할당의 문제는 결국 단편화다.

장점 : 논리주소를 물리주소로 바꾸는 과정이 단순하다. 내부 단편화가 발생한다.

단점 : 메모리 할당의 유연성이 떨어진다, 외부 단편화문제가 발생한다.

이처럼 단편화가 발생했을 때, 조금더 단편화가 없게 하는 효율을 올리기 위해 단편화 선택 알고리즘이 존재한다.

고정 크기 할당시에는 그냥 빈곳에다 넣으면 된다. (동일한 크기로 메모리를 나눠둿으니까)

가변 크기 할당시에는 홀 리스트를 작성하고, 홀마다 시작주소와 크기를 작성해 둬야한다. 이를 통해서 적절한 홀을 선택하게 된다.

이런 홀을 선택하는 알고리즘은 3개가 있다.

  1. First fit : 홀 리스트 주소 중에서 그냥 첫번째 빈 홀에 넣는다.
  1. Best fit : 홀 중에 내부 단편화가 가장 적게 발생하는 홀에 넣게 된다. 홀 크기를 오름차순으로하고 가장 작은 홀에 넣게되는것
  1. Worst fit : 가장 큰 홀에 넣게 된다. 할당후 남는 공간에 다른 프로세스의 할당확률을 높여서 할당 공간을 게속해서 유지하게 하는것이 특징이다
  1. Next fit : first Fit 에서 할당된 후 다음 빈홀부터 다시 검색.

저장공간의 이용성 : best > first > worst

속도 : first > best > worst


Uploaded by N2T

반응형