본문 바로가기
컴퓨터공학/운영체제

OS 10. Virtual Memory

by Jinger 2023. 5. 18.

서론

 메모리의 여러 관리 전략에 대해 논의하였다. 이러한 전략들은 모두 목적이 같다. 즉, 다중 프로그래밍을 실현하기 위해 메모리에 많은 프로세스를 동시에 유지하는 것이다. 그러나, 지금까지의 접근 방시은 프로세스 전체가 실행되기 전에 메모리로 올라와야 한다는 것을 전제로 하고 있다. 그렇기에 우리는 프로세스 전체가 메모리 내에 올라오지 않더라도 실행이 가능하도록 하는 기법인 가상 메모리(Virtual Memory)를 알아보자.


Virtual Memory Concepts

 가상 메모리는 제한된 물리 메모리 크기로 인해 실행되지 못할 프로그램을 실행할 수 있게 해 준다. 프로그램은 전체가 아닌 일부만 실행되기 때문에 필요한 부분만 메모리에 로드된다. 예를 들어, 큰 배열의 경우 실제로 사용되는 부분만 메모리에 올려 메모리 공간을 절약할 수 있다. 또한, 프로그램의 특정 옵션과 기능은 드물게 사용되므로 필요한 경우에만 메모리에 로드된다.


 가상 메모리는 논리적 메모리 주소 공간과 물리적 메모리 주소 공간을 분리한다. 이를 통해 논리적 메모리 주소 공간은 물리적 메모리보다 크게 구성할 수 있다. 프로세스가 실행될 때 필요한 부분만 물리 메모리에 로드되며, 나머지 부분은 보조 저장장치(하드 디스크 등)에 저장된다. 필요한 페이지는 요청에 따라 메모리로 스왑된다. 이로써 물리 메모리의 한계를 극복하고, 여러 프로세스 간에 메모리를 효율적으로 공유할 수 있다.
 가상 메모리는 대용량 프로그램 실행과 효율적인 메모리 관리를 가능하게 해주는 중요한 운영체제 기술이다. 프로세스가 실행될 때 필요한 부분만 메모리에 올리고, 필요하지 않은 부분은 보조 저장장치에 유지함으로써 메모리 자원을 최적화한다.

Virtual Address Space


요구 페이징(Demand Paging)

 요구 페이징(Demand Paging)은 가상 메모리 관리 기법 중 하나로, 프로세스의 실행에 필요한 페이지들을 필요할 때마다 요구하여 메모리에 로드하는 방식이다. 일반적으로 가상 메모리 시스템에서 사용되며, 프로세스의 모든 페이지를 처음에 한 번에 로드하는 것이 아니라 필요한 페이지만 메모리에 올려서 실행하는 방식이다.
 요구 페이징에서는 프로세스가 실행될 때, 처음에는 페이지 테이블에는 해당 페이지들이 메모리에 없음을 표시한다. 그러나 프로세스가 페이지를 요청하면, 운영체제는 해당 페이지를 디스크에서 메모리로 로드한다. 이를 통해 프로세스가 실제로 필요한 페이지만 메모리에 로드하므로 초기에 모든 페이지를 메모리에 올리는 비용을 줄일 수 있다. 또한, 프로세스의 실행 패턴에 따라 페이지를 동적으로 로드하여 필요한 메모리 공간을 절약한다. 프로세스가 실행되면서 필요한 페이지만 로드되고, 메모리에 남아있는 페이지들 중에서도 사용되지 않는 페이지는 디스크로 스왑된다. 필요한 페이지가 다시 요청되면 스왑된 페이지를 다시 메모리로 로드하게 된다.
 요구 페이징은 가상 메모리 시스템의 성능을 향상하고, 메모리 사용을 최적화하는 데 기여한다. 또한, 프로세스의 실행 패턴에 따라 동적으로 페이지를 로드하므로, 대용량 프로그램의 실행이 가능해지고 메모리 관리의 효율성을 높일 수 있다.

