Sapphire9 개발 일지
article thumbnail

가상 메모리

가상 메모리(Virtual Memory)는 실행하고자 하는 프로그램을 일부만 메모리에 적재하여 실제 물리 메모리 크기보다 더 큰 프로세스를 실행할 수 있게 하는 기술

 

가상 메모리 관리 기법

  • 페이징
  • 세그멘테이션

 

연속 메모리 할당 방식의 문제점

  • 외부 단편화
  • 물리 메모리보다 큰 프로세스를 실행할 수 없음

 

cf. 스와핑

스와핑은 프로세스들이 요구하는 메모리 주소 공간의 크기가 실제 메모리 크기보다 큰 경우에도 프로세스들을 동시에 실행할 수 있게 해주는 메모리 관리 기법

 

페이징

연속 메모리 할당 방식에서 외부 단편화가 생기는 근본적인 이유는 각기 다른 크기의 프로세스메모리에 연속적으로 할당되었기 때문이다.

 

페이징은 프로세스의 논리 주소 공간을 페이지라는 일정한 단위로 자르고, 메모리 물리 주소 공간을 프레임이라는 페이지와 동일한 크기의 일정한 단위로 자른 뒤 페이지를 프레임에 할당하는 가상 메모리 관리 기법

 

페이징에서도 스와핑을 사용할 수 있다.

페이징을 사용하는 시스템에서는 페이지 단위로 스왑 아웃(페이지 아웃)/스왑 인(페이지 인)

메모리에 적재될 필요가 없는 페이지들은 보조기억장치로 스왑 아웃되고, 실행에 필요한 페이지들은 메모리로 스왑 인

 

이는 한 프로세스를 실행하기 위해 프로세스 전체가 메모리에 적재될 필요가 없다는 것을 의미한다. 이와 같은 방식을 통해 물리 메모리보다 더 큰 프로세스를 실행할 수 있다.

 

페이지 테이블

프로세스가 메모리에 불연속적으로 배치되면 CPU 입장에서 '다음에 실행할 명령어 위치'를 찾기가 어렵다. 이를 해결하기 위해 페이징 시스템은 프로세스가 비록 (실제 메모리 내의 주소인) 물리 주소에 불연속적으로 배치되더라도 (CPU가 바라보는 주소인) 논리 주소에는 연속적으로 배치되도록 페이지 테이블을 이용한다.

 

페이지 테이블은 현재 어떤 페이지가 어떤 프레임에 할당되었는지를 알려주는 일종의 이정표 역할

프로세스들이 메모리에 분산되어 저장되어 있더라도 CPU는 논리 주소를 그저 순차적으로 실행하면 된다.

 

페이징은 외부 단편화 문제를 해결할 수 있지만, 내부 단편화라는 문제를 야기할 수 있다.

모든 프로세스가 페이지 크기에 딱 맞게 잘리는 것은 아니므로, 마지막 페이지의 경우 크기가 남을 수 있다. 가령 페이지 크기가 10KB인데 프로세스의 크기가 108KB라면, 이 경우 마지막 페이지는 2KB만큼의 크기가 남는다. 이러한 메모리 낭비를 내부 단편화라고 한다.

 

내부 단편화는 하나의 페이지 크기보다 작은 크기로 발생한다. 따라서 하나의 페이지 크기가 작다면 발생하는 내부 단편화의 크기는 작아질 것으로 기대할 수 있다. 그러나 하나의 페이지 크기를 너무 작게 설정하면 그만큼 페이지 테이블의 크기도 커지기 때문에 페이지 테이블이 차지하는 공간이 낭비된다.

 

따라서 내부 단편화를 적당히 방지하면서 너무 크지 않은 페이지 테이블이 만들어지도록 페이지의 크기를 조정하는 것이 중요하다.

 

프로세스마다 각자의 프로세스 테이블을 가지고 있고 각 프로세스의 페이지 테이블들은 메모리에 적재되어 있다. 그리고 CPU 내의 페이지 테이블 베이스 레지스터(PTBR)각 프로세스의 페이지 테이블이 적재된 주소를 가리키고 있다.

profile

Sapphire9 개발 일지

@Sapphire9

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그