อัลกอริทึมการเปลี่ยนหน้านาฬิกา - หน้าปัจจุบันอยู่แล้ว


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 
โดยทั่วไปจะมีการใช้งานเป็นคิวแบบวงกลม

คุณสามารถให้คำอธิบายเกี่ยวกับสิ่งนี้ในแง่ของข้อความ? มันเป็นไดอะแกรมที่ดี แต่ไดอะแกรมดังกล่าวไร้ประโยชน์เมื่อเราไม่รู้ความหมาย
จิ้งจกไม่ต่อเนื่อง

7

หากการอ้างอิงมาถึงหน้าเว็บที่มีหน่วยความจำอยู่แล้วอัลกอริธึมการแทนที่จะไม่ถูกเรียกใช้เลย

วิธีเปลี่ยนนาฬิกาพยายามที่จะบรรลุบางส่วนของประโยชน์ของการเปลี่ยนอาร์ แต่ไม่มีค่าใช้จ่ายมหาศาลของการจัดการกับอาร์บิตในทุกตีหน้า

หน้าสามารถอยู่ในหนึ่งในสามสถานะ:

  1. ปัจจุบันในหน่วยความจำและบิตrecently-used trueในกรณีนี้จะไม่มีข้อผิดพลาดหน้าเมื่อมีการเข้าถึงเกิดขึ้นกับหน้าดังนั้นจึงไม่มีการเปลี่ยนแปลงบิต
  2. ปัจจุบันในหน่วยความจำ แต่บิตrecently-used falseในกรณีนี้หน้าจะถูกทำเครื่องหมายไว้ในตารางหน้าในลักษณะที่ว่าหากหน้านั้นถูกเข้าถึงหน้าความผิดพลาดจะเกิดขึ้น (และหากความผิดพลาดของหน้าเกิดขึ้นในกรณีนี้สิ่งเดียวที่ตัวจัดการความผิดพลาดหน้าจะเปลี่ยนสถานะเป็นrecently-used)
  3. หน้าไม่ได้อยู่ในหน่วยความจำ clock-handในกรณีนี้เรามองไปที่ ในขณะที่clock-handชี้ไปที่หน้าด้วยrecently-usedชุดบิตที่trueเราพลิกrecently-usedบิตไปfalseแล้วเพิ่มขึ้นclock-handเพื่อชี้ไปที่หน้าถัดไป เมื่อเราพบหน้าที่มีการrecently-usedเคลียร์ไปแล้วนั่นคือหน้าที่เราแทนที่ จากนั้นเราจะทำเครื่องหมายหน้าใหม่เป็นrecently-usedและเพิ่มclock-handไปยังหน้าถัดไป

นาฬิกาเป็นหัวใจของอัลกอริธึมที่เป็นไปได้สำหรับการประมาณค่า LRU หากอัตราที่หน้าจะถูกเข้าถึงได้จะสูงกว่าอัตราที่จะกลับมารอบหน้าเดียวกันแล้วหน้ามีโอกาสสูงที่จะถูกทำเครื่องหมายclock-hand recently-usedหากอัตราที่หน้าจะถูกเข้าถึงได้อยู่ในระดับต่ำเมื่อเทียบกับอัตราการที่clock-handจะกลับมารอบแล้วหน้ามีแนวโน้มที่จะอยู่ในสถานะไม่ได้ recently-usedเพจที่ใช้ล่าสุดจะไม่ถูกแทนที่ (ทำไม?)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.