페이지 참조 시

 페이지를 참조할 때, 유효한(valid) 참조면 참조하고 유효하지 않은(invalid) 참조이면 현재 메모리에 없으므로 메모리로 가져온다. 다음 그림과 같이 유효-무효 비트(valid–invalid bit)는 각 페이지 테이블 항목과 연결된다.(v 메모리 내, i 메모리에 없거나 적합하지 않음(잘못된 주소, 보호 위반)) 주소 변환 중 유효-무효 비트가 i이면 페이지 폴트(page fault)이다.

Page table when some pages are not in main memory.

 유효하지 않은 페이지에 액세스하면 페이지 오류가 발생한다. OS 내에서 페이지 폴트 핸들러(Page fault handler)가 호출되어 다음과 같이 페이지 폴트를 처리한다.

  1. 잘못된 참조인가?
    • 잘못된 주소 또는 보호 위반인 경우 프로세스를 중단한다.
    • 메모리에 없으면 다음을 계속한다.
  2. 빈 페이지 프레임을 얻는다.
    • 빈 페이지 프레임이 없으면 일부 페이지 프레임(가용 페이지, free frame)을 교체한다.
  3. 페이지를 페이지 프레임으로 읽는다.
    • 이 프로세스는 디스크 I/O가 수행될 때까지 차단된다.
    • 디스크 I/O가 완료되면 페이지 테이블 항목을 유효로 설정한다.
    • 프로세스를 준비 대기열에 다시 삽입하고 나중에 발송한다.
  4. 페이지 오류를 일으킨 명령어를 다시 시작한다.

 

Page fault handling

요구 페이징의 성능

 페이지 폴트의 확률을 p(0 ≤ p ≤ 1.0)라고 하자. p = 0이면 페이지 폴트가 없다. p = 1이면 모든 참조가 오류이다. 우리는 주기억장치와 보조 저장장치(예: 하드 디스크) 사이에서 데이터에 접근하는 데 소요되는 전체 시간을 나타내는 지표인 Effective Access Time (실제 접근 시간, EAT)을 이용하여 성능을 판단한다.

EAT = (1 – p) x 메모리 액세스 시간 + p x 페이지 폴트 서비스 시간

 예를 들어, 메모리 액세스 시간 = 200ns, 평균 페이지 폴트 서비스 시간 = 8ms(=8,000,000 ns)이면 EAT = (1 – p) x 200 + p x 8,000,000 = 200 + p x 7,999,800으로 계산할 수 있다. 이는 1,000개의 액세스 중 하나가 페이지 폴트를 일으키는 경우 EAT = 8,200ns가 되고, 이것은 40배의 속도 저하를 의미한다. 즉, 페이지 폴트율(page fault rate)을 낮게 유지하는 것이 중요하다. 그렇기에 좋은 페이지 교체 정책이 필요합니다.


Page Replacement

 페이지 교체는 실제로 사용되지 않는 페이지를 찾아 교체하는 과을 의미한다. 좋은 페이지 교체 알고리즘은 페이지 폴트(페이지 부재)의 수를 최소화하는 알고리즘이다. 페이지 교체와 관련하여 "참조 지역"(Locality of reference)이라는 개념도 중요하다. 이는 동일한 페이지가 여러 번 메모리에 로드될 수 있는 현상을 의미한다. 실제 대부분의 프로그램에서는 특정 페이지나 페이지들이 집중적으로 참조되는 지역이 발생하며, 이를 "Loop"라고 한다. 이러한 프로그램 동작 패턴은 페이지 교체가 잘 작동하여 페이지 폴트를 최소화하는 기반이 된다.

 페이지 교체를 포함한 페이지 폴트 핸들러는 다음과 같은 단계를 수행한다.

  1. 디스크에서 필요한 페이지의 위치를 찾는다.
  2. 빈 프레임(free frame, 메모리의 공간)을 찾는다. 빈 프레임이 있으면 해당 프레임을 사용한다. 빈 프레임이 없는 경우 페이지 교체 알고리즘을 사용하여 희생될 페이지(victiom page)를 선택한다.
  3. 필요한 페이지를 (새로운) 빈 프레임으로 가져와서 페이지 테이블을 업데이트한다.
  4. 프로세스를 다시 시작한다.
 

 페이지 교체의 알고리즘 평가의 이상적인 알고리즘은 가장 낮은 페이지 폴트율을 갖는 알고리즘을 의미한다. 페이지 폴트 비율은 특정 메모리 참조 문자열(reference string)에서 발생하는 페이지 폴트의 수를 계산하여 알고리즘의 성능을 평가하는 데 사용된다. 다음에 소개할 알고리즘에서 {1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5}의 참고 문자열로 실행하고 계산하여 성능을 비교하여 최적의 알고리즘을 찾아보자.

