Virtual Memory (가상 메모리) - 3

이유석·2022년 3월 16일
0

CS - Operating System

목록 보기
17/20

Allocation of Frames

정의

  • Demand Paging에서는 프로세스가 당장 수행해야 할 부분에 대해서 최소한의 Frame만을 할당하게 됩니다.
  • 프로세스에게 Frame을 할당해주는 여러가지 방법들이 존재합니다.

1. Fixed Allocation VS Priority Allocation

Fixed Allocation
프로세스에게 고정된 양의 Frame을 할당해줍니다.

  • Equal Allocation : 프로세스의 목적과 성격에 상관없이 모든 프로세스에게 동등한 양의 Frame을 할당해줍니다.
  • Proportional Allocation : 각 프로세스의 사이즈에 비례하여 Framed을 할당해줍니다.

Priority Allocation
우선순위가 더 높은 프로세스에게 더 많은 양의 Frame을 할당해줍니다.

  • 보다 많은 Frame을 할당해주게 된다면, Page Fault횟수는 그만큼 감소하게 되고 프로세스는 작업을 더 빨리 마치게 됩니다.

  • 즉, 우선순위가 높은 프로세스가 작업을 빨리 마치고 Frame을 반환하게 하여 Frame의 순환율을 높이기 위한 방법입니다.

2. Global Replacement VS Local Replacement

Global Replacement
Victim Page를 찾을 때, 모든 프로세스의 모든 페이지에서 Victim을 찾는 방식입니다.

Local Replacement
Victim Page를 찾을 때, 해당 프로세스 내에서만 Victim을 찾는 방식입니다.


Trashing

Page Replacement로 인해 발생하는 문제점

원인

  • 가상 메모리 기법의 구현 원리
    • 그때그때 필요한 부분만을 메모리에 올려 실행하는 것이고, 당장 실행에 필요하지 않는 부분은 디스크에 보관
    • 메모리에 올라간 부분들은 Page Table에 표시가 되며 각각은 할당받은 물리 메모리의 Frame에 올라가게 됩니다.
  • 만약 현재 실행시점에서 필요한 부분이 물리 메모리상에 존재하지 않고 디스크에 존재하고 Free Frame이 없다면,
    • 디스크에서 필요한 부분을 찾은 후 Swap Out시킬 Victim Frame을 찾습니다.
    • Victim Frame을 차지하고 있는 Page를 디스크로 보내거나 해당 Frame을 덮어씌운 후, 새로 올린 부분의 명령어를 다시 실행시킵니다.
    • 이러한 현상을 Page Fault라고 합니다.
  • Page Fault는 대표적인 CPU 자원 효율성을 떨어뜨리는 현상 중 하나 입니다.
    • 그 이유는 자원을 할당받은 시간 내에 CPU 자원을 사용하기 보다는 I/O 작업에 시간을 더욱 소비하기 때문입니다.
  • Multi Programming 과 Page Fault 간의 관계를 아래 그래프로 나타낼 수 있습니다.
    • Multi Programming은 CPU 자원의 효율성을 높이기 위해 보다 많은 프로세스에게 CPU를 할당해주면서, 자원을 더욱 바쁘고 효율적으로 관리하는 기법입니다.

  • 한정된 자원 안에서 운영체제는 CPU의 효율성을 높이기 위해 보다 많은 프로세스를 동시에 실행합니다.
    이를 위해, 메모리에 많은 프로세스를 올리게 됩니다.

  • 이로써 CPU 효율성은 높아지게 됩니다.
    하지만 동시에 실행중인 프로세스의 수가 많아질수록 하나의 프로세스가 할당받는 자원의 양은 점점 작아집니다.

  • 그렇게 된다면 각각의 프로세스가 할당받는 Frame의 수도 적어지게 됩니다.
    즉, Page Fault가 많이 발생하게 되고, 자원의 활용보다는 I/O 작업에 시간을 더욱 소비하게 됩니다.
    이렇게 되면 프로그램의 진행속도는 굉장히 느려지고 CPU 효율성 역시 굉장히 떨어지게 됩니다.

  • 여기서 문제점은 운영체제는 이러한 CPU 효율성의 저하를 극복하기 위해 메모리에 프로세스를 더욱 많이 올리게 됩니다.

  • 이런 악순환으로 CPU 효율성은 기하급수적으로 떨어지게 되고, 결국에는 프로그램의 비정상적인 종료로 이어지게 됩니다.

이러한 현상을 Trashing 이라고 합니다.

To Prevent Thrashing

Trashing 현상을 막기 위해서는 매 실행 시점마다 프로세스가 필요로 하는 Frame 수만큼을 할당해주어야 합니다.

하지만, 전체가 아닌 실행시간마다 필요한 만큼의 Frame 수를 정확하게 알기는 불가능합니다.

Locality를 통해 필요한 Frame의 양을 예측해볼 수 있습니다.

Locality : 기억 장치 내의 정보를 균일하게 접근하는 것이 아니라, 한 순간에 특정 부분을 집중적으로 참조하는 특성
특정한 해당 시점에서 실행되기 위해 필요한 Page들의 집합

  • 즉, 그 Locality만큼을 담을 수 있는 Frame의 양을 할당해주면 Trashing 현상을 막을 수 있습니다.

그리고 이러한 Locality Map에서 현시점에서부터 일정 시점 전의 Locality를 바탕으로 현재의 Locality 영역을 예측하게 됩니다.

Locality가 분기되는 시점(Locality의 영역이 급변)에서는 순간 Page Fault의 횟수가 치솟게 되지만, 시간이 지날수록 수치는 안정적인 값을 찾게 됩니다.

Workgin Set Size는 보다 정확한 Locality를 추정하기 위해서는 신중하게 결정되어야 합니다.

Working Set Size : 현재 시점으로부터 과거의 Locality를 측정하는 시점의 간격

profile
https://github.com/yuseogi0218

0개의 댓글