Bölüm 11: Giriş/Çıkış

Bölüm 11: Giriş/Çıkış · Çalışma Soruları
Aygıt sınıflarıYoklamaKesmelerDMATamponlamaEş zamansız G/ÇSaatlerDisk erişim süresiDisk çizelgelemeSSDRAID ve eşlik
Sercan KÜLCÜ

Çoktan Seçmeli · Giriş

Soru 1: Hangi Eşleştirme Yanlış?

İşletim sistemleri aygıtları blok, karakter ve ağ aygıtı olarak sınıflandırır. Aşağıdaki eşleştirmelerden hangisi yanlıştır?

C: Fare hareket ve tık olaylarını bir akış olarak üretir; adreslenebilir blokları ve lseek’i yoktur, bu yüzden karakter aygıtıdır (Linux’ta /dev/input/event*). Blok aygıtında her blok numarasıyla bağımsız okunup yazılır ve dosya sistemleri bunların üstüne kurulur. Ağ arabirimleri ayrı bir sınıftır ve /dev’de dosyaları yoktur.

Çoktan Seçmeli · G/Ç Donanımı

Soru 2: Bitmeyen Bekleme Döngüsü

Bellek eşlemeli bir aygıtın durum yazmacını while ((*durum & HAZIR) == 0) ; döngüsüyle okuyan sürücü, aygıt hazır olduğu hâlde döngüden hiç çıkmıyor. En olası neden hangisidir?

D: Aygıt yazmacının değeri CPU’nun haberi olmadan değişir. Sayfa önbelleklenebilir işaretliyse CPU önbellekteki eski değeri, işaretçi volatile değilse derleyici döngü dışına aldığı tek okumayı görür. Çözüm: yazmaç sayfasını önbelleklenemez eşlemek (ioremap) ve volatile kullanmak. Bellek eşlemeli yazmaç sıradan yükleme komutlarıyla okunur; B kapı eşlemeli G/Ç’ye aittir.

Çıktı Sorusu · Programlanmış G/Ç

Soru 3: Yoklamanın CPU’ya Maliyeti

2 GHz’lik bir CPU’da bir yoklama (durumu oku, karşılaştır, veriyi al) 400 tur sürüyor. Aşağıdaki aygıtlar yalnızca yoklamayla izlenirse CPU zamanının yüzde kaçı gider?

  1. Hareketi kaçırmamak için saniyede 30 kez yoklanan bir fare
  2. 100 MB/s (1 MB = 10⁶ B) veri üreten ve her yoklamada 16 bayt veren bir disk denetleyicisi

Sonuçlar hangi aktarım yöntemini gerektiriyor?

Cevabı göster

Oran = (yoklama/s × tur/yoklama) / (tur/s).

(a) 30 × 400 = 12 000 tur/s → 12 000 / 2 × 10⁹ = %0,0006: önemsiz.

(b) 100 × 10⁶ / 16 = 6,25 × 10⁶ yoklama/s × 400 = 2,5 × 10⁹ tur/s → %125: CPU’nun tamamı bile yetmez.

Yavaş ve seyrek aygıtta yoklama zararsızdır; yüksek hızlı blok aktarımında ise ne yoklama ne de bayt başına kesme uygundur. Çözüm DMA’dır: CPU yalnızca kurulum ve tamamlanma kesmesiyle uğraşır.

Çoktan Seçmeli · Kesmeler

Soru 4: Kesme Geldiğinde Sıra

Süreç A çalışırken B’nin beklediği disk okuması bitiyor. Adımlar karışık verilmiş:
P: Donanım PC ve PSW’yi çekirdek yığınına kaydeder, çekirdek moduna geçer.
Q: Disk kesme isteği gönderir; CPU o anki komutu bitirir.
R: Vektör numarası IDT’de indis olur, işleyici adresi bulunur.
S: İşleyici aygıtı onaylar (EOI), B’yi hazır kuyruğuna alır.
T: Çizelgeleyici bir süreç seçer, iret ile kullanıcı moduna dönülür.
Doğru sıra hangisidir?