The number of page faults vs. The number of frames

FIFO Page Replacement

 FIFO(First-In-First-Out) 페이지 교체 알고리즘은 페이지 교체를 위한 간단하고 직관적인 방법 중 하나이다. 이 알고리즘은 가장 먼저 메모리에 들어온 페이지를 교체하는 원리로 동작한다. FIFO 알고리즘은 페이지들을 메모리에 로드한 순서대로 큐(Queue)에 유지한다. 새로운 페이지가 메모리에 로드될 때마다 가장 오래전에 들어온 페이지를 교체 대상으로 선택한다. 이 때문에 FIFO 알고리즘은 가장 오래전에 메모리에 들어온 페이지가 가장 오랫동안 메모리에 남아있는 페이지일 수 있다.
 FIFO 알고리즘은 구현이 간단하고 오버헤드가 적은 편이지만, 페이지의 접근 패턴을 고려하지 않기 때문에 최적의 성능을 보장하지는 않는다. 예를 들어, 참조 지역이나 루프와 같은 특정 패턴이 있는 경우에도 가장 오래전에 들어온 페이지가 교체되어 메모리의 활용성이 떨어질 수 있다. 이러한 특성으로 인해 FIFO 알고리즘은 페이지 폴트 비율이 높을 수 있다. 즉, FIFO 알고리즘의 장점은 간단하고 구현이 쉽다는 것이다. 그러나 실제로는 페이지 접근 패턴을 고려하는 다른 페이지 교체 알고리즘들이 더 나은 성능을 보이는 경우가 많다.

 Belady의 이상 현상(Belady’s Anomaly)는 페이지 프레임(메모리의 공간)의 수를 늘릴수록 페이지 폴트(페이지 부재)의 수가 증가하는 현상을 말한다.

FIFO illustrating Belady’s Anomaly

Optimal Page Replacement

 Optimal Page Replacement (최적 페이지 교체) 알고리즘은 페이지 교체를 위한 가장 이상적인 알고리즘이다. 이 알고리즘은 페이지 폴트를 최소화하는 최적의 결정을 내릴 수 있는 알고리즘이다. 하지만 실제로는 구현하기 어려운 알고리즘이다. 최적 페이지 교체 알고리즘은 미래에 참조될 페이지 중에서 가장 오랫동안 사용되지 않을 페이지를 교체하는 방식으로 동작한다. 그러나 최적 페이지 교체 알고리즘은 실제로 구현하기 어렵다. 그렇기에 최적 페이지 교체 알고리즘은 페이지 교체 알고리즘의 성능을 평가하는 기준으로 사용된다. 다른 페이지 교체 알고리즘과의 성능 비교를 통해 어떤 알고리즘이 최적에 가까운 성능을 보이는지를 확인할 수 있다.

