Page Fault
가상메모리에서 물리 메모리에 올려두지 않은 페이지에 대한 요청이 들어와 발생하는 예외
페이지 폴트가 발생하면 운영 체제는 그 데이터를 메모리로 가져와서 마치 페이지 폴트가 전혀 발생하지 않은 것처럼 프로그램이 계속적으로 작동하게 해준다.
원인
Major Page Fault
요청한 페이지가 물리 메모리로부터 page-out 되어 보조기억장치의 가상 메모리에 저장되어있다면 해당 페이지를 다시 물리 메모리로 page-in 해야 하는데 이것을 major page fault라고 한다.
major page fault는 Disk I/O를 발생시킨다.
Minor Page Fault
요청한 페이지가 물리 메모리에는 로드되었지만 MMU에는 로드되어있지 않다고 표시된 경우 이를 Minor page fault라 한다.
Invalid Page Fault
블루 스크린 원인 중 하나이다.
요청한 페이지가 스왑영역의 밖을 참조하거나, 페이지를 쓰기 불가능한 영역에 쓰려고할 때 발생하는 페이지 폴트이다. 이 경우에는 페이지 폴트 핸들러가 세그멘테이션 폴트(Segmentation Fault)를 발생시킨다. 결과는 보통 커널 패닉(블루 스크린)으로 나타난다.
운영체제가 페이지 테이블을 이용하여, 요구 페이징을 수행하는 과정은 아래와 같다.
- page table을 통해 필요한 page가 없다면 (invalid) 즉, page fault
- 운영체제에 page fault trap을 발생시킨다.
2-1. 동작하고 있던 프로세스의 PCB를 메모리에 저장한다. - 그러면 운영체제는 다른 page table을 확인한다. 그리고 뭔가 이상하다면 프로세스를 중지시키고 그냥 메모리에 없는 것이라면 backing store에서 찾는다.
- 필요한 page를 찾아서 물리 메모리에서 빈 frame을 찾는다. 빈 frame이 없다면 교체 알고리즘으로 page in, page out을 수행해야 한다. 이때 프로그램은 wait queue에 들어가서 대기한다.
4-1. free frame을 찾고 있을 때 CPU는 다른 프로그램에게 할당된다.
4-2. 찾았다면 CPU를 사용하고 있던 프로그램의 PCB를 저장하고 page fault를 발생시킨 프로그램의 PCB를 가져온다. - 그리고 물리 메모리에 올리면, page table을 update 한다. 즉, valid bit를 수정한다
- page fault를 발생시킨 코드를 다시 시작한다.
물리 메모리에 비어있는 프레임이 없으면 어떻게 될까?
프로세스를 멈출 수는 없으므로, 희생 프레임을 골라서 이를 가상 메모리에 저장 후 필요한 페이지를 물리 메모리에 로드한다! 그리고 이 과정에서 페이지 교체 알고리즘(Page Replacement Algorithm)이 사용된다.
Thrashing
하드디스크의 입출력이 너무 많아져서 잦은 페이지 부재(Page fault)로 마치 작업이 멈추게 된 것처럼 보이는 상태
Page fault
프로그램이 자신의 주소 공간에는 존재하지만 시스템의 RAM에는 현재 없는 페이지에 접근 시도하였을 경우 발생하는 현상. 페이지 폴트가 발생하면 운영 체제는 그 데이터를 메모리로 가져와서 마치 페이지 폴트가 전혀 발생하지 않은 것처럼 프로그램이 계속적으로 작동하게 함
발생 원인
- 멀티프로그래밍 정도가 올라가면 한 프로세스가 사용할 수 있는 페이지 수가 적어짐.
- 페이지 수가 적어지면 page fault 발생률이 급격히 증가
- IO 계속 발생. CPU 사용량 줄어듦.
- CPU는 사용량이 줄어드니까 다른 프로세스를 만들어서 또 메모리 할당하고 돌림
- page fault
- IO 계속 발생. CPU 사용량 줄어듦.
- CPU는 사용량이 줄어드니까 다른 프로세스를 만들어서 또 메모리 할당하고 돌림
- 1~7을 반복
발생 방지
각 프로세스가 필요로 하는 최소한의 프레임의 적절한 개수를 보장해준다.
- 너무 적은 프레임을 할당 → page fault 잦아짐
- 너무 많은 프레임을 할당 → page fault 줄어듦. but 메모리 낭비 → 시스템의 성능이 낮아진다.
적절한 프레임 개수를 정하고 할당하는 데에는 정적 할당과 동적 할당 두가지 방식이 있다.
정적 할당
프로세스 실행 초기에 프레임을 나누어준 후 그 크기를 고정하는 방식
1. 균등 할당 방식 (프로세스의 크기와 상관 없이 사용 가능한 프레임을 모든 프로세스에 동일하게 할당)
문제점
크기가 큰 프로세스의 겨우 프레임 부족으로 page fault가 잦아지고 크기가 작은 프로세스는 되려 메모리를 낭비하게 된다.
2. 비례 할당 방식 (프로세스의 크기에 비례하여 프레임을 할당)
문제점
프로세스가 실행 중에 필요로 하는 프레임을 유동적으로 반영하지 못한다.
동영상 플레이어의 경우 프로그램 자체는 작은데 재생할 동영상 크기에 따라 몇십 배 큰 메모리를 필요로하는 경우도 있다. 그러나 비례 할당 방식은 유동적인 프레임 반영이 불가능하기 때문에 문제가 발생할 수 있다.
반대로, 사용하지 않을 메모리를 처음부터 미리 확보하며 공간을 낭비하게 될 수도 있다.
동적 할당
프로세스는 실행 중에 어떨 때는 많은 프레임이 필요하기도 하고 어떨 때는 적은 프레임만으로 작동하기도 하는데, 이렇게 시시각각 변하는 프레임 수 요청을 수용하는 방식이다.
1. 작업 집합 모델(working set model) 사용
작업 집합 모델은 지역성 이론을 바탕으로 하며, 가장 최근에 접근한 프레임이 이후에도 또 참조될 가능성이 높다는 가정에서 출발한다. 최근 일정 시간 동안 참조된 페이지들을 집합으로 만들고, 이 집합에 있는 페이지들을 물리 메모리에 유지하여 프로세스의 실행을 돕는다.
문제점
어떤 프레임을 물리 메모리에 유지해야 하는 지 알 수있지만 프로세스에 프레임을 얼마나 할당해야 하는지는 알 수 없다. 또한 프로세스의 성능을 높이는 방법이지만 스레싱 문제를 해결하지는 못한다.
2. 페이지 부재(Page fault) 빈도 사용 (페이지 부재 횟수를 기록하여 페이지 부재 비율을 계산)
페이지 부재 비율의 상한선과 하한선을 설정하고, 페이지 부재 비율이 상한선을 초과하면 프레임을 추가하여 늘리고 반대로 페이지 부재 비율이 하한선 밑으로 내려가면 할당한 프레임을 회수한다.