본문 바로가기
반도체 그 다음 학문/운영체제 (OS)

운영체제 Demand paging ( 요구 페이징, page fault란? )

by 전컴반 2022. 6. 8.
반응형
Demand paging

 

Demand paging은 간단히 말해서 필요한 page만 메모리에 올리겠다는 의미다. 그전에 swapping이라는 개념을 알고 있어야 하는데 아래 포스팅을 읽고 오면 더욱 이해가 쉬울 것이다.

 

2022.06.08 - [내가 하는 공부/운영체제 (OS)] - 운영체제 Swapping ( page in, page out )

 

운영체제 Swapping ( page in, page out )

Swapping 여러 프로그램을 메모리상에서 돌리다 보면 메모리가 부족할 수밖에 없다. 이런 메모리 부족을 해결하기 위해서 나온 방법이 Swapping이다. 더 많은 프로세스가 메모리에 존재할 수 있도

wpaud16.tistory.com

 

시간이 없는 사람을 위해 간단히 설명하자면, Swpping이란 프로그램을 동작하면 필요한 부분을 backing store에서 page 단위로 page in, page out을 실행한다. 

 

이번 포스팅에서 Demand paging이 어떻게 동작하는지 알아보자.

 

 

위에서 말했던 것처럼 프로그램을 돌릴 때 전체를 다 가져와서 돌릴 수도 있지만 필요한 부분만 불러와서 돌릴 수도 있다. 이렇게 필요한 부분만 가져와서 돌린다면 최소한의 물리 메모리만 사용할 수 있고 더 빠른 응답 시간과 더 많은 사용자를 수용할 수 있다. 이때 왔다 갔다 하는 단위는 page로 왔다 갔다 한다.

 


 

프로그램을 실행하기 위해 요청한 page가 메모리에 있는지 없는지를 확인하기 위해 page table에 valid-invalid bit를 추가하여 확인한다. 만약 있다면 valid고 없다면 invalid로 세팅된다. 없을 때를 page fault라고 부른다. cache에서의 miss와 유사하다.

 

하지만 어떤 프래그램이든 처음 실행되면 메모리에 프로그램의 page가 아무것도 없기 때문에 page fault가 발생할 수밖에 없다. 이런 걸 pure demand paging이라고 부른다. 즉, 처음에 page를 메모리에 올릴 때 발생하는 page fault를 말한다.  

 

그렇다면 page fault가 발생하면 어떻게 될까??

아래 그림의 흐름을 따라가 보자.

 

 

1. page table을 통해 필요한 page가 없다면 (invalid) 즉, page fault

 

 

2. 운영체제에 page fault trap을 발생시킨다.

2-1. 동작하고 있던 프로세스의 PCB를 메모리에 저장한다. 

 

 

3. 그러면 운영체제는 다른 page table을 확인한다. 그리고 뭔가 이상하다면 프로세스를 중지시키고 그냥 메모리에 없는 것이라면 backing store에서 찾는다.

 

 

4. 필요한 page를 찾아서 물리 메모리에서 빈 frame을 찾는다. 빈 frame이 없다면 교체 알고리즘으로 page in, page out을 수행해야 한다. 이때 프로그램은 wait queue에 들어가서 대기한다. 

4-1. free frame을 찾고 있을 때 CPU는 다른 프로그램에게 할당된다.

4-2. 찾았다면 CPU를 사용하고 있던 프로그램의 PCB를 저장하고 page fault를 발생시킨 프로그램의 PCB를 가져온다. 

 

교체 알고리즘은 아래 정리해 놨다.

2022.06.07 - [내가 하는 공부/운영체제 (OS)] - 운영체제 LRU ( Least Recently Used, FIFO, Belady's Anomaly, Page and Frame Replacement Alogorithms )

 

운영체제 LRU ( Least Recently Used, FIFO, Belady's Anomaly, Page and Frame Replacement Alogorithms )

Page and Frame Replacement Alogorithms page fault가 발생했을 때 빈 frame을 찾아서 할당해야 하는데 만약 빈 frame이 없다면 하나의 frame을 선택하여 page out 시켜야 한다. 이때 어느 frame을 선택할지에..

wpaud16.tistory.com

 

5. 그리고 물리 메모리에 올리면, page table을 update 한다. 즉, valid bit를 수정한다

 

 

6. page fault를 발생시킨 코드를 다시 시작한다.

 

이렇게 보면 page fault가 발생했을 때 생각보다 너무 많은 overhead가 발생된다. 메모리의 접근이 너무 많이 일어난다. page fault를 최소화하기 위해 여러 방법이 존재한다. frame의 사이즈를 키운다든가, TLB도 하나의 예이다.

 

반응형

댓글