더보기

 최적 페이지 교체 알고리즘은 미래에 참조될 페이지 중에서 가장 오랫동안 사용되지 않을 페이지를 교체하는 방식으로 동작한다. 이를 위해 알고리즘은 메모리에 현재 로드된 페이지들을 분석하고, 그중에서 가장 먼 미래에 참조될 페이지를 선택하여 교체한다. 따라서 최적 페이지 교체 알고리즘은 페이지 폴트를 최소화할 수 있다.

 그러나 최적 페이지 교체 알고리즘은 실제로 구현하기 어렵다. 이 알고리즘은 미래의 참조 패턴을 예측해야 하기 때문에 사전에 모든 페이지 참조 패턴을 알고 있어야 한다. 하지만 실제로는 이러한 미래의 참조 패턴을 사전에 알 수 없으므로, 최적 페이지 교체 알고리즘을 실제 시스템에서 사용하는 것은 불가능하다.
 최적 페이지 교체 알고리즘은 페이지 교체 알고리즘의 성능을 평가하는 기준으로 사용된다. 다른 페이지 교체 알고리즘과의 성능 비교를 통해 어떤 알고리즘이 최적에 가까운 성능을 보이는지를 확인할 수 있다.

 다른 프레임 예시 {1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5}인 경우 아래와 같은 결과를 얻을 수 있다. 최적 알고리즘은 알고리즘이 얼마나 잘 수행되는지 최적의 알고리즘은 페이지 부재율의 하한값을 제시함으로써 사용된다. 

LRU (Least Recently Used)

 LRU (Least Recently Used)는 페이지 교체 알고리즘 중 하나로, 가장 최근에 사용되지 않은 페이지를 교체하는 방식으로 동작한다. LRU 알고리즘은 가장 오랫동안 참조되지 않은 페이지를 교체함으로써 페이지 폴트를 최소화하려는 목적을 가지고 있다.

 LRU은 가장 최근에 참조된 페이지는 미래에 또다시 참조될 가능성이 높다는 가정에 기반하여 동작한다. 따라서 LRU 알고리즘은 가장 오랫동안 참조되지 않은 페이지를 교체하여 새로운 페이지를 메모리에 올리는 방식으로 페이지 교체를 수행한다. LRU 알고리즘은 페이지 참조에 따라 페이지들을 순서대로 정렬하거나, 최근에 참조된 페이지에 대한 정보를 유지하고 관리함으로써 동작한다. 일반적으로는 페이지 참조 시마다 해당 페이지를 가장 최근으로 업데이트하여 LRU 리스트의 맨 앞에 위치시킨다. 그리고 교체가 필요한 경우, LRU 리스트의 가장 뒤에 위치한 페이지를 교체 대상으로 선택한다.

 LRU 알고리즘은 페이지 참조의 패턴을 고려하여 페이지 폴트를 최소화하는 장점을 가지고 있다. 그러나 LRU 알고리즘은 추가적인 데이터 구조나 시간적인 비용이 필요하며, 실제로 구현하기에 상대적으로 복잡할 수 있다. 그러나 많은 운영체제에서는 LRU 알고리즘 또는 LRU의 변형이 페이지 교체를 위해 주로 사용되는 알고리즘 중 하나이다.

LRU (Least Recently Used) 알고리즘을 구현하는 방법은 다음과 같다

  1. 각 페이지마다 참조 시간을 기록해야 한다.
  2. 가장 오래된 참조 시간을 가진 페이지를 찾아야 한다.

 하지만 이 방법은 공간과 시간의 오버헤드가 크기 때문에 근사 알고리즘들이 제안되었다. 일반적인 LRU 알고리즘 구현 방법 중 두 가지는 다음과 같다.

  • 카운터 구현(Counter implementation): 각 페이지 항목마다 카운터를 가진다. 페이지가 참조될 때마다 카운터를 증가시킨다. 페이지 A가 참조되면 해당 페이지의 카운터에 현재 시간을 복사한다. 가장 작은 카운터 값을 가진 페이지를 교체한다.
  • 스택 구현(Stack implementation): 페이지들의 스택을 유지한다. 페이지가 참조되면 해당 페이지를 스택의 맨 위로 이동시킵니다. 교체를 위한 검색이 필요하지 않다.

 이러한 구현 방법을 통해 LRU 알고리즘을 실제로 구현할 수 있다. 하지만 완벽한 LRU 알고리즘은 공간과 시간의 오버헤드가 크기 때문에 근사 알고리즘들이 제안되고 사용되기도 한다. 이러한 근사 알고리즘들은 LRU 알고리즘의 성능을 근사적으로 흉내 내면서도 구현이 더 간단하고 효율적이다.

