Home 메모리 할당 및 기타 정리
Post
Cancel

메모리 할당 및 기타 정리

메모리 할당

프로그램에 필요한 메모리를 할당할 때 시작 메모리 위치, 메모리 할당 크기를 기반으로 할당한다.

이는 연속 할당과 불연속 할당으로 나뉜다.

연속 할당

메모리에 연속적으로 공간을 할당하는 것을 말한다.

사용 가능한 모든 메모리 공간이 같은 위치에 함께 있다. 즉, 메모리 파티션이 전체 메모리 공간에서 여기저기서 분산되어 있지 않다.

고정분할방식과 가변분할방식으로 나뉜다.

고정 분할 방식

메모리를 미리 같은 크기로 분할해서 할당하는 방법을 말한다.

이는 내부단편화가 발생한다.

내부 단편화

프로그램이 필요한 공간보다 더 많은 메모리가 할당되어 내부적으로 조각이 많이 생기는 것을 의미한다.

이를 통해 추후에 프로그램에 필요한 메모리를 할당하지 못하는 현상이 생긴다.

가변 분할 방식

프로그램에 필요한 만큼 동적으로 할당하는 방법을 말한다.

이는 내부 단편화는 발생하지 않고 외부 단편화가 발생할 수 있다.

가변 분할 방식은 최초적합, 최적적합, 최악적합이 있다.

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

외부 단편화

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

어떤 메모리 공간이 50이 할당되었고 40을 사용했다고 하자.

그러면 10이 남고 이렇게 다른 곳에서도 남은 공간이 20이 있다고 하면 이 둘을 합쳐 30의 프로그램을 충족시킬 수 있을 것 같지만 외부의 조각들이 되어있어 30 이상의 큰 프로그램이 들어왔을 때 메모리를 할당하지 못하게 된다.

불연속 할당

메모리를 연속적으로 할당하지 않는 방법으로 현대 운영체제가 쓰는 방법이다.

프로그램에 필요한 메모리를 쪼개어 서로 다른 위치에 있는 메모리 공간에 할당한다. 이는 대표적으로 페이징, 세그멘테이션, 페이지드세그멘테이션 기법이 있다.

페이징

동일한 크기(보통 4kb)의 페이지 단위로 나누어 메모리의 서로 다른 위치에 프로세스를 할당한다.

홀의 크기가 균일하지 않은 문제가 없어지지만 주소 변환을 페이지별로 해야하기 때문에 주소변환이 복잡해지는 단점이 있다.

아래와 같이 4kb짜리 프로세스를 2kb, 2kb 이렇게 같은 크기로 나누어 할당해 외부단편화가 해결되지만 내부 단편화가 생길 수 있다.

세그멘테이션

페이지 단위가 아닌 의미 단위인 세그먼트로 나누는 방식이다.

프로세스는 코드, 데이터, 스택, 힙으로 나누어져 메모리가 할당되는데 코드와 데이터 또는 코드와 스택 등으로 나눌 수도 있으며 함수 단위로 나눌 수도 있다.

공유와 보안 측면에서 좋지만 홀 크기가 균일하지 않게 된다. 내부단편화가 해결될 수 있지만 외부 단편화가 일어날 수 있다.

정리

홀크기가 균일하면 내부단편화 발생가능

홀크기가 균일하지 않으면 외부단편화 발생가능.

페이지드 세그멘테이션

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

정리

VirtualAddress -> 스와핑 -> page replacement -> LFD 흐름으로 질문 이어갈 수 있음.

Convoy effect와 starvation의 차이

몇 개의 시간이 오래 걸리는 프로세스로 인해 다른 프로세스의 실행이 느려지고 평균 대기시간이 길어지며 결과적으로 전체적인 프로세스의 성능을 저하시키는 현상. FCFS 알고리즘을 사용할 때 나타날 수 있다.

vs

어떤 프로세스가 무기한으로 대기하며 CPU 소유권을 얻을 수 없음을 의미한다. SJF 알고리즘을 사용할 때 나타날 수 있다. 우선순위가 자꾸 밀려 해당 프로세스가 아예 실행이 안되는 것.

이것을 극복하려면 aging을 통해 우선순위를 높여 실행되도록 할 수 있다.

busy_wait?

프로세스, 쓰레드가 어떠한 일을 실행하기 전에 만족하는 조건을 지속적으로 확인하는 동기화 기술.

busy_wait는 운영체제에서 프로세스가 공유자원에 동시에 접근하는 것을 방지하는 상호배제를 달성하는데 사용된다.

이 상태에서는 우선순위에 따라 작업을 바꿀 수 없기 때문에 우선 순위가 높은 작업을 완료해야 할 때 비효율적이며 대기시간이 많이 걸릴 경우 계속해서 기다리는데 CPU 자원을 사용하기 때문에 자원 낭비가 심하다는 단점이 있다.

This post is licensed under CC BY 4.0 by the author.