Sayfa değiştirme algoritması - Page replacement algorithm - Wikipedia

İçinde bilgisayar işletim sistemi o kullanır sayfalama için sanal bellek yönetim, sayfa değiştirme algoritmaları hangi bellek sayfalarının sayfalanacağına, bazen takas olarak adlandırılacağına veya diske yazacağına karar ver. sayfa bellek ayrılması gerekiyor. Sayfa değiştirme istenen bir sayfa hafızada olmadığında gerçekleşir (sayfa hatası ) ve tahsisi sağlamak için boş bir sayfa kullanılamaz, çünkü ya hiç olmadığı için ya da boş sayfa sayısı bir eşikten düşük.

Değiştirme için seçilen ve sayfadan çıkarılan sayfaya tekrar referans verildiğinde, sayfalandırılması gerekir (diskten okuma) ve bu, G / Ç'nin tamamlanmasını beklemeyi içerir. Bu belirler kalite Sayfa değiştirme algoritması: Sayfaları beklerken ne kadar az zaman olursa, algoritma o kadar iyi olur. Bir sayfa değiştirme algoritması, donanım tarafından sağlanan sayfalara erişimle ilgili sınırlı bilgilere bakar ve toplam sayfa kaçak sayısını en aza indirmek için hangi sayfaların değiştirilmesi gerektiğini tahmin etmeye çalışırken, bunu maliyetlerle (birincil depolama ve işlemci süresi) dengelemeye çalışır. algoritmanın kendisi.

Sayfa değiştirme sorunu tipik bir çevrimiçi problem rekabetçi analiz perspektifinden, optimal deterministik algoritmanın bilinmesi anlamında.

Tarih

Sayfa değiştirme algoritmaları 1960'larda ve 1970'lerde sıcak bir araştırma ve tartışma konusuydu. Bu, çoğunlukla gelişmiş teknolojinin geliştirilmesiyle sona erdi. LRU (en az son kullanılan) yaklaşımlar ve çalışma seti algoritmalar. O zamandan beri, geleneksel sayfa değiştirme algoritmaları tarafından yapılan bazı temel varsayımlar geçersiz kılınarak araştırmanın yeniden canlanmasına neden oldu. Özellikle, temeldeki donanım ve kullanıcı düzeyindeki yazılımın davranışındaki aşağıdaki eğilimler, sayfa değiştirme algoritmalarının performansını etkilemiştir:

  • Birincil depolamanın boyutu birden çok büyüklükte artmıştır. Birkaç gigabaytlık birincil bellekle, her bir bellek çerçevesinin düzenli olarak kontrol edilmesini gerektiren algoritmalar gittikçe daha az pratik hale geliyor.
  • Bellek hiyerarşileri daha da uzadı. Bir maliyeti CPU önbelleği özledim çok daha pahalıdır. Bu, önceki sorunu daha da kötüleştiriyor.
  • Başvuru yeri kullanıcı yazılımı zayıfladı. Bu çoğunlukla nesne yönelimli programlama çok sayıda küçük işlevi destekleyen teknikler, karmaşık veri yapılarının kullanımı gibi ağaçlar ve karma tablolar kaotik bellek referans örüntülerine ve çöp toplama uygulamaların bellek erişim davranışını büyük ölçüde değiştirdi.

İşletim sistemindeki farklılıklar nedeniyle sayfa değiştirme algoritmalarına ilişkin gereksinimler değişti çekirdek mimariler. Özellikle, çoğu modern işletim sistemi çekirdeği, hem kullanıcı programı sanal adres alanları hem de önbelleğe alınmış dosyaların sayfaları arasından sayfa değiştirme algoritmasının bir sayfa seçmesini gerektiren birleşik sanal bellek ve dosya sistemi önbelleklerine sahiptir. Sonraki sayfaların belirli özellikleri vardır. Örneğin, kilitlenebilirler veya tarafından empoze edilen yazma siparişi gereksinimleri olabilir. günlük kaydı. Ayrıca, sayfa değiştirmenin amacı, bellek için toplam bekleme süresini en aza indirmek olduğu için, bellek ayıran diğer çekirdek alt sistemleri tarafından uygulanan bellek gereksinimlerini hesaba katmalıdır. Sonuç olarak, modern çekirdeklerde (Linux, FreeBSD, ve Solaris ), bir sanal bellek alt sisteminin daha yüksek seviyesinden ziyade, genel amaçlı bir çekirdek bellek ayırıcısı seviyesinde çalışma eğilimindedir.

Yerel ve küresel değişim

Değiştirme algoritmaları olabilir yerel veya küresel.

Bir işlem bir sayfa hatasına maruz kaldığında, yerel bir sayfa değiştirme algoritması, aynı sürece (veya bir işlem grubunu paylaşan bir işlem grubuna) ait bazı sayfaları değiştirmek için seçer. bellek bölümü Global bir değiştirme algoritması, bellekteki herhangi bir sayfayı seçmekte serbesttir.

Yerel sayfa değiştirme, belirli bir işleme veya bir süreç grubuna kaç sayfanın atanacağını belirleyen bir tür bellek bölümlemesi varsayar. En popüler bölümleme biçimleri sabit bölümleme ve dengeli küme dayalı algoritmalar çalışma seti model. Yerel sayfa değiştirmenin avantajı, ölçeklenebilirliğidir: her işlem kendi sayfa hatalarını bağımsız olarak halledebilir ve bu işlem için daha tutarlı performans sağlar. Ancak genel sayfa değiştirme, genel sistem bazında daha verimlidir.[1]

Hangi sayfalara referans verildiğini ve değiştirildiğini tespit etme

Modern genel amaçlı bilgisayarlar ve bazı yerleşik işlemciler aşağıdakileri destekler: sanal bellek. Her işlemin kendi sanal adres alanı vardır. Bir sayfa tablosu işlem sanal adreslerinin bir alt kümesini fiziksel adreslerle eşler. Ek olarak, çoğu mimaride sayfa tablosu, sayfa tablosundaki her sayfa için bir "erişim" biti ve bir "kirli" bit içerir. İşlem o sayfadaki belleği okuduğunda veya yazdığında CPU erişim bitini ayarlar. İşlem o sayfaya bellek yazdığında CPU kirli biti ayarlar. İşletim sistemi, erişim ve kirli bitleri değiştirebilir. İşletim sistemi, aşağıdaki yollarla belleğe ve dosyalara erişimi algılayabilir:

  • İşlemin sayfa tablosunda bulunan sayfalardaki erişim bitini temizleyerek. Bir süre sonra, işletim sistemi, CPU tarafından ayarlanan erişim bitine sahip sayfaları arayarak sayfa tablosunu tarar. Bu hızlıdır, çünkü CPU tarafından otomatik olarak ayarlanan erişim biti ve yanlıştır çünkü işletim sistemi erişim bildirimini hemen almaz ve işlemin bu sayfalara erişme sırası hakkında bilgi sahibi değildir.
  • Sayfaları fiziksel bellekten çıkarmadan işlemin sayfa tablosundan kaldırarak. Bu sayfaya bir sonraki erişim hemen algılanır çünkü sayfa hatası. Bu yavaştır çünkü bir sayfa hatası, işletim sistemine bir bağlam geçişini, karşılık gelen fiziksel adres için yazılım aramayı, sayfa tablosunun değiştirilmesini ve işleme geri dönen bir bağlam anahtarını içerir ve erişim gerçekleştikten hemen sonra algılanır.
  • Doğrudan süreç, sayfa önbelleğine potansiyel olarak erişen sistem çağrıları yaptığında okumak ve yazmak POSIX'te.

Ön temizlik

Çoğu değiştirme algoritması, sonuç olarak hedef sayfayı döndürür. Bu, hedef sayfanın kirli (diğer bir deyişle, sayfa geri alınmadan önce kararlı depolamaya yazılması gereken verileri içerir), bu sayfayı kararlı depolamaya göndermek için G / Ç başlatılmalıdır ( temiz sayfa). Sanal belleğin ilk günlerinde, temizlemeye harcanan zaman çok da endişe verici değildi, çünkü sanal bellek ilk olarak Tam dubleks Kanalları kararlı depolamaya yönlendirir ve temizleme, sayfalandırma ile geleneksel olarak çakışırdı. Çağdaş ticari donanım ise tam çift yönlü aktarımları desteklemiyor ve hedef sayfaların temizlenmesi bir sorun haline geliyor.

Bu durumla başa çıkmak için çeşitli ön temizlik politikalar uygulanmaktadır. Ön temizleme, yakında değiştirilecek (büyük olasılıkla) kirli sayfalarda G / Ç'yi başlatan mekanizmadır. Buradaki fikir, önceden temizlenmiş sayfa gerçekten değiştirme için seçildiğinde, G / Ç'nin tamamlanacağı ve sayfanın temiz olacağıdır. Ön temizlik, değiştirilecek sayfaların belirlenmesinin mümkün olduğunu varsayar Sonraki. Çok istekli olan ön temizlik, değiştirilmek üzere seçilmeden önce yeniden kirlenmeyi başaran sayfalar yazarak G / Ç bant genişliğini boşa harcayabilir.

Öngörülü sayfalama

Bazı sistemler kullanır çağrı isteği - RAM'e yüklemeden önce bir sayfanın gerçekten istenmesini beklemek.

Diğer sistemler, RAM'de olmayan hangi sayfalara yakında ihtiyaç duyulacağını tahmin ederek ve bu sayfa istenmeden önce bu tür sayfaları RAM'e önceden yükleyerek gecikmeyi azaltmaya çalışır. (Bu genellikle, RAM'de bulunan hangi sayfaların yakında ihtiyaç duyulmayacağını tahmin eden ve bunları depoya önceden yazan ön temizleme ile birlikte yapılır).

Bir sayfa hatası oluştuğunda, "tahmini sayfalama" sistemleri yalnızca referans verilen sayfayı değil, aynı zamanda sonraki birkaç ardışık sayfayı da (bir giriş kuyruğunu önceden getir bir CPU'da).

takas önceden getirme mekanizma, yakında ihtiyaç duyulacak sayfaları (ardışık olmasalar bile) yüklemede daha da ileri gider.

(H, k) sayfalama sorunu

(H, k) -paging problemi, sayfalama problemi modelinin bir genellemesidir: h, k pozitif tamsayılar olsun, öyle ki . Önbelleğe sahip bir algoritmanın performansını ölçüyoruz göre teorik olarak en uygun sayfa değiştirme algoritması. Eğer , kesinlikle daha az kaynakla en uygun sayfa değiştirme algoritmasını sağlıyoruz.

(H, k) -paging problemi, çevrimiçi bir algoritmanın performansını en uygun algoritmanın performansıyla karşılaştırarak, özellikle de çevrimiçi algoritmanın önbellek boyutunu ve optimum algoritmayı ayrı ayrı parametrelendirerek nasıl performans gösterdiğini ölçmenin bir yoludur.

Markalama algoritmaları

İşaretleme algoritmaları, genel bir sayfalama algoritmaları sınıfıdır. Her sayfa için, onu işareti adı verilen bir bit ile ilişkilendiririz. Başlangıçta tüm sayfaları işaretsiz olarak ayarladık. Sayfa taleplerinin bir aşamasında, bu aşamada ilk talep edildiğinde bir sayfayı işaretleriz. Bir işaretleme algoritması, işaretli bir sayfayı asla sayfalandırmayan bir algoritmadır.

ALG, k boyutunda bir önbelleğe sahip bir markalama algoritması ise ve OPT, h boyutunda bir önbelleğe sahip en uygun algoritmadır, burada ALG ise rekabetçi. Böylece her markalama algoritması, - rekabetçi oran.

LRU bir markalama algoritması iken FIFO bir markalama algoritması değildir.

Muhafazakar algoritmalar

Bir algoritma ihtiyatlıdır, k veya daha az farklı sayfa referansı içeren herhangi bir ardışık istek dizisi üzerinde, algoritma k veya daha az sayfa hatası verir.

ALG, k boyutunda bir önbelleğe sahip konservatif bir algoritmsa ve OPT, önbelleğe sahip en uygun algoritmadır. ALG ise rekabetçi. Böylece her muhafazakar algoritma, - rekabetçi oran.

LRU, FIFO ve CLOCK konservatif algoritmalardır.

Sayfa değiştirme algoritmaları

Çeşitli sayfa değiştirme algoritmaları vardır:[2]

Teorik olarak optimum sayfa değiştirme algoritması

Teorik olarak en uygun sayfa değiştirme algoritması (OPT olarak da bilinir, sezgisel öngörü değiştirme algoritması veya Bélády's optimum sayfa değiştirme politikası)[3][4][2] şu şekilde çalışan bir algoritmadır: Bir sayfanın takas edilmesi gerektiğinde, işletim sistemi Bir sonraki kullanımı gelecekte en uzakta olacak sayfayı değiştirir. Örneğin, önümüzdeki 6 saniye boyunca kullanılmayacak bir sayfa, önümüzdeki 0,4 saniye içinde kullanılacak bir sayfa ile değiştirilecektir.

Bu algoritma genel amaçlı bir işletim sisteminde uygulanamaz, çünkü bir sistem üzerinde çalışacak tüm yazılımların önceden bilinmesi ve uygun olduğu durumlar dışında, bir sayfanın kullanılmadan önce ne kadar süreceğini güvenilir bir şekilde hesaplamak imkansızdır. bellek referans modellerinin statik analizi veya yalnızca çalışma zamanı analizine izin veren bir uygulama sınıfı. Bu sınırlamaya rağmen algoritmalar var[kaynak belirtilmeli ] optimum performans sunabilen işletim sistemi, program tarafından referans verilen tüm sayfaların kaydını tutar ve bu verileri, sonraki çalıştırmalarda hangi sayfaların içeri ve dışarı değiştirileceğine karar vermek için kullanır. Bu algoritma optimal performansa yakın bir performans sunabilir, ancak bir programın ilk çalıştırmasında değil ve yalnızca programın bellek referans modeli her çalıştığında nispeten tutarlıysa.

Sayfalama probleminin analizi ayrıca şu alanda yapılmıştır. çevrimiçi algoritmalar. Rastgele çevrim içi algoritmaların sayfalama problemi için etkinliği, amortize edilmiş analiz.

Yakın zamanda kullanılmadı

Yakın zamanda kullanılmayan (NRU) sayfa değiştirme algoritması, son zamanlarda kullanılan sayfaları bellekte tutmaya yarayan bir algoritmadır. Bu algoritma şu ilkeye göre çalışır: bir sayfaya referans verildiğinde, o sayfa için referans verilen bir bit ayarlanır ve referans olarak işaretlenir. Benzer şekilde, bir sayfa değiştirildiğinde (yazıldığında), değiştirilmiş bir bit ayarlanır. Bitlerin ayarlanması genellikle donanım tarafından yapılır, ancak bunu yazılım düzeyinde de yapmak mümkündür.

Belirli bir sabit zaman aralığında, bir zamanlayıcı kesintisi tüm sayfaların referanslı bitini tetikler ve temizler, böylece sadece geçerli zamanlayıcı aralığı içinde referans verilen sayfalar referanslı bir bit ile işaretlenir. Bir sayfanın değiştirilmesi gerektiğinde, işletim sistemi sayfaları dört sınıfa ayırır:

3. başvurulan, değiştirilen
2. referans verildi, değiştirilmedi
1. başvurulmamış, değiştirilmiş
0. başvurulmamış, değiştirilmemiş

Bir sayfanın değiştirilmesi henüz mümkün görünmese de, bu, bir sınıf 3 sayfasının başvurulan biti zamanlayıcı kesintisi tarafından temizlendiğinde gerçekleşir. NRU algoritması, kaldırmak için en düşük kategoriden rastgele bir sayfa seçer. Dolayısıyla, yukarıdaki dört sayfa kategorisinden, NRU algoritması, eğer böyle bir sayfa varsa, referans verilmeyen, değiştirilmemiş bir sayfanın yerini alacaktır. Bu algoritmanın, değiştirilmiş ancak referans verilmemiş (son zamanlayıcı aralığı içinde) bir sayfanın, yoğun şekilde referans verilen değiştirilmemiş bir sayfadan daha az önemli olduğunu ima ettiğini unutmayın.

NRU bir markalama algoritmasıdır, bu nedenle rekabetçi.

İlk giren ilk çıkar

En basit sayfa değiştirme algoritması, bir FIFO algoritmasıdır. İlk giren ilk çıkar (FIFO) sayfa değiştirme algoritması, düşük maliyetli bir algoritmadır. işletim sistemi. Fikir, adından da anlaşılıyor - işletim sistemi, bellekteki tüm sayfaların kaydını bir kuyrukta, en son gelişi arkada ve en eski gelişi önde olacak şekilde tutar. Bir sayfanın değiştirilmesi gerektiğinde, sıranın önündeki sayfa (en eski sayfa) seçilir. FIFO ucuz ve sezgisel olsa da, pratik uygulamada kötü performans gösterir. Bu nedenle, nadiren değiştirilmemiş haliyle kullanılır. Bu algoritma deneyimleri Bélády'nin anormalliği Basit bir deyişle, bir sayfa arızasında, bellekte en uzun süredir bulunan çerçeve değiştirilir.

FIFO sayfa değiştirme algoritması, VAX / VMS işletim sistemi, bazı değişikliklerle.[5] Kısmi ikinci şans, geçerli çeviri tablosu referansları ile sınırlı sayıda giriş atlanarak sağlanır,[6] ve ek olarak sayfalar, süreç çalışma kümesinden sistem genelinde bir havuza kaydırılır ve bu havuzdan zaten kullanılmadıysa kurtarılabilir.

FIFO muhafazakar bir algoritmadır, bu nedenle rekabetçi.

İkinci şans

İkinci şans sayfa değiştirme algoritması olarak bilinen değiştirilmiş bir FIFO sayfa değiştirme algoritması, iyileştirme için düşük maliyetle FIFO'dan nispeten daha iyi sonuç verir. FIFO'nun yaptığı gibi kuyruğun önüne bakarak çalışır, ancak o sayfayı hemen sayfalandırmak yerine, başvurulan bitinin ayarlanıp ayarlanmadığını kontrol eder. Ayarlanmamışsa, sayfa değiştirilir. Aksi takdirde referans bit silinir, sayfa kuyruğun arkasına eklenir (yeni bir sayfaymış gibi) ve bu işlem tekrarlanır. Bu aynı zamanda döngüsel bir kuyruk olarak da düşünülebilir. Tüm sayfaların referanslı bit setine sahip olması durumunda, listedeki ilk sayfanın ikinci karşılaşmasında, o sayfa artık referans biti temizlendiği için değiştirilecektir. Tüm sayfaların referans biti temizlenirse, ikinci şans algoritması saf FIFO'ya dönüşür.

Adından da anlaşılacağı gibi, İkinci şans her sayfaya bir "ikinci şans" verir - referans verilen eski bir sayfa muhtemelen kullanımdadır ve referans verilmeyen yeni bir sayfa ile değiştirilmemelidir.

Saat

Saat, FIFO'nun İkinci Şans'dan daha verimli bir sürümüdür çünkü sayfaların sürekli olarak listenin arkasına itilmesi gerekmez, ancak İkinci Şans ile aynı genel işlevi yerine getirir. Saat algoritması, listedeki son incelenen sayfa çerçevesini gösteren "el" (yineleyici) ile birlikte, bellekte döngüsel bir sayfa listesi tutar. Bir sayfa hatası oluştuğunda ve boş çerçeve olmadığında, elin konumunda R (başvurulan) biti incelenir. Eğer R 0 ise, yeni sayfa "el" in gösterdiği sayfanın yerine konur ve el bir pozisyon ileri alınır. Aksi takdirde, R biti silinir, ardından saat ibresi artırılır ve bir sayfa değiştirilene kadar işlem tekrarlanır.[7] Bu algoritma ilk olarak 1969'da F. J. Corbató.[8]

Saatin çeşitleri

  • GCLOCK: Genelleştirilmiş saat sayfası değiştirme algoritması.[9]
  • Clock-Pro, bellekteki tüm M sayfalarının yanı sıra sayfalanmış en son M sayfaları da dahil olmak üzere son başvurulan sayfalar hakkında döngüsel bir bilgi listesi tutar. Sayfalandırılan sayfalardaki bu ekstra bilgiler, örneğin, ARC, büyük döngülerde ve tek seferlik taramalarda LRU'dan daha iyi çalışmasına yardımcı olur.[10]
  • WSclock.[11] Saat algoritmasını bir çalışma kümesi konseptiyle (yani, belirli bir zaman aralığında bu işlem tarafından kullanılması beklenen sayfa kümesi) birleştirerek, algoritmanın performansı geliştirilebilir. Pratikte, "yaşlanma" algoritması ve "WSClock" algoritması muhtemelen en önemli sayfa değiştirme algoritmalarıdır.[12][13]
  • Uyarlanabilir Değiştirmeli (CAR) saat, performansa benzer bir sayfa değiştirme algoritmasıdır. ARC ve hem LRU hem de CLOCK'dan önemli ölçüde daha iyi performans gösterir.[14] CAR algoritması kendi kendine ayarlıdır ve kullanıcı tarafından belirlenmiş sihirli parametreler gerektirmez.

SAAT, muhafazakar bir algoritmadır, bu nedenle rekabetçi.

En az son kullanılan

En az kullanılan (LRU) sayfa değiştirme algoritması, ad olarak NRU'ya benzer olsa da, LRU'nun kısa bir süre boyunca sayfa kullanımını takip etmesi, NRU'nun ise yalnızca son saat aralığındaki kullanıma bakması gerçeğinde farklılık gösterir. LRU, son birkaç talimatta en çok kullanılan sayfaların büyük olasılıkla sonraki birkaç talimatta da yoğun bir şekilde kullanılacağı fikri üzerinde çalışır. LRU teoride optimal performansa yakın performans sağlayabilirken (neredeyse uyarlanabilir yedek önbellek ), pratikte uygulamak oldukça pahalıdır. Bu algoritma için maliyeti düşürmeye çalışan ancak performansı olabildiğince fazla tutan birkaç uygulama yöntemi vardır.

En pahalı yöntem, bellekteki tüm sayfaları içeren bağlantılı bir liste kullanan bağlantılı liste yöntemidir. Bu listenin arkasında en az kullanılan sayfa, öndeki ise en son kullanılan sayfadır. Bu uygulamanın maliyeti, listedeki öğelerin her bellek referansı etrafında hareket ettirilmesi gerekeceği gerçeğinde yatmaktadır ki bu çok zaman alan bir süreçtir.

Donanım desteği gerektiren diğer bir yöntem ise şu şekildedir: donanımın her komutta artırılan 64 bitlik bir sayacı olduğunu varsayalım. Bir sayfaya her erişildiğinde, sayfaya erişim sırasındaki sayaca eşit değeri alır. Bir sayfanın değiştirilmesi gerektiğinde, işletim sistemi en düşük sayacı olan sayfayı seçer ve değiştirir.

Uygulama maliyetleri nedeniyle, LRU'ya benzer, ancak daha ucuz uygulamalar sunan algoritmalar (aşağıdaki gibi) düşünülebilir.

LRU algoritmasının önemli bir avantajı, tam istatistiksel analize uygun olmasıdır. Örneğin, LRU'nun, N'nin yönetilen havuzdaki sayfa sayısı ile orantılı olduğu OPT algoritmasından N kat daha fazla sayfa hatasıyla sonuçlanamayacağı kanıtlanmıştır.

Öte yandan, LRU'nun zayıflığı, performansının pek çok yaygın referans modeli altında bozulma eğiliminde olmasıdır. Örneğin, LRU havuzunda N sayfa varsa, N + 1 sayfalık bir dizi üzerinden döngü yürüten bir uygulama, her erişimde bir sayfa hatasına neden olacaktır. Büyük diziler üzerindeki döngüler yaygın olduğundan, bu tür durumlarda daha iyi çalışması için LRU'yu değiştirmek için çok çaba sarf edilmiştir. Önerilen LRU modifikasyonlarının çoğu, döngü referans modellerini tespit etmeye ve En Son Kullanılan (MRU) gibi uygun değiştirme algoritmasına geçmeye çalışır.

LRU'daki varyantlar

  1. LRU-K[15] en son erişimi geçmişte en uzak olan sayfayı kaldırır. Örneğin, LRU-1 basitçe LRU iken, LRU-2 sayfaları sondan bir önceki erişim zamanına göre çıkarır. LRU-K, zaman içinde yerellik açısından LRU'da büyük ölçüde iyileşir.
  2. ARC[16] algoritması, yakın zamanda çıkarılan sayfaların geçmişini koruyarak LRU'yu genişletir ve bunu tercihi son veya sık erişime değiştirmek için kullanır. Sıralı taramalara özellikle dayanıklıdır.

ARC'nin diğer algoritmalar (LRU, MQ, 2Q, LRU-2, LRFU, LIRS ) Megiddo & Modha 2004'te bulunabilir.[17]

LRU bir markalama algoritmasıdır, bu nedenle rekabetçi.

Rastgele

Rastgele değiştirme algoritması, bellekteki rastgele bir sayfanın yerini alır. Bu, izleme sayfası referanslarının genel maliyetini ortadan kaldırır. Genellikle FIFO'dan daha iyidir ve bellek referanslarını döngüye almak için LRU'dan daha iyidir, ancak genellikle LRU uygulamada daha iyi performans gösterir. OS / 390 global LRU yaklaşımını kullanır ve LRU performansı kötüleştiğinde rastgele değiştirmeye geri döner ve Intel i860 işlemci rastgele bir değiştirme politikası kullandı (Rhodehamel 1989[18]).

Sık kullanılmaz (NFU)

Sık kullanılmayan (NFU) sayfa değiştirme algoritması bir sayaç gerektirir ve her sayfanın başlangıçta 0'a ayarlanmış kendine ait bir sayacı vardır. Her bir saat aralığında, bu aralıkta referans verilen tüm sayfaların sayaçları şu kadar artırılır: 1. Gerçekte, sayaçlar bir sayfanın ne sıklıkta kullanıldığını takip eder. Böylelikle en düşük sayacı olan sayfa gerektiğinde değiştirilebilmektedir.

NFU ile ilgili temel sorun, kullanım süresine bakılmaksızın kullanım sıklığını takip etmesidir. Bu nedenle, çok geçişli bir derleyicide, ilk geçişte yoğun şekilde kullanılan, ancak ikinci geçişte ihtiyaç duyulmayan sayfalar, daha yüksek frekans sayaçlarına sahip oldukları için ikinci geçişte nispeten daha az kullanılan sayfalara göre tercih edilecektir. Bu, düşük performansa neden olur. İşletim sistemi önyüklemesi gibi NFU'nun benzer şekilde çalışacağı diğer yaygın senaryolar mevcuttur. Neyse ki, benzer ve daha iyi bir algoritma var ve açıklaması aşağıda.

Sık kullanılmayan sayfa değiştirme algoritması, sayfa tablosu boş işaretçi değerleri içerdiğinde en son kullanılan sayfa değiştirme algoritmasına göre daha az sayfa hatası üretir.

Yaşlanma

Yaşlanma algoritması, NFU algoritmasının soyundan gelir ve kullanım süresinin farkında olmasını sağlamak için değişiklikler içerir. Sadece referans verilen sayfaların sayaçlarını artırmak yerine, zamana bakılmaksızın sayfa referanslarına eşit vurgu yapmak yerine, bir sayfadaki referans sayacı, ilgili bit o ikili sayının soluna eklenmeden önce önce sağa kaydırılır (2'ye bölünür). Örneğin, bir sayfa son 6 saat vuruşunda 1,0,0,1,1,0 bitlerine başvurduysa, başvurulan sayacı şu şekilde görünecektir: 10000000, 01000000, 00100000, 10010000, 11001000, 01100100. Sayfa referansları daha yakın şimdiye kadar, uzun zaman önce sayfa referanslarından daha fazla etkiye sahiptir. Bu, daha yakın zamanda referans verilen sayfaların, daha az referans verilse de, geçmişte daha sık referans verilen sayfalara göre daha yüksek önceliğe sahip olmasını sağlar. Böylece, bir sayfanın çıkarılması gerektiğinde, en düşük sayacı olan sayfa seçilecektir.

Aşağıdaki Python kod, yaşlanma algoritmasını simüle eder. ile başlatılır ve yukarıda açıklandığı gibi güncellendi , kullanma aritmetik kaydırma operatörleri.

def simüle_ yaşlanma(Rs, k: int) -> Yok:    "" "Yaşlanmayı simüle edin." ""    Vs = [0] * len(Rs[0])    için t, R içinde numaralandırmak(Rs):        için ben içinde Aralık(len(Vs)):            Vs[ben] = R[ben] << k - 1 | Vs[ben] >> 1        Yazdır('% 02d  |  % s  |  [% s]' % (t, R, ', '.katılmak([biçim(V, '0% db ' % k) için V içinde Vs])))Rs = [[1,0,1,0,1,1], [1,1,0,0,1,0], [1,1,0,1,0,1], [1,0,0,0,1,0], [0,1,1,0,0,0]]k = 8simüle_ yaşlanma(Rs, k)

Verilen R-bit örneğinde, 5 saat işareti üzerinde 6 sayfa için, fonksiyon, her saat tıklaması için R-bitlerini listeleyen aşağıdaki çıktıyı yazdırır. ve bireysel sayaç değerleri içindeki her sayfa için ikili temsil.[19]

 t | R bitleri (0-5) | 0-500 arası sayfalar için sayaçlar | [1, 0, 1, 0, 1, 1] | [10000000, 00000000, 10000000, 00000000, 10000000, 10000000] 01 | [1, 1, 0, 0, 1, 0] | [11000000, 10000000, 01000000, 00000000, 11000000, 01000000] 02 | [1, 1, 0, 1, 0, 1] | [11100000, 11000000, 00100000, 10000000, 01100000, 10100000] 03 | [1, 0, 0, 0, 1, 0] | [11110000, 01100000, 00010000, 01000000, 10110000, 01010000] 04 | [0, 1, 1, 0, 0, 0] | [01111000, 10110000, 10001000, 00100000, 01011000, 00101000]

Yaşlanmanın, yalnızca en son 16/32 (işlemcinin tam sayılarının bit boyutuna bağlı olarak) zaman aralıklarındaki referansları takip edebilmesi açısından LRU'dan farklı olduğunu unutmayın. Sonuç olarak, bir sayfaya 9 aralık önce ve diğer 1000 aralık önce başvurulmuş olmasına rağmen, iki sayfa 00000000 sayaçlarına başvurmuş olabilir. Genel olarak konuşursak, son 16 aralıktaki kullanımın bilinmesi, hangi sayfanın değiştirileceğine dair iyi bir karar vermek için yeterlidir. Bu nedenle, yaşlanma, makul bir fiyata optimuma yakın performans sunabilir.

Önce en uzun mesafe (LDF) sayfa değiştirme algoritması

Bu algoritmanın arkasındaki temel fikir, LRU'da kullanıldığı şekliyle Referans Konumudur, ancak fark, LDF'de, yerelliğin kullanılan referanslara değil, mesafeye dayalı olmasıdır. LDF'de, geçerli sayfadan en uzun mesafede olan sayfayı değiştirin. İki sayfa aynı mesafede ise, saatin tersi yönde dönüşte mevcut sayfanın yanındaki sayfa değiştirilecektir.[20]

Uygulama ayrıntıları

Referans biti olmayan donanım teknikleri

Yukarıda tartışılan tekniklerin çoğu, her bir sayfa ile ilişkili bir referans bitinin varlığını varsayar. Bazı donanımlarda böyle bir bit yoktur, bu nedenle verimli kullanımı, biri olmadan iyi çalışan teknikler gerektirir.

Dikkate değer bir örnek VAX donanım çalışıyor OpenVMS. Bu sistem, bir sayfanın değiştirilip değiştirilmediğini bilir, ancak bir sayfanın okunup okunmadığı anlamına gelmez. Yaklaşımı, İkincil Sayfa Önbelleğe Alma olarak bilinir. Çalışma kümelerinden kaldırılan sayfalar (genellikle işlem özel belleği), bir süre fiziksel bellekte kalırken özel amaçlı listelere yerleştirilir. Bir sayfanın çalışma kümesinden kaldırılması teknik olarak bir sayfa değiştirme işlemi değildir, ancak o sayfayı bir aday olarak etkili bir şekilde tanımlar. Destek deposu hala geçerli olan (içeriği kirli olmayan veya başka şekilde korunması gerekmeyen) bir sayfa Ücretsiz Sayfa Listesinin sonuna yerleştirilir. Destek mağazasına yazılması gereken bir sayfa Değiştirilmiş Sayfa Listesi'ne yerleştirilecektir. Bu eylemler, genellikle Ücretsiz Sayfa Listesi'nin boyutu ayarlanabilir bir eşiğin altına düştüğünde tetiklenir.

Sayfalar, çalışma kümesinin kaldırılması için esasen rastgele bir şekilde seçilebilir; bu, kötü bir seçim yapılırsa, gelecekteki bir referansın, fiziksel bellekten kaldırılmadan önce bu sayfayı Serbest veya Değiştirilmiş listeden alabileceği beklentisiyle seçilebilir. Bu şekilde referans verilen bir sayfa Ücretsiz veya Değiştirilmiş listesinden kaldırılacak ve bir işlem çalışma kümesine geri yerleştirilecektir. Değiştirilmiş Sayfa Listesi, ek olarak sayfaları birden fazla sayfalık gruplar halinde yedek mağazaya yazma fırsatı vererek verimliliği artırır. Bu sayfalar daha sonra Ücretsiz Sayfa Listesi'ne yerleştirilebilir. Ücretsiz Sayfa Listesinin başına giden sayfalar dizisi, bir LRU veya NRU mekanizmasının sonuçlarına benzer ve genel etki, daha önce açıklanan İkinci Şans algoritmasına benzerlik gösterir.

Başka bir örnek, Linux çekirdeği açık KOL. Donanım işlevselliğinin eksikliği, iki sayfa tablosu sağlanarak telafi edilir - işlemci yerel sayfa tabloları, ne referans bitler ne de kirli parçalar ve gerekli bitlerin mevcut olduğu yazılımla korunan sayfa tabloları. Yazılımla korunan tablodaki benzetilmiş bitler, sayfa hataları tarafından belirlenir. Sayfa hatalarını elde etmek için, ikinci tablodaki taklit edilmiş bitleri temizlemek, yerel tabloyu değiştirerek uygulanan ilgili sayfaya bazı erişim haklarını iptal eder.

Linux'ta sayfa önbelleği

Linux için birleşik bir sayfa önbelleği kullanır

  • brk ve anonim mmaped bölgeler. Bu şunları içerir: yığın ve yığın nın-nin Kullanıcı alanı programları. Sayfalandığında değiş tokuş yapmak için yazılmıştır.
  • Anonim olmayan (dosya destekli) mmaped bölgeler. Bellekte mevcutsa ve özel olarak değiştirilmediyse, fiziksel sayfa dosya önbelleği veya arabellek ile paylaşılır.
  • Aracılığıyla edinilen paylaşılan hafıza shm_open.
  • tmpfs bellek içi dosya sistemi; sayfalandığında takas etmek için yazılmış.
  • Dosya önbelleği şunları içerir; sayfalandığında temeldeki blok depolamaya yazılır (muhtemelen arabellekten geçer, aşağıya bakın).
  • Önbelleği cihazları engelle, Linux tarafından "tampon" olarak adlandırılır (bunun için kullanılanlar gibi tamponlar olarak da adlandırılan diğer yapılarla karıştırılmamalıdır. borular ve Linux'ta dahili olarak kullanılan tamponlar); sayfalandığında temeldeki depolamaya yazılır.

Birleşik sayfa önbelleği, CPU tarafından desteklenen en küçük sayfa boyutuna sahip birimlerde çalışır ( ARMv8, x86 ve x86-64 ) sonraki daha büyük boyuttaki bazı sayfalarla (2 MiB inç x86-64 ) Linux tarafından "büyük sayfalar" olarak adlandırıldı. Sayfa önbelleğindeki sayfalar "etkin" ve "etkin olmayan" kümeye bölünmüştür. Her iki set de bir LRU sayfa listesi tutar. Temel durumda, bir sayfaya bir kullanıcı alanı programı tarafından erişildiğinde, etkin olmayan kümenin başına yerleştirilir. Tekrar tekrar erişildiğinde, aktif listeye taşınır. Linux, aktif kümenin etkin olmayan kümeden daha küçük olması için sayfaları etkin kümeden etkin olmayan kümeye gerektiği gibi taşır. Bir sayfa etkin olmayan kümeye taşındığında, fiziksel bellekten sayfalanmadan herhangi bir işlem adres alanının sayfa tablosundan kaldırılır.[21][22] Etkin olmayan kümeden bir sayfa kaldırıldığında, fiziksel bellek dışında sayfalanır. "Etkin" ve "etkin değil" listesinin boyutu sorgulanabilir / proc / meminfo "Aktif", "Aktif Değil", "Aktif (anon)", "Aktif Değil (anon)", "Aktif (dosya)" ve "Aktif Değil (anon)" alanlarında.

Çalışma seti

Bir sürecin çalışma kümesi, belirli bir zaman aralığında o süreç tarafından kullanılması beklenen sayfalar kümesidir.

"Çalışma kümesi modeli" tam anlamıyla bir sayfa değiştirme algoritması değildir (aslında bir tür orta vadeli planlayıcı )[açıklama gerekli ]

Referanslar

  1. ^ Bell, John. "İşletim Sistemleri Ders Notları: Sanal Bellek". Chicago College of Engineering at Illinois Üniversitesi. Arşivlendi 23 Eylül 2018 tarihinde orjinalinden. Alındı 21 Temmuz 2017.
  2. ^ a b Jones, Douglas W. "22C: 116 Ders Notları". Iowa Üniversitesi Bilgisayar Bilimleri Bölümü. Arşivlendi 30 Haziran 2012 tarihinde orjinalinden. Alındı 18 Mart 2008.
  3. ^ Torrez, Paul; et al. "CS111 Ders 11 notları". UCLA Bilgisayar Bilimleri Bölümü. Arşivlenen orijinal 9 Ocak 2009.
  4. ^ Bahn, Hyokyung; Noh, Sam H. (12-14 Şubat 2003). Web referans davranışının karakterizasyonu yeniden gözden geçirildi: İkiye bölünmüş Önbellek yönetimi için kanıt. Uluslararası Bilgi Ağı Konferansı 2003. Jeju, Güney Kore: Springer-Verlag. s. 1018–1027. doi:10.1007/978-3-540-45235-5_100. ISBN  978-3-540-40827-7.
  5. ^ Silberschatz, Abraham; Galvin, Peter Baer; Gagne, Greg (14 Aralık 2004). İşletim sistemi kavramları (7. baskı). Hoboken, NJ, ABD: John Wiley & Sons. s. 339. ISBN  0-47169-466-5. OCLC  56913661.
  6. ^ VMS Yardımı - Sys Parametreleri, TBSKIPWSL
  7. ^ Tanenbaum, Andrew S. (2001). Modern İşletim Sistemleri (2. baskı). Upper Saddle River, NJ, ABD: Prentice-Hall. s.218 (4.4.5). ISBN  978-0-13-031358-4. LCCN  00051666. OCLC  45284637. OL  24214243M.
  8. ^ Corbató, Fernando J. (1969). "Multics Sistemiyle Çağrı Deneyi" (PDF). Festschrift: P.M Morse Onuruna. MIT Basın. s. 217–228.
  9. ^ Smith, Alan Jay (Eylül 1978). "Veritabanı sistemlerinde sıralılık ve önceden getirme". Veritabanı Sistemlerinde ACM İşlemleri. New York, NY, ABD: ACM. 3 (3): 223–247. doi:10.1145/320263.320276. S2CID  11611563.
  10. ^ Jiang, Song; Chen, Feng; Zhang, Xiaodong (10-15 Nisan 2005). CLOCK-Pro: SAAT değişiminde etkili bir iyileştirme (PDF). 2005 USENIX Yıllık Teknik Konferansı. Anaheim, CA, ABD: USENIX Derneği. s. 35. Arşivlendi (PDF) 12 Haziran 2019 tarihinde orjinalinden. Alındı 24 Mart 2009.
  11. ^ Carr, Richard W .; Hennessy, John L. (14–16 Aralık 1981). WSCLOCK — sanal bellek yönetimi için basit ve etkili bir algoritma (gzip biçiminde sıkıştırılmış PDF). İşletim sistemleri ilkeleri üzerine sekizinci ACM sempozyumu. Pacific Grove, CA, ABD: ACM. sayfa 87–95. doi:10.1145/800216.806596. ISBN  0-89791-062-1. Arşivlendi 10 Haziran 2007 tarihinde orjinalinden.
  12. ^ Gottlieb, Allan. "WSClock". New York Üniversitesi Bilgisayar Bilimleri Bölümü. Arşivlendi 30 Temmuz 2012 tarihinde orjinalinden. Alındı 12 Haziran 2019.
  13. ^ Tanenbaum, Andrew S. "Sayfa Değiştirme Algoritmaları". InformIT. Arşivlendi 10 Eylül 2012 tarihinde orjinalinden. Alındı 12 Haziran 2019.
  14. ^ Bansal, Sorav & Modha, Dharmendra S. (31 Mart - 2 Nisan 2004). ARAÇ: Uyarlanabilir Değiştirmeli Saat (PDF). 3. USENIX Dosya ve Depolama Teknolojileri Konferansı (FAST '04). San Francisco, CA, ABD: USENIX Derneği. s. 187–200. CiteSeerX  10.1.1.105.6057. Arşivlendi (PDF) 31 Temmuz 2004 tarihinde orjinalinden.
  15. ^ O'Neil, Elizabeth J .; et al. (25–28 Mayıs 1993). Veritabanı disk arabelleği için LRU-K sayfa değiştirme algoritması (PDF). 1993 ACM SIGMOD Uluslararası Veri Yönetimi Konferansı. Washington, D.C., ABD: ACM. s. 297–306. CiteSeerX  10.1.1.18.1434. doi:10.1145/170035.170081. ISBN  0-89791-592-5. Arşivlendi (PDF) 6 Eylül 2019 tarihinde orjinalinden. Alındı 29 Ağustos 2019.
  16. ^ Megiddo, Nimrod & Modha, Dharmendra S. (31 Mart - 2 Nisan 2003). ARC: Kendi Kendini Ayarlayan, Düşük Ek Yük Yedek Önbellek (PDF). 2. USENIX Dosya ve Depolama Teknolojileri Konferansı (FAST '03). San Francisco, CA, ABD: USENIX Derneği. s. 115–130. Arşivlendi (PDF) 8 Şubat 2010 tarihinde orjinalinden.
  17. ^ Megiddo, Nimrod ve Modha, Dharmendra S. (2004). "Uyarlanabilir Yedek Önbellek Algoritması ile LRU'dan Daha İyi Performans" (PDF). Bilgisayar. IEEE Bilgisayar Topluluğu. 37 (4): 58. CiteSeerX  10.1.1.231.498. doi:10.1109/MC.2004.1297303. S2CID  5507282. Arşivlendi (PDF) 21 Ekim 2012 tarihinde orjinalinden. Alındı 20 Eylül 2013.
  18. ^ Rhodehamel, Michael W. (2–4 October 1989). The Bus Interface and Paging Units of the i860 Microprocessor. 1989 IEEE International Conference on Computer Design: VLSI in Computers and Processors. Cambridge, MA, USA: IEEE. s. 380–384. doi:10.1109/ICCD.1989.63392. ISBN  0-8186-1971-6. INSPEC Accession Number 3719504.
  19. ^ Tanenbaum, Andrew S .; Bos, Herbert (2015). Modern İşletim Sistemleri (4. baskı). Boston, MA, USA: Pearson. s. 215. ISBN  978-0-13-359162-0. OL  25620855M.
  20. ^ Kumar, Gyanendra; Tomar, Parul (September 2017). "A Novel Longest Distance First Page Replacement Algorithm". Indian Journal of Science and Technology. 10 (30): 1–6. doi:10.17485/ijst/2017/v10i30/115500. ISSN  0974-6846. Arşivlendi 7 Eylül 2017 tarihinde orjinalinden.
  21. ^ See explanation at the start of /mm/workingset.c in the Linux source
  22. ^ Corbet, Jonathan Corbet (2 May 2012). "Better active/inactive list balancing". LWN.net.

daha fazla okuma