B: Önce aygıt kesme ister ve CPU komut sınırında durur (Q). Donanım dönüş için gereken durumu kaydeder (P), vektörle işleyiciyi bulur (R). İşleyici kısa tutulur: aygıtı onaylar, bekleyen B’yi hazır yapar (S). Sonunda çizelgeleyici A’yı ya da B’yi seçer ve iret ile dönülür (T). C, durumu kaydetmeden işleyiciye atlar; dönüş adresi kaybolurdu.

Çıktı Sorusu · DMA

Soru 5: Sektör Başına Kesme mi, DMA mı?

Bir disk denetleyicisinden 1 MiB veri okunuyor.

  1. Kesme güdümlü yöntemde her 512 baytlık sektör için bir kesme geliyor; işleyici sektörü belleğe kopyalayarak toplam 4 µs harcıyor.
  2. DMA ile CPU kurulumu 6 µs’de yapıyor; aktarım sonunda tek bir 4 µs’lik kesme geliyor.

CPU’nun bu okuma için harcadığı süreleri karşılaştırın. DMA hangi durumda kendini geri ödemez?

Cevabı göster

(a) 1 MiB = 1 048 576 B → 1 048 576 / 512 = 2048 kesme × 4 µs = 8192 µs (yaklaşık 8,2 ms).

(b) 6 + 4 = 10 µs. CPU yükü yaklaşık 800 kat azalır. Aktarım sırasında DMA veri yolunu ara ara kullandığından CPU’nun bellek erişimleri biraz bekleyebilir (döngü çalma), ama bu kopyalama maliyetinin yanında küçüktür.

Birkaç baytlık aktarımlarda sabit kurulum maliyeti kazancı aşar; aygıt çok yavaşsa ya da CPU’nun başka işi yoksa kesme güdümlü G/Ç veya yoklama daha basit ve yeterli olabilir.

Çoktan Seçmeli · DMA

Soru 6: Döngü Çalma Nedir?

DMA bağlamında “döngü çalma” (cycle stealing) kavramını en iyi anlatan ifade hangisidir?

A: Döngü çalma bir DMA çalışma modudur: denetleyici her sözcük için veri yolunu birkaç turluğuna alır, CPU tamamen durmaz, yalnızca belleğe erişirken biraz yavaşlar. Karşıtı patlama (burst) modudur: yol bir blok boyunca tutulur, aktarım hızlanır ama CPU daha uzun bekler.

Çıktı Sorusu · G/Ç Yazılımı

Soru 7: Tamponsuz, Tek ve Çift Tampon

Bir aygıttan bir bloğun gelmesi T = 8 ms, sürecin bir bloğu işlemesi C = 5 ms, tampondan kullanıcı alanına kopyalama M = 1 ms sürüyor. Kararlı durumda blok başına süreyi ve 100 blok için yaklaşık toplam süreyi bulun:

  1. tamponsuz,
  2. tek tamponla,
  3. çift tamponla.

Daha fazla tampon eklemek sonucu iyileştirir mi?

Cevabı göster

(a) Tamponsuz: okuma ve işleme sırayla yapılır → T + C = 13 ms → yaklaşık 1300 ms.

(b) Tek tampon: sonraki blok çekirdek tamponuna gelirken önceki işlenir, ama kopyalama sırasında tampon meşguldür → max(T, C) + M = 8 + 1 = 9 ms → yaklaşık 900 ms.

(c) Çift tampon: biri dolarken diğeri kopyalanır, kopyalama da örtüşür (C + M = 6 ≤ T) → max(T, C) = 8 ms → yaklaşık 800 ms.

Artık darboğaz aygıttır (T > C): daha fazla tampon ortalama hızı artırmaz, yalnızca ani patlamaları emer.

Adım Adım Çalıştırma · G/Ç Yazılımı

Soru 8: Dairesel Tampon

Kesme işleyicisi koy ile yazıyor, süreç al ile okuyor. Baş, kuyruk ve tampon nasıl değişir? Hangi çağrı başarısız olur?

0·1·2·3·4·5·başkuyruk0 / 5 dolu

N = 6, baş = kuyruk: boş. Bir yuva hep boş kalır (en çok 5 bayt). Çağrılar: koy a, b, c, d; üç kez al; koy e, f, g, h, i.

0a1·2·3·4·5·başkuyruk1 / 5 dolu

koy('a'): yuva 0’ye yazılır, kuyruk 1 olur.

0a1b2·3·4·5·başkuyruk2 / 5 dolu

