Uploaded by Professør Álvaro

9

advertisement
Chapter 9:
Virtual Memory
(Sanal Bellek)
Background

Kodun yürütülebilmesi için bellekte olması gerekir, ancak programın tamamı nadiren kullanılır

Hata kodu, olağandışı rutinler, büyük veri yapıları

Tüm program kodu aynı anda gerekli değildir

Kısmen yüklenmiş programı yürütme yeteneğini düşünün

Program artık fiziksel belleğin sınırlarıyla kısıtlanmıyor

Program ve programlar fiziksel bellekten daha büyük olabilir
Background

Virtual memory – (Sanal bellek) – kullanıcı mantıksal belleğinin fiziksel bellekten ayrılması

Günümüzdeki programlar fiziksel hafızanın kapasitesinden daha büyük olabilmektedir.

Sanal bellek, programcıların hafıza limitlerinden soyutlanmasını sağlar.

Sanal bellek yöntemi, process’lerin tamamının hafızaya yüklenmeden çalıştırılmasına izin verir.

Yürütülmesi (execution) için programın yalnızca bir kısmının bellekte olması gerekir

Bu nedenle mantıksal adres alanı, fiziksel adres alanından çok daha büyük olabilir.

Adres alanlarının birkaç proses tarafından paylaşılmasına izin verir

Daha verimli proses oluşturmaya izin verir

Aynı anda çalışan daha fazla program

İşlemleri yüklemek veya değiştirmek için daha az I/O gerekli
Fiziksel ve Sanal Bellek
Fiziksel ve Sanal Bellek
Sanal bellek adresinin fiziksel bellek
adresine dönüştürülmesi
Sanal adres alanı

Sanal bellekteki heap ve stack alanları dinamik olarak
büyüyebilmektedir.

Stack ve heap arasındaki büyük boş alan (hole), sanal
adres alanının bir parçasıdır,
 ancak yalnızca yığın veya heap büyürse gerçek
fiziksel sayfalar gerektirir.

Boşluklar (hole) içeren sanal adres alanları kullanmak
faydalıdır çünkü stack veya heap segmentleri büyüdükçe
veya program yürütme sırasında kitaplıkları (veya
muhtemelen diğer paylaşılan nesneleri) dinamik olarak
bağlamak istiyorsak boşluklar doldurulabilir.
Sanal Belleği Kullanarak Paylaşılan Kitaplık

Sanal bellek, mantıksal belleği fiziksel
bellekten ayırmanın yanı sıra, dosyaların ve
belleğin sayfa paylaşımı yoluyla iki veya daha
fazla process tarafından paylaşılmasına
olanak tanır

Sistem kütüphaneleri, paylaşılan nesnenin bir
sanal adres alanına eşlenmesi yoluyla birkaç
işlem tarafından paylaşılabilir. Her process,
kütüphaneleri kendi sanal belleklerinin
parçası olarak görürler, ancak fiziksel
hafızadaki sayfalar paylaştırılır.

Process’ler hafızayı paylaşabilir. Sanal bellek,
bir process’in hafızada diğer process’lerle
paylaşabileceği bölge oluşturmasına izin verir.

Sanal bellek, fork() sistem çağrısı ile işlem
oluşturma sırasında sayfaların paylaşılmasına
izin verebilir, böylece işlem oluşturmayı
hızlandırır.
DEMAND PAGING


Processlere ait sayfaların ihtiyaç olduğunda yüklenmesine demand paging denilmektedir.
Yükleme zamanında tüm process belleğe getirebilir veya bir sayfayı yalnızca gerektiğinde belleğe alınır




Daha az G/Ç gerekli,
Daha az bellek gerekli
Daha hızlı yanıt
Daha fazla kullanıcı

Demand paging ile programın çalışması süresince kullanılmasına gerek olmayan sayfalar fiziksel hafızaya
yüklenmez.

Demand paging sistemi disk üzerindeki süreçlerin hafızaya swapping ile yüklenmesini gerçekleştirir.
 Bir process içindeki bir sayfa gerekmedikçe hafızaya yüklenmez.

Pager süreç içindeki sayfaların yüklenmesini gerçekleştirir.
Sayfaların (page) bitişik disk alanına aktarılması
Hafızadaki sayfaların bitişik disk alanına aktarımı

Bir process ana belleğe getirildiğinde (swap in), pager geri diske atılana dek (swap out) hangi
sayfaların kullanılacağını tahmin eder.

Processin tamamını yüklemek yerine, gerekli sayfalar hafızaya yüklenir.

Böylece gereken hafıza alanı ve swap süresi azaltılmış olur.

Bir sayfanın hafızada mı yoksa diskte mi olduğunu tutmak için donanımsal bir bileşen gerekir.

valid ve invalid biti, sayfanın bulunduğu yeri (yani hafızada olup olmadığını) belirlemek için
kullanılır.
Valid-Invalid Bit




Her sayfa tablosu girişi ile bir bit (valid-invalid) ilişkilendirilir
(v  in-memory, i  not-in-memory)
Başlangıçta valid-invalid biti, tüm girişlerde i olarak ayarlanır
Sayfa tablosu anlık görüntüsü örneği:
Frame #
valid-invalid bit
v
v
v
v
i
….
i
i
page table

Adres çevirisi sırasında, sayfa tablosu girişindeki valid-invalid bit invalid " i " ise "sayfa hatası" olur.
I  page fault
Bazı Sayfalar Ana Bellekte Olmadığında Sayfa Tablosu
Page Fault (Sayfa hatası)

Process belleğe alınmamış bir sayfaya erişmeye çalışırsa ne olur? Geçersiz olarak işaretlenmiş bir
sayfaya erişim, sayfa hatasına (page fault) neden olur.


Sayfalama donanımı, adresi sayfa tablosu aracılığıyla çevirirken, invalid bitin ayarlandığını fark edecek ve
işletim sistemine bir trap kurulmasına neden olacaktır.
Bu trap, işletim sisteminin istenen sayfayı belleğe getirememesinin sonucudur.

Bu sayfa hatasını işleme prosedürü:
1.
Referansın geçerli mi yoksa geçersiz bellek erişimi mi olduğunu belirlemek için bu işlem için dahili bir
tabloyu (genellikle işlem kontrol bloğu ile tutulur) kontrol ederiz.
2.
Referans geçersiz ise işlemi sonlandırıyoruz. Geçerliyse, ancak henüz o sayfayı getirmediysek, şimdi
onu sayfaya alıyoruz.
3.
Boş bir frame buluruz.
İstenen page yeni tahsis edilen frame’i okumak için bir disk işlemi planlıyoruz.
4.

5.
Disk okuması tamamlandığında, süreçle birlikte tutulan dahili tabloyu ve sayfa tablosunu sayfanın
artık bellekte olduğunu gösterecek şekilde değiştiririz.
6.
Trap tarafından kesilen talimatı yeniden başlatıyoruz.
İşlem artık sayfaya erişebilir.
Sayfa Hatasını Ele Alma Adımları
Bir sayfa hatası oluşursa
1.
İşletim sistemine trap oluştur
2.
Kullanıcı kayıtlarını ve işlem durumunu kaydedin
3.
Interrupt’ın (kesinti) bir sayfa hatası olduğunu belirleyin
4.
Sayfa referansının uygun olup olmadığını kontrol edin ve sayfanın diskteki konumunu belirleyin
5.
Diskten boş bir frame kullanarak okuma yapın:
1.
Okuma isteğine hizmet verilene kadar bu cihaz için kuyrukta bekleyin
2.
Cihaz arama ve/veya gecikme süresini bekleyin
3.
Sayfayı boş bir çerçeveye aktarmaya başlayın
6.
Beklerken, CPU'yu başka bir kullanıcıya tahsis edin.
7.
Disk G/Ç alt sisteminden bir interrupt alın (G/Ç tamamlandı)
8.
Diğer kullanıcı için kayıtları ve işlem durumunu kaydedin
9.
Interrupt’ın diskten olduğunu belirleyin
10.
Sayfa tablosunu ve diğer tabloları, sayfanın artık bellekte olduğunu gösterecek şekilde düzeltin
11.
CPU'nun bu işleme yeniden atanmasını bekleyin
12.
Kullanıcı kayıtlarını, işlem durumunu ve yeni sayfa tablosunu geri yükleyin ve ardından
kesintiye uğrayan talimata devam edin
Demand Paging Performansı



Page fault olması durumunda aşağıdaki temel 3 işlem yapılır:

Page fault interrupt başlatılması

Sayfanın okunup hafızaya aktarılması

Process’in restart edilmesi
Page Fault oranı 0  p  1

Eğer p = 0  Page fault yok

Eğer p = 1  her referans bir page fault
Effective Access Time (Efektif erişim süresi - EAT)
EAT = (1 – p) x memory access + p (page fault overhead + swap page out + swap page in )
Demand Paging

Memory access time = 200 nanoseconds

Average page-fault service time = 8 milliseconds

Effective Access time (EAT) = (1 – p) x 200 + p (8 milliseconds)
= (1 – p ) x 200 + p x 8,000,000
= 200 + p x 7,999,800

If one access out of 1,000 causes a page fault, then
EAT = 8.2 microseconds.
This is a slowdown by a factor of 40!!

If want performance degradation < 10 percent

220 > 200 + 7,999,800 x p
20 > 7,999,800 x p

p < .0000025

< one page fault in every 400,000 memory accesses
COPY-ON-WRITE

fork() sistem çağrısının, ebeveyninin kopyası olan bir child süreç
oluşturduğunu hatırlayın.

Geleneksel olarak, fork(), parent’a ait sayfaları çoğaltarak, child için
parent’ın adres alanının bir kopyasını oluşturarak çalıştı.

Ancak, birçok child proses oluşturulduktan hemen sonra exec() sistem
çağrısını çağırdığı düşünüldüğünde, ebeveynin adres alanının
kopyalanması gereksiz olabilir.

Bunun yerine, parent ve child proseslerin başlangıçta aynı sayfaları
paylaşmasına izin vererek çalışan, Copy-on-Write (COW) olarak bilinen
bir teknik kullanabiliriz.

Bu paylaşılan sayfalar, yazıldığında kopyalanabilen sayfalar olarak
işaretlenir, yani her iki işlem de paylaşılan bir sayfaya yazarsa, paylaşılan
sayfanın bir kopyası oluşturulur.
Process1 page C'yi Değiştirmeden Önce
Process1 page C'yi Değiştirdikten Sonra
PAGE REPLACEMENT

Her sayfa ilk çağrıldığında bir kez page fault oluşur.

Bir process 10 sayfadan oluşuyorsa, çalışması sırasında genellikle yarısını kullanır.

Bu yüzden, demand paging I/O gereksinimini azaltır.

Multiprogramming ile daha çok process’i çalıştırabiliriz (over-allocating).

Process’lerden bazıları tüm sayfaları kullanmak isteyebilir.

İşletim sistemi yeni sayfa için mevcut sayfalardan birisini swap out yapabilir (page replacement).
Page Replacement

Temel page replacement algoritması

Eğer boş frame yoksa şu anda kullanılmayan bir frame seçilir ve swap out (disk swap space’e yazılır) yapılır.

Swap out yapılan frame için page table invalid yapılır.

İstenen sayfa disk üzerinde bulunur.

Boş frame varsa, bu frame kullanılır.

Boş frame yoksa, page-replacement algoritması ile bir frame seçilerek kullanılır.

Seçilen frame disk’e yazılır ve page table değiştirilir.

Disk’ten istenen sayfa okunarak bu frame’e yazılır ve page table değiştirilir.

Page fault olan process çalışmaya devem eder.
Temel page replacement algoritması
1.
Diskte istenen sayfanın konumunu bulun
2.
Boş bir frame bulun:
- Boş bir frame varsa onu kullanın
- Boş frame yoksa, bir kurban (victim) çerçevesi seçmek için bir sayfa değiştirme algoritması kullanın
- Kurban seçilen frame’i diske yazın, page ve frame tablolarını güncelleyin.
3.
4.
İstenilen page’i (yeni) boş frame’e getirin; page ve frame tablolarını güncelleyin
Tuzağa (trap) neden olan talimatı yeniden başlatarak işleme devam edin
Page Replacement
Sayfa Hatalarının Çerçeve Sayısına Göre Grafiği
Page ve Frame Değiştirme Algoritmaları


Frame-allocation algoritması

Her işleme kaç frame verileceğine ve

Hangi frame değişeceğine karar verir.
Page-replacement algorithm


Hem ilk erişimde hem de yeniden erişimde en düşük page fault oranını ister
Algoritmayı, belirli bir bellek referansları dizisinde (referans dizisi) çalıştırarak ve bu dizideki page fault
hesaplayarak değerlendirin. (Dizi, tam adresler değil, yalnızca sayfa numaralarıdır)

Aynı sayfaya tekrar tekrar erişim, sayfa hatasına neden olmaz

Örneklerde kullanılacak referans dizi
7,0,1,2,0,3,0,4,2,3,0,3,0,3,2,1,2,0,1,7,0,1
First-In-First-Out (FIFO) Algoritması

Referans Dizi: 7,0,1,2,0,3,0,4,2,3,0,3,0,3,2,1,2,0,1,7,0,1

3 frame (Process başına hafızada aynı anda 3 page bulunabilir)
15 page faults
Belady Anamolasini Gösteren FIFO
reference string: 1,2,3,4,1,2,5,1,2,3,4,5
Optimal Algoritması

Uzun süre kullanılmayacak sayfayı değiştirin

Bunu bilmek mümkün mü ?
Least Recently Used (LRU) Algoritması

Gelecekten ziyade geçmiş bilgileri kullanın

Uzun süredir kullanılmayan sayfayı değiştirin

Son kullanım zamanını her sayfayla ilişkilendirin

12 faults
LRU Algorithm (Cont.)

Counter implementation

Her sayfa girişinin bir sayacı vardır; bu giriş aracılığıyla sayfaya her başvuru yapıldığında, saati
sayaca kopyalayın

Bir sayfanın değiştirilmesi gerektiğinde, en küçük değeri bulmak için sayaçlara bakın.


Gerekli tabloda arama yapın
Stack implementation

Sayfa numaralarından oluşan bir yığını double link formunda tutun:

Referans verilen sayfa:


En üste taşı

6 işaretçinin değiştirilmesini gerektirir

Ancak güncellemeler maliyetlidir.

Değiştirmek için aramaya gerek yok
LRU ve OPT, Belady Anomalisine sahip olmayan yığın algoritmalarının örnekleridir
Sayfa Referanslarını Kaydetmek İçin Yığın
Kullanımı
Download