Bölüm 9: Sanal Bellek Mehmet Demirci tarafından çevrilmiştir. Silberschatz, Galvin and Gagne 2013
Bölüm 9: Sanal Bellek Temeller İsteğe bağlı sayfalama Yazma olunca kopyalama (Copy-on-Write) Sayfa değişimi Çerçeve ayırma Thrashing Belleğe eşlenen dosyalar Çekirdek belleği ayırma İşletim sistemi örnekleri 9.2 Silberschatz, Galvin and Gagne 2013
Hedefler Sanal bellek sisteminin faydaları İsteğe bağlı sayfalama (demand paging), sayfa değiştirme algoritmaları, sayfa çerçevesi kavramları Çalışma kümesi modelinin temelleri Paylaşılan bellek ile belleğe eşlenen dosyalar arasındaki ilişki Çekirdek belleğinin yönetimi 9.3 Silberschatz, Galvin and Gagne 2013
Temeller Kod yürütülmek için bellekte olmalıdır, ama programın tümü birden pek kullanılmaz. hata kodları, az kullanılan rutinler, büyük veri yapıları Kısmen yüklenmiş programı yürütme kabiliyeti varsa Program fiziksel belleğin sınırlarıyla kısıtlı değildir Program çalışırken daha az bellek harcar -> aynı anda daha fazla program çalışabilir CPU kullanımı ve üretilen iş artar, yanıt süresi ve iş bitirme süresi artmaz Değiş-tokuş için daha az I/O gerekir -> programlar daha hızlı çalışır 9.4 Silberschatz, Galvin and Gagne 2013
Temeller Sanal bellek mantıksal belleğin fizikselden ayrılması Programın sadece bir kısmı bellekte olsa bile yürütme mümkün Mantıksal adres alanı fiziksel adres alanından çok daha büyük olabilir Adres alanları birçok süreç tarafından paylaşılabilir Daha etkin süreç oluşturma Daha fazla eş zamanlı çalışan program Daha az I/O gereksinimi (yükleme ve değiş-tokuş için) 9.5 Silberschatz, Galvin and Gagne 2013
Temeller Sanal adres alanı sürecin bellekte nasıl tutulduğuna dair mantıksal görünüm Genelde 0 dan başlar, alanın sonuna kadar bitişik adresler içerir Fiziksel bellek sayfa çerçevelerine bölünerek düzenlenir MMU mantıksalı fiziksele eşler Sanal bellek şu yollarla gerçekleştirilebilir: İsteğe bağlı sayfalama (Demand paging) İsteğe bağlı bölütleme (Demand segmentation) 9.6 Silberschatz, Galvin and Gagne 2013
Fiziksel Bellekten Daha Büyük Sanal Bellek 9.7 Silberschatz, Galvin and Gagne 2013
Sanal Adres Alanı Stack en yüksekten başlayıp aşağıya büyür, heap aşağıdan yukarıya büyür. Adres alanını daha iyi kullandırır. İkisinin arasında kullanılmayan alan boşluk olarak kalır. Heap veya stack yeni sayfaya ihtiyaç duyana dek fiziksel bellek gerekmez Seyrek (sparse) adres alanlarına imkan verir, boşluklar sayesinde kullanılan bellek büyüyebilir. Sistem kütüphaneleri sanal adres alanına eşlenerek paylaşılır. Sayfalarının okuma-yazma izinleriyle sanal adres alanına eşlenmesi sonucu paylaşılan bellek yapısı gerçekleştirilir. fork() esnasında sayfalar paylaşılabilir, böylece süreç oluşturma hızlanır. 9.8 Silberschatz, Galvin and Gagne 2013
Sanal Bellekte Paylaşılan Kütüphane 9.9 Silberschatz, Galvin and Gagne 2013
İsteğe Bağlı Sayfalama Sürecin tümü yükleme zamanında belleğe getirilebilir, Veya bir sayfa ancak gerektiğinde belleğe getirilir. Daha az I/O Daha az bellek gereksinimi Daha hızlı yanıt Daha çok kullanıcı Değiş-tokuşlu bir sayfalama sistemine benzer (sağda) Sayfaya ihtiyaç var referans geçersiz referans abort (iptal) bellekte değil belleğe getir Tembel değiş-tokuşçu Sayfa lazım olmadıkça asla belleğe alma 9.10 Silberschatz, Galvin and Gagne 2013
Temel Kavramlar With swapping, pager guesses which pages will be used before swapping out again Instead, pager brings in only those pages into memory How to determine that set of pages? Need new MMU functionality to implement demand paging Gereken sayfalar zaten bellekteyse, Normal sayfalamayla farkı yok Gereken sayfa bellekte değilse, Bunu tespit edip sayfayı depodan belleğe almalı Program davranışı değişmemeli Programcı kod değiştirmek zorunda kalmamalı 9.11 Silberschatz, Galvin and Gagne 2013
Geçerli-Geçersiz Biti Her sayfa tablosu girdisine bağlı bir geçerli-geçersiz biti vardır (v bellekte, i bellekte değil) Başta bütün girdiler için bu bit i Örnek sayfa tablosu: MMU adres çevrimi sırasında, tablo girdisindeki geçerli-geçersiz biti i ise sayfa hatası (page fault) 9.12 Silberschatz, Galvin and Gagne 2013
Bazı Sayfalar Bellekte Olmadığında Sayfa Tablosu 9.13 Silberschatz, Galvin and Gagne 2013
Sayfa Hatası Bir sayfaya ilk kez referans olursa, OS e trap gider: page fault (sayfa hatası) 1. OS başka bir tabloya bakar: Geçersiz referans abort (iptal) Referans geçerli, yalnızca sayfa bellekte değil 2. Boş çerçeve bul 3. Disk işlemiyle sayfayı çerçeve içine al 4. Tablolarda değişiklik yaparak sayfanın bellekte olduğunu bildir Geçerlilik biti = v 5. Sayfa hatasına yol açan komutu yeniden çalıştır 9.14 Silberschatz, Galvin and Gagne 2013
Sayfa Hatası Olduğunda Adımlar 9.15 Silberschatz, Galvin and Gagne 2013
İsteğe Bağlı Sayfalama Uç durum süreç başladığında bellekte hiçbir sayfa olmasın OS komut işaretçisini sürecin ilk komutuna işaret ettirir, sayfa bellekte yok -> sayfa hatası Diğer sayfaların tümü için ilk erişimde aynısı olur Saf isteğe bağlı sayfalama Aslında bir komut birkaç sayfaya erişebilir -> birkaç sayfa hatası Referans yerelliği (locality of reference) sayesinde problem biraz hafifler İsteğe bağlı sayfalama için donanım desteği gerekir Geçerlilik biti olan sayfa tablosu İkincil bellek Komutu yeniden başlatma 9.16 Silberschatz, Galvin and Gagne 2013
İsteğe Bağlı Sayfalamanın Performansı Aşamalar (en kötü durum) 1. OS e trap gider 2. Kullanıcı registerları ve süreç durumunu saklanır 3. Sayfa hatası olduğu tespit edilir 4. Sayfa referansının geçerli olduğu anlaşılır ve diskte sayfanın yeri bulunur 5. Diskten boş bir çerçeveye okuma başlatılır: 1. Okuma isteği karşılanana kadar cihaz kuyruğunda beklenir 2. Cihazın arama ve gecikme süreleri beklenir 3. Sayfanın çerçeveye aktarımı başlatılır 6. Beklerken CPU yu başkası alır 7. Disk I/O altsisteminden kesme alınır (I/O bitti) 8. Diğer kullanıcının registerları ve süreç durumu saklanır 9. Kesmenin diskten geldiği anlaşılır 10. Sayfa tablosu ve diğer tablolar düzeltilip sayfanın bellekte olduğu gösterilir 11. CPU nun tekrar bu sürece ayrılması beklenir 12. Kullanıcı registerları, süreç durumu, yeni sayfa tablosu yüklenir, kesilen komut sürdürülür 9.18 Silberschatz, Galvin and Gagne 2013
İsteğe Bağlı Sayfalamanın Performansı Üç büyük iş Kesmeye servis dikkatli kodlamayla birkaç yüz komut gerekir Sayfayı okuma uzun sürer Süreci yeniden başlatma kısa sürer Sayfa Hatası Oranı p, 0 p 1 p = 0 ise hata yok p = 1 ise her referans bir hata Gerçek Erişim Süresi (Effective Access Time) (EAT) EAT = (1 p) x bellek erişimi + p (sayfa hatası masrafı + sayfa çıkarma + yerine sayfa koyma) 9.19 Silberschatz, Galvin and Gagne 2013
İsteğe Bağlı Sayfalama Örneği Bellek erişim zamanı = 200 ns Ortalama sayfa hatası servis zamanı = 8 ms EAT = (1 p) x 200 + p (8 ms) = (1 p) x 200 + p x 8,000,000 = 200 + p x 7,999,800 Sayfa hatası oranı 1/1000 ise EAT = 8.2 mikrosaniye. 40 kat daha yavaş!! Performans düşüşü < %10 olsun istersek, 220 > 200 + 7,999,800 x p 20 > 7,999,800 x p p <.0000025 400,000 bellek erişiminde bir sayfa hatasından daha az hata olmalı 9.20 Silberschatz, Galvin and Gagne 2013
Yazma Olunca Kopyalama Copy-on-Write (COW) sayesinde ebeveyn ve çocuk süreçler başta aynı sayfaları paylaşabilir. Eğer biri paylaşılan bir sayfayı değiştirirse o zaman sayfa kopyalanır COW ile süreç oluşturma daha verimli olur çünkü sadece değişen sayfalar kopyalanır Genelde boş sayfalar sayfa havuzundan bulunur Havuzda her zaman boş çerçeveler olmalıdır yoksa sistem yavaşlar 9.22 Silberschatz, Galvin and Gagne 2013
Süreç 1 Sayfa C yi Değiştirmeden Önce 9.23 Silberschatz, Galvin and Gagne 2013
Süreç 1 Sayfa C yi Değiştirdikten Sonra 9.24 Silberschatz, Galvin and Gagne 2013
Boş Çerçeve Yoksa? Sayfa değişimi bellekte kullanılmayan bir sayfa bul, dışarı at Algoritma sonlandır? değiş-tokuş? Performans açısından istediğimiz en az sayfa hatasına yol açan bir algoritmadır. Aynı sayfa belleğe defalarca gelebilir. 9.25 Silberschatz, Galvin and Gagne 2013
Sayfa Değişimi Sayfa hatası servis rutininde bir değişiklik ile sayfa değişimi getirilebilir, böylece bellekten sınırın üstünde yer ayrılmaz. Sayfa aktarım masrafını azaltmak için kirli (dirty) bit kullanılır, yalnızca değişen sayfalar diske yazılır. Sayfa değişimiyle mantıksal-fiziksel bellek arasındaki ayrışma tamamlanır. 9.26 Silberschatz, Galvin and Gagne 2013
Sayfa Değişimi Gereksinimi 9.27 Silberschatz, Galvin and Gagne 2013
Temel Sayfa Değişimi 1. İstenen sayfanın yerini diskte bul. 2. Boş bir çerçeve bul: - Boş çerçeve yoksa, sayfa değişimi algoritması kullanarak kurban çerçeve seç. - Kurban çerçeve kirliyse diske yaz. 3. İstenen sayfayı çerçeveye getir; sayfa ve çerçeve tablolarını güncelle. 4. Hataya sebep olan komutu yeniden başlat ve devam et. Sayfa hatası durumunda iki sayfa aktarımı gerçekleşebilir EAT artar. 9.28 Silberschatz, Galvin and Gagne 2013
Sayfa Değişimi 9.29 Silberschatz, Galvin and Gagne 2013
Sayfa ve Çerçeve Değişim Algoritmaları Çerçeve ayırma algoritması şunları belirler: Her sürece kaç çerçeve verilecek Hangi çerçeveler değiştirilecek Sayfa değişim algoritması İlk erişimde ve tekrar erişimde en düşük sayfa hatası oranı istenir. Algoritmayı değerlendirmek için belli bir bellek referans dizisi denenir ve bu dizi için kaç sayfa hatası oluştuğuna bakılır. Aynı sayfaya tekrar erişim sayfa hatasına yol açmaz. Sonuçlar boş çerçeve sayısına bağlıdır. Örneklerde referans dizisi aşağıdaki sayfa numaralarından oluşur: 7,0,1,2,0,3,0,4,2,3,0,3,0,3,2,1,2,0,1,7,0,1 9.30 Silberschatz, Galvin and Gagne 2013
Sayfa Hatası vs. Çerçeve Sayısı 9.31 Silberschatz, Galvin and Gagne 2013
İlk Giren İlk Çıkar (FIFO) Algoritması Referans dizisi: 7,0,1,2,0,3,0,4,2,3,0,3,0,3,2,1,2,0,1,7,0,1 3 çerçeve (süreç başına 3 sayfa aynı anda bellekte bulunabilir) 15 sayfa hatası Referans dizisine göre bu sayı değişebilir. Çerçeve eklemek sayfa hatalarını artırabilir! Belady s Anomaly Sayfaların yaşları nasıl takip edilir? FIFO kuyruğu kullanarak 9.32 Silberschatz, Galvin and Gagne 2013
Belady s Anomaly 9.33 Silberschatz, Galvin and Gagne 2013
Optimal Algoritma En uzun süre kullanılmayacak sayfayı değiştir Örnekte 9 sayfa hatası Bunu nereden bileceğiz? Geleceği okuyamayız Bu algoritmayı, uygulanan algoritmanın ne kadar optimale yakın olduğunu ölçmekte kullanırız. 9.34 Silberschatz, Galvin and Gagne 2013
Least Recently Used (LRU) Algoritması En uzak geçmişte kullanılmış (en uzun süredir kullanılmayan) sayfayı değiştir Gelecek yerine geçmiş bilgisini kullan Her sayfayla ilişkili son kullanım zamanı (geçmişe dönük) 12 hata better than FIFO dan daha iyi, Optimalden daha kötü Sık kullanılan iyi bir algoritma Nasıl gerçekleştirilir? 9.35 Silberschatz, Galvin and Gagne 2013
Sayaçlı gerçekleştirim LRU Algoritması Her sayfada bir sayaç vardır; sayfaya her referansta saat değeri sayaca kopyalanır. Sayfa değişimi gerektiğinde sayaçlara bakarak en küçük değer bulunur. Tabloda arama gerekir. Stackli gerçekleştirim Sayfa numaralarından oluşan bir stack tutulur, her elemanda iki bağ (link) vardır. Sayfa referansı olunca: Sayfa numarası tepeye çıkarılır 6 pointer değişir Her güncelleme daha masraflıdır Sayfa değişimi sırasında arama gerekmez 9.36 Silberschatz, Galvin and Gagne 2013
Stack ile LRU Gerçekleştirimi 9.37 Silberschatz, Galvin and Gagne 2013
LRU ya Yaklaşım Algorithmaları LRU özel donanım gerektirir ve yavaştır Referans biti Her sayfayla ilişkili bir bit, başta = 0 Sayfaya referans olunca bit 1 yapılır. Değişim gerekince biti 0 olan herhangi bir sayfayı değiştir Ancak referans sırası bilinmez İkinci şans algoritması FIFO artı donanım tabanlı referans biti Saat değişimi Değişecek sayfanın referans biti = 0 -> değiştir referans biti = 1 ise: referans bitini 0 yap, sayfayı bellekte bırak kuyrukta sonraki sayfayı aynı kurallarla değiştir 9.38 Silberschatz, Galvin and Gagne 2013
İkinci Şans Algoritması 9.39 Silberschatz, Galvin and Gagne 2013
Gelişmiş İkinci Şans Algoritması Referans bitiyle birlikte değişme biti kullan (referans, değişme) çiftini al 1. (0, 0) hem kullanılmamış hem değişmemiş değişime en uygun 2. (0, 1) kullanılmamış ama değişmiş o kadar iyi değil çünkü değiştirmeden önce diske yazmak lazım 3. (1, 0) kullanılmış ama temiz yakında tekrar kullanılabilir 4. (1, 1) kullanılmış ve değişmiş yakında tekrar kullanılabilir ve değiştirmeden önce diske yazmak lazım İkinci şans algoritmasını kullan ama sayfayı en düşük sınıftan seç Dairesel kuyruğu birkaç kez aramak gerekebilir. 9.40 Silberschatz, Galvin and Gagne 2013
Sayma Algoritmaları Her sayfaya kaç kere referans olduğunun sayısını tut Yaygın değil En az sıklıkta kullanılan (Least Frequently Used) (LFU) Algoritması: En küçük sayıya sahip sayfayı değiştir En sık kullanılan (Most Frequently Used) (MFU) Algoritması: Sayısı küçük olan sayfalar belleğe yeni gelmiştir, eskilerden değiştir 9.41 Silberschatz, Galvin and Gagne 2013
Sayfa Buffering Algoritmaları Daima boş çerçeve havuzu bulunsun Çerçeve gerekince boşta hazırdır, hata servisi sırasında bulunması gerekmez. Sayfa boş çerçeve içine alınır ve boşaltılıp havuza eklenmek üzere kurban seçilir. Uygun olunca kurban sayfa çıkartılır. Hatta, değişen sayfaların listesini tutalım Destek depo boş dururken sayfaları oraya yazıp biti temizleyelim. Hatta ve hatta, havuza atılan çerçevenin içeriğine dokunmayalım Çerçeve kullanılmadan önce içindeki sayfaya tekrar referans gelirse, sayfayı diskten yüklemeden bu çerçeveden alırız. Kurbanı yanlış seçme durumunda cezayı hafifletir. 9.42 Silberschatz, Galvin and Gagne 2013
Uygulamalar ve Sayfa Değişimi Bu algoritmaların tümü gelecekteki erişimlerle ilgili tahmin içerir Bazı uygulamalar daha iyi bilgiye sahiptir örn. veritabanları Belleği yoğun kullanan uygulamalar çift arabellek kullanabilir OS sayfanın kopyasını bellekte I/O buffer olarak tutar Uygulama sayfayı bellekte kendi işi için tutar OS uygulamaya doğrudan diske erişim verip aradan çekilebilir Raw (ham) disk modu 9.43 Silberschatz, Galvin and Gagne 2013
Çerçeve Atama Her sürecin ihtiyacı olan minimum çerçeve sayısı bellidir. Örnek: IBM 370 SS MOVE komutu için 6 sayfa: komut 6 byte, 2 sayfa tutabilir from için 2 sayfa to için 2 sayfa Maksimum ise sistemdeki toplam çerçeve sayısıdır. İki ana atama yöntemi Sabit atama Öncelikli atama 9.44 Silberschatz, Galvin and Gagne 2013
Sabit Atama Eşit atama Örneğin, 100 çerçeve ve 5 süreç varsa, her sürece 20 çerçeve Birazı boş çerçeve havuzunda tutulabilir Orantılı atama Süreç boyutuna göre atama yapılır Süreç boyutları ve çoklu programlama derecesi değiştiği için dinamik olmak zorunda s S s m total number of a i i size of process i allocation for p i p i frames si m S m 62 s s a a 1 2 1 2 10 127 10 62 4 137 127 62 57 137 9.45 Silberschatz, Galvin and Gagne 2013
Öncelikli Atama Orantılı atama yap ama boyut yerine öncelik kullan Eğer P i süreci sayfa hatasına yol açarsa, Kendi çerçevelerinden birini değiştirmek üzere seç, Veya, daha düşük öncelikli bir sürecin çerçevelerinden seç 9.46 Silberschatz, Galvin and Gagne 2013
Genel vs. Yerel Atama Genel yer değiştirme (Global replacement) süreç, değiştirilecek sayfayı bütün çerçeveler içinden seçer, yani bir süreç diğerinden çerçeve alabilir. Süreç yürütme zamanı çok değişken olabilir Ama üretilen iş daha büyüktür (daha yaygın) Yerel yer değiştirme (Local replacement) her süreç sadece kendine atanmış çerçeveleri değiştirebilir. Her sürecin performansı sadece kendisine bağlı, daha düzgün ve tahmin edilebilir dağılımlı Ama bellek verimsiz kullanılabilir 9.47 Silberschatz, Galvin and Gagne 2013
Thrashing (Boşa Çalışma) Süreç yeterli sayfaya sahip değilse sayfa hatası oranı çok yüksek olur Sayfa erişiminde sayfa hatası olur Bellekteki bir çerçeve değiştirilir Ancak değiştirilen çerçeve az sonra tekrar lazım olur Sonuçta: Düşük CPU kullanımı OS sisteme yeni süreçler eklenmesi gerektiğini süşünür Thrashing sürecin sürekli sayfaları belleğe alıp bellekten atmakla meşgul olması 9.49 Silberschatz, Galvin and Gagne 2013
Thrashing (Boşa Çalışma) 9.50 Silberschatz, Galvin and Gagne 2013
İsteğe Bağlı Sayfalama ve Boşa Çalışma İsteğe bağlı sayfalama neden çalışır? Locality (yerellik) modeli Süreç bir alandan diğerine göç eder Alanlar arasında kesişim olabilir Boşa çalışma neden ortaya çıkar? alan boyutu > toplam bellek boyutu Yerel veya öncelikli sayfa değişimi kullanılarak etki azaltılabilir 9.51 Silberschatz, Galvin and Gagne 2013
Bellek Referans Örüntüsünde Yerellik 9.52 Silberschatz, Galvin and Gagne 2013
Çalışma Kümesi (Working set) Modeli çalışma kümesi penceresi sabit sayıda sayfa referansı Örnek: 10.000 komut WSS i (working set of Process P i ) = en yakın süresince referans yapılan toplam sayfa sayısı fazla küçükse tüm locality alanını kapsamaz fazla büyükse birkaç locality alanını birden kapsar = tüm programı kapsar D = WSS i toplam çerçeve talebi m: boştaki çerçeve sayısı D > m Thrashing D > m ise, süreçlerden birini askıya al ve sayfalarını bellekten at 9.53 Silberschatz, Galvin and Gagne 2013
Çalışma Kümesi Takibi Aralık zamanlayıcı + referans biti Örnek: = 10,000 Zamanlayıcı 5000 birim zaman sonra kesme üretir Bellekte her sayfa için 2 bit tutulur Kesme gelince bitler kopyalanır ve 0 yapılır Sayfa hatası olduğunda, referans biti ve bellekteki bitlerden biri 1 ise sayfa çalışma kümesinde Yeterince kesin değil 10 bit ve 1000 birim zamanda bir kesme daha fazla kesme masrafı artırır. 9.54 Silberschatz, Galvin and Gagne 2013
Sayfa Hatası Sıklığı Çalışma kümesine göre daha doğrudan çözüm Kabul edilebilir sayfa hatası sıklığı (page-fault frequency) (PFF) aralığı belirlenir ve yerel sayfa değişimi uygulanır. Gerçek hata oranı daha düşükse, süreç çerçeve kaybeder Gerçek hata oranı daha yüksekse, süreç çerçeve kazanır 9.55 Silberschatz, Galvin and Gagne 2013
Belleğe Eşlenen Dosyalar Belleğe eşlenen dosya I/O ile disk bloğu bellekte bir sayfaya eşlenir, böylece dosya I/O rutin bellek erişimi haline gelir. Dosya ilk başta isteğe bağlı sayfalamayla okunur. Sayfa kadarlık bir parça, dosyadan fiziksel bellek sayfasına okunur. Bundan sonraki okuma ve yazmalar normal bellek erişimi gibi gerçekleşir. Faydası: Dosya erişimini basitleştirir ve hızlandırır (read() ve write() system çağrıları yerine bellek erişimi) Bellekte sayfa paylaşımına da izin verir. Yalnız yazılan veri ne zaman diske gider? Periyodik olarak ve/veya close() ile 9.57 Silberschatz, Galvin and Gagne 2013
Belleğe Eşlenen Dosyalar 9.59 Silberschatz, Galvin and Gagne 2013
Belleğe Eşlenen I/O ile Paylaşılan Bellek 9.60 Silberschatz, Galvin and Gagne 2013
Bölüm 9 Sonu Silberschatz, Galvin and Gagne 2013