Stack implementation

LRU Approximation Algorithms

 LRU 근사 알고리즘들 중 몇 가지 방법이 있다. 그중 참조 비트 (Reference bit)와 Second chance 페이지 교체 알고리즘 (시계 알고리즘)을 알아보자. 

  • 참조 비트(Reference bit)는 많은 시스템에서는 LRU 페이지 교체를 위해 하드웨어 지원을 제공한다. 각 페이지마다 참조 비트를 가지며, 초기에는 0으로 설정된다. 페이지가 참조될 때마다 해당 비트는 1로 설정된다. 교체할 페이지를 선택할 때, 참조 비트가 0인 페이지를 교체한다 (만약 0인 페이지가 존재한다면). 하지만 참조 순서를 정확히 알 수는 없다.
  • Second chance 페이지 교체 알고리즘 (시계 알고리즘)교체해야 할 페이지의 참조 비트가 1인 경우, 해당 페이지를 메모리에 남겨둔다. 그리고 참조 비트를 0으로 설정한다. 다음 희생될 페이지를 선택하기 위해 포인터를 이동시키는데, 참조 비트가 0인 페이지를 찾을 때까지 포인터를 계속 이동시킨다.


 이러한 근사 알고리즘들은 LRU 알고리즘의 근사치를 제공하면서도 구현이 간단하고 효율적이다. 하지만 완벽한 LRU 알고리즘과는 다소 차이가 있을 수 있다. 이러한 근사 알고리즘들은 페이지 교체를 위해 많이 사용되며, 실제 시스템에서 LRU의 근사치를 제공하는 데 유용하다.

Counting Algorithms

 LFU(Least Frequently Used) 알고리즘은 페이지 교체를 위한 알고리즘으로, 페이지의 참조 횟수를 기록하고 가장 적게 참조된 페이지를 교체하는 방식을 사용한다. 각 페이지마다 참조된 횟수를 유지하며, 페이지가 참조될 때마다 해당 페이지의 참조 횟수를 증가시킨다. 교체가 필요한 경우, 참조 횟수가 가장 작은 페이지를 교체한다. 이를 통해 자주 참조되지 않는 페이지를 교체하여 시스템의 성능을 향상할 수 있다.

 Counting Algorithms(카운팅 알고리즘)은 LFU 중 하나로, 페이지마다 참조 횟수를 기록하고 교체할 페이지를 선택하는 방식을 사용한다. 이러한 알고리즘들은 페이지가 참조될 때마다 해당 페이지의 카운터 값을 증가시킴으로써 페이지의 참조 빈도를 추적한다.


Allocation

 이전의 교체 알고리즘은 페이지 부재가 발생할 때 희생자 페이지를 선택하는 방식으로 동작한다. 이러한 알고리즘들은 고정 할당(fixed allocation)을 가정하고 있으며, 가변 할당(variable allocation)을 고려하지 않는다. 그렇다면 페이지 부재가 발생할 때 한 개의 페이지 프레임을 추가로 할당하는 것은 왜 고려하지 않을까? 할당 문제는 페이지 부재가 발생할 때 할당 크기를 결정하는 문제이다. 고정 할당(fixed allocation)이나 우선순위 할당(priority allocation)과 같은 방식으로 할당 크기를 결정한다.

Fixed Allocation

 고정 할당 (fixed allocation)은 페이지 부재가 발생하면 사전에 정해진 페이지 프레임 크기만큼 할당한다. 이 방식은 간단하고 예측 가능하지만, 프로세스의 요구에 따라 가용한 메모리를 최적으로 활용하지 못할 수 있다. 이 중에서 두 가지 방식이 일반적으로 사용된다.

  • Equal Allocation(균등 할당): 메모리의 프레임을 공정하게 분배하는 방식이다. 예를 들어, 100개의 프레임이 있고 5개의 프로세스가 있다면, 각 프로세스에 20개의 프레임을 할당한다. 이 방식은 각 프로세스가 동등한 자원을 가지도록 보장한다.
  • Proportional Allocation(비례 할당): 프로세스의 크기에 따라 메모리를 할당하는 방식이다. 각 프로세스의 크기에 비례하여 메모리를 할당한다. 예를 들어, 프로세스 A가 프로세스 B보다 큰 경우, A에 더 많은 메모리를 할당한다. 이 방식은 프로세스의 크기를 고려하여 자원을 할당하여 효율적인 메모리 사용을 도모한다.

