Sayfa Değiştirme Algoritması (Page Replacement)
Yazan : Şadi Evren ŞEKER
Bilgisayar bilimlerinde özellikle işletim sistemi konusunda kullanılan ve hafızanın daha verimli çalışması için geliştirilmiş algoritmaların ismidir.
İçerik
Arkaplan ve ön bilgiler
FIFO
LRU
Optimal Replacement
Algoritmanın arka planı ve gerekli ön bilgiler
Bilindiği üzere bilgisayarda hafızanın yönetimini (Memory management) işletim sistemi yapmaktadır. Dolayısıyla başarılı bir hafıza yönetiminde, hafızada (RAM) bulunan boşluk kırıntıları (Fragment) en az olmalıdır. Bu boşlukları en aza indirgemek için sayfalama (Paging) yöntemi kullanılır. Sayfalama yönteminde harici boşluk kırıntısı (External Fragment) bulunmaz. Bunun yerine bir sayfaya sığmayan işlemler için iç boşluk kırıntıları (internal fragment) bulunabilir ve bu boşlukların azami değeri sayfa boyutunu aşamaz. Yani bir anlamda hafızanın verimsizleşmesine sebep olan boşluklar kontrol altına alınmış olunur.
Hafıza yönetiminin diğer bir problemi ise, bilgisayar hafızasının yetersiz olduğu durumlarda işlemleri çalıştıramamasıdır. Örneğin 1GB boş hafızası olan bir bilgisayarda 3GB boyutunda işlemlerin çalışması normalde imkansız gibidir. Ancak bu duruma karşı çözüm olarak sanal hafıza (Virtual memory veya Unix terminolojisinde takas alanı, swap) geliştirilmiştir. Basitçe RAM’e sığmayan bilgiler diskin bir kısmında saklanmakta ve gerekli oldukça diskten RAM’e yüklenmektedir. Tabi diskten RAM’e yükleme sırasında tam dolu bir RAM’de yer açmak için de bir kısım bilgi RAM’den diske geri yazılmaktadır.
İşte sayfa değiştirme algoritmaları tam bu noktada devreye girmektedir. Basitçe bilgisayarın hafızası sayfalara (pages) bölünmekte ve çalışan işlemler (processes) bu sayfalara yerleştirilmektedir. Sonuçta sınırlı hafıza ve sınırın üzerinde hafıza ihtiyacı olduğu durumlarda bazı sayfalar (page) diske yazılmaktadır. Hangi sayfanın hafızada (RAM) ve hangi sayfanın diskte bulunacağını ve ne zaman yer değiştireceklerini belirleyen algoritmalar sayfa değiştirme algoritmalarıdır.
fifo Page Replacement Algorithm (İlk giren ilk çıkar sayfa değiştirme algoritması)
Bu algoritmaya göre bir sayfa ihlali (page fault) olduğunda, yani hafızada (RAM) bulunmayan bir sayfaya erişilmek istendiğinde, yani diskteki bir sayfaya erişilmek istendiğinde, Diskten ilgili sayfa hafızaya (RAM) yüklenirken, hafızadaki en eski sayfa yerine yüklenir ve bu en eski sayfa da diske geri yazılır.
Bu algoritmayı bir örnek üzerinden inceleyelim.
Örneğin işletim sisteminden sırasıyla aşağıdaki çerçeveler (Frames) yani sayfalar talep ediliyor olsun:
1,2,3,2,3,4,5,3,1
ve ayrıca hafızamıza (RAM) sadece 3 çerçeve anlık olarak sığabiliyor olsun. Bu durumda her talepten sonra hafızadaki çerçeveler (frames, sayfalar, pages) aşağıdaki şekilde olacaktır.
1. sayfa talebinde sayfa ihalali (page fault) olur çünkü henüz hafızada olmayan bir sayfa talep edilmiştir.
|1| | |
2. sayfa talebinde sayfa ihlali yolur çünkü 2. sayfa da henüz hafızada bulunmamaktadır.
|1|2| |
3. sayfa talebinde yeniden bir sayfa ihlali bulunur sebebi 3. sayfanın da henüz hafızada olmamasıdır:
|1|2|3|
3. sayfadan sonra artık hafızamız tamamen dolmuştur çünkü hafıza kapasitesi 3 sayfa taşıyacak şekilde tanımlanmıştır.
4. sayfa talebinde zaten hafızada bulunan 2. sayfa istenir ve bir sayfa ihlali oluşmaz.
5. sayfa talebinde de benzer şekilde zaten hafızada bulunan 3 numaralı sayfa talep edilir ve bir sayfa ihlali oluşmaz.
6. sayfa talebinde hafızada bulunmayan 4 numaralı sayfa talep edilir ve bir sayfa ihlali oluşur. İşte tam bu noktada FIFO algoritması devreye girer. Çünkü hafıza tamamen doludur ve 4 numaralı sayfanın hafızaya yüklenmesi için hafızadaki sayfalardan birisinin kaldırılması gerekmektedir. Soru hangisinin kaldırılacağıdır.
FIFO algoritmasına göre en eskisi kaldırılır. Yani 1 numaralı sayfa ilk gelen olduğu için ilk kaldırılan olur ve 1 numaralı sayfa yerine 4 numaralı sayfa yerleştirilir:
|4|2|3|
7. sayfa talebinde yine hafızada o anda bulunmayan 5 numaralı sayfa talep edilmiştir. Bu durumda yeni bir sayfa ihlali oluşacak ve 5 numaralı sayfa o anda hafızada bulunan en eski sayfa yerine yerleştirilecektir. Bu en eski sayfa 2 numaralı sayfadır ve sayfa yerleştirilmesi (page replacement) işleminden sonra hafızadaki sayfalar aşağıdaki şekildedir:
|4|5|3|
8. sayfa talebinde 3 numaralı sayfaya erişilmek istenmiştir ve bu sayfa hal-i hazırda bellekte bulunmaktadır dolayısıyal bir sayfa ihalali oluşmaz ve doğrudan hafızadan ihtiyaç karşılanır.
9. sayfa talebinde ise daha önceden hafızada olan ancak şu anda hafızada bulunmayan 1 numaralı sayfa istenmiştir. Bu durumda bu sayfa hafızada olmadığı için sayfa ihlali olur ve 1 numaralı sayfa hafızadaki en eski sayfanın yerine yani 3. numaralı sayfanın yerine yerleştirilir ve son halinde:
|4|5|1|
şeklinde bir hafıza sayfa dizilimine erişilmiş olur.
Yukarıdaki bu örnekte toplam 9 sayfa için 6 sayfa ihlali olmuştur. Bu durumda sayfa ihlal oranı (Page fault rate) 0.66 olarak bulunmuş olunur.
Least Recently Used (LRU) Page replacement (En nadir kullanılan sayfa değiştirme algoritması)
Bu algoritmaya göre bir sayfa ihlali (page fault) olduğunda, yani hafızada (RAM) bulunmayan bir sayfaya erişilmek istendiğinde, yani diskteki bir sayfaya erişilmek istendiğinde, Diskten ilgili sayfa hafızaya (RAM) yüklenirken, hafızadaki en az erişilen sayfa yerine yüklenir ve bu en az kullanılan sayfa da diske geri yazılır.
Bu algoritmayı bir örnek üzerinden inceleyelim.
Örneğin işletim sisteminden sırasıyla aşağıdaki çerçeveler (Frames) yani sayfalar talep ediliyor olsun:
1,2,3,2,3,4,5,3,1
ve ayrıca hafızamıza (RAM) sadece 3 çerçeve anlık olarak sığabiliyor olsun. Bu durumda her talepten sonra hafızadaki çerçeveler (frames, sayfalar, pages) aşağıdaki şekilde olacaktır.
1. sayfa talebinde sayfa ihalali (page fault) olur çünkü henüz hafızada olmayan bir sayfa talep edilmiştir.
|1| | |
2. sayfa talebinde sayfa ihlali yolur çünkü 2. sayfa da henüz hafızada bulunmamaktadır.
|1|2| |
3. sayfa talebinde yeniden bir sayfa ihlali bulunur sebebi 3. sayfanın da henüz hafızada olmamasıdır:
|1|2|3|
3. sayfadan sonra artık hafızamız tamamen dolmuştur çünkü hafıza kapasitesi 3 sayfa taşıyacak şekilde tanımlanmıştır.
4. sayfa talebinde zaten hafızada bulunan 2. sayfa istenir ve bir sayfa ihlali oluşmaz.
5. sayfa talebinde de benzer şekilde zaten hafızada bulunan 3 numaralı sayfa talep edilir ve bir sayfa ihlali oluşmaz.
6. sayfa talebinde hafızada bulunmayan 4 numaralı sayfa talep edilir ve bir sayfa ihlali oluşur. İşte tam bu noktada LRU algoritması devreye girer. Çünkü hafıza tamamen doludur ve 4 numaralı sayfanın hafızaya yüklenmesi için hafızadaki sayfalardan birisinin kaldırılması gerekmektedir. Soru hangisinin kaldırılacağıdır.
LRU algoritmasına göre en az erişileni kaldırılır. Yani 2 numaralı sayfa 2 kere, 3 numaralı sayfaya da 2 kere erişilmiştir. Bu durumda bir kere erişilen tek sayfa olan 1 yerine 4 numaralı sayfa yerleştirilir:
|4|2|3|
7. sayfa talebinde yine hafızada o anda bulunmayan 5 numaralı sayfa talep edilmiştir. Bu durumda 4 numaralı ve en az erişilmiş olan sayfa yerine 5 numaralı sayfa yerleştirilir.
|5|2|3|
8. sayfa talebinde 3 numaralı sayfaya erişilmek istenmiştir ve bu sayfa hal-i hazırda bellekte bulunmaktadır dolayısıyal bir sayfa ihalali oluşmaz ve doğrudan hafızadan ihtiyaç karşılanır.
9. sayfa talebinde ise daha önceden hafızada olan ancak şu anda hafızada bulunmayan 1 numaralı sayfa istenmiştir. Bu durumda bu sayfa hafızada olmadığı için sayfa ihlali olur 1 numaralı sayfa o anda hafızada bulunan en nadir erişilmiş sayfa yerine yerleştirilecektir. Bu en az erişilen sayfa 4 numaralı sayfadır ve sayfa yerleştirilmesi (page replacement) işleminden sonra hafızadaki sayfalar aşağıdaki şekildedir:
|1|2|3|
şeklinde bir hafıza sayfa dizilimine erişilmiş olur.
Yukarıdaki bu örnekte toplam 9 sayfa için 6 sayfa ihlali olmuştur. Bu durumda sayfa ihlal oranı (Page fault rate) 0.66 olarak bulunmuş olunur.
Optimal Replacement (Mükemmel Sayfa Değiştirme Algoritması)
Bu algoritma, hiç bir zaman gerçekleştirilemeyecek hayali bir algoritmadır. Akademik olarak ortaya atılmıştır ve algoritmanın çalışması için daha sonra gelecek olan sayfa ihtiyaçlarının önceden bilinmesi gerekir. Bu sayfa değiştirme algoritmasına göre bir sayfa ihlali (page fault) olduğunda, yani hafızada (RAM) bulunmayan bir sayfaya erişilmek istendiğinde, yani diskteki bir sayfaya erişilmek istendiğinde, Diskten ilgili sayfa hafızaya (RAM) yüklenirken, hafızada bundan sonra en uzun süre erişilmeyecek olan yerine yüklenir ve bu en az kullanılan sayfa da diske geri yazılır.
Bu algoritmayı bir örnek üzerinden inceleyelim.
Örneğin işletim sisteminden sırasıyla aşağıdaki çerçeveler (Frames) yani sayfalar talep ediliyor olsun:
1,2,3,2,3,4,5,3,1
ve ayrıca hafızamıza (RAM) sadece 3 çerçeve anlık olarak sığabiliyor olsun. Bu durumda her talepten sonra hafızadaki çerçeveler (frames, sayfalar, pages) aşağıdaki şekilde olacaktır.
1. sayfa talebinde sayfa ihalali (page fault) olur çünkü henüz hafızada olmayan bir sayfa talep edilmiştir.
|1| | |
2. sayfa talebinde sayfa ihlali yolur çünkü 2. sayfa da henüz hafızada bulunmamaktadır.
|1|2| |
3. sayfa talebinde yeniden bir sayfa ihlali bulunur sebebi 3. sayfanın da henüz hafızada olmamasıdır:
|1|2|3|
3. sayfadan sonra artık hafızamız tamamen dolmuştur çünkü hafıza kapasitesi 3 sayfa taşıyacak şekilde tanımlanmıştır.
4. sayfa talebinde zaten hafızada bulunan 2. sayfa istenir ve bir sayfa ihlali oluşmaz.
5. sayfa talebinde de benzer şekilde zaten hafızada bulunan 3 numaralı sayfa talep edilir ve bir sayfa ihlali oluşmaz.
6. sayfa talebinde hafızada bulunmayan 4 numaralı sayfa talep edilir ve bir sayfa ihlali oluşur. İşte tam bu noktada Optimal Replacement algoritması devreye girer. Çünkü hafıza tamamen doludur ve 4 numaralı sayfanın hafızaya yüklenmesi için hafızadaki sayfalardan birisinin kaldırılması gerekmektedir. Soru hangisinin kaldırılacağıdır.
Optimal Replacement algoritmasına göre en uzun süre erişilmeyecek olanı kaldırılır. Yani 2 numaralı sayfaya çalışma sonuna kadar erişilmeyeceği için bu sayfa kaldırılacak ve yerine 4 numaralı sayfa konulacaktır. Diğer sayfalar (1 ve 3) 2′den daha önce erişilecektir.
|1|4|3|
7. sayfa talebinde yine hafızada o anda bulunmayan 5 numaralı sayfa talep edilmiştir. Bu durumda hafızada bulunan sayfalar tekrar incelenir ve 4 numaralı sayfanın çalışma sonuna kadar bir daha erişilmeyeceği görülerek bu sayfa yerine 5 konulur.
|1|5|3|
8. sayfa talebinde 3 numaralı sayfaya erişilmek istenmiştir ve bu sayfa hal-i hazırda bellekte bulunmaktadır dolayısıyal bir sayfa ihalali oluşmaz ve doğrudan hafızadan ihtiyaç karşılanır.
9. sayfa talebinde ise daha önceden hafızada olan ancak şu anda hafızada bulunmayan 1 numaralı sayfa istenmiştir. Bu durumda da bir sayfa ihlali oluşmaz
|1|5|3|
şeklinde bir hafıza sayfa dizilimine erişilmiş olur.
Yukarıdaki bu örnekte toplam 9 sayfa için 5 sayfa ihlali olmuştur. Bu durumda sayfa ihlal oranı (Page fault rate) 0.55 olarak bulunmuş olunur.
« Floyd-Warshall Algoritması | Sayfalama (Paging) »
Yorumlar
Bilgisayar Kavramları üzerinde şu anda okumakta olduğunuz 'Sayfa Değiştirme Algoritması (Page Replacement)' isimli yazı 29 May 2009 tarihinde, saat: 23:36 'de Şadi Evren ŞEKER tarafından gönderilmiş, toplam 625 defa okunmuştur.
Benzer yazıları işletim sistemleri kategorilerinden okuyabilirsiniz. Yazar ile irtibat kurmak için email gönderebilirsiniz. Yazıya yorum yapabilir ya da yapılan yorumları RSS 2.0 ile takibe alabilirsiniz.
Yazarın Kitabı
Bu yazının yazarı Şadi Evren ŞEKER'in son çıkan kitabı "Programlama ve Veri Yapılarına giriş (C, C++ ve JAVA ile)" hakkında bilgi almak için Buraya tıklayabilirsiniz.
Eklenen Son Yazılar
- Visual Basic ile Gösterici (Pointer) Kullanımı
- Hasse Çizgeleri (Hasse Diagrams)
- Zeki Vekiller (Akıllı Ajanlar, Intelligent Agents, Zeki Etmenler )
- Integral Kriptoanalizi ( Toplam Tecessüsü , Integral Cryptoanalysis)
- Diferansiyel Kriptoanalizi ( Fark Tecessüsü , Differential Cryptoanalysis)
- Sierpinski Üçgeni (Sierpinski Triangle)
- C ile programlamaya giriş final sınavı çözümleri
- Çok Seviyeli Sıralar (Multi Level Queues)
- Çift Özetleme (Double Hashing)
- İkinci Dereceden Sondalama (Quadratic Probing)
Yapılan Son Yorumlar
- Şadi Evren ŞEKER: Sıralama işleminiz poligonu...
- Şadi Evren ŞEKER: bahsettiğiniz sıralama algoritması...
- Abdurrahman ulusoy: merhaba hocam. gelişigüzel...
- Oguz Okutan: Merhaba hocam.. Fonksiyonlarda degere göre...
- Şadi Evren ŞEKER: Null, NULL, nil veya null olarak...
- Fatih Kabakci: hocam merhabalar,...
- kara: Çok güzel anlatılmış gerçekten teşekkürler...
- Şadi Evren ŞEKER: Bahsettiğiniz şekil dönüşümü...
- Caner: Kullanıcıdan açı girdisi almıyorsanız...
- Furkan Yediyildiz: Algoritmanin mantigi cok güzel...
- havva: çok sağolun çok güzel açıklamalar var tşk...
- Şadi Evren ŞEKER: typedef komutu, bir yapıdan yeni bir...
- fatih kabakci: hocam ben structures ile ilgili bir sorum...
- Şadi Evren ŞEKER: evet, yukarıda açıklanan, herhangi...
- Abdurrahman ulusoy: fi açısından teta kadar döndürme...
- Şadi Evren ŞEKER: Hayır yok, bir noktanın, herhangi...
- Abdurrahman ulusoy: Bu durumda yukarıdaki formüllerin...
- Abdurrahman ulusoy: Merhaba hocam Üstteki mesajımda...
- mustafa ekmekcioğlu: merhaba şadi bey ben hacettepe...
- Şadi Evren ŞEKER: Talebiniz üzerine...
Yakın Yazılar
Sayfa Değiştirme Algoritması (Page Replacement)
Dahili Parçalar (Internal Fragments)
JSP Dahili Nesneleri (JSP Implicit Objects)
Yerleştirme Algoritmaları (Fitting Algorithms)
Genişletilmiş Ufak Şifreleme Algoritması (Extended Tiny Encryption Algorithm (XTEA))
Enigma Makinesi (Enigma Machine)
asgari tarama ağacı (en kısa örten ağaç, minimum spanning tree)
Koyma Değiştirme Ağları (Substitution Permutation Network , SPN)
CPU Utilization (MİB Meşguliyeti)
Tepe Tırmanma Algoritması (Hill Climbing Algorithm)
Tekrarlı ve Arttırımlı Geliştirme (Iterative and Incremental Development)
Bağlantılar
teşeküürler. güzel bir anlatım olmuş. yazıyı okuduktan sonra kafamda şu soru belirdi. misal bir process var. process initalize edilirken belli bir miktar bellek ayırıyor. 16K bellek ayırdık yani 4 adet page’e denk geliyor. initialize olduktan sonra process saatte bir bu bellek bölgesiyle bir iş yapması lazım. bu bir saatlik dilim içinde işletim sistemi bu belleği diske swap etti. ve process’in bu alanla işlem yapma vakti geldi ve bu bellek bilgisi ram üzerine eşlenmemiş durumda. ilk erişim denemesinde sayfa hatası oluştuğunda işletim sistemi bu sayfaya erişim isteğini anladı ve tekrar ram’e eşledi diyelim. ama benim process’im neden ilk denemede bu bilgiyi alamıyor da 2. denemede almak zorunda kalıyor? kaldıki ikinci bir çalışma döngüsüne gelene kadar işletim sistemi bu alanı tekrar swap edebilir. o zaman yeni baştan bir erişim gerekiyor. işletim sistemi mantıksal adresi kullanarak hangi bilgi hangi sayfada olduğuna bakıp orada bir geçerli bilgi yoksa bunu page fault oluşmadan diskten okuyup ram’e eşleyip ilk isteğimde fault oluşmadan okuması gerekmez mi? bu konuda biraz kafam karıştı. yoksa page fault olup bilgi ilgili yere eşledikten sonra erişim isteğini yapan makine komutuna geri dönüp tekrar bir okuma mı yapıyor?