900 likes | 1.18k Views
BÖLÜM 10. SANAL BELLEK. İçerik. Giriş Sayfalama İsteği ( Demand Paging ) Sayfa Değişimi Frame lerin Yerleşimi Thrashing Bölümleme İsteği ( Demand Segmentation ) İşletim Sistemi Örnekleri. Giriş.
E N D
BÖLÜM 10 SANAL BELLEK Yrd. Doç. Dr. Sevinç İlhan Omurca OS Bolum 10
İçerik • Giriş • Sayfalama İsteği (Demand Paging) • Sayfa Değişimi • Frame lerin Yerleşimi • Thrashing • Bölümleme İsteği (Demand Segmentation) • İşletim Sistemi Örnekleri
Giriş • Virtual memory prosesin işletim sırasında tamamının hafızada tutulmasına gerek olmadan çalıştırılabilmesine olanak tanıyan bir tekniktir. • Bu metodun en görünür avantajı kullanıcı programlarının fiziksel hafızadan daha büyük olmasına izin verebilmesidir. • Uygulanması zordur. • Bu teknik programcıları bellek sınırlamalarının hesaplanmasından kurtarır. • Proseslerin adres uzaylarını ve dosyaları kolayca paylaşabilmesine olanak tanır. • Dikkatli uygulanmazsa performansı düşürebilir.
... • Sanal bellek, mantıksal belleği fiziksel bellekten ayıran bir sistemdir. • Küçük bir fiziksel hafızada büyük lojik hafıza kullanılabilir. • Mantıksal belleği fizikselden ayırmaya ek olarak, sanal bellek yöntemi birçok dosya ve belleğin paylaşılmasına olanak tanır. • Virtual memory genelde (sayfalama isteği)demand paging diye adlandırılan sistemin çalıştırılması ile uygulanır. Aynı zamanda segmentasyon sisteminde de uygulanabilir.
Özet Sayfalama İsteği Mekanizması • PTE sayfalama isteğinde yardımcıdır • Valid: Sayfa bellekte, PTE fiziksel sayfayı işaret eder. • Invalid: Sayfa bellekte değil, PTE’deki bilgiyi sayfayı diskte bulmak için ara • Kullanıcıdan gelen sayfa referansı invalid PTE ise • MMU işletim sistemine kesme gönderir. • İşletim sistemi page fault için ne yapar? • Yer değiştirmek için eski bir sayfa seçer • Eğer seçilen sayfa değiştirilmiş ise (D=1) içeriğini diske geri yaz • Ona ait PTE invalid yapılır, cached TLB invalidate yapılır. • Yeni sayfa bellekten diske yüklenir. • Page table girişi güncellenir, TLB yeni giriş için invalidate yapılır. • Tred page fault hatasının kaldığı yerden işlemeye devam eder. • Tred devam edince yeni sayfa için TLB yüklenir.
Demand Paging (sayfalama isteği) • Program genelde ikincil bir hafızada(Çoğunlukla disk) bulunur. Bir programı işletmek istediğimiz zaman belleğe taşınır. • Programın tamamını taşımaktansa daha yavaş hareket eden “lazy swapper” denen bir mantık kullanılır. • Lazy swapper bir programı ihtiyaç olana kadar hafızaya yüklemez. • Bir program hafızaya yerleştirildiğinde lazy swapper ilerleyen işletimde hangi sayfaların kullanılabileceğini tahmin eder. • Onları hafızada bırakır. Swap-out etmez. • Sadece uzun süre kullanılmayan sayfaları swap-out eder. • Çok kullanılan sayfaları bellekte tutar. • Böylece I/O zamanı azalır.
Temel bileşenler • Bir proses swap-in yapıldığı zaman, Pager, proses bir kez daha swap-out yapılmadan önce hangi sayfaların kullanılacağını tahmin eder. • Tüm prosesi swap-out etmek yerine, pager, yalnızca gerekli sayfaları belleğe taşır. • Bu durum kullanılmayacak olan sayfaların belleğe taşınmasını da önlemiş olur. • Bu şemada, hangi sayfaların bellekte hangilerinin disk üzerinde olduğunu ayırt etmek için bir takım donanım desteğine ihtiyaç duyarız. • Valid-Invalid bit şeması bu amaç için kullanılan bir şemadır.
Valid-Invalid Bit Bazı sayfalar bellekte değilken Page Table görünümü
... • Hafızaya alınan sayfalar page table ‘da valid, hafızda olmayanlar invalid olarak işaretlenir. • Bu işaret programın bu sayfaya erişemeyeceği anlamına gelmez. Sadece o an için hafızada bulunmadığı anlamına gelir. • Erişim isteği ulaştığında sayfa diskten alınıp belleğe yüklenir, ilgili bit valid hale gelir. Erişim tekrarlanır. • Programın işletilmesi için gereken sayfalar belleğe yüklendiğinde program işletimine devam eder. • Program, bellekte olmayan bir sayfaya erişim yapmak istediğinde “page fault” kesmesi tarafından yakalanır.
Page Fault • Sayfalama hatası olduğunda yapılan işlemler:
... • Öncelikle bu proses için internal tablolar kontrol edilir. (Çoğunlukla proses kontrol blok ile muhafaza edilir) Hafıza erişiminin geçerli olup olmadığı ve referansın geçerli olup olmadığı kontrol edilir. • Eğer bir ihlal varsa yani referans invalid ise program sonlandırılır. Eğer valid ise ve henüz bu sayfayı getirmemiş isek onu belleğe getirmemiz gerekir. • Boş bir frame buluruz. Free frame list ‘den bunu öğrenebiliriz. • Az önce belirlediğimiz frame ‘e diskten bilgiyi okuyup getirecek işi planlarız. • Diskten bilgi okunması tamamlandığında , internal table ‘daki ilgili biti sayfanın bellekte olduğu şeklinde güncelleriz. • Illegal adres hatası nedeniyle durdurulan programı restart ederiz. Proses şimdi az önce erişmek istediği sayfa hafızada olduğu için normal olarak erişebilir.
Demand Paging Performansı • Effective Access Time (EAT) • EAT=Hit rate x Hit time + Miss rate x Miss Time • Örnek: • Memory access time: 200 nanoseconds • Average page-fault service time:8 miliseconds • P: probability of miss, 1-p: probability of hit • EAT= (1-p)x200ns+px8ms • = 200ns + p x 7,999,800 ns
... • Etkin zamanını tam olarak hesaplamamız için page fault sayısını hesaplamamız gerekir. Page fault sırası ile şu aşamaları uygulanmasına neden olur: • İşletim sistemine trap iletilir. • Proses durumunun ve kullanıcı register’larının saklanması. • Interrupt’ın nedeninin page fault olduğunun tespiti • Sayfa referansının geçerli olduğunun tespiti ve sayfanın disk üzerindeki yerinin bulunması. • Diskten bilginin okunup free frame’e aktarılması: • Okuma isteği karşılanana kadar ilgili device’ın kuyruğunda bekle • Device seek(arama) ve latency(gecikme) zamanı için bekle • Sayfanın boş bir frame transferini başlat
... • Beklerken cpu başka işler için tahsis et. • Diskten interrupt gelmesi (I/O complete) • Bir başka kullanıcı için register ‘ları ve program state ‘lerini saklama • Interrupt’ ın diskten geldiğinin belirlenmesi • Page table ‘ın ve diğer table ‘ların düzeltilmesi (güncellenmesi) • CPU ‘ nun tekrar bu proses için çalıştırılmasını bekleme süresi • Kullanıcı register’larının , program state’ inin , yeni page table’ ın geri depolanması ve kesilen talimatın işletiminin tekrar başlatılması
... • Bu durumların hepsi her page fault ‘ta olmamaktadır. Fakat her durumda kabaca şu durumlar meydana gelmektedir. • Page fault interrupt’ını servis et. • Page değiştirilmesi (swap) • Prosesin restart edilmesi
… • Diske gitmek bellek erişim performansından ödün vermek anlamına gelecektir. • 1000 sayfa referansından bir tanesinde page fault oluşursa EAT=8.2 microsec. hesaplanmıştır. • Bu oranı %10 un altında tutmak için 400000 referansta 1 sayfa hatası oluşmalıdır. (Vistayı öldüren neden) • Bunların sonucunda işletim sistemlerinde sayfa değişim politikası çok önemlidir.
Sayfa Değişimi • Kullanıcı programı işletilirken page fault oluşur. • İşletim sistemi bunun illegal adres veya hafızada bulunmamasından kaynaklanan bir hata olduğunu kontrol eder. • İşletim sistemi disk üzerinde istenen sayfanın yerini bulur. • Hafızaya bunu alacağı zaman eğer hafızada yer yok ise ne olacak ?
Sayfa değişimi • Sayfa değişimi şu yaklaşımı uygular: • Eğer hiç boş frame yoksa şu anda kullanılmayan bir frame bul ve onu hafızadan uzaklaştır. • Uzaklaştırılacak frame’in bilgileri diske yazılır. • Bu sayfanın hafızada bulunmadığı bilgisi de page table’da güncellenir.
... • Page Replacement için uygulanan tam model şöyledir : • Disk üzerinde istenen sayfayı bul • Bir boş frame bul • Eğer bu bir boş frame ise kullan • Aksi halde page-replacement algoritmasını kullanacak kendine bir kurban seç • Kurban sayfanın bilgilerini diske yaz. Frame table listesini güncelleştir. • İstenen sayfanın bilgilerini yeni elde edilen frame‘den oku. Page table ve frame table ‘da bilgili bilgileri güncelleştir. • Kullanıcı prosesini tekrar başlat.
Dirty bit • Bu durumda dikkat etmemiz gereken başka bir durum da o page ‘in içeriğinin değişip değişmediği bilgisidir. • Bu da modify (dirty) bit kullanılarak ayarlanabilir. Her sayfa yada frame bir modify bite sahip olabilir. • Sayfa içeriği hafızaya alındıktan sonra dirty bit sıfırlanır. • Daha sonra bu page üzerinde herhangi bir bilgi değişikliği meydana geldi ise bu bit dirty modified olarak set edilir. • Page replacement sırasında bu bit incelenir. • Eğer sayfa içeriğinde herhangi bir değişiklik varsa, dirty bit set ise o zaman sayfa diske yazılır. • Eğer içerikte bir değişiklik yoksa tekrar yazılmasına gerek kalmaz.
Sayfa Değişim Algoritmaları • Sayfa değişim algoritmalarından en az page fault üretecek teknik seçilmelidir. • Hafıza referans dizileri “referans string” olarak adlandırılır
Örnek:referans string • Özel bir program sırası: • 0100 , 0432 , 0101 , 0612 , 0102 , 0103 , 0104 , 0101, 0611, 0102, 0103, 0104, 0101, 0610, 0102, 0103, 0104, 0101, 0609, 0102, 0105 • Her bir sayfada 100 byte bulunmaktadır referans stringi : • 1 , 4 , 1, 6 , 1 , 6, 1 , 6, 1, 6, 1 olacaktır.
Algoritmalar • Sıradaki metodları incelerken 3 frame boş kabul edip , şu referans string için incelemelerimizi yapalım : • 7 , 0 , 1 , 2 , 0 , 3 , 0 , 4 , 2 , 3 , 0 , 3 , 2 , 1 , 2 , 0 , 1 , 7 , 0 ,1
FIFO • En basit page replacement algoritmasıdır. FIFO algoritması her page hafızaya girdiğinde ona bir numara verir. • Page replacement gerektiğinde en eski giriş numarasına sahip olan page dışarı alınır. • Kötüdür çünkü az kullanılan bir sayfa için çok kullanılanı dışarı alır.
Optimum Yer Değişim Alg. • Optimal Page Replacement metodu tüm algoritmalar içerisinde en az page fault‘a uğrayan algoritmalardandır. • Mantığı basittir : En uzun zaman kullanılmayacak olan sayfayı değiştir. • Çok başarılı sonuçlar verebilir fakat geleceği kestirmek mümkün değildir. • Karşılaştırma yapmak için iyidir.
Least Recently Used (LRU) • Optimal replacement algoritmasının uygulama zorluğu nedeni ile bu algoritmaya yaklaşım yapmak daha mantıklı olacaktır. Mantığı , son belli bir periyotta en az kullanılan sayfaları değiştirmektir. • LRU her sayfayı son kullanıldığında işaretler. Bir page replacement gerektiğinde LRU en uzun periyotlu iş seçer ve onu dışarı alır. • Buradaki temel problem LRU ‘nun nasıl gerçekleneceğidir. Yani sayma işi nasıl yapılmalıdır. Bunun için 2 yaklaşım mevcuttur : • Counters : • Her page kullanıldığında onunla ilgili bir time-of-use register veya bir counter kullanmaktır. Periyot hesaplanırken bu clock register değerine bakılabilir. Clock için overflow dikkatle incelenmelidir. • Stack : • LRU uygulama gerçekleştirme yollarından birisi de page number’ lar için bir stack tutmaktır. Bir sayfa referans edildiğinde onu bulunduğu yerden çıkarıp stack ‘ın en üstüne koymaktır. Bu durumda en üstteki page ‘ler en fazla kullanılmış page ‘ler olacak , en alttaki page ‘ler en az kullanılmış page ‘ler olacaktır. Yer değiştirmede bu page ‘ler seçilir.
LRU • Proseslerin locality modeline dayanır. • Optimum yer değişim algoritmasına iyi bir yaklaşık çözüm üretebilir.
Belady’s Anomaly • Bellek eklemek page fault sayısını azaltır mı? • LRU ve MIN için evet • FIFO için gerekli değil (Belady’s Anomaly olarak adlandırılır)
LRU Uygulaması • Perfect: • Her referans için timestamp • Sayfa listesini referans edildikleri zamana göre sürekli sıralı tutmak • Bu yöntemin gerçekte uygulanması çok maliyetli • Clock Algoritması: Fiziksel sayfaları bir daire içinde bir single clock hand ile düzenlemek • LRU yaklaşıklığı • Eski sayfayı değiştir, en eskisini değil • Detaylar: • Hardware, her fiziksel sayfa için bir “use” bit kullanır. • Donanım her referansta use biti set eder. • Use bit set edilmemiş ise, uzun zaman referans edilmemiş demektir. • Sayfalama hatasında: • Advanced clock hand • Use biti kontrol et: 1 used recently: bellekte bırak 2 yer değişim için seçilmiştir. • Tüm use bitler set edilmiş ise FIFO ya dönecektir.
Clock Algorithm Referans Biti: • Düzenli aralıklarla (örneğin 100 msec) timer interrupt’ ı kontrolü işletim sistemine geçirir. İşletim sistemi her sayfanın son 8 periyotta ne kadar kullanıldığını anlamak için kayıtlar tutar. Burada bir bit sağa kaydırma yapacak son periyottaki bilgiyi en soldaki bite yazar. • Bu durumda 0000000 : son 8 periyottur hiç kullanılmamış bir sayfa • 11111111: son 8 periyottur tam kullanılmış bir sayfa. • 11000100 , 01110111‘e göre son periyotta kullanılmış olması nedeni ile daha kalıcı olacaktır.
LRU approximation: N. Chance Algorithm • Temel olarak FIFO algoritmasına benzer. • Sayfaya N şans ver • İşletim Sistemi her sayfa için sayaç tutar : # sweeps • Page fault ta, İşletim Sistemi use biti kontrol eder. • 1 son taramada (sweep’te) kullanıldı. • 0sayacı artır; sayac=N ise sayfayı değiştir. • Neden N büyük seçilir? • Daha iyi LRU yaklaşıklığı • Neden N küçük seçilir? Daha etkili • Aksi taktirde boş bir sayfa bulmak için çok uzun süre aramak zorunda kalacak • Common Implementation • Güncellenmiş sayfalara ekstra şans ver • Clean pages için N=1 • Dirty Pages için N=2 (güncellemeler diske yazıldığında N=1 yap)
Sayma Tabanlı Sayfa Değişim Alg. • Least Frequently Used (LFU): • Her sayfa için bir counter tutar. Sayfaya erişim yapıldığında bu sayıyı artırır. Değişim yapılacağında en düşük sayıya sahip olan sayfa değiştirilir. • Most Frequently Used (MFU): • En az counter değerine sahip olan sayfa, muhtemelen yeni alınmıştır ve kullanılmamıştır diye düşünülür.Ve bu sayfa yer değiştirilmez.
Demand Paging (detaylar) • Hardware use bitini TLB de set eder: TLB girişi yer değiştirdiğinde, software use bitini page table’a geri kopyalar. • Software TLB girişlerini FIFO listesi gibi düzenler; TLB de olmayanlar LRU ile düzenlenir.
Frame’lerin Yerleşimi • Toplam sistemdeki boş frame‘in üzerinde yerleşim yapamayız. Bunun dışında yerleşim için kullanılabilecek minimum frame sayısını da belirlemeliyiz. • Açıkça görülmektedir ki , her bir proses için ayrılan frame sayısı azaldıkça , page fault sayısı artar , bu da sistemin daha yavaş bir performansla çalışmasına sebep olur.
Frame Yerleşim Alg. Eşit Paylaşım: • En basit yol m adet frame‘i n adet proses kullanacak iken m/n eşit paylaşımda yerleşim yapmaktır. • Örnek olarak 93 frame varsa ve 5 adet proses varsa her proses 18 frame alır. 3 frame ise free frame buffer pool olarak tutulur. Oranlı Paylaşım: • Her prosesin ihtiyacı olan alana oranla frame kendilerine tahsis edilir. • 62 frame‘i 10 ve 127 sayfa kullanan 2 proses için paylaştıracak olursak : • 10/137 * 62 = 4 • 127/137 * 62 = 57
Trashing • Yüksek sıklıkta oluşan paging durumuna “trashing” adı verilir. • Eğer bir proses işletim zamanından daha fazla bir zamanı paging için harcıyorsa o proses trashing durumundadır. • Trashing birçok performans problemine neden olur.
Trashing • Proses yeterli sayfaya sahip değilse page fault oranı çok yüksektir: • Düşük CPU verimliliği • OS zamanının çoğunu swapping ile geçirir. • CPU hızı disk hızı ile sınırlandırılmış olur
... • Trashing nasıl tespit edilir ve önlenir? • Trashing‘i önlemek için prosese ihtiyacı olan kadar frame sağlamamız gerekir. • Hangi prosesin ne kadar frame‘e ihtiyacı olacağını nereden bileceğiz? • Bunun için çeşitli teknikler uygulanmaktadır. • Working set stratejisi programın o an gerçekte kullandığı frame‘lere bakar. • Bu yaklaşım program işletiminin localite modelini tanımlar.
Locality Model • Locality model bir programın işletilirken değişik yerlerden geçtiğini ifade eder. • Locality, aktif olarak programın aynı anda kullandığı sayfa sayısıdır. • Bir program genelde değişik lokalitelerden oluşur. • Örnek olarak bir subrutin çağrıldığında bu yeni bir lokalite tanımlar. Bu lokalitede hafıza referansları subturinin talimatları ile belirlidir. • Lokalitenin kendi yerel değişkenleri vardır. Bunun yanında birtakım da genel değişkenler bulunmaktadır. Subrutinden çıkıldığında proses bu lokaliteyi terk eder.
Working Set Model • Working set modeli lokalite üzerinde kurulmuş bir modeldir. • Bu model working set window‘u tanımlamak için parametresini kullanır. • Genel mantığı son zamanlarda kullanılan sayfa referanslarını incelemektir. • Working set son belli bir zamanda kullanılan page referansları topluluğudur. • Eğer sayfa aktif kullanımda ise working set ‘de olacaktır. • Eğer kullanılmıyor ise zamanından sonra working setten düşecektir.
... • working-set window Sayfa referans sayısı • örnek: 10,000 instruction • WSSi (working set of Process Pi): • D=toplam WSSi: frameler için toplam istek • Her proses aktif olarak working setteki page ‘lerini kullanır. Bu yüzden proses i WSSi frame ‘e ihtiyaç duyar. • Eğer toplam istek toplam uygun frame sayısından fazla olursa (D>m) trashing oluşur. • Birtakım prosesler yeterli frame alamaz.