Swap Disk, Swap Space, Page Fault

이재원·2024년 3월 22일
0

스왑 디스크(Swap Disk) 또는 스왑 공간(Swap Space)는 운영체제가 물리적 메모리(RAM)를 보다 효율적으로 관리하기 위해 사용하는 하드 드라이브의 일부 공간을 말한다.

  • RAM에서 일시적으로 사용하지 않는 페이지나 세그먼트를 저장하는 데 사용한다.

스왑 인(Swap In)

  • 스왑 디스크에서 데이터를 RAM으로 불러오는 과정
  • 시스템이 해당 데이터를 필요로 할 때 발생한다.

스왑 아웃(Swap Out)

  • RAM에서 더 이상 즉시 필요하지 않은 데이터를 스왑 디스크로 이동하는 과정
  • 시스템이 RAM 공간을 확보해야 할 때 발생한다.
스왑 인 아웃 과정은 데이터가 이동하는 것이 아니라 복사되는 것이다.

스왑 디스크는 물리적 메모리보다 접근 속도가 훨씬 느리기 때문에, 스왑이 자주 발생하면 시스템의 전반적인 성능이 저하될 수 있다.

스왑 디스크의 사용은 시스템 메모리 관리를 최적화하고, 물리적 메모리 한계를 넘어서 프로세스와 애플리케이션을 실행할 수 있는 유연성을 제공하지만, 스왑의 과도한 사용은 시스템 성능에 부정적인 영향을 미칠 수 있으므로, 메모리 관리 전략을 잘 선택해야한다.

컴퓨터 시스템에서 RAM은 빠르게 데이터에 접근할 수 있지만 한정된 용량을 가지고 있다. 이에 반해, 하드 드라이브는 더 느린 접근 속도를 가지고 있지만 훨씬 더 많은 데이터를 저장할 수 있다. 가상메모리 시스템은 두 가지 장점을 합쳐서 더 많은 메모리를 제공할 수 있도록 해준다.

스왑 인 아웃이 일어나는 과정

1. 데이터 접근 요청

프로세스의 특정 데이터에 접근은 가상 주소를 통해 이루어진다. 모든 프로세스는 자신만의 가상 주소 공간을 갖고 있으며, 실제 물리적 메모리 주소로의 매핑이 필요하다.

2. TLB(TLB) 조회

  • 프로세스가 데이터에 접근 시, CPU는 가상 주소를 물리 주소로 변환하기 위해 먼저 TLB를 확인한다.
  • TLB에 해당 가상 주소의 매핑이 있으면 이를 "TLB 히트"라고 하고 즉시 물리 주소로 변환하여 데이터 접근을 수행한다. TLB 히트는 메모리 접근 시간을 상당히 단축시킬 수 있다.

    TLB는 자주 접근하는 메모리 주소와 그에 해당하는 물리 주소 매핑의 캐시이다.

3. 페이지 테이블 조회

  • TLB에서 매핑을 찾지 못하면 "TLB 미스"라고 하며, 운영체제는 페이지 테이블을 조회한다.
  • 페이지 테이블에서 정보를 찾을 경우 해당 물리 주소로 접근하여 데이터를 불러오고, TLB를 업데이트한다.

페이지 테이블은 가상 주소를 물리 주소로 매핑하는 포괄적인 정보를 담고 있다.

4. 스왑 인(Swap In) 과정

페이지 테이블에서도 해당 가상 주소의 매핑을 찾지 못하면, 페이지 폴트(page fault)가 발생한다.

  • 이 때 운영체제는 디스크 상의 스왑 공간에서 해당 데이터 페이지를 찾아 물리 메모리로 로드한다(Swap in). Swap in된 페이지는 페이지 테이블에 새로운 가상 주소와 물리 주소 매핑으로 추가된다.

  • Swap in 과정에서 기존에 메모리에 있던 다른 페이지가 Swap out될 수 있다.

  • 물리적 메모리(RAM)가 가득 차 있지 않은 경우 바로 Swap in 하면 되는데 가득 차 있는경우 물리적 메모리 내의 어떤 페이지를 Swap out한 후 Swap in 하여야 한다.

페이지 교체 알고리즘(Page Replacement Algorithm)

시스템의 메모리가 가득 찼을 때 스왑 아웃하려는 페이지를 결정 하는 방법
LRU(Least Recently Used), FIFO(First In, First Out), OPT(Optimal Page Replacement) 등 다양한 알고리즘이 있다.

5. 페이지 테이블 및 TLB 업데이트

  • 스왑 인된 페이지는 페이지 테이블에 새로운 가상 주소와 물리 주소 매핑으로 추가된다. 그리고 이 정보는 TLB에도 반영된다. 이렇게 하면 이후 같은 페이지에 대한 접근 요청이 빠르게 처리될 수 있다.

6. 데이터 접근 완료

모든 매핑 정보가 업데이트되면, 프로세스는 업데이트된 TLB 또는 페이지 테이블 매핑을 사용하여 물리 메모리에 있는 실제 데이터에 접근할 수 있게 된다. 이 데이터는 CPU로 전송되어 프로세스에 의해 사용된다.

  • 이 과정은 운영체제가 메모리를 효율적으로 관리하고, 프로세스가 필요한 데이터에 빠르게 접근할 수 있도록 도와준다.
  • 가상 메모리 시스템과 TLB는 물리 메모리의 한계를 극복하고, 시스템의 성능을 최적화하는 데 중요한 역할을 한다.

페이지 폴트(page fault)

필요한 데이터가 현재 물리 메모리에 존재하지 않음을 의미한다.

페이지 폴트(page fault)는 여러 상황에서 발생할 수 있다. 가장 흔한 경우는 가상 메모리 시스템에서 프로그램이 물리적 메모리에 현재 존재하지 않는 페이지를 접근하려 할 때다. 이때, 페이지 폴트 핸들러가 호출되어 해당 페이지를 디스크에서 메모리로 가져온다. 다음은 페이지 폴트가 발생하는 몇 가지 주요 상황이다:

  1. 법적이지 않은 가상 주소 접근: MMU가 특정 가상 주소를 변환하려 할 때, 이 주소가 어떠한 영역(struct)에도 속하지 않으면, 즉, 유효한 가상 주소 범위 내에 없으면 페이지 폴트 핸들러는 segmentation fault를 발생시키고 프로세스를 종료한다 .

  2. 권한이 없는 메모리 접근 시도: 프로세스가 읽기, 쓰기, 실행 권한이 없는 페이지에 접근하려 할 때 발생한다. 예를 들어, 쓰기 작업을 읽기 전용 페이지에 시도하거나, 사용자 모드에서 커널 가상 메모리를 읽으려 할 때 발생한다. 이러한 접근은 불법적이므로 프로세스는 protection exception을 발생시키고 종료된다 .

  3. 요구 페이징(demand paging): 프로그램 실행 중에 특정 페이지가 필요하지만 그 페이지가 물리 메모리에 없고 디스크에 있을 때, 운영체제는 페이지 폴트 핸들러를 호출하여 필요한 페이지를 메모리로 가져온다. 이 과정에서 선택된 희생 페이지(victim page)가 디스크로 스왑 아웃될 수도 있다. 페이지 폴트 핸들러가 이 작업을 수행한 후 CPU는 원래의 명령을 재시작한다 .

이러한 상황들은 운영체제가 메모리 관리를 효율적으로 하기 위해 페이지를 디스크와 메모리 간에 이동시키면서 발생한다. 페이지 폴트 메커니즘 덕분에 프로그램은 물리적 메모리 크기보다 큰 가상 메모리를 사용할 수 있으며, 시스템의 메모리 사용을 최적화할 수 있다.

PintOS Project 3 이전에서 Page fault는 항상 커널 또는 유저 프로그램의 버그를 의미했지만 PintOS Project 3 부터는 파일 또는 스왑 슬롯에서 페이지를 가져와야 한다는 사실을 의미하게 된다.

profile
최고가 되기 위한 여정

1개의 댓글

comment-user-thumbnail
2024년 3월 22일

페이지 폴트 중요 별 5개

답글 달기