[운영체제] 가상메모리 - 페이지 교체와 프레임 할당

byeol·2023년 3월 28일
0
post-thumbnail

가상 메모리를 통해 작은 물리 메모리보다 큰 프로세스를 저장할 수 있다.
그렇지만 여천히 메모리의 크기는 한정적이다.

그래서 운영체제가 해야할 일은 더 남아있다.
불필요한 페이지가 선별되지 않도록 해야하면
프로세스들에 적절한 프레임 수를 할당해서 자주 스와핑이 일어나지 않도록 하는 것도 조절해줘야 한다.

오늘은 이 두가지에 대해 정리한다.


요구 페이징

프로세스를 메모리에 적재할 때 처음부터 모든 페이지를 적재하지 않고 필요한 페이지만을 메모리에 적재하는 기법

요구 페이징의 기본적인 양상

    1. CPU가 특정 페이지에 접근하는 명령어를 실행
    1. 해당 페이지가 현재 메모리에 있을 경우 (유효 비트 1) CPU는 페이지가 적재된 프레임에 접근한다.
    1. 해당 페이지가 현재 메모리에 없을 경우 (유효 비트0) 페이지 폴트가 발생한다.
    1. 페이지 폴트 처리 루틴은 해당 페이지를 메모리에 적재하고 유효 비트를 1로 설정한다.
    1. 다시 1번 수행

+) 아무런 페이지도 메모리에 적재하지 않은 채 무작정 실행부터 하는 방법, 처음부터 페이지 폴트가 계속 발생하고 실행에 필요한 페이지가 어느 정도 적재된 이후부터는 페이지 폴트 발생 빈도가 떨어진다. 이를 순수 요구 페이징이라고 한다.

안정적인 요구 페이징 시스템을 위한 페이지 교체 알고리즘

페이지 교체는 메모리가 꽉 찼을 때 페이지를 보조기억장치로 쫓아내고
다음 페이지를 메모리에 적재하는 것

그리고 쫓아낼 페이지를 결정하는 기법을 페이지 교체 알고리즘이라고 한다.

좋은 페이지 교체 알고리즘 = 페이지 폴드 발생 빈도가 적은 알고리즘

따라서 짚고 넘어갈 단어

  • 페이지 폴트 횟수 : 페이지 참조열을 통해 알 수 있다.
  • 페이지 참조열 : CPU가 참조하는 페이지들 중 연속된 페이지를 생략한 페이지열
    페이지 접근 : 2 2 2 3 5 5 5 3 3 7
    페이지 열 : 2 3 5 3 7

FIFO 페이지 교체 알고리즘

가장 먼저 올라온 페이지부터 내쫓는 방식

가장 먼저 올라온 페이지들 중에 계속 사용될 페이지가 있었을 수도 있기 때문에 좋은 방법이 아니다.

2차 기회 페이지 교체 알고리즘

FIFO 페이지 교체 알고리즘의 방식을 개선한
만약 먼저 적재되어 나가야 한다면 참조비트를 보고 참조비트가 1이면 0으로 바꾸고 그대로 메모리에
그러나 먼저 적재되어 나가야 하는데 참조비트가 0이면 바로 스왑 아웃이다.

최적 페이지 교체 알고리즘

앞으로 사용빈도가 가장 낮은 페이지를 교체하는 알고리즘 (먼 미래를 내다보고 예측)
가장 합리적이지만 실제로 구현하는 것이 어렵다.

따라서 실제로 이용되지 않고 다른 페이지 교체 알고리즘의 성능 평가를 할 때 이용된다. 페이지 폴트 횟수의 하한선이 되며 이 하한선을 기준으로 평가한다.

LRU(Least Recently Used) 페이지 교체 알고리즘

가장 오랫동안 사용되지 않은 페이지를 교체하는 알고리즘(과거 데이터를 바탕으로 예측)

안정적인 요구 페이징 시스템을 위한 프레임 할당

스래싱

페이지 폴트가 자주 발생하는 이유

  • 나쁜 페이지 교체 알고리즘
  • 프로세스가 사용할 수 있는 프레임 수가 적은 경우

하지만 더 근본적인 이유는 프로세스가 사용할 수 있는 프로렘 수가 적기 때문이다. 프레임 수가 적다면 페이지 교체가 많이 발생하기 때문에
CPU의 성능이 저해되는 문제
가 발생하고 이를 스래싱이라고 한다.

위 그림을 보면 멀티프로그래밍 즉 메모리에 적재되어 동시에 실행되는 프로그램의 수가 많아지면 CPU의 성능이 증가한다.
하지만 어느 순간 감소하는데 멀티 프로그래밍의 정도가 너무 크면 메모리에 페이지 폴트가 빈번하게 발생하여 CPU의 성능을 떨어트리기 때문이다.

스래싱 해결 방법 : 최소한의 프레임 수 보장

이 방법을 프레임 할당 방식이라고 한다.

즉 프로세스 A에게 보장하는 프레임의 수가 5인과 10인 것을 비교해보면 프로세스 A의 최소 10개가 필요하기 때문에 프레임 수가 5라면 빈번한 페이지 폴트를 발생시킨다.

따라서 운영체제는 각 프로세스가 무리없이 실행하기 위하 최소한의 프레임 수를 파악하고 프로세스에게 적절한 프레임 수를 할당해줘야 한다.

프레임 할당 방식

  • 정적 할당 방식 : 실행 과정을 고려하지 않고 단순히 프로세스의 크기와 물리 메모리 크기만 고려
    • 균등 할당
      모든 프로세스에게 균등한 프레임 수를 보장하는 것
      그러나 좋은 방법이 아니다. 왜냐하면 상대적은로 프레임 수가 많이 필요한 프로세스가 있고 필요없는 프로세스가 있는데 이를 구분하지 않는다
    • 비례 할당
      프로세스의 크기가 크면 프레임 많이, 작으면 적게
      하지만 프로세스 크기가 작아도 실행해 보니 많이 필요한 경우가 있고
      커도 실행해보면 적게 필요한 경우가 있다
  • 동적 할당 방식 : 프로세스를 실행해보고 프레임 수 결정
    • 작업 집합 모델 프레임 할당
      프로세스가 일정 기간 동한 참조한 페이지 집합을 기억하여 빈번한 페이지 교체를 방지
      작업 집합 = 일정한 시간 동안 참조한 페이지의 집합
      • 프로세스가 참조한 페이지
      • 일정 시간 간격
    • 페이지 폴트 빈도 프레임 할당

      페이지 폴트 빈도 프레임 할당 방식은 페이지 폴트율에 상한선과 하한선을 정하고, 이 범위 안에서만 프레임을 할당하는 방식
profile
꾸준하게 Ready, Set, Go!

0개의 댓글

관련 채용 정보