참고
요구 페이징
NOTE
프로세스를 메모리에 적재할 떄 모든 페이지를 적재하지 않고 필요한 페이지만 적재하는 기법을 요구 페이징이라 한다!
프로세스를 페이지에 올리는 방식도 잘 생각해야한다.
페이지 폴트가 발생할 떄 마다 하나씩 적재하는 방식을 순수 요구 페이징이라 한다!
•
요구 페이징 기법은 페이지를 적재하다 보면 메모리가 가득차게 되어 스왑 아웃을 해야한다.
•
이 때 어떤 페이지를 스왑 아웃 할 것인지를 결정하는 방법을 페이지 교체 알고리즘이라고 한다.
•
페이지 교체 알고리즘은 페이지 폴트를 적게 일으킬수록 좋은 알고리즘이다!
•
페이지 폴트 횟수는 페이지 참조열을 통해 알 수 있다. (CPU가 참조하는 페이지중 연속된 페이지를 생략한 페이지열을 의미)
FIFO 페이지 교체 알고리즘
NOTE
FIFO 페이지 교체 알고리즘 ⇒ 가장 먼저 올라온 페이지부터 교체함!
•
초기에 적재된 페이지는 초반에만 실행되고 말 수도 있지만, 실행 내내 사용하는 경우를 생각하면 비효율적인 방식이다.
2차 기회 페이지 교체 알고리즘
NOTE
페이지3은 참조 비트가 1이라서 0으로 수정하고 냅둔다.
•
교체 대상 페이지가 참조된 적 없는 페이지일 경우 교체한다.
•
참조된 적이 있는 페이지느 참조 비트를 0으로 만든 후 현재 시간을 적재 시각으로 설정한다.
최적 페이지 교체 알고리즘
NOTE
최적 페이지 교체 알고리즘 (너무 이상적인 방법)
•
CPU에 의해 참조되는 횟수를 고려하는 방식
•
자수 사용될 페이지는 남기고, 앞으로 오랫동안 사용하지 않은 페이지는 교체할 수 있도록 한다.
•
“앞으로 오랫동안 사용하지 않을 페이지”를 예측하기 어려워 이론 상의 지표임
LRU(least recently used) 페이지 교체 알고리즘
NOTE
FIFO와 비교하면 페이지 폴트가 많이 줄어듬
•
최근에 사용되지 않은 페이지는 앞으로도 사용되지 않을거라고 예측하는 방식
•
마지막 사용 시각을 토대로 사용한지 가장 오래된 페이지 교체
스레싱과 프레임 할당
NOTE
프레임의 수가 적은 경우에도 페이지 폴트가 자주 발생한다. 이게 과해지면 프로세스 실행 시간보다 페이징에 더 많은 시간을 소요하여 성능 저하가 발생한다!
열심히 페이지를 상하차하고 있다.
상하차를 어느 난이도 까지는 열심히하지만, 결국 죽어버린다 (이게 스레싱임)
•
메모리에서 동시 실행되는 프로세스가 늘어 멀티프로그래밍의 정도가 높아지면 어느 정도 까지는 CPU 이용률이 높아지지만, 어느 순간 스레싱이 발생해서 성능이 저하된다.
•
근본적인 원인은 각 프로세스가 필요로하는 최소한의 프레임수가 보장되지 않았기 떄문
요약하면 이런 그래프가 생성된다.
정적 할당 방식
NOTE
프로세스의 실행 과정은 고려하지 않고 단순히 프로세스 크기와 물리 메모리의 크기만 고려한 프레임 할당 방식
•
균등 할당
◦
프로세스 개수에 따라 정확히 1/N 하여 할당
•
비례 할당
◦
프로세스 크기에 따라 비례하게 할당하는 방식
동적 할당 방식
NOTE
프로세스의 실행을 보고 할당한 프레임 수를 결정하는 방식!
•
작업 집합 모델
◦
프로세스가 일정 기간 동안 참조한 페이지 집합을 기억하여 작업 직합을 만든다.
◦
이 작업 집합의 크기에 따라 프레임을 할당
•
페이지 폴트 빈도
◦
페이지 폴트가 높다 ⇒ 프레임이 적으므로 늘린다
◦
페이지 폴트가 낮다 ⇒ 프레임이 많으므로 줄인다.
번외
페이징의 이점 (쓰기 시 복사)
NOTE
이론적인 fork()로는 부모 프로세스가 적재된 별도의 공간에 자식 프로세스가 통쨰로 복제된다.
(생성 시간 및, 메모리가 낭비됨_
부모 프로세스와 동일한 자식 프로세스가 복제되면 동일한 프레임을 가리킨다!
(단 쓰기 작업이 없다면 이 상황이 유지됨!)
기본적으로 프로세스는 자원을 공유하지 않기에, 쓰기작업으로 새로운 내용이온다면 별도의 공간에 메모리를 차지한다.
계층적 페이징
NOTE
프로세스 테이블의 크기를 줄이기 위해서 계층별로 나누는 방식!
페이지 테이블을 쪼개서, 가지고 있는 것
계층적 페이지 테이블을 참조하는 방법