컴퓨터 공학 & 통신

[개념 정리/운영체제] 메모리 할당

왈왈디 2023. 7. 27. 13:28
728x90

메모리 할당

프로그램에 필요한 메모리를 할당할 때

시작 메모리 위치, 메모리 할당 크기를 기반으로 할당한다.

메모리 할당 방식은 연속 할당불연속 할당으로 나뉜다.

 

연속 할당

연속 할당(continuous memory allocation)은 메모리에 연속적으로 공간을 할당하는 것이다.

사용 가능한 모든 메모리 공간이 같은 위치에 함께 있다.

메모리 파티션이 전체 메모리 공간에 이리저리 분산되어 있지 않는다.

 

연속 할당에는 고정 분할 방식가변 분할 방식이 있다.

 

고정 분할 방식

고정 분할 방식(fixed partition allocation)은 메모리를 미리 같은 크기로 분할하여 할당하는 방식이다.

고정 분할 방식은 내부 단편화(internal fragmentation)을 발생시킨다.

 

내부 단편화란 프로그램이 필요한 공간보다 더 많은 메모리가 할당되어

내부적으로 남는 조각이 많이 생기는 것을 의미한다.

이 때문에 추후 프로그램에 필요한 메모리를 할당하지 못하는 현상이 일어나게 된다.

 

가변 분할 방식

가변 분할 방식(variable partition allocation)은 프로그램에 필요한 만큼 동적으로 할당하는 방법이다.

내부 단편화는 발생하지 않으나, 외부 단편화가 발생할 수 있다.

 

외부 단편화란 동적으로 할당하다보면 

동적으로 할당한 부분 외부에 작은 조각들이 생기는 현상을 말한다.

조각들을 합하면 큰 프로그램을 충족시킬 수 있으나,

외부의 조각들이 잘게 쪼개져 버렸기에,

큰 프로그램이 들어왔을 때 연속적으로 메모리를 할당할 수 없는 현상이 발생한다.

 

가변 분할 방식에는 최초 적합, 최적 적합, 최악 적합의 세 가지 방식이 있다.

 

  • 최초 적합(first fit): 위쪽이나 아래쪽부터 시작해 홀을 찾으면 바로 할당함
  • 최적 적합(best fit): 필요한 메모리 크기 이상인 공간 중 가장 작은 홀부터 할당함
  • 최악 적합(worst fit): 프로세스의 크기와 가장 크기 차이가 많이 나는 홀에 할당함

* 홀(hole): 할당할 수 있는 비어 있는 메모리 공간

 

불연속 할당

불연속 할당(non-contiguous memory allocation)이란 메모리를 연속적으로 할당하지 않는 방법으로,

현대 운영체제가 사용하는 방법이다.

 

프로그램에 필요한 메모리를 쪼개어

서로 다른 위치에 흩어져 있는 메모리 공간에 할당한다.

 

대표적으로 페이징, 세그멘테이션, 페이지드 세그멘테이션 기법이 있다.

 

페이징(memory paging)

페이징은 동일한 크기(보통 4kb)의 페이지 단위로 나누어

메모리의 서로 다른 위치에 프로세스를 할당한다.

홀의 크기가 균일하지 않은 문제가 없어지지만,

주소 변환을 페이지별로 해야하기 때문에 주소 변환이 복잡해지는 단점이 있다.

 

4kb짜리 프로세스가 있다면 2kb, 2kb의 똑같은 크기로 나누어 할당할 수 있어

외부 단편화가 해결되지만,

내부 단편화가 생길 수 있다.

 

세그멘테이션(memory segmentation)

세그멘테이션은 페이지 단위가 아닌, 의미 단위세그먼트(segment)로 나누는 방식이다.

프로세스는 코드, 데이터, 스택, 힙으로 나누어 메모리가 할당되는데,

코드와 데이터, 또는 코드와 스택 등으로 나눌 수도 있고,

함수 단위로 나눌 수도 있다.

 

공유와 보안 측면에서 우수하나, 홀 크기가 균일하지 않다.

때문에 내부 단편화가 해결될 수 있으나, 외부 단편화가 일어날 수 있다.

 

페이지드 세그멘테이션(paged segmentation, segmentation with paging)

페이지드 세그멘테이션은 세그멘테이션으로 나누되 해당 세그멘테이션을 동일한 크기의 페이지로 나누는 방식이다.

 

참고: inflearn 강의 'CS 지식의 정석 - 큰돌'

728x90