Tag Archives: Page Frame

Memory fragmentation

메모리 단편화

메모리 단편화는 무엇인가?

디스크 단편화와 마찬가지로, 메모리에서도 할당 공간 사이에 공간이 생겨 실제 사용할 수 있는 공간이 줄어들거나 속도가 저하된다. 이를 메모리 단편화라 한다.

내부적 단편화

NTFS에도 최소 저장 단위가 존재해 그것의 배수로만 저장이 가능하다. 기본으로 4kb이니, 그대로라고 생각하면 0.1kb인 파일은 4kb로 저장되고, 5kb인 파일은 8kb로 저장된다. 이와 마찬가지로 메모리 역시 저장 단위를 정해두고 작업할 때 할당은 되지만 실제로 저장을 하지 않는 공간이 생긴다. 이를 내부적 단편화라고 한다.

외부적 단편화

분할된 영역이 할당해야 할 공간보다 작아서 빈 공간이 생기는 경우의 단편화 현상

단편화에 대한 운영체제의 대응

통합(coalescing)

서로 인접한 할당공간이 해제 되었을 때, 빈 공간 2개가 아닌 합쳐진 공간으로 기억한다.

압축(compaction)

압축이라고 하지만 디스크의 압축과는 약간 다르다.

디스크의 경우 내부적 단편화에 의해 낭비되는 공간이 많을 경우 OS는 압축 폴더나 압축 드라이브를 사용해 공간을 절약할 것을 권한다. 이 경우 실질적으로 하나 이상으로 덩어리를 만들어 이를 가상화해 폴더와 드라이브로 사용한다.

메모리의 compaction은 디스크에서 메모리 상의 빈 공간이 분할 되어있는 것을 돼지 머리 누르듯이 꾹꾹 눌러 한 덩어리로 만드는 것이다. 디스크의 defrag와 더 유사하다고 볼 수 있다.

당연히 메모리를 이동해야 하므로 compaction 중에는 OS 외의 프로세스는 전부 일시정지된다. (i.e. 윈도우가 멈춰요!)

페이징

메모리를 가상화하는 방법. 메모리를 작은 블록으로 나누어 관리하는데, 이를 페이지라 한다. 물리 메모리 상의 페이지는 페이지 프레임이라 한다.

페이지 폴트

가상화 메모리에 있는 어떤 페이지가 물리 메모리에 없을 경우 물리 메모리로 올려놓기 위해 발생하는 인터럽트.

스와핑된 공간의 메모리를 사용할 때 자주 볼 수 있다.

세그먼테이션

메모리를 가변 길이의 세그먼트로 나누고 관리하는 기법. application specific한 길이의 제어가 이루어진다.

메모리 풀

500억 정도 땡겨서 그 자금을 이용해 사채를 돌리는 것을 메모리 할당으로 수행하는 것.

매번 OS에게서 메모리를 할당 받는 것은 오버헤드가 심하게 발생할 수 있고 단편화 문제 역시 대응할 수 없다. 이에 한번에 넉넉하게 할당을 받은 뒤 응용어플리케이션 상에서 그 공간을 나누어 쓴다. 받은 공간보다 적게 쓰고 있어도 이를 반환하지 않는다. 내부를 어떻게 사용할지는 사용자가 알아서 관리한다.

단점으로는 최적의 풀 크기를 프로그램 작성자가 직접 찾아야 한다는 점이 있을 수 있다.