가상 메모리는 실행하고자 하는 프로그램을 일부만 메모리에 적재하여 실제 물리 메모리 크기보다 더 큰 프로세스를 실행할 수 있게 하는 기술입니다. 이를 가능하게 하는 가상 메모리 관리 기법이 바로 페이징입니다.

스와핑

프로세스를 연속적인 메모리 공간에 할당하는 방식을 연속 메모리 할당 방식이라고 합니다. 메모리에 적재된 프로세스들 중에는 현재 실행되지 않는 프로세스가 있을 수 있습니다. 이러한 프로세스들을 임시로 보조기억장치 일부 영역으로 쫓아내고, 그렇게 해서 생긴 메모리상의 빈 공간에 또 다른 프로세스를 적재하여 실행하는 방식을 스와핑(Swapping)이라고 합니다. 스와핑을 이용하면 프로세스들이 요구하는 메모리 주소 공간의 크기가 실제 메모리 크기보다 큰 경우에도, 프로세스들을 동시에 실행할 수 있습니다.

  • 스왑 영역: 프로세들이 쫓겨나는 보조기억장치의 일부 영역
  • 스왑 아웃: 현재 실행되지 않는 프로세스가 메모리에서 스왑 영역으로 옮겨지는 것
  • 스왑 인: 스왑 영역에 있던 프로세스를 다시 메모리로 옮겨오는 것

메모리 할당

스왑 아웃되었던 프로세스가 다시 스왑 인될 때는 이전의 물리 주소와는 다른 주소에 적재될 수 있습니다. 프로세스는 메모리 내의 빈 공간에 적재되어야 합니다. 메모리 내에 빈 공간이 여러 개 있다면 프로세스를 어디에 배치해야 할까요?

  • 최초 적합: 프로세스가 적재될 수 있는 최초의 공간에 프로세스를 적재하는 방식
  • 최적 조합: 프로세스가 적재될 수 있는 가장 작은 공간에 프로세스를 배치하는 방식
  • 최악 조합: 프로세스가 적재될 수 있는 가장 큰 공간에 프로세스를 배치하는 방식

메모리 단편화

연속 메모리 할당 방식은 메모리를 효율적으로 사용하는 방법이 아닙니다. 연속 메모리 할당 방식은 메모리 단편화(Memory Fragmentation) 문제를 내포하고 있습니다. 메모리 단편화는 메모리 낭비를 초래할 수 있습니다.

내부 단편화

내부 단편화는 프로세스가 메모리 공간에 할당된 후, 남는 여분의 공간으로 인해 발생합니다. 예를 들어, 100MB의 메모리 공간에 80MB의 프로세스를 할당하면, 사용되지 않는 20MB의 메모리가 낭비됩니다.

외부 단편화

외부 단편화는 프로세스를 할당하기 어려운 너무 작은 빈 메모리 공간들로 인해 발생합니다. 예를 들어, 80MB의 메모리가 필요한 프로세스가 있을 때, 사용 가능한 빈 메모리 공간이 50MB와 30MB로 나뉘어져 있다면, 이 프로세스는 할당되지 못합니다.

압축

외부 단편화를 해결할 수 있는 대표적인 방안으로 메모리를 압축(Compaction)하는 방법이 있습니다. 압축은 메모리 내 여기저기 흩어져 있는 작은 빈 공간들을 모아서, 하나의 큰 빈 공간을 만드는 방식입니다.

페이징

연속 메모리 할당 방식에서 외부 단편화가 생긴 근본적인 이유는 각기 다른 크기의 프로세스가 메모리에 연속적으로 할당되었기 때문입니다. 만약 메모리와 프로세스를 일정한 단위로 자르고, 이를 메모리에 불연속적으로 할당할 수만 있다면 외부 단편화는 발생하지 않습니다. 페이징(Paging)은 메모리의 물리 주소 공간을 프레임 단위로 자르고, 프로세스의 논리 주소 공간을 페이지 단위로 자릅니다. 그리고 각 페이지를 프레임에 할당합니다.

페이지 테이블

페이지 테이블(Page Table)은 페이지 번호와 프레임 번호를 짝지어 주는 일종의 이정표입니다. 페이지 테이블의 페이지 번호를 이용하면, 페이지가 적재된 프레임을 찾을 수 있습니다.

참고

[운영체제] 가상 메모리
[운영체제] 내부 단편화, 외부 단편화란? | 외부단편화 해결 방법
페이징
혼자 공부하는 컴퓨터구조+운영체제

profile
I'm Backend Developer

0개의 댓글