# 메모리 할당

# 연속 할당

메모리에 연속적으로 공간을 할당하는 방식

# 고정 분할 방식(fixed partition allocation)

고정분할방식

메모리를 미리 나누어 관리하는 방식입니다. 메모리가 미리 나뉘어 있기 때문에 융통성이 없고, 내부 단편화가 발생합니다.

# 가변 분할 방식(variable partition allocation)

가변분할방식
매 시점 프로그램의 크기에 맞게 동적으로 메모리를 나눠 사용합니다. 내부 단편화는 발생하지 않고 외부 단편화는 발생할 수 있습니다.
최초적합(first fit), 최적적합(best fit), 최악적합(worst fit)이 있습니다.

이름 설명
최초적합 위쪽이나 아래쪽부터 시작해서 홀을 찾으면 바로 할당합니다.
최적적합 프로세스의 크기 이상인 공간 중 가장 작은 홀부터 할당합니다.
최악적합 프로세스의 크기와 가장 많이 차이가 나는 홀에 할당합니다.

용어

내부 단편화(internal fragmentation)
: 메모리를 나눈 크기보다 프로그램이 작아서, 특정 프로그램에 배정되었지만 사용되지 않는 공간이 발생하는 현상

외부 단편화(external fragmentation)
: 메모리를 나눈 크기보다 프로그램이 커서, 들어가지 못하는 공간이 많이 발생하는 현상. 예를 들어, 100MB를 55MB, 45MB로 나눴지만 프로그램의 크기는 70MB일 때 들어가지 못하는 것을 말합니다.

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

# 불연속 할당

메모리를 연속적으로 할당하지 않는 방식으로 현대 운영체제는 불연속 할당인 페이징 기법을 사용합니다.

# 페이징(Paging)

동일한 크기의 페이지 단위로 나누어 메모리의 서로 다른 위치에 프로세스를 할당합니다.

페이징기법

보통 1Page의 크기는 4KB로 나누어 사용합니다. 각각의 프레임 크기와 페이지 크기는 같습니다. 페이지가 하나의 프레임을 할당받으면 물리 메모리에 위치하게 되고 프레임을 할당받지 못한 페이지들은 외부 저장장치에 저장됩니다.

페이징 방법을 사용하면 페이지 테이블에 한번, 물리 메모리 내의 데이터에 한번 총 두번의 메모리 접근을 거쳐야합니다. 따라서 속도향상을 위해 TLB를 이용하여 메모리에 한번 접근하도록 합니다.

홀의 크기가 균일하지 않은 문제가 없어지지만 주소 변환이 복잡해집니다.

페이지 테이블(Page Table)

  • 각 프로세스의 페이지 정보를 저장하는 공간.(프로세스마다 하나의 페이지 테이블을 가집니다.)
  • 물리 메모리에 위치하고 있습니다.
  • index는 페이지의 번호를 담고있습니다.
  • 내용으로는 해당 페이지에 할당된 물리 메모리(프레임)의 시작 주소를 담고 있습니다.
  • 내용에 들어 있는 시작 주소와 페이지 주소를 결합하여 원하는 데이터가 있는 물리 메모리 주소를 알아내는 방식입니다.
  • 다단계 페이지 테이블을 만들 수도 있습니다.

# 세그멘테이션(Segmentation)

세그멘테이션

페이지 단위가 아닌 의미 단위인 세그먼트로 나누는 방식입니다. 공유와 보안 측면에서 좋으며 홀 크기가 균일하지 않은 문제가 발생됩니다.

# 페이지드 세그멘테이션(Paged Segmentation)

공유나 보안을 의미 단위의 세그먼트로 나누고 물리적 메모리는 페이지로 나누는 것을 말합니다.

# 참고자료