Saat sayfası değiştirme algoritması - Zaten var olan sayfalar


9

Saat sayfası değiştirme algoritmasını simüle ederken, zaten bellekte olan bir referans geldiğinde saat ibresi hala artar mı?

İşte bir örnek:

4 yuvalı, saat sayfası değiştirme algoritmasını kullanma

Referans listesi: 1 2 3 4 1 2 5 1 3 2 4 5

İlk liste şöyle görünür:

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

Eklenecek bir sonraki referans 1, sonra 2 olacaktır. El 1'den sonra ve 2'den sonra yine 1'i gösterir mi? Başka bir deyişle, 5'i ekledikten sonra saat şöyle görünür:

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

?

Yanıtlar:


9

Bence bu örnek tüm şüphelerinizi netleştirebilir.

Örneğin:
Başlangıç ​​sayfasının referans sırasında ana belleğin boş olduğunu varsayar:
3 2 3 0 8 4 2 5 0 9 8 3 2kare başına bir referans biti ("kullanılmış" bit olarak adlandırılır)

  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 |  
+ --- + --- + + --- + --- +  

* = taranacak bir sonraki konumu tanımlayan işaretçiyi gösterir 
P = bu çerçevede saklanan sayfa # 
U = kullanılmış bayrak, 
0 = son zamanlarda kullanılmıyor 
1 = son zamanlarda referans verildi

Buna, doğrusal tarama algoritması veya BSD Linux'ta kullanılan İkinci şans algoritması denir. 
Genellikle dairesel bir kuyruk olarak uygulanır.

Bunun metin açısından ne anlama geldiğini açıklayabilir misiniz? Güzel bir diyagramdır, ancak ne anlama geldiğini bilmediğimizde bu diyagramlar işe yaramaz.
Ayrık kertenkele

7

Halihazırda bellekte olan bir sayfa için bir başvuru gelirse, değiştirme algoritması hiç çağrılmaz.

Saat yerleştirme algoritmasına LRU değiştirme avantajlarından bazıları başarmak için çalışıyorum, ama her sayfa isabet LRU bitlerini manipüle kitlesel yükü olmadan edilir.

Bir sayfa üç durumdan birinde olabilir:

  1. Hafızada mevcut ve recently-usedbit true. Bu durumda, sayfaya bir erişim gerçekleştiğinde sayfa hatası olmaz, bu nedenle bitler değişmez.
  2. Bellekte mevcut ama recently-usedbit false. Bu durumda sayfa, sayfaya erişilirse sayfa hatası oluşacak şekilde sayfa tablosunda da işaretlenir. (Ve bu durumda sayfa hatası oluşursa, sayfa hatası işleyicisinin yaptığı tek şey durumu olarak değiştirmektir recently-used.)
  3. Sayfa bellekte yok. Bu durumda clock-hand. İken clock-handiçeren bir sayfaya işaret recently-usedbit set truebiz çevirmek recently-usediçin biraz falseve sonra artırmak clock-handsonraki sayfaya noktaya. İle bir sayfayı bulduğunuzda recently-usedzaten temizlenmiş, biz yerine sayfası. Sonra yeni sayfayı işaretlemek recently-usedve artım clock-handiçin bir sonraki sayfaya.

Saat, kalbinde, LRU'yu tahmin etmek için olasılıklı bir algoritmadır. Sayfanın erişildiği oran, clock-handsayfanın aynı sayfaya geri dönme oranından çok daha yüksekse , sayfanın işaretlenme olasılığı yüksektir recently-used. Sayfa erişildiğini hızdır düşük orana kıyasla ise clock-handetrafında geri geliyor, sonra sayfa halde olması daha olasıdır değil recently-used . En son kullanılan sayfa hiçbir zaman değiştirilmez. (Neden?)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.