koy('b'): yuva 1’ye yazılır, kuyruk 2 olur.

0a1b2c3·4·5·başkuyruk3 / 5 dolu

koy('c'): yuva 2’ye yazılır, kuyruk 3 olur.

0a1b2c3d4·5·başkuyruk4 / 5 dolu

koy('d'): yuva 3’ye yazılır, kuyruk 4 olur.

0a1b2c3d4·5·başkuyruk3 / 5 dolu

al(): baş = 0 ≠ kuyruk → yuva 0’deki a okunur, baş 1 olur. Yuva yeniden kullanılabilir.

0a1b2c3d4·5·başkuyruk2 / 5 dolu

al(): baş = 1 ≠ kuyruk → yuva 1’deki b okunur, baş 2 olur. Yuva yeniden kullanılabilir.

0a1b2c3d4·5·başkuyruk1 / 5 dolu

al(): baş = 2 ≠ kuyruk → yuva 2’deki c okunur, baş 3 olur. Yuva yeniden kullanılabilir.

0a1b2c3d4e5·başkuyruk2 / 5 dolu

koy('e'): yuva 4’ye yazılır, kuyruk 5 olur.

0a1b2c3d4e5fbaşkuyruk3 / 5 dolu

koy('f'): yuva 5’ye yazılır, kuyruk 0 olur. Sona gelince başa sarar (mod 6).

0g1b2c3d4e5fbaşkuyruk4 / 5 dolu

koy('g'): yuva 0’ye yazılır, kuyruk 1 olur. Daha önce okunmuş yuva yeniden kullanılıyor.

0g1h2c3d4e5fbaşkuyruk5 / 5 dolu

koy('h'): yuva 1’ye yazılır, kuyruk 2 olur. Daha önce okunmuş yuva yeniden kullanılıyor.

0g1h2c3d4e5fbaşkuyruk5 / 5 dolu · DOLU

koy('i'): (kuy + 1) % 6 = 3 = baş → tampon dolu, −1 döner. Üretici beklemeli ya da veriyi düşürmelidir. Tüketilen sıra: a, b, c.

int koy(char c) {
  if ((kuy + 1) % N == bas) return -1; // dolu
  tam[kuy] = c;
  kuy = (kuy + 1) % N; return 0;
}
int al(char *c) {
  if (bas == kuy) return -1;           // boş
  *c = tam[bas];
  bas = (bas + 1) % N; return 0;
}

Çoktan Seçmeli · G/Ç Arayüzleri

Soru 9: Hemen Dön, Bitince Haber Ver

Bir sunucu programı okuma isteğini çekirdeğe verip hemen dönmek, işlem bittiğinde ise bir tamamlanma kaydı almak istiyor (io_uring gibi). Bu hangi G/Ç modelidir?

C: Eş zamansız (tamamlanma) modelinde çağrı işi başlatıp döner; çekirdek iş bitince tamamlanma kuyruğuna kayıt ekler (io_uring CQE, Windows IOCP). Bloke etmeyen modelde çağrı yalnızca “şu an ne varsa” döner ve iş yine sürece kalır; epoll da yalnızca hazır olmayı bildirir. Bedeli, programlamanın karmaşıklaşmasıdır: tamponların ömrü ve hata yolları ayrıca izlenmelidir.

Çıktı Sorusu · Saatler ve Diğer Aygıtlar

Soru 10: Bekleyen Alarmlar ve Saat Sayacı

Saat yazılımı bekleyen alarmları, her girdinin bir öncekine göre farkını tutan bir listede saklıyor. Şu an zaman 5000 tık; alarmlar 5003, 5010, 5010, 5018 ve 5025’te.

  1. Liste hangi sayıları tutar?
  2. 10 tık sonra hangi alarmlar tetiklenmiş olur, liste ne olur?
  3. 8254 PIT 1 193 182 Hz ile sayıyor. 250 Hz’lik tik için sayaç ne yüklenir, gerçek frekans ne olur?
Cevabı göster

(a) Farklar: 5003 − 5000 = 3, 5010 − 5003 = 7, 5010 − 5010 = 0, 5018 − 5010 = 8, 5025 − 5018 = 7 → 3, 7, 0, 8, 7.