Proportional allocation

 고정 할당은 메모리를 정적으로 분배하기 때문에 실행 중인 프로세스의 요구에 유연하게 대응할 수 없는 한계가 있다. 하지만 단순하고 예측 가능한 방식으로 자원을 할당하므로 구현이 간단하고 오버헤드가 적다는 장점이 있다.

Priority Allocation

 우선 순위 할당 (Priority Allocation)은 비례 할당 방식을 사용하여 메모리를 할당하는 방법이다. 하지만 크기가 아닌 우선순위를 기준으로 메모리를 할당한다. 높은 우선 순위를 가진 프로세스에 더 많은 메모리를 할당한다. 우선순위 할당은 프로세스의 중요도에 따라 자원을 분배하는 데 중점을 둔다. 프로세스의 우선 순위는 다양한 요인에 따라 결정될 수 있으며, 일반적으로 프로세스의 중요성, 작업의 긴급성 또는 다른 시스템 요구 사항을 반영할 수 있다. 높은 우선 순위를 가진 프로세스에 더 많은 메모리를 할당함으로써, 시스템에서 중요한 작업을 보다 우선적으로 처리할 수 있게 된다.
 우선 순위 할당은 메모리 할당의 유연성을 제공하면서도 중요한 프로세스에게 우선권을 부여하는 장점이 있다. 이 방식을 사용하여 시스템의 성능을 최적화하고 자원을 효율적으로 활용할 수 있다.

Global vs. Local Allocation

 전역 교체(Global replacement)는 프로세스가 모든 페이지 프레임 중에서 교체할 프레임을 선택하는 방식이다. 이는 한 프로세스가 다른 프로세스의 프레임을 가져갈 수 있는 방식이다. 반면에 지역 교체(Local replacement)각 프로세스가 자신에게 할당된 페이지 프레임 집합에서만 교체할 프레임을 선택하는 방식이다. 다른 프로세스의 프레임은 직접적으로 접근할 수 없다.
 전역 교체는 프로세스 간에 페이지 프레임을 공유하고 경쟁이 발생할 수 있으며, 한 프로세스가 다른 프로세스의 페이지를 강제로 교체할 수 있는 유연성을 제공한다. 반면에 지역 교체는 각 프로세스가 자신에게 할당된 페이지 프레임에서만 작업하기 때문에 독립성과 안정성이 높아지는 장점이 있다.
 전역 교체와 지역 교체는 메모리 관리 정책에서 중요한 개념이며, 프로세스 간의 자원 공유와 독립성, 성능 등을 고려하여 적절한 방식을 선택해야 한다.


Thrashing

 스레싱(Thrashing)은 프로세스가 충분한 페이지를 갖지 못할 때 페이지 폴트 비율이 매우 높게 발생하는 현상이다. 이로 인해 CPU 이용률이 낮아지며, 운영 체제는 다중프로그래밍 정도를 증가시켜야 한다고 판단하여 시스템에 추가 프로세스를 추가한다. 스레싱이 발생하면 프로세스는 페이지를 반복해서 스왑하여 작업에 바쁘게 된다. 스레싱이 발생하는 이유는 지역성의 크기의 합이 총 메모리 크기보다 큰 경우이다. 즉, 프로세스가 필요로 하는 페이지의 크기가 시스템의 전체 메모리 크기를 초과하는 경우에 스레싱이 발생할 수 있다. 스레싱은 성능 저하와 작업 지연을 초래하며, CPU 및 메모리 자원을 비효율적으로 사용하게 된다. 이를 방지하기 위해서는 충분한 페이지 할당, 적절한 다중프로그래밍 정도 조절, 지역성 관리 등의 조치가 필요하다.

