Kısım I · Makine · Bölüm 15

Sanal Bellek

Her sürece kendi belleği (Virtual memory)

Neden burada · Neye dayanıyor

Neden burada: Bölüm 14 işletim sisteminin ilk büyük işini gösterdi: tek bir işlemciyi onlarca sürece paylaştırmak, her birine sırayla zaman dilimi vermek. Aynı zorluk bellekte de var. RAM tek, programlar çok; hepsi aynı anda belleğe ihtiyaç duyuyor ve hiçbiri diğerinin verisini görmemeli. Bu bölüm, işletim sisteminin belleği nasıl paylaştırdığını ve her programa nasıl "kendine ait" bir bellek yanılsaması verdiğini anlatır. İşlemciyi paylaştırmanın adı zamanı bölmek idi; belleği paylaştırmanın adı adresleri çevirmek.

Neye dayanıyor: Bölüm 10: bellek, numaralanmış hücreler dizisidir; her baytın bir adresi vardır, pointer bir adresi tutan değişkendir. Burada "o adres kimin adresi?" sorusunu soracağız. Bölüm 14: süreç, çalışan bir program ve kendi durumudur. Ayrıca Bölüm 5 (RAM, uçucu bellek) ve Bölüm 8 (disk RAM'den çok daha yavaş, TLB bir önbellektir) bilgisine dayanıyoruz.

  1. Kat 8–10Ağ, tarayıcı, bizim uygulamaHepsi birer süreç olarak çalışır; her biri kendi adres alanında.
  2. Kat 7İşletim sistemiBu bölüm: belleği paylaştırır, yalıtır. Bölüm 13–18.
  3. Kat 3İşlemci ve bellekMMU (adres çevirici) işlemcinin içinde; RAM burada.
  4. Kat 0–2Bit, kapılar, devrelerHer adres bir sayı, her sayı bitler.

Bu bölümün sonunda şunları bileceksin: (1) iki program aynı anda bellekte "aynı adresi" nasıl kullanabilir, (2) bunu yapan düzenek (sayfalama, sayfa tablosu, MMU) nasıl çalışır, (3) RAM dolunca ne olur (takas) ve bilgisayar neden bazen yavaşlar, (4) yalıtım neden güvenliktir ve Chrome bunu neden tarayıcı sekmelerinin her birine ayrı süreç vererek kullanır.

15.1 Adres alanı: her süreç belleğin tamamı kendisininmiş gibi yaşar

Bölüm 10'da bir int x değişkeninin bellekte bir adresi olduğunu gördün: "hücre numarası 4096" gibi. Şimdi bir şey düşün. Tarayıcın bellekte çalışıyor, bir de metin düzenleyicin. Her ikisi de, diyelim, 4096 numaralı adrese bir sayı yazıyor. Bellek tek parça, hücre tek. Çarpışmaları nasıl olmuyor?

Cevap şaşırtıcıdır: iki program da 4096 yazıyor ama aynı hücreye yazmıyor. Programın gördüğü adres, fiziksel hücre numarası değil. İşletim sistemi her sürece kendi adres alanını (address space) verir: o sürecin gözünden bellek, 0'dan başlayan, kendisine ait, sürekli bir dizidir. Kitabın OSTEP bölümü bu ayrımı şöyle koyar: programın gördüğü, çalıştırdığı kodun adresleri, yığın ve öbek işaretçileri, hepsi sanal adrestir (virtual address); gerçek bellek hücresinin numarası ise fiziksel adrestir (physical address).1 Programlar yalnızca sanal adresleri görür. Sanaldan fizikseline çeviri işletim sisteminin (ve donanımın) işidir.

Bir adres alanının içinde ne var? Bir sürecin belleği kabaca üç bölgeye ayrılır: kod (programın komutları), öbek (heap) (programın çalışırken ayırdığı, büyüyüp küçülen veri) ve yığın (stack) (fonksiyon çağrılarının yerel değişkenleri). Bölüm 10'da pointer'ların gösterdiği yerler bu bölgelerin içindedir. Hepsi sürecin kendi sanal adres alanında yaşar.1

Benzetme: kat plakası

Bir apartmanda her dairenin kapısında "1" yazan bir oda vardır: her dairede "1 numaralı oda" bulunur ve hepsi birbirinden farklı bir odadır. Dairenin sakini "1 numaralı odaya gidiyorum" der; kapıcı (işletim sistemi) bunu binanın gerçek planındaki hangi odaya denk geldiğini bilir. Sakin binanın bütününü hiç görmez. Aynı sayı, farklı sürece göre farklı yere gider.

Neden böyle yapıldı? Üç hedef

OSTEP, sanal belleğin üç hedefini sıralar:1

Bu üç hedef tek bir hile ile karşılanır: araya bir çeviri katmanı koymak. Bölüm 1.4'te soyutlamayı öğrenmiştin: üstteki parça yalnızca arayüzü bilir, altta ne olduğunu bilmez. Sanal bellek, kitabın en güzel soyutlama örneklerinden biridir. Arayüz: "0'dan başlayan benim özel belleğim". Gerçekleme: paylaşılan fiziksel RAM, çeviri tabloları ve disk.

15.2 Sayfalama, sayfa tablosu, bellek yönetim birimi

Çeviriyi nasıl yaparız? En basit fikir: her adresi tek tek eşleştirmek. Ama bu, tek bir süreç için bile milyarlarca satırlık bir liste demek. Bunun yerine belleği eşit boyutlu parçalara bölmek daha ucuzdur. OSTEP bunu şöyle anlatır: adres alanını değişken boyutlu parçalara (kod, öbek, yığın) ayırmak yerine sabit boyutlu birimlere böleriz; her birine sayfa (page) denir. Fiziksel belleği de aynı boyutta yuvalar dizisi olarak görürüz; bu yuvalara sayfa çerçevesi (page frame) denir. Her çerçeve bir sanal sayfayı tutabilir.2 Bu yönteme sayfalama (paging) denir.

Çeviri: adresi ikiye bölmek

Sanal adresi iki parçaya ayırırız: başta sanal sayfa numarası (virtual page number, VPN), sonda sayfa içi konum (offset). Sayfa numarası "hangi sayfa?", konum "sayfanın kaçıncı baytı?" demektir. Çeviri yalnızca sayfa numarasını değiştirir; konum aynen kalır, çünkü sayfa bütün olarak taşınır.2

OSTEP'in küçük örneğini birlikte yapalım (rakamları kendimiz doğruladık). Adres alanı 64 bayt, sayfa boyu 16 bayt olsun. 64 = 2⁶ olduğu için her adres 6 bit. 16 = 2⁴ olduğu için konum için 4 bit gerekir; kalan 2 bit sayfa numarasıdır (dört sayfa: 0, 1, 2, 3). Program 21 numaralı adrese erişiyor. İkilik olarak 21 = 010101:

Sanal adresVPN (2 bit)Konum (4 bit)
21 = 01010101 (sayfa 1)0101 (5. bayt)

Sayfa tablosu der ki, sayfa 1 fiziksel çerçeve 7'dedir. 7 = 111; çerçeve numarasını aynı genişliğe getirip konumu sona ekleriz: 0111 + 0101 = 1110101, yani ondalık 117. Fiziksel adres 117'dir ve OSTEP de aynı sonuca varır.2 Sanal adres 21 ile fiziksel adres 117 arasında bir bağ yok; bu, tabloda yazılı bir eşleşmedir. İşletim sistemi tabloyu değiştirirse aynı sanal adres başka bir yere gider.

Sayfa tablosu ve içindeki bitler

Her sürecin kendi sayfa tablosu (page table) vardır: sanal sayfa numarasından fiziksel çerçeve numarasına giden bir arama tablosu. İşletim sistemi bu tabloyu bellekte tutar. Tablonun her satırına sayfa tablosu girdisi (page table entry, PTE) denir ve çerçeve numarasının yanında birkaç anahtar bit taşır:2

Bu tablo ne kadar büyük?

Gerçek sistemlerde sayfa boyu çoğunlukla 4 KB'tır. 32 bitlik bir adres alanı 2³² bayt = 4 GB'tır. 4 KB'lık sayfalara bölünürse 2³² ÷ 2¹² = 2²⁰ = 1.048.576 sayfa eder, yani kabaca bir milyon. Her girdi 4 bayt olsa, sayfa tablosu tek bir süreç için 4 MB tutar; 100 süreç için 400 MB. OSTEP aynı hesabı yapar ve bunu "çok büyük" diye niteler.2 Bu yüzden gerçek sistemler çok seviyeli ve daha akıllı tablolar kullanır; ayrıntısı OSTEP'in sonraki bölümlerinde, bizim kapsamımızın dışında. Bilmen gereken: tablo bedava değil, belleğin bir kısmı kendi yönetim kayıtlarına gider.

MMU ve TLB: çeviriyi kim yapar?

Her bellek erişiminde işletim sistemi araya girip tabloya baksaydı bilgisayar yüzlerce kat yavaşlardı. Bunun yerine çeviriyi donanım yapar: işlemcinin içindeki bellek yönetim birimi (memory management unit, MMU) her sanal adresi fiziksel adrese çevirir. İşletim sistemi tabloyu kurar ve hangi tablonun geçerli olduğunu MMU'ya söyler; sürece her geçişte bu bilgiyi değiştirir (Bölüm 14'teki bağlam değişimi). Geri kalan her şey donanımda, saat vuruşları hızında olur. Bunu mümkün kılmak, Bölüm 6'daki işlemcinin yalnızca "hesap yapan" değil, "çeviri yapan" parçalar da barındırmasının bir sonucudur.

Ama tablo bellekte duruyorsa, her erişim için önce tablodan çeviriyi okumak, sonra asıl veriyi okumak iki bellek erişimi demektir. Çözüm yine Bölüm 8'deki fikirdir: önbellek. Çeviri önbelleği (translation-lookaside buffer, TLB) MMU'nun parçasıdır ve en çok kullanılan sanaldan fiziksele çevirileri tutan donanım önbelleğidir (OSTEP'in dediği gibi, daha iyi bir ad "adres çevirisi önbelleği" olurdu). Donanım her sanal bellek erişiminde önce TLB'ye bakar; çeviri oradaysa çok hızlı yapılır, değilse sayfa tablosuna gidilir.3

İsabet oranı yerellikten (Bölüm 8.2) gelir. OSTEP'in örneği: 4 baytlık on tamsayılık bir dizi, 16 baytlık sayfalarda, 100 numaralı adresten başlıyor. Adresler 100, 104, …, 136; sayfa numaraları 6, 6, 6, 7, 7, 7, 7, 8, 8, 8. Her yeni sayfanın ilk erişimi ıska, aynı sayfadaki sonrakiler isabettir: ıska, isabet, isabet, ıska, isabet, isabet, isabet, ıska, isabet, isabet. Yedi isabet, üç ıska: isabet oranı %70. (Hesabı terminalde yeniden yaptık; sonuç OSTEP'le aynı.) Dizi yan yana durduğu için, program belleğe ilk kez dokunurken bile TLB işe yarıyor. Bu, yerellik fikrinin sayfalamadaki karşılığıdır.3

Uygulamamızda

Hukuk uygulamamızda bir kullanıcının açık oturumu sunucuda çalışan bir süreçtir (Bölüm 14). Diyelim ki Go ile yazılacak sunucumuz aynı anda binlerce kullanıcıya hizmet veriyor. Sunucu sürecinin kendi sanal adres alanı var; veritabanı (Postgres) ayrı bir süreçtir ve kendi adres alanında çalışır. Biri çökse ötekinin belleği bozulmaz, çünkü ikisinin sayfa tabloları farklıdır. Ayrıca, prototipinde puan ve seriyi tutan değişkenler (Bölüm 5.5) tarayıcı sürecinin sanal adres alanındaki bir yerde duruyor; o yer, sayfa tablosu üzerinden fiziksel RAM'in bir çerçevesine bağlanıyor. Senin için görünmez olan bu çeviri, uygulamanın hızını belirleyen şeylerden biridir.

15.3 Takas, bellek baskısı; yalıtım ve güvenlik

Şu ana kadar her sanal sayfanın fiziksel belleğin bir çerçevesinde durduğunu varsaydık. Ama sanal bellek bunun ötesine geçer. Bir süreç, fiziksel RAM'den bile büyük bir adres alanı varmış gibi yaşayabilir ve toplam bellek ihtiyacı RAM'i aşan onlarca süreç birlikte çalışabilir. Bu, RAM'in üstüne bir kat daha koyarak sağlanır: disk.

Takas

İşletim sistemi, nadir kullanılan sayfaları RAM'den alıp diskte ayrılmış bir alana yazar. Bu alana takas alanı (swap space) denir. OSTEP bunu şöyle özetler: büyük ve yavaş bir aygıt sayesinde, fiziksel belleğin kendisinden bile büyük bir sanal bellek yanılsaması kurulur; çoklu programlama (birkaç programı "aynı anda" çalıştırmak) bu yeteneği neredeyse zorunlu kılmıştır, çünkü eski makineler tüm süreçlerin bütün sayfalarını aynı anda tutamazdı.4 Sayfayı diske yazıp RAM'de yer açmaya takas etmek (swapping out) denir.

Sayfa hatası

Peki bir süreç diske atılmış sayfaya erişirse? Sayfa tablosundaki "bellekte-mi" biti sıfırdır. Donanım bunu fark eder ve işletim sistemine bir istisna gönderir; buna sayfa hatası (page fault) denir. (İsim yanıltıcıdır: erişim yasal; sayfa sadece şu anda RAM'de değil. OSTEP de bunun garip bir ad olduğunu belirtir.4) İşletim sistemi sayfayı diskten okur, boş bir çerçeveye koyar, tabloyu günceller ve erişimi yeniden dener. Bu sırada süreç beklemede, işlemci başka sürece verilir (Bölüm 14). Disk RAM'den çok daha yavaş olduğu için bir sayfa hatası, normal bir bellek erişiminden kat kat pahalıdır (Bölüm 8).

Bellek baskısı ve sayfa değiştirme

RAM dolmaya başladığında işletim sistemi bellek baskısı (memory pressure) altındadır. Hangi sayfayı atacağına sayfa değiştirme politikası (page replacement policy) karar verir: genellikle yakın zamanda kullanılmayanı, kirli biti kapalı olanı (diske yazmaya gerek yok) tercih eder. OSTEP'e göre işletim sistemleri küçük bir miktar belleği hep boş tutmaya çalışır: boş sayfa sayısı bir alt eşiğin (düşük su işareti) altına düşünce arka plandaki bir iş parçacığı, üst eşiğe (yüksek su işareti) ulaşana kadar sayfaları atar.4 Böylece yeni bir sayfa gerektiğinde beklemeden boş çerçeve bulunur.

Bellek talebi fiziksel belleği çok aşarsa sistem sürekli sayfa yazıp okumakla meşgul olur; bu duruma çırpınma (thrashing) denir.5 Bilgisayarın "donduğu", fare imlecinin saniyelerce takıldığı, diskin durmadan çalıştığı an böyle bir andır.

Yalıtım ve güvenlik

Sanal belleğin üçüncü hedefi korumaydı. Her sürecin kendi sayfa tablosu olduğu için bir süreç yalnızca tablosunda yazılı çerçevelere erişebilir. Başka bir sürecin belleğinin sanal adresi onun tablosunda yoktur; yani "adresini bilmek" bile yetmez, çünkü adresin hiçbir yere gitmeyen bir yolu var. İşletim sisteminin kendi belleği de aynı mantıkla korunur: ayrıcalıklı moda geçmeden (Bölüm 13.2) o sayfalar ulaşılamaz. Hata bile yalıtılmıştır: bir sürecin çökmesi, kendi sayfa tablosu içinde kalır.

Hukuk benzetmesi: yetki ve yargı alanı

Bir mahkemenin yargı yetkisi kendi alanıyla sınırlıdır; başka bir mahkemenin dosyasına, "dosya numarasını biliyorum" diyerek müdahale edemez. Sürecin adres alanı da onun yargı alanıdır: dışına çıkmaya kalkışırsa, yetkisiz erişim olarak işletim sistemi (Bölüm 13) onu sonlandırır. Yalıtım bir güvenlik özelliğidir; hata ayıklarken de işe yarar, çünkü her sürecin hatası kendi sınırında kalır.

15.4 Tarayıcı sekmeleri neden ayrı süreçlerde çalışır

Bu bölümün bütün fikirlerini tek bir somut örnekte görebiliriz: Chrome. Chrome'un belgeleri, tarayıcıyı bir çok süreçli yapı olarak anlatır. Bir tarayıcı süreci adres çubuğu, yer imleri, geri/ileri düğmeleri gibi tarayıcının "çerçevesini" ve ağ ile dosya erişimi gibi ayrıcalıklı işleri yönetir; ayrı bir işleme süreci (renderer process) bir sekmenin içindeki her şeyden, yani HTML, CSS ve JavaScript'i görüntüye çevirmekten sorumludur; bir GPU süreci ise ekran kartıyla ilgilenir.6 Belgelerdeki ifade şöyledir: Chrome, mümkün olduğunda her sekmeye ayrı bir süreç verir; son zamanlarda ise her siteye (iframe'ler dahil) ayrı bir süreç vermeye çalışır; buna site yalıtımı (site isolation) denir.6

Neden? Bu bölümde öğrendiklerinden çıkan üç neden (Chrome belgeleri ayrıntıyı site yalıtımı olarak anlatır, nedenleri ise biz bu bölümün bilgisinden okuyoruz):

  1. Dayanıklılık. Bir sekmedeki sayfa çökerse yalnızca o sürecin adres alanı gider; diğer sekmeler ve tarayıcının kendisi yaşamaya devam eder. Her sürecin ayrı adres alanı olduğu için bir hata, öteki sayfaların belleğini bozamaz.
  2. Güvenlik. Kötü niyetli bir site JavaScript çalıştırabilir (Bölüm 25). Tüm siteler tek süreçteyse, o süreçteki bir açık, başka sitenin (banka sayfanın) verisini okumaya yol açabilir. Ayrı süreçlerde ise işletim sisteminin sayfa tablosu yalıtımı araya girer: bir sürecin belleği ötekine görünmez.
  3. Kaynak temizliği. Bir sekme kapatıldığında onun süreci sonlanır ve işletim sistemi o sürecin sayfa tablosuyla birlikte ayırdığı bütün belleği geri alır. Tek büyük süreçte ise bir sayfanın belleği, tarayıcı kapanana kadar sahipsiz kalabilir.

Bunun bir bedeli de var: birden çok süreç, birden çok sayfa tablosu, birden çok adres alanı demektir; Chrome'un Etkinlik Monitörü'nde (Bölüm 14.1) onlarca süreç göstermesinin sebebi budur. Bellek yalıtımı bedelsiz değildir; hata payı ve güvenlik karşılığında bellek ödersin. Tarayıcının içini Bölüm 20'de tekrar açacağız.

Bölüm 14 ile bağlantı

Bölüm 14'te işletim sisteminin işlemciyi sürekli yeni bir sürece geçerek paylaştırdığını gördün. Bu bölüm aynı sürecin belleğini de başkalarıyla paylaştığını ve buna rağmen onların görmediğini gösterdi. İkisi birlikte bir sürecin tam tanımını verir: kendi işlemci payı ve kendi sanal adres alanı olan çalışan program. Bağlam değişimi (14.2) sırasında yalnızca yazmaçlar değil, MMU'nun baktığı sayfa tablosu da değişir.

Bölüm 10 ile bağlantı

Bölüm 10'da pointer "bir adres tutan değişken"di. Artık biliyorsun ki o adres, sanal bir adrestir. Bir pointer'ı yazdırdığında göreceğin sayı, fiziksel RAM'deki hücre numarası değil, sürecinin kendi sanal dünyasındaki numaradır. Aynı programı iki kez çalıştırırsan iki süreç aynı sayıyı görebilir ve bu bir çelişki değil.

Bu bölümde neler kuruldu

İşletim sistemi her sürece kendi adres alanını verir; program yalnızca sanal adresleri görür. Bellek sabit boyutlu sayfalara bölünür, fiziksel bellek aynı boyutta çerçevelere; sanal sayfa numarası, her sürecin kendi sayfa tablosu üzerinden çerçeve numarasına çevrilir, konum aynen kalır. Çeviriyi işlemcideki MMU yapar ve hızlı kalmak için en çok kullanılan çevirileri TLB'de tutar. Tablonun girdilerindeki bitler (geçerli, koruma, bellekte-mi, kirli, erişim) hata yakalamayı, korumayı ve takası mümkün kılar. RAM dolarsa nadir kullanılan sayfalar takas alanına yazılır, bir sayfaya gereksinim olunca sayfa hatası ile geri getirilir; aşırı bellek baskısı çırpınmaya yol açar. Bu yalıtım hem dayanıklılık hem güvenlik sağlar ve Chrome'un her siteye ayrı süreç vermesinin nedeni budur.

Terimler sözlükte, Bölüm 15 başlığı altında.

Birincil okuma

OSTEP, The Abstraction: Address Spaces ve Paging: Introduction. İkincisi, bizim 64 baytlık örneğin kaynağıdır; adres çevirisini adım adım gösterir. Derinleşmek için: Paging: Faster Translations (TLBs), Beyond Physical Memory: Mechanisms ve Chrome için Inside look at modern web browser (part 1).

Takıldığın yeri yapay zekâ öğretmenine sor. Bir alıştırma önerisi: ondan 8 baytlık sayfalar ve 6 bitlik bir sanal adres alanı için küçük bir sayfa tablosu yazmasını iste, sonra sen üç tane sanal adresi fiziksel adrese çevir.

Bölüm sonu soruları

Kitaba bakmadan cevapla. Yanlış yaparsan geri bildirim seni ilgili alt bölüme yönlendirir.

1. İki farklı süreç de bellekte 4096 numaralı adrese yazıyor ve birbirlerinin verisini bozmuyorlar. Bu neden mümkün?
Programların gördüğü adresler sanaldır; her sürecin kendi sayfa tablosu aynı sanal adresi farklı bir fiziksel çerçeveye bağlar. Bkz. 15.1.
2. OSTEP örneğindeki 64 baytlık adres alanında sayfa boyu 16 bayttır. Sanal adres 21'in sayfa numarası ve konumu nedir?
21 = 010101. Üstteki 2 bit sayfa numarası (01 = 1), alttaki 4 bit konumdur (0101 = 5). Bkz. 15.2.
3. Çeviri sırasında sanal adresin hangi parçası değişir?
Sayfa bütün olarak taşınır; bu yüzden yalnızca sanal sayfa numarası çerçeve numarasına çevrilir, sayfa içindeki konum aynen sonuca kopyalanır. Bkz. 15.2.
4. Bir program sayfa tablosunda geçersiz işaretli bir adrese erişirse ne olur?
Geçerli biti kapalı bir sayfaya erişim, işletim sistemine bir tuzak üretir; çoğu zaman süreç sonlandırılır. "Segmentation fault" böyle doğar. Bkz. 15.2.
5. TLB'nin işlevi nedir?
TLB, MMU'nun içinde çeviriler için bir önbellektir; sayfa tablosuna her seferinde bellekte bakmak yerine çok kullanılan çevirileri yakında tutar. Bkz. 15.2.
6. RAM dolunca işletim sistemi bazı sayfaları diske yazar. Bu ne işe yarar?
Takas alanı sayesinde nadiren kullanılan sayfalar diske çıkar, RAM'de yer açılır; böylece toplam sanal bellek RAM'den büyük olabilir. Disk daha yavaştır, bunun bedeli sayfa hatalarıdır. Bkz. 15.3.
7. Bilgisayar aşırı yavaşladı, disk ışığı sürekli yanıyor ve RAM tamamen dolu görünüyor. En olası açıklama nedir?
Bellek talebi fiziksel belleği çok aştığında sistem sürekli takas yapar ve işi ilerletemez; buna çırpınma denir. Bkz. 15.3.
8. Chrome her siteye ayrı süreç vermeye çalışır. Bunun en doğrudan güvenlik nedeni nedir?
Ayrı süreç ayrı adres alanı, ayrı sayfa tablosu demektir; bir sitedeki açık başka sitenin belleğine ulaşamaz. Bkz. 15.4 ve 15.3.
9. Kendi cümlelerinle: "Programın gördüğü adres fiziksel RAM'in hücre numarası değildir" cümlesini açıkla. Bir sayfa tablosunun bu çeviride ne yaptığını ve bu düzeneğin sana hangi iki faydayı sağladığını söyle.
Örnek cevabı göster

Programın gördüğü sanal adres, sürecin kendi adres alanındaki numaradır. Sayfa tablosu, her sanal sayfa için hangi fiziksel çerçevede durduğunu yazan bir tablodur; MMU her erişimde sanal adresin sayfa numarasını tablodan çerçeve numarasına çevirir, konumu aynen korur. Faydalar: (1) yalıtım, çünkü bir süreç başkasının çerçevelerine tablosunda olmadığı için ulaşamaz; (2) esneklik, çünkü işletim sistemi sayfaları istediği yere taşıyabilir, hatta diske yazıp RAM'i serbest bırakabilir.

10. Hukuk uygulamamızın sunucusu ile veritabanı iki ayrı süreç olsaydı ve biri çökseydi ne olurdu? Bunu adres alanı kavramıyla açıkla. Bir de: tarayıcıda bir sekme dondu, diğerleri çalışıyor; bu durum aynı fikirle nasıl açıklanır?
Örnek cevabı göster

İki sürecin adres alanı ve sayfa tabloları ayrı olduğundan, çöken sürecin belleği yalnızca kendi sınırında kalır; diğeri bozulmadan çalışmaya devam eder (yalnızca o sürece bağlı işlevi kaybeder). Tarayıcıda da her sekme (ya da site) ayrı bir işleme sürecidir; dondurduğu sürecin belleği ötekilerle paylaşılmadığı için diğer sekmeler etkilenmez.

Kaynaklar

  1. Remzi H. Arpaci-Dusseau ve Andrea C. Arpaci-Dusseau, Operating Systems: Three Easy Pieces, bölüm 13, The Abstraction: Address Spaces: adres alanı, sanal adres, şeffaflık, verimlilik ve koruma hedefleri.
  2. OSTEP, bölüm 18, Paging: Introduction: sayfa, sayfa çerçevesi, VPN ve konum, adres 21 → 117 örneği, PTE bitleri (geçerli, koruma, bellekte-mi, kirli, erişim), 32 bit/4 KB için yaklaşık 4 MB sayfa tablosu ve 100 süreç için 400 MB.
  3. OSTEP, bölüm 19, Paging: Faster Translations (TLBs): TLB tanımı, MMU parçası olması, on elemanlı dizi örneği ve %70 isabet oranı.
  4. OSTEP, bölüm 21, Beyond Physical Memory: Mechanisms: takas alanı, bellekte-mi biti, sayfa hatası, düşük ve yüksek su işareti ve sayfa arka plan iş parçacığı.
  5. OSTEP, bölüm 22, Beyond Physical Memory: Policies: sayfa değiştirme politikaları ve çırpınma (thrashing).
  6. Chrome for Developers, Inside look at modern web browser (part 1): tarayıcı, işleme, GPU süreçleri; her sekmeye/siteye ayrı süreç ve site yalıtımı.