Developer Jay

[OperatingSystem] 가상메모리와 페이징기법

03 May 2022

Intro

가상메모리와 페이징기법에 대해 알아보자


1. 가상메모리

  • 가상메모리란 현대 운영체제가 메모리를 관리하는 기법으로, 각 프로세스에 실제 데이터가 적재되어있는 물리 메모리 주소가 아닌 물리 메모리 주소와 매핑된 가상의 메모리 주소를 주는 방식을 말한다.
  • 이러한 방식은 프로세스에 실제 물리 메모리 크기보다 큰 메모리 영역을 제공할 수 있다는 장점이 있다.
  • 또한 가상메모리 기법을 사용하면 각각의 프로세스는 별도의 가상 메모리 공간을 점유하며, 다른 프로세스의 메모리 공간을 참조할 수 없기 때문에 메모리 보호 측면에서도 장점이 나타난다.


1.1 가상메모리 구조

  • 가상메모리 구조는 크게 Code, Data, Heap, Stack 영역으로 구분 된다.

image

  구조 설명
1 Code 영역 사용자가 작성한 프로그램 함수들의 코드가 CPU에서 수행할 수 있는 기계어 형태로 변환되어 저장되는 공간
컴파일 타임에 결정되며 중간에 코드를 바꿀 수 없게 Read-only 속성으로 지정되어있다.
2 Data 영역 전역변수 또는 정적변수가 저장되는 공간으로 Data영역과 BSS영역으로 나뉜다.
Data 영역: 초기값이 있는 데이터 저장 공간
BSS영역: 초기값이 없는 데이터 저장 공간
3 Heap 영역 프로그래머가 필요할 때마다 사용하는 메모리 영역으로 런타임에 결정된다.
4 Stack 영역 호출된 함수의 수행을 마치고 복귀할 주소 및 데이터를(지역변수, 매개변수, 리턴 값 등) 임시로 저장하는 공간
메커니즘은 자료구조 스택과 동일한 LIFO(Last In First Out) 방법을 따른다.
컴파일 시 Stack 영역의 크기가 결정되기 때문에 무한정 할당 할 수 없다. 따라서 재귀함수가 반복해서 호출되거나, 함수가 지역변수를 Stack 메모리가 초과할 정도로 많이 가지고 있다면 Stack Overflow 에러가 발생한다.


2. 페이징기법

  • 페이징 기법이란 프로세스의 가상 메모리 주소 공간을 동일한 크기의 페이지 단위로 나누어 물리 메모리의 서로 다른 위치에 페이지들을 저장하는 방식을 말한다.
  • 페이징 기법을 통해 각 프로세스는 프로세스에서 사용할 가상주소 공간 전체를 물리 메모리에 전부 올려놓고 사용할 필요가 없으며 사용하지 않는 일부는 하드디스크에(Page Out), 사용중인 일부는 물리 메모리에(Page In) 올려놓고 사용하는 것이 가능하다.

image

  • 페이징 기법에서는 물리 메모리 주소를 가상 메모리 페이지와 동일한 크기의 프레임으로 미리 나누어 둔다. 이는 가상 메모리 페이지와 물리 메모리 프레임의 크기를 동일하게 맞춤으로써 각 프로세스가 빈 프레임이 있으면 어떤 위치든 사용할 수 있기 때문이다.
  • 따라서 모든 프로세스는 각각의 주소 변환을 위한 페이지 테이블을 가지며, 이 테이블은 프로세스가 가질 수 있는 페이지의 개수만큼 주소 변환 엔트리를 가지고 있게 된다.
  • 페이징 기법에서는 프로세스의 가상주소 공간과 물리주소 공간이 모두 같은 크기의 페이지 단위로 나누어지기 때문에 프로세스가 빈 공간을 어느 곳이든 활용할 수 있으므로 외부 단편화 문제가 발생하지 않는다.


3. 가상메모리에서의 페이지 상태

  • 가상메모리에서의 페이지의 상태는 Free, Reserve, Commit 세 가지로 나뉜다.
  • Free 는 아직 가상 메모리 페이지에 물리 메모리 프레임이 할당 되지 않은 상태를 뜻하고 Commit 은 할당이 완료된 상태를 뜻한다.
  • Reserve 상태를 설명하기 앞서서 프로세스 입장에서 높은 캐시히트율을 고려하여 아직 한번도 접근하지 않는 가상 메모리 주소의 페이지까지 모두 Commit 상태로 확보해버리면 어떻게 될지 먼저 생각해보자
  • .
  • .
  • .
  • 물리 메모리 공간이 심하게 낭비되므로 이는 다중 처리를 지원하는 우리의 운영체제가 지향하는 바가 아닐 것이다.
  • 따라서 운영체제는 Reserve 상태를 통해 가상 메모리 페이지의 주소 공간을 최초로 접근하기 전 까지는 예약만 해두고 실제 물리 메모리에는 매핑 시키지 않는 방법을 통해 메모리 사용의 효율성을 높이고 있다.
  • CPU가 프로세스에서 Reserve 상태의 페이지에 있는 주소에 최초로 접근하여 Page Fault 예외가 발생하면, 이때 운영체제가 예외를 핸들링하여 해당 페이지에 물리 메모리 프레임을 매핑시키고 페이지 상태를 Commit 으로 변경한다.
  가상메모리 상태 의미
1 Free 할당되지 않음
2 Reserve 예약완료 (최소 단위 : 64KB)
3 Commit 할당완료 (최소 단위 : 4KB)