Σ size of locality > total memory size

Working-set Model

 Working-set(작업 집합) 모델은 메모리 참조 패턴에서의 지역성을 나타낸다. 시간 지역성(Temporal locality)은 상대적으로 짧은 시간 동안 특정 데이터나 리소스를 반복적으로 재사용하는 것을 말한다. 공간 지역성(Spatial locality)은 상대적으로 가까운 저장 위치 내에서 데이터 요소를 사용하는 것을 말한다.
 작업 집합 모델은 프로세스가 작업에 필요한 페이지 집합을 나타내는 데 사용된다. 이 모델은 작업 집합에 대한 공간 및 시간 지역성을 기반으로 페이지 부재를 예측하고 페이지 교체 정책을 결정하는 데 활용된다. 작업 집합에는 프로세스가 최근에 참조한 페이지들이 포함되며, 이를 기반으로 메모리 할당과 페이지 교체를 조절하여 성능을 최적화할 수 있다.
 작업 집합 모델은 지역성의 개념을 활용하여 메모리 관리에 중요한 역할을 합니다.

Locality in a memory-reference pattern

 작업 집합 모델은 지역성을 가정으로 하는 모델이다. ∆ (working-set window)는 고정된 페이지 참조의 수로 정의된다. WSSi (Process Pi의 working set)는 최근 ∆ 내에서 참조한 페이지의 총 수이다. ∆가 너무 작으면 전체 지역성을 포괄하지 못한다. ∆가 너무 크면 여러 지역성을 포괄하게 된다. ∆ = ∞ 인 경우, 전체 프로그램을 포괄하게 된다. D = Σ WSSi는 총 요구 프레임 수를 의미한다. D > m인 경우, 스레싱이 발생한다. 이 경우 하나의 프로세스를 중단시키는 조치를 취할 수 있다.
 작업 집합 모델은 지역성을 기반으로 프로세스의 작업 집합을 추적하고 페이지 부재와 스레싱을 예측하는 데 사용된다. 프로세스의 작업 집합 크기를 적절히 관리하고 메모리 할당을 조절하여 스레싱을 방지하고 시스템의 성능을 향상할 수 있다.

Working set example

Page-Fault Frequency Scheme

 페이지 폴트 빈도 방식(Page-Fault Frequency Scheme, PFF)은 "허용 가능한" 페이지 폴트 비율을 설정하는 방식이다. 만약 실제 페이지 폴트 비율이 너무 낮다면, 프로세스는 프레임을 상실하고 만약 실제 페이지 폴트 비율이 너무 높다면, 프로세스는 프레임을 획득한다.

이러한 방식을 통해 페이지 폴트 비율을 모니터링하고 프레임 할당을 조절하여 페이지 폴트의 적절한 수준을 유지할 수 있다. 페이지 폴트 비율이 허용 범위를 벗어나면 프로세스의 프레임 할당이 조정되어 최적의 성능을 유지할 수 있다.


핵심

  • 가상 메모리는 완전히 메모리에 있지 않은 프로세스의 실행을 허용하는 메커니즘이다.
  • 주문형 페이징. 페이지는 필요할 때만 메모리로 가져온다.
  • 페이지 부재율을 낮게 유지하는 것이 중요하다. 이를 위해서는 좋은 페이지 교체 정책이 필요하다.
  • LRU는 가장 최근에 사용한 페이지를 교체한다.
  • 프로세스에 페이지 프레임이 충분하지 않으면 스래싱이 발생한다.
반응형

'컴퓨터공학 > 운영체제' 카테고리의 다른 글

12. I/O Systems  (0) 2023.05.18
OS 11. Mass-Storage Structure  (0) 2023.05.18
OS 9. Main Memory  (0) 2023.05.18
OS 8. Deadlocks  (1) 2023.05.16
OS 7. 동기화 예제  (0) 2023.04.06

댓글