(b) Her tikte yalnızca baştaki sayı azaltılır: 3 tikte ilk alarm (5003) tetiklenir; 7 tik daha geçince 5010’daki iki alarm birlikte (ikincisinin farkı 0). Kalan liste 8, 7 (5018 ve 5025). Tik başına iş, alarm sayısından bağımsız olarak sabittir.

(c) 1 193 182 / 250 = 4772,7 → sayaç 4773; gerçek frekans 1 193 182 / 4773 ≈ 249,99 Hz. Linux’ta HZ = 250 tik başına 4 ms demektir; tiksiz çekirdek boşta bu kesmeleri durdurur.

Çıktı Sorusu · Diskler

Soru 11: Bir Disk İsteği Ne Kadar Sürer?

10 000 dev/dk dönen bir HDD’nin ortalama arama süresi 4 ms, ortam hızı 250 MB/s (1 MB = 10⁶ B).

  1. Rastgele bir konumdan 64 KiB’lık (65 536 B) ardışık veri okumak ortalama ne kadar sürer?
  2. Aynı miktar veri diske dağılmış 16 adet 4 KiB’lık bloktan okunursa?
  3. Aktarım hızını 250’den 500 MB/s’ye çıkarmak (b)’yi ne kadar hızlandırır?
Cevabı göster

Erişim süresi = arama + dönme gecikmesi + aktarım. Bir tur 60 000 / 10 000 = 6 ms → ortalama dönme gecikmesi yarım tur = 3 ms.

(a) Aktarım 65 536 / 250 × 10⁶ s = 0,262 ms → 4 + 3 + 0,262 = 7,26 ms.

(b) Blok başına 4 + 3 + 0,016 = 7,016 ms → 16 × 7,016 = 112,3 ms: yaklaşık 15 kat yavaş.

(c) Aktarım payı 16 × 0,016 = 0,26 ms’den 0,13 ms’ye iner: toplamın yalnızca %0,1’i. Küçük rastgele okumada süreye arama ve dönme hâkimdir; yerleşim, önbellek ve kol çizelgeleme bu yüzden önemlidir.

Adım Adım Çalıştırma · Disk Çizelgeleme

Soru 12: SSTF ile Kafa Hareketi

Kafa 84. silindirde. SSTF istekleri hangi sırayla karşılar, toplam kafa hareketi kaç silindir olur?

050100150199

Silindirler 0–199, kafa 84’te. Bekleyen istekler (geliş sırasıyla): 184, 142, 170, 8, 60, 155, 116, 37. Kırmızı: bekleyen, yeşil: hizmet verilmiş.

050100150199

84 → 60: 24 silindir, toplam 24. En yakın 60 (24 uzakta), 116 ise 32 uzakta.

050100150199

60 → 37: 23 silindir, toplam 47.

050100150199

37 → 8: 29 silindir, toplam 76.

050100150199

8 → 116: 108 silindir, toplam 184. Alt bölge bitti; kafa en yakın kalan isteğe, uzaktaki 116’ya gider.

050100150199

116 → 142: 26 silindir, toplam 210.

050100150199

142 → 155: 13 silindir, toplam 223.

050100150199

155 → 170: 15 silindir, toplam 238.

050100150199

170 → 184: 14 silindir, toplam 252. Toplam 252 silindir (FCFS 597).

konum = 84; toplam = 0;
while (bekleyen > 0) {
  r = en_yakin(konum);     // en yakın istek
  toplam += abs(r - konum);
  konum = r;
  hizmet_ver(r);
}

Çıktı Sorusu · Disk Çizelgeleme

Soru 13: Tarama Algoritmaları

Aynı kuyruk: kafa 84’te ve son olarak 70’e hizmet verdiği için yukarı (büyük numaralara doğru) gidiyor. İstekler 184, 142, 170, 8, 60, 155, 116, 37; silindirler 0–199. FCFS, SCAN, C-SCAN, LOOK ve C-LOOK için kafanın izlediği yolu ve toplam hareketi bulun (C-SCAN ve C-LOOK’ta geri dönüş de sayılsın). SSTF’nin 252’siyle birlikte sıralayın.

Cevabı göster
algoritmakafanın yolutoplam
FCFS184 → 142 → 170 → 8 → 60 → 155 → 116 → 37597
SCAN116 → 142 → 155 → 170 → 184 → 199 → 60 → 37 → 8306
C-SCAN116 → 142 → 155 → 170 → 184 → 199 → 0 → 8 → 37 → 60374
LOOK116 → 142 → 155 → 170 → 184 → 60 → 37 → 8276
C-LOOK116 → 142 → 155 → 170 → 184 → 8 → 37 → 60328

SCAN: (199 − 84) + (199 − 8) = 306. C-SCAN: 115 + 199 + 60 = 374 (dönüş sayılmazsa 175). LOOK: 100 + 176 = 276. C-LOOK: 100 + 176 + 52 = 328.

Sıralama: SSTF 252 < LOOK 276 < SCAN 306 < C-LOOK 328 < C-SCAN 374 < FCFS 597. LOOK, SCAN’den yalnızca uca (199) boşuna gitmemesiyle ayrılır; C-SCAN ve C-LOOK daha uzun yol alır ama bekleme sürelerini daha eşit dağıtır.

Çoktan Seçmeli · Disk Çizelgeleme

Soru 14: Dakikalardır Bekleyen İstek

Yoğun yük altındaki bir diskte istekler sürekli 90–110 silindirleri arasında geliyor; 190. silindirdeki bir istek dakikalardır bekliyor. Kullanılan algoritma ve sorunun adı nedir?

A: SSTF her adımda kafaya en yakın isteği seçer: toplam hareketi azaltır ama adil değildir; orta bölgeye sürekli istek gelirse uçtaki istek hiç sıra almaz. SCAN, C-SCAN ve LOOK ailesi kafayı bir yönde son isteğe kadar götürdüğü için her isteğe bir tarama içinde hizmet verir. FCFS ise açlıksızdır.

Çoktan Seçmeli · SSD ve NVMe

Soru 15: NVMe’de Neden “none”?

Linux’ta NVMe SSD’ler için varsayılan G/Ç çizelgeleyicisi none’dır (istekleri sıralamaz). Bunun nedeni nedir?

D: Kol çizelgeleme arama süresini azaltmak için vardır. SSD’de erişim süresi konumdan neredeyse bağımsızdır; NVMe’nin çoklu donanım kuyrukları (blk-mq) her çekirdeğe ayrı kuyruk verir. Adalet ya da gecikme hedefi gerekirse mq-deadline, bfq ya da kyber seçilebilir; SATA HDD’lerde mq-deadline yaygın varsayılandır.

Adım Adım Çalıştırma · RAID ve Kararlı Depolama

Soru 16: XOR Eşliği

Eşlik bloğu nasıl hesaplanır, D2’nin diski bozulunca D2 nasıl geri kazanılır ve D1 güncellenince yeni eşlik nasıl bulunur?

D010110110D101011100D211100001D300111010P????????

Dört veri diskli bir RAID 5 şeridi (8 bitlik örnek bloklar). Eşlik bloğu P henüz hesaplanmadı.

D010110110D101011100D211100001D300111010P11101010

Bit bit XOR: bitler farklıysa 1, aynıysa 0. D0 ⊕ D1 = 11101010.

D010110110D101011100D211100001D300111010P00001011

⊕ D2 = 00001011.

D010110110D101011100D211100001D300111010P00110001

⊕ D3 = 00110001. Her bit konumunda 1’lerin sayısı artık çift.

D010110110D101011100D2????????D300111010P00110001

D2’nin diski bozuldu. Hangi diskin kaybolduğu bilindiği için tek eşlik yeterlidir.

D010110110D101011100D211100001D300111010P00110001

x ⊕ x = 0 olduğundan kayıp blok kalanların XOR’udur: D0 ⊕ D1 ⊕ D3 ⊕ P = 11100001, özgün D2 ile aynı.

D010110110D101011100D211100001D300111010P00111000

D1, Y = 01010101 olacak. Şeridin tamamını okumadan: değişen bitler D1 ⊕ Y = 00001001; P ⊕ bu = 00111000.

D010110110D101010101D211100001D300111010P00111000

D1 ve P yazılır. Küçük yazma = 2 okuma (eski D1, eski P) + 2 yazma: RAID 5’in 4 G/Ç’lik bedeli.

P = D0 ^ D1;
P = P ^ D2;
P = P ^ D3;              // eşlik
// D2'nin diski bozuldu
D2 = D0 ^ D1 ^ D3 ^ P;
// küçük yazma: D1 → Y
P = P ^ D1 ^ Y;
D1 = Y;

Çoktan Seçmeli · RAID ve Kararlı Depolama

Soru 17: Altı Diskle RAID 6

Elinizde 6 adet 4 TB’lık disk var ve RAID 6 dizisi kuruluyor. Kullanılabilir kapasite ve aynı anda kesinlikle dayanılabilen disk arızası sayısı nedir?

B: RAID 6 her şeritte iki eşlik bloğu (P: XOR, Q: Reed–Solomon) tutar: kapasite (n − 2) × 4 = 16 TB, iki disk kaybına dayanır. 20 TB / 1 disk RAID 5’tir; 12 TB RAID 10’dur ve yalnızca 1 arızayı garanti eder (farklı çiftlerden 3 diske kadar şanslı durum). Büyük disklerde yeniden kurma saatler sürdüğü için ikinci arıza riski RAID 6’yı cazip kılar.

Çıktı Sorusu · RAID ve Kararlı Depolama

Soru 18: Küçük Rastgele Yazmalar

Tek bir disk 120 rastgele IOPS veriyor. 6 diskli dizide küçük rastgele yazma hızı (IOPS) nedir?

  1. RAID 0
  2. RAID 10 (3 aynalı çift)
  3. RAID 4
  4. RAID 5
  5. RAID 6

Disk sayısı 12’ye çıkarsa hangisi hiç hızlanmaz?

Cevabı göster
düzenyazma başına G/ÇIOPS
RAID 01N·R = 720
RAID 102 (iki kopya)N·R / 2 = 360
RAID 44, ikisi hep eşlik diskindeR / 2 = 60
RAID 54 (2 oku + 2 yaz), disklere yayılırN·R / 4 = 180
RAID 66 (3 oku + 3 yaz)N·R / 6 = 120

RAID 4’te her küçük yazma tek eşlik diskinde bir okuma ve bir yazma ister: dizi o diskin yarı hızına iner ve disk eklemek hiç işe yaramaz (12 diskte yine 60). RAID 5 aynı 4 G/Ç’yi tüm disklere dağıttığı için disk sayısıyla büyür (12 diskte 360).

Klasik Soru · RAID ve Kararlı Depolama

Soru 19: Kararlı Yazma Yarıda Kalırsa

Kararlı depolamada bir blok önce disk 1’e yazılıp geri okunarak doğrulanıyor, sonra aynısı disk 2’ye yapılıyor. Kurtarma sırasında iki kopya karşılaştırılıyor; bozuk blok ECC ile fark ediliyor.

CPU çökmesi (a) disk 1’e yazılırken, (b) disk 1 yazıldıktan sonra ama disk 2’ye başlamadan, (c) disk 2’ye yazılırken olursa kurtarma ne yapar? Sonuç her durumda neden ya tamamen eski ya tamamen yenidir? RAID 1 bunu neden tek başına sağlamaz?

Cevabı göster
  • (a) Disk 1’deki blok yarım yazılmıştır, ECC hatası verir; eski değer disk 2’den disk 1’e kopyalanır → eski.
  • (b) İki kopya da geçerli ama farklı; kural: disk 1 kazanır, yeni değer disk 2’ye yazılır → yeni.
  • (c) Disk 2 bozuk (ECC), disk 1 yeni ve geçerli; yeni değer disk 2’ye kopyalanır → yeni.

Yazma sırası sabit olduğundan herhangi bir anda en az bir kopya ya tamamen eski ya tamamen yeni ve geçerlidir; kurtarma o kopyayı diğerine yayar. RAID 1 iki diske aynı anda yazar ve hangisinin “doğru” olduğuna dair bir sıra tutmaz: bozulan sektöre karşı korur, yazma sırasında çökmeye karşı korumaz. Bugün aynı fikir günlükleme, yazma bariyerleri/FUA ve güç kaybı korumalı SSD’lerle uygulanır.

Son

Bölüm 11: Giriş/Çıkış: Çalışma Soruları
Konu anlatımı: Giriş/çıkış sunumu · Terim sözlüğü
1 / 1 Sercan KÜLCÜ, Tüm hakları saklıdır.