Bölüm 8: Bellek Yönetimi
Çoktan Seçmeli · Giriş
Soru 1: Bellek Yöneticisinin İşi Değil
Aşağıdakilerden hangisi işletim sisteminin bellek yönetimi bileşeninin görevlerinden biri değildir?
D: Sıradaki süreci seçmek CPU çizelgeleyicisinin işidir. Bellek yönetimi boş/dolu takibini, tahsis ve geri almayı, korumayı, yer değiştirmeyi ve takası kapsar.
Çıktı Sorusu · Adres Alanı
Soru 2: Taban ve Limit
Bir sürecin taban (yer değiştirme) yazmacı 30000, limit yazmacı 12000. MMU önce mantıksal adresi limitle karşılaştırıyor, sonra tabanı ekliyor. Süreç sırasıyla 0, 5000, 11999 ve 12000 mantıksal adreslerine erişiyor. Sonuçlar nedir?
Cevabı göster
| Mantıksal | < 12000? | Sonuç |
|---|---|---|
| 0 | evet | 30000 |
| 5000 | evet | 35000 |
| 11999 | evet | 41999 |
| 12000 | hayır | tuzak |
Geçerli mantıksal adresler 0 … limit − 1, yani 0–11999'dur; 12000 = limit olduğu için koruma hatası olur ve çekirdek devreye girer (Unix'te SIGSEGV). Karşılaştırma mantıksal adres üzerinden yapıldığından sonuç tabanın değerine bağlı değildir.
Çoktan Seçmeli · Adres Alanı
Soru 3: Bağlama Zamanı
İşletim sistemi çalışan bir süreci sıkıştırma ya da takas sonrasında bellekte başka bir yere taşıyabiliyor. Bunun mümkün olması için adres bağlama ne zaman yapılmalıdır?
C: Derleme ya da yükleme zamanında bağlanan adresler sabitlenir; süreç taşınınca geçersizleşir. Yürütme zamanı bağlamada her erişim o anki taban ya da sayfa tablosu değerleriyle çevrilir; taşımak için yalnızca yazmaç ya da tablo güncellenir.
Çoktan Seçmeli · Bağlama ve Yükleme
Soru 4: Tembel Bağlama
Dinamik bağlanan bir programda printf ilk kez çağrıldıktan sonra (tembel bağlama, ELF) bellekte ne değişir?
B: İlk çağrıda PLT, GOT'taki adresle çözücüye gider; ld.so sembolü bulup gerçek adresi GOT girdisine yazar. Kod sayfaları hiç değişmez, bu yüzden süreçler arasında paylaşılabilir kalır; sonraki çağrılar PLT → GOT → printf yolunu izler.
Çıktı Sorusu · Takas
Soru 5: Takas Süresi
200 MB'lık bir süreç standart takasla diske yazılıp sonra geri getiriliyor. Diskin aktarım hızı 50 MB/s, gecikmeler ihmal ediliyor. Gidiş-dönüş ne kadar sürer? Bekleyen G/Ç'si olan bir süreç neden takas edilmez?
Cevabı göster
Dışarı 200 / 50 = 4 s, içeri 4 s: toplam 8 s. Bu süre bütün süreci taşımanın bugün neden kabul edilmediğini gösterir; modern sistemler yalnızca soğuk sayfaları takas eder.
Süreç takas edilip yerine başka bir süreç yüklenirse, devam eden DMA aktarımı eski fiziksel adrese, yani artık başka sürecin belleğine yazar. Çare: böyle süreci takas etmemek ya da G/Ç'yi çekirdek tamponları üzerinden yapmak.
Takastan dönen süreç başka bir adrese yerleşebilir; bu da yürütme zamanı bağlama gerektirir.
Adım Adım Çalıştırma · Bitişik Tahsis
Soru 6: Yerleştirme Algoritmaları
Boş delikler adres sırasıyla 150, 400, 80, 250, 600 KiB. İstekler sırayla 230, 120, 380, 90 KiB. İlk uyan, en iyi uyan ve en kötü uyan her isteği nereye koyar? Hangisinde bir istek karşılanamaz?
Delikler adres sırasıyla 150, 400, 80, 250, 600 KiB. Turuncu: o adımda seçilen delik; kutularda kalan boy yazılı.
230 K: ilk uyan ilk yeterli delik olan 400'e, en iyi uyan yetenlerin (400, 250, 600) en küçüğü 250'ye (20 kalır), en kötü uyan 600'e koyar.
120 K: ilk uyan ve en iyi uyan 150'ye (30 kalır). En kötü uyan o anki en büyük deliğe, 400'e koyar.
380 K: ilk uyan 600'e, en iyi uyan 400'e (20 kalır). En kötü uyanda en büyük delik 370: yer yok, toplam boş alan yetse de.
90 K: ilk uyan 170'e (80 kalır), en iyi uyan yeten tek delik olan 600'e, en kötü uyan 370'e koyar. Yalnızca en kötü uyan bir isteği karşılayamadı.
for (her istek r) { ilk = h >= r olan ilk delik; en_iyi = h >= r olanların en küçüğü; en_kotu = en büyük delik; if (seçilen h < r) yer yok; else seçilen deliği r kadar küçült; }
Çoktan Seçmeli · Bitişik Tahsis
Soru 7: Karşılanamayan İstek
Değişken bölümlemeli bir sistemde boş delikler 6, 9 ve 4 KiB. Toplam boş alan 19 KiB olduğu hâlde 12 KiB'lık bir istek karşılanamıyor. Bu durumun adı ve doğrudan çaresi nedir?
B: Boş alan var ama bitişik değil: dış parçalanma. Sıkıştırma süreçleri bir uca kaydırıp delikleri tek bloğa toplar (yürütme zamanı bağlama gerekir); kalıcı çözüm bitişik olmayan tahsistir (sayfalama). Yerleştirme algoritmaları parçalanmayı yalnızca etkiler, var olan durumu düzeltmez.
Çıktı Sorusu · Boş Alan Yönetimi
Soru 8: Biteşlemde Arama
18 birimlik belleğin biteşlemi (birim 0'dan başlar, 1 = dolu) şekilde. İlk uyan ile 3 birimlik bir istek hangi birimden başlar? Ardından 4 birimlik bir istek nereye yerleşir? Sonra 5 birimlik istek karşılanabilir mi?
Cevabı göster
Sıfır dizileri: [2] (1 birim), [4–5] (2), [8–10] (3), [13–16] (4).
- 3 birim: 2 ve 4–5 yetmez; ilk yeten dizi 8'den başlar (8–10 dolar).
- 4 birim: kalan diziler [2], [4–5], [13–16]; yalnız 13 yeter.
- 5 birim: kalan boş 3 birim, en uzun dizi 2 → karşılanamaz. Başlangıçta da 4'ten uzun dizi yoktu.
k birimlik yer aramak k ardışık sıfır aramaktır: biteşlemin zayıf yanı bu doğrusal taramadır.
Çoktan Seçmeli · Boş Alan Yönetimi
Soru 9: Biteşlem Boyutu
512 MiB'lık bellek 4 KiB'lık tahsis birimleriyle bir biteşlemde izleniyor. Biteşlem kaç bayt yer kaplar?
A: Birim sayısı 229 / 212 = 217; her birim 1 bit → 217 / 8 = 214 bayt = 16 KiB. C, bit sayısını (128 Ki) bayt sanır. Birim 1 KiB olsaydı biteşlem 4 kat büyür, birim başına iç parçalanma azalırdı.
Adım Adım Çalıştırma · Boş Alan Yönetimi
Soru 10: Buddy Sistemi
512 KiB'lık bellek buddy sistemiyle yönetiliyor. Sırasıyla A = 45 K, B = 100 K, C = 20 K, D = 60 K isteniyor; sonra B, C ve A bırakılıyor. Her isteğe hangi blok verilir? En sonda bellek hangi bloklardan oluşur?
512 KiB tek boş blok. Bloklar yalnızca 2'nin kuvveti boyundadır; her istek yukarı yuvarlanır.
A = 45 K → 64 K. 512 → 256 + 256 → 128 + 128 → 64 + 64 bölünür; A ilk 64'ü alır (iç parçalanma 19 K).
B = 100 K → 128 K. Uygun en küçük boş blok 128–256; bölme gerekmez (iç parçalanma 28 K).
C = 20 K → 32 K. Boş 64–128 ikiye bölünür, C 64–96'yı alır (12 K).
D = 60 K → 64 K. 256–512 bölünür: 128 + 128 → 64 + 64; D 256–320'yi alır (4 K). Toplam iç parçalanma 63 K.
B bırakılır. Kardeşi 0–128 bölünmüş durumda (A ve C içinde) → birleşme yok.
C bırakılır. Kardeşi 96–128 boş → 64–128 (64 K). Onun kardeşi 0–64'te A var → dur.
A bırakılır: 0–64 + 64–128 → 0–128, + 128–256 → 0–256. Kardeşi 256–512 bölünmüş (D) → dur.
istek(n): b = 2^k >= n olan en küçük boy; while (b boyda boş blok yok) daha büyük boş bloğu ikiye böl; bloğu ver; birak(blok): while (kardeşi boş ve aynı boyda) kardeşle birleş; /* adres ^ boy */
Çoktan Seçmeli · Sayfalama
Soru 11: Ondalık Adres Çevirisi
Sayfa boyutu 2 KiB. Sayfa tablosunda 4. sayfa 7. çerçeveye eşlenmiş. Mantıksal adres 9000'in fiziksel karşılığı nedir?
C: p = ⌊9000 / 2048⌋ = 4, d = 9000 − 4 · 2048 = 808. Fiziksel = 7 · 2048 + 808 = 15144. B konumu unutur (yalnızca çerçeve başı); D tüm mantıksal adresi çerçeve başına ekler. Konum değişmez; yalnızca sayfa numarası çerçeve numarasıyla değiştirilir.
Çıktı Sorusu · Sayfalama
Soru 12: Onaltılık Adres Çevirisi
32 bitlik sanal adres, 4 KiB sayfa. Sayfa tablosunda girdi 0x3A: geçerli, çerçeve 0x1C2; girdi 0x3B: geçersiz. (a) Sayfa numarası ve konum kaçar bittir? (b) 0x0003A7F4 hangi fiziksel adrese çevrilir? (c) 0x0003B010'a erişilirse ne olur?
Cevabı göster
(a) 4 KiB = 212 → konum 12 bit, sayfa numarası 32 − 12 = 20 bit.
(b) Son 3 onaltılık hane konumdur: d = 0x7F4, p = 0x0003A. Fiziksel = çerçeve ‖ konum = 0x1C27F4.
(c) p = 0x3B, girdi geçersiz → donanım tuzak üretir (sayfa hatası). İşletim sistemi bunun geçersiz bir erişim mi yoksa henüz yüklenmemiş bir sayfa mı olduğuna karar verir.
Onaltılı yazımda her hane 4 bittir; sayfa boyutu 2'nin kuvveti olduğu için bölme ve kalan, bit kaydırma ve maskelemeye dönüşür.
Çoktan Seçmeli · Sayfalama
Soru 13: Sayfa Tablosu Boyutu
32 bit sanal adres, 8 KiB sayfa, sayfa tablosu girdisi 4 bayt. Tek seviyeli (doğrusal) sayfa tablosu her süreç için ne kadar yer kaplar?
D: Sayfa sayısı 232 / 213 = 219 girdi; 219 × 4 B = 221 B = 2 MiB. C, 4 KiB sayfa için doğru olan değerdir. 100 süreçte 200 MiB eder; çok seviyeli tabloların nedeni budur.
Adım Adım Çalıştırma · TLB
Soru 14: TLB İsabet ve Iska
4 KiB sayfa, 3 girdilik LRU TLB. Sırayla 0x1A04, 0x0123, 0x1FFC, 0x2008, 0x4010, 0x0F00, 0x2ABC, 0x6000 adreslerine erişiliyor. Hangileri TLB isabetidir? Fiziksel adresler nedir?
Sayfa tablosu: 0→5, 1→9, 2→3, 3→7, 4→1, 6→4. TLB 3 girdilik ve başlangıçta boş; yer gerekince en uzun süredir kullanılmayan çıkar.
0x1A04: sayfa 1 TLB'de yok → ıska; tablodan çerçeve 9 okunur.
0x0123: sayfa 0 TLB'de yok → ıska; tablodan çerçeve 5 okunur.
0x1FFC: sayfa 1 TLB'de → isabet, sayfa tablosuna gidilmez.
0x2008: sayfa 2 TLB'de yok → ıska; tablodan çerçeve 3 okunur.
0x4010: sayfa 4 TLB'de yok → ıska; tablodan çerçeve 1 okunur; TLB dolu olduğu için sayfa 0 çıkarılır.
0x0F00: sayfa 0 TLB'de yok → ıska; tablodan çerçeve 5 okunur; TLB dolu olduğu için sayfa 1 çıkarılır.
0x2ABC: sayfa 2 TLB'de → isabet, sayfa tablosuna gidilmez.
0x6000: sayfa 6 TLB'de yok → ıska; tablodan çerçeve 4 okunur; TLB dolu olduğu için sayfa 4 çıkarılır. Toplam 2 isabet / 8 erişim.
p = adres / 4096; d = adres % 4096; if (p TLB'de) { /* isabet */ f = TLB[p]; p'yi en yeni yap; } else { /* ıska */ f = sayfa_tablosu[p]; if (TLB dolu) en eski girdiyi çıkar; TLB'ye (p, f) ekle; } fiziksel = f * 4096 + d;
Çıktı Sorusu · TLB
Soru 15: Etkin Erişim Süresi
Bellek erişimi 80 ns, TLB araması 10 ns, tek seviyeli sayfa tablosu, TLB isabet oranı %95. (a) Etkin erişim süresi nedir? (b) Bu sürenin 92 ns'ye inmesi için isabet oranı en az kaç olmalıdır? (c) Tablo dört seviyeli olsaydı ıska ne kadar sürerdi?
Cevabı göster
İsabet: 10 + 80 = 90 ns. Iska: 10 + 80 (tablo) + 80 (veri) = 170 ns.
(a) EES = 0,95 · 90 + 0,05 · 170 = 85,5 + 8,5 = 94 ns.
(b) 90α + 170(1 − α) ≤ 92 → 170 − 80α ≤ 92 → α ≥ 0,975: en az %97,5.
(c) Iskada 4 tablo erişimi + veri: 10 + 4 · 80 + 80 = 410 ns. Çok seviyeli tabloda ıska çok pahalıdır; bu yüzden donanım ara seviyeleri de önbelleğe alır ve isabet oranı daha da önemlidir.
Çıktı Sorusu · Sayfa Tablosu Yapıları
Soru 16: İki Seviyeli Sayfalama
32 bit adres, 4 KiB sayfa, iki seviyeli tablo: 10 bit üst indis (PT1), 10 bit alt indis (PT2), 12 bit konum; her tablo 1024 girdi × 4 B = 4 KiB. (a) 0x01402A9F için PT1, PT2 ve konum nedir? (b) Bir süreç adres alanının en altındaki 12 MiB'ı ve en üstteki 4 MiB'ı kullanıyor. Kaç sayfa tablosu gerekir, toplam kaç KiB?
Cevabı göster
(a) 0x01402A9F = 0000 0001 0100 0000 0010 1010 1001 1111 → PT1 = 5, PT2 = 2, konum = 0xA9F.
(b) Her alt tablo 1024 × 4 KiB = 4 MiB kapsar: alttaki 12 MiB için 3, üstteki 4 MiB için 1 alt tablo, artı 1 üst tablo = 5 tablo = 20 KiB. Doğrusal tablo 4 MiB olurdu.
Kullanılmayan bölgelerin alt tabloları hiç oluşturulmaz. Bedeli: TLB ıskasında 2 tablo erişimi + 1 veri erişimi.
Çoktan Seçmeli · Sayfa Tablosu Yapıları
Soru 17: Ters Sayfa Tablosu
Ters (inverted) sayfa tablosu için hangisi doğrudur?
A: Tablo sistemde tektir ve boyu fiziksel bellekle orantılıdır, süreç sayısından bağımsızdır; girdinin indisi çerçeve numarasıdır. Bedeli: arama için hash tablosu gerekir ve bir çerçeve tek sanal sayfa tuttuğu için paylaşımlı bellek zorlaşır. B doğrusal (süreç başına) tablodur.
Çıktı Sorusu · Kesimleme
Soru 18: Kesim Tablosu
Kesim tablosu (taban, limit): 0 → (1400, 600), 1 → (6300, 300), 2 → (4100, 1000), 3 → (3200, 500). Mantıksal adresler (kesim, konum) biçiminde: (0, 430), (1, 310), (2, 999), (3, 500). Fiziksel adresleri bulun.
Cevabı göster
| Adres | Konum < limit? | Sonuç |
|---|---|---|
| (0, 430) | 430 < 600 | 1400 + 430 = 1830 |
| (1, 310) | 310 ≥ 300 | tuzak |
| (2, 999) | 999 < 1000 | 4100 + 999 = 5099 |
| (3, 500) | 500 ≥ 500 | tuzak |
Kesimleme, her kesim için ayrı bir taban-limit çiftidir. Geçerli konumlar 0 … limit − 1'dir; konum = limit de tuzaktır. Denetim olmasaydı (1, 310) adresi 6610'a, yani kesimin dışına erişirdi.
Çoktan Seçmeli · Gerçek Mimariler
Soru 19: x86-64'te Kesimleme
x86-64 uzun modunda kesimlemeden fiilen ne kalmıştır?
B: Uzun modda CS, DS, ES, SS tabanı donanımca 0 sayılır ve limit denetlenmez: adres alanı düzdür, koruma sayfa tablosu bitleriyle yapılır. Yalnızca FS ve GS tabanı kullanılır: kullanıcı alanında iş parçacığına yerel depolama (TLS), çekirdekte çekirdek başına veri. CS ise ayrıcalık düzeyini taşır.
Çoktan Seçmeli · Uygulama Sorunları
Soru 20: Sayfa Kilitleme
Bir süreç diskten okuma için bir tampon verdi ve DMA aktarımı sürerken bloke oldu. Bu sırada tamponun sayfası atılıp çerçeve başka bir sürece verilirse ne olur, çaresi nedir?
C: Aygıt fiziksel adrese yazar; çerçeve el değiştirmişse veri yanlış sürecin belleğine gider. Çare: G/Ç süresince sayfayı kilitlemek (pinning, mlock, pin_user_pages) ya da G/Ç'yi çekirdek tamponundan yapmak. IOMMU aygıtların da çevrilmiş adres kullanmasını sağlar.