시계 페이지 교체 알고리즘-기존 페이지


9

시계 페이지 교체 알고리즘을 시뮬레이션 할 때 이미 메모리에있는 참조가 들어올 때 시계 바늘이 계속 증가합니까?

예를 들면 다음과 같습니다.

4 개의 슬롯으로 시계 페이지 교체 알고리즘 사용

참조 목록 : 1 2 3 4 1 2 5 1 3 2 4 5

초기 목록은 다음과 같습니다.

-> [1][1]
   [2][1]
   [3][1]
   [4][1]

삽입에 대한 다음 참조는 1, 2입니다. 핸드가 1 이후 1을 가리키고 2 이후를 가리킬까요? 다시 말해, 5를 삽입하면 시계는 다음과 같습니다.

-> [5][1]
   [2][0]
   [3][0]
   [4][0]

?

답변:


9

나는이 예가 당신의 모든 의심을 분명히 할 수 있다고 생각합니다.

예를 들어 :
시작 페이지에서 주 메모리가 비어 있다고 가정합니다. 참조 시퀀스는 다음과 같습니다.
3 2 3 0 8 4 2 5 0 9 8 3 2프레임 당 하나의 참조 비트 ( "사용 된"비트라고 함)

  PU 3 PU 2 PU 3 PU 0 PU 8 PU 4
+ --- + --- + + --- + --- + + --- + --- + + --- + --- + + --- + --- + + --- + --- +
| | 0 | * | 3 | 1 | | 3 | 1 | | 3 | 1 | | 3 | 1 | | 3 | 1 |
+ --- + --- + + --- + --- + + --- + --- + + --- + --- + + --- + --- + + --- + --- +
| | 0 | | | 0 | * | 2 | 1 | | 2 | 1 | | 2 | 1 | | 2 | 1 |
+ --- + --- + + --- + --- + + --- + --- + + --- + --- + + --- + --- + + --- + --- +
| | 0 | | | 0 | | | 0 | * | | 0 | * | 0 | 1 | | 0 | 1 |
+ --- + --- + + --- + --- + + --- + --- + + --- + --- + + --- + --- + + --- + --- +
| | 0 | | | 0 | | | 0 | | | 0 | | | 0 | * | 8 | 1 |
+ --- + --- + + --- + --- + + --- + --- + + --- + --- + + --- + --- + + --- + --- +
| | 0 | | | 0 | | | 0 | | | 0 | | | 0 | | | 0 | *
+ --- + --- + + --- + --- + + --- + --- + + --- + --- + + --- + --- + + --- + ----  


  PU 2 PU 5 PU 0 PU 9 PU 8 PU 3
+ --- + --- + + --- + --- + + --- + --- + + --- + --- + + --- + --- + + --- + --- +
| 3 | 1 | * | 3 | 1 | * | 5 | 1 | | 5 | 1 | | 5 | 1 | | 5 | 1 |
+ --- + --- + + --- + --- + + --- + --- + + --- + --- + + --- + --- + + --- + --- +
| 2 | 1 | | 2 | 1 | | 2 | 0 | * | 2 | 0 | * | 9 | 1 | | 9 | 1 |
+ --- + --- + + --- + --- + + --- + --- + + --- + --- + + --- + --- + + --- + --- +
| 0 | 1 | | 0 | 1 | | 0 | 0 | | 0 | 1 | | 0 | 1 | * | 0 | 1 | *
+ --- + --- + + --- + --- + + --- + --- + + --- + --- + + --- + --- + + --- + --- +
| 8 | 1 | | 8 | 1 | | 8 | 0 | | 8 | 0 | | 8 | 0 | | 8 | 1 |
+ --- + --- + + --- + --- + + --- + --- + + --- + --- + + --- + --- + + --- + --- +
| 4 | 1 | | 4 | 1 | | 4 | 0 | | 4 | 0 | | 4 | 0 | | 4 | 0 |
+ --- + --- + + --- + --- + + --- + --- + + --- + --- + + --- + --- + + --- + ----  


  PU 2 PU   
+ --- + --- + + --- + --- + 
| 5 | 1 | * | 5 | 0 |
+ --- + --- + + --- + --- + 
| 9 | 1 | | 9 | 0 |
+ --- + --- + + --- + --- +
| 0 | 0 | | 2 | 1 |   
+ --- + --- + + --- + --- +  
| 8 | 0 | | 8 | 0 | *
+ --- + --- + + --- + --- + 
| 3 | 1 | | 3 | 1 |  
+ --- + --- + + --- + --- +  

* = 스캔 할 다음 위치를 식별하는 포인터를 나타냅니다. 
P = 해당 프레임에 저장된 페이지 번호 
U = 사용 된 플래그 
0 = 최근에 사용되지 않은 
1 = 최근 참조

이것을 BSD Linux에서 사용되는 선형 스캐닝 알고리즘 또는 Second chance 알고리즘이라고합니다. 
일반적으로 순환 큐로 구현됩니다.

텍스트 측면에서 이것이 무엇을 의미하는지 설명해 주시겠습니까? 좋은 다이어그램이지만 그러한 다이어그램의 의미를 모르면 쓸모가 없습니다.
이산 도마뱀

7

이미 메모리에있는 페이지에 대한 참조가 도착하면 대체 알고리즘이 전혀 호출되지 않습니다.

시계 교체 알고리즘은 LRU 교체의 혜택의 일부를 달성하기 위해 노력하고 있지만, 모든 페이지 히트에 LRU 비트를 조작하는 대규모 오버 헤드없이된다.

페이지는 다음 세 가지 상태 중 하나 일 수 있습니다.

  1. 메모리에 존재하며 recently-used비트는 true입니다. 이 경우 페이지에 액세스 할 때 페이지 결함이 없으므로 비트가 변경되지 않습니다.
  2. 메모리에 있지만 recently-used비트는 false입니다. 이 경우 페이지에 액세스하면 페이지 결함이 발생하는 방식으로 페이지가 페이지 테이블에도 표시됩니다. (이 경우 페이지 결함이 발생하면 페이지 결함 핸들러가 수행하는 유일한 작업은 상태를로 변경하는 것 recently-used입니다.)
  3. 메모리에 페이지가 없습니다. 이 경우 우리는를 봅니다 clock-hand. 비트가 설정된 clock-hand페이지를 가리키는 동안 비트를로 뒤집은 다음 다음 페이지를 가리 키도록 증가시킵니다 . 이미 지워진 페이지를 찾으면 교체하는 페이지입니다. 그럼 우리는 새 페이지를 표시 하고를 증가 받는 다음 페이지로 이동합니다.recently-usedtruerecently-usedfalseclock-handrecently-usedrecently-usedclock-hand

시계는 LRU를 근사화하기위한 확률 론적 알고리즘입니다. 페이지에 액세스하는 비율 clock-hand이 동일한 페이지로 돌아 오는 속도보다 훨씬 높은 경우 페이지에 표시 될 가능성이 높습니다 recently-used. 페이지에 액세스하는 속도 clock-hand가 페이지가 돌아 오는 속도에 비해 낮 으면 페이지가 아닌 상태 일 가능성이 높습니다 recently-used. 가장 최근에 사용한 페이지는 교체되지 않습니다. (왜?)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.