프린세스 다이어리

[OS] 요구 페이징(Demand Paging)과 관련해 페이지 폴트 인터럽트(Page Fault Interrupt) 발생하는 과정 설명 본문

운영체제, 컴퓨터 구조

[OS] 요구 페이징(Demand Paging)과 관련해 페이지 폴트 인터럽트(Page Fault Interrupt) 발생하는 과정 설명

개발공주 2022. 2. 1. 12:47
728x90

1. 요구 페이징(Demand Paging)

컴퓨터가 프로그램을 실행할 때, 어느 페이지 블록을 어느 시점에 물리 메모리에 적재해야 하는지 판단해야 한다. 메모리의 용량은 제한적이기 때문이다. 프로세스와 관련한 모든 데이터를 메모리에 미리 올려놓고 실행하는 '선행 페이징' 개념이 있지만 이는 한정된 메모리 활용에 비효율적이다. 이와 반대로 '요구 페이징'이라는 개념이 있다. 모든 데이터를 메모리에 적재하지 않고, 실행 중에 필요한 시점이 오면 그때그때 적재한다는 의미다.

 

- 선행 페이징: 프로세스 관련 모든 데이터를 물리 메모리에 미리 적재 후 실행 -> 현실성x

- 요구 페이징: 실행 중 필요한 시점에 필요한 데이터만 물리 메모리에 적재 -> 현실적, 페이지 교체 알고리즘 필요

 

 

프로세스 A에서 어떤 한 가상주소로 물리주소를 알아내기 위해 페이지 테이블에 접근했는데 valid bit이 0인 경우, 물리 주소가 없고 이 말은 물리 메모리에 당장 필요한 데이터가 적재돼 있지 않다는 의미다. 이 경우 물리 메모리에 필요한 데이터를 올리고 나서, 페이지 테이블을 업데이트 한 다음, 그 데이터를 읽어서 해당 프로세스를 처리한다.

 

페이지 테이블 접근 -> valid bit이 0이면 -> 물리 메모리에 필요한 데이터 적재 - 다시 페이지 테이블로 와서 물리 주소 업데이트 -> 데이터 읽어서 처리

 

이 과정은 구체적으로 페이지 폴트 인터럽트를 통해 이루어진다.

 

2. 페이지 폴트 인터럽트(Page Fault Interrupt)

페이지 폴트는 운영체제가 받는 인터럽트 중 하나다. 어떤 페이지가 실제 물리 메모리에 없을 때 일어나는 인터럽트다. 페이지 폴트가 일어나면, 운영체제가 해당 페이지를 물리 메모리에 올린 후, 페이지 테이블을 업테이트 후 CPU에게 데이터 읽는 작업을 재실행하라고 한다.

 

2-1. 페이지 폴트 처리 과정

 

 

(1) CPU가 가상 주소를 MMU에게 요청하면,

(2) MMU는 먼저 TLB로 가서 그 가상주소에 대한 물리주소가 캐싱돼 있는지 확인한다.

(3) TLB에 캐싱된 물리주소가

    - 있으면 MMU가 해당 페이지의 물리 주소로 데이터를 갖고 와서 CPU에게 보내고

    - 없으면 MMU가 CR3 레지스터를 가지고 물리 메모리에 해당 프로세스의 페이지 테이블에 접근한다.

(4) MMU가 페이지 테이블에서 물리주소가 있는지 valid bit를 확인한다.

(5) valid bit의 값이

    - 1이면 MMU가 해당 페이지의 물리 주소로 데이터를 갖고 와서 CPU에게 보내고

    - 0이면 MMU가 페이지 폴트 인터럽트를 운영체제에 발생시킨다.

(6) 운영체제는 해당 페이지를 저장공간에서 가져온다.

(7) 운영체제는 저장공간에서 가져온 데이터를 메모리에 올려주고, 페이지 테이블을 업데이트 해준다. valid bit -> 1, 물리주소 업뎃

(8) 운영체제는 CPU에게 프로세스를 다시 실행하라고 한다.

(9) CPU는 다시 MMU에 가상 주소를 요청한다.

 

2-2. 페이지 폴트 발생 시 내부적으로 어떤 과정?

페이지 폴트 인터럽트 발생 시, IDT(Interrupt Descriptor Table)에 가서 해당 인터럽트 번호에 매칭된 OS 내부에 있는 system call 함수를 호출한다. 커널 모드에서 시스템 콜 함수를 실행 후, 커널모드에서 사용자 모드로 전환 후, CPU에게 프로세스의 다음 코드를 실행하도록 한다. (인터럽트 내부 동작 방식에 대한 글) 인터럽트가 여러 차례 발생할 수록 프로그램 전환 속도는 저하된다.

 

2-3. 페이지 폴트 발생 시 표면적으로 어떤 현상?

HDD를 주로 사용하던 시절에, 프로그램을 한 번에 많이 띄워 놓으면 프로그램 전환 시 HDD 읽는 소리가 난다던지 마우스가 멈춘다던지 등 쾌적하지 못한 사용자 경험을 겪어야 했다(게임 켤 때의 엄청난 버벅임과 하드 드드득 소리가 아직 선명한..). 이런 현상이 페이지 폴트 인터럽트 때문에 발생하는 것이다. 프로세스가 전환하기 위해서는 하드디스크에서 데이터를 카피해서 메모리에 올려야 하고, 새 프로그램을 실행하기 위해 새로운 페이지로 덮어씌우려면 메모리에 올라가 있던 데이터가 HDD에 업데이트 되어야 한다.

 


 

참고글

https://namu.wiki/w/SSD 

https://jypthemiracle.medium.com/%EA%B0%80%EC%83%81-%EB%A9%94%EB%AA%A8%EB%A6%AC%EC%97%90-%EB%8C%80%ED%95%9C-%EC%A7%A7%EC%9D%80-%EB%A9%94%EB%AA%A8-9aa54c546f04

 

 

728x90
Comments