Bölüm 12: Çok İşlemcili Sistemler
Çıktı Sorusu · Giriş
Soru 1: Çekirdek Eklemenin Sınırı
Bir programın çalışma süresinin %80’i paralelleştirilebiliyor, %20’si sıralı kalmak zorunda.
- 8 çekirdekte hızlanma nedir?
- Çekirdek sayısı sonsuza giderse hızlanma en fazla ne olur?
- 4 kat hızlanma için kaç çekirdek gerekir?
- Paralel kısım %90 olsaydı 32 çekirdekte hızlanma ne olurdu?
Cevabı göster
Amdahl: S(n) = 1 / ((1 − p) + p / n), p = 0,8.
(a) 1 / (0,2 + 0,1) = 3,33.
(b) p / n → 0: 1 / 0,2 = 5.
(c) 0,2 + 0,8 / n = 0,25 → 0,8 / n = 0,05 → n = 16: 8’den 16’ya çıkmak yalnızca 3,33 → 4 kazandırır.
(d) 1 / (0,1 + 0,9 / 32) = 1 / 0,128 ≈ 7,8 (tavan 10).
Sıralı kısım tavanı belirler; saat hızı yerine çekirdek sayısı artarken yazılımın paralel kısmını büyütmek bu yüzden önemlidir.
Çoktan Seçmeli · Çok İşlemcili Donanım
Soru 2: Bellek Erişimi Neden Değişir?
İki soketli bir sunucuda bir iş parçacığı kendi soketine bağlı bellekten 80 ns’de, diğer soketin belleğinden 140 ns’de okuyabiliyor; iki bellek de sıradan LOAD/STORE komutlarıyla erişilebilir. Bu mimari nasıl adlandırılır?
C: NUMA’da tüm CPU’lar tek adres alanını görür ve uzak belleğe de sıradan komutlarla erişir; yalnızca süre belleğin hangi düğümde olduğuna bağlıdır. Bu yüzden işletim sistemi süreci ve sayfalarını aynı düğümde tutmaya çalışır (ilk dokunma, otomatik NUMA dengeleme). Çoklu bilgisayarda bellek paylaşılmaz.
Çıktı Sorusu · Çok İşlemcili Donanım
Soru 3: NUMA’da Ortalama Gecikme
Bir NUMA sisteminde yerel bellek erişimi 80 ns, uzak bellek erişimi 200 ns.
- Bir iş parçacığının erişimlerinin %85’i yerelse ortalama erişim süresi nedir?
- Çizelgeleyici iş parçacığını başka bir düğüme taşıdığı için oran %40’a düşerse?
- İşletim sistemi bu kaybı önlemek için ne yapabilir?
Cevabı göster
Ortalama = y · tyerel + (1 − y) · tuzak.
(a) 0,85 × 80 + 0,15 × 200 = 68 + 30 = 98 ns.
(b) 0,40 × 80 + 0,60 × 200 = 32 + 120 = 152 ns: yaklaşık %55 yavaşlama.
(c) İş parçacığını verisinin bulunduğu düğümde tutmak (afinite, önce aynı düğüm içinde yük dengeleme) ya da sayfaları iş parçacığının yanına taşımak (Linux otomatik NUMA dengeleme); uygulama tarafında numactl ile bağlama.
Çıktı Sorusu · Çok İşlemcili Donanım
Soru 4: Çapraz Çubuk ve Omega Ağı
n CPU n bellek modülüne bağlanacak.
- n = 16 ve n = 128 için çapraz çubukta kaç kesişim noktası, omega ağında kaç 2 × 2 anahtar gerekir?
- 8 × 8 omega ağında CPU 101, bellek 010’a erişmek istiyor. Her aşamada anahtarın hangi çıkışı (üst/alt) kullanılır?
- Omega ağı bu tasarruf için ne öder?
Cevabı göster
| n | çapraz çubuk n² | omega (n/2)·log₂n |
|---|---|---|
| 16 | 256 | 8 × 4 = 32 |
| 128 | 16 384 | 64 × 7 = 448 |
(b) Her aşama hedef adresin bir bitine bakar (soldan sağa): 0 → üst, 1 → alt. Hedef 010: 1. aşama üst, 2. aşama alt, 3. aşama üst. Kaynak adresi yönlendirmeye karışmaz; yanıt için anahtarlar kaynak bitlerini kaydeder.
(c) Omega engellemelidir: iki istek aynı anahtar çıkışını isterse biri bekler; ayrıca her istek log₂n aşamadan geçtiği için gecikme artar. Çapraz çubuk engellemesizdir ama maliyeti n² ile büyür.
Adım Adım Çalıştırma · Çok İşlemcili Donanım
Soru 5: MESI Durumlarını İzlemek
Üç çekirdekli bir sistemde aynı önbellek satırına (x) sırayla şu erişimler yapılıyor. Her adımdan sonra satır üç önbellekte hangi MESI durumundadır? Kaç geçersiz kılma gerekir?
Başlangıçta x = 0 yalnızca bellekte; üç önbellekte de satır I (geçersiz).
Ç0 okur: BusRd, başka kopya yok → bellekten alır, E (tek ve temiz).
Ç1 okur: Ç0 isteği dinler, “bende var” der → ikisi de S. Bellek hâlâ güncel.
Ç1 yazar: S’deki satıra yazmak için geçersiz kılma yayınlanır → Ç0 I, Ç1 M; bellek artık eski. (Geçersiz kılma 1)
Ç0 okur: ıska. Ç1 kirli satırı verir ve belleğe geri yazar → ikisi de S, bellek güncel.
Ç2 yazar: satır onda yok; okuyup özel almak için diğer kopyalar geçersiz kılınır → Ç0 ve Ç1 I, Ç2 M. (Geçersiz kılma 2)
Ç2 okur: kendi önbelleğinde M → isabet, veri yolu trafiği yok.
Ç0 yazar: Ç2’deki kirli kopya verilip geçersiz kılınır → Ç0 M, Ç2 I. Toplam 3 geçersiz kılma; bellek yine eski.
Ç0: oku(x); // x = 0
Ç1: oku(x);
Ç1: x = 1;
Ç0: oku(x);
Ç2: x = 2;
Ç2: oku(x);
Ç0: x = 3;Çoktan Seçmeli · Çok İşlemcili Donanım
Soru 6: Ayrı Sayaçlar, Yavaş Program
İki iş parçacığı birbirinden bağımsız iki sayacı (long sayac[2], art arda) milyonlarca kez artırıyor; ortak veri yok, kilit de yok. Program tek iş parçacıklı sürümden yavaş çalışıyor. En olası neden nedir?
B: Tutarlılık birimi değişken değil satırdır. Ç0 sayac[0]’ı artırınca satırı M alır ve Ç1’in kopyası geçersiz olur; Ç1 sayac[1]’i artırınca satır geri taşınır: “ping-pong”. Her sayacı ayrı satıra hizalamak (dolgu, Java’da @Contended) sorunu çözer. Ayrı değişkenlerde yarış durumu yoktur; art arda iki long da aynı sayfada, dolayısıyla aynı düğümdedir.
Çoktan Seçmeli · Çok İşlemcili İşletim Sistemleri
Soru 7: Usta-Köle Modelinin Sorunu
Bir çok işlemcili işletim sisteminde çekirdek yalnızca CPU 0’da çalışıyor; diğer CPU’lar kullanıcı süreçlerini yürütüyor ve her sistem çağrısını CPU 0’a iletiyor. Sistem çağrısı yoğun bir iş yükünde 16 CPU’ya çıkınca ne beklenir?
A: Usta-köle modelinde çekirdek verisine tek CPU dokunur: basittir, kilit gerekmez ve tek hazır listesi yükü kendiliğinden dengeler. Bedeli, ustanın kapasitesinin tüm sistemi sınırlamasıdır; usta çökerse sistem de durur. B ve D “her CPU’nun kendi işletim sistemi” modelinin, C ise SMP’nin sorunudur.
Çoktan Seçmeli · Senkronizasyon
Soru 8: Spinlock Veri Yolunu Boğuyor
Sekiz çekirdek aynı kilit değişkeni üzerinde sürekli TSL komutu çalıştırarak dönüyor ve sistemin geri kalanı yavaşlıyor. Hangi değişiklik bu trafiği en çok azaltır?
D: Her TSL bir yazmadır: satırı M’ye çekip diğer kopyaları geçersiz kılar, satır çekirdekler arasında sürekli taşınır. Test-and-test-and-set’te bekleyenler kendi önbelleklerindeki S kopyayı okuyarak döner ve veri yolunu kullanmaz; üstel geri çekilme çakışmayı daha da azaltır. Önbelleği kapatmak her okumayı belleğe gönderir ve trafiği artırır. Daha ölçeklenebilir çözümler bilet kilidi ve MCS’dir.
Adım Adım Çalıştırma · Senkronizasyon
Soru 9: Bilet Kilidi
Üç iş parçacığı bilet kilidini kullanıyor. next ve serving nasıl değişir, kritik bölgeye hangi sırayla girilir? Bekleyenler neden veri yolunu doldurmaz?
İki sayaç: next bilet dağıtır, serving sırası gelen bileti gösterir. Kilit serbest. Sırayla T1, T0, T2 kilitle çağırıyor; sonra sahipler bırakıyor.
T1 kilitle: atomik artırma eski değeri (bilet 0) verir, next = 1. serving == 0 → döngüye girmeden kritik bölgeye geçer.
T0 kilitle: bilet 1, next = 2. serving (0) ≠ 1 → kendi önbelleğindeki S kopyayı okuyarak döner; veri yolu meşgul edilmez.
T2 kilitle: bilet 2, next = 3. serving (0) ≠ 2 → kendi önbelleğindeki S kopyayı okuyarak döner; veri yolu meşgul edilmez.
T1 bırakır: serving = 1. Bu yazma dönenlerin kopyasını geçersiz kılar; yeni değeri okuyan T0 (bilet 1) girer, diğerleri dönmeyi sürdürür.
T0 bırakır: serving = 2. Bu yazma dönenlerin kopyasını geçersiz kılar; yeni değeri okuyan T2 (bilet 2) girer, diğerleri dönmeyi sürdürür.
T2 bırakır: serving = 3 = next. Bekleyen yok, kilit serbest. Giriş sırası biletlerin sırasıdır: T1, T0, T2.
void kilitle(void) { int my = atomik_artir(&next); // eski değer while (serving != my) pause(); // yerelde dön } void birak(void) { serving++; }
Çoktan Seçmeli · Senkronizasyon
Soru 10: Dönmek mi, Uyumak mı?
Bir çekirdekte bağlam değiştirmenin maliyeti C = 4 µs (uyuyup geri gelmek iki değiştirme ister). Hangi durumda kilidi dönerek beklemek daha akıllıcadır?
A: Kural: beklenen bekleme 2C’den (8 µs) kısaysa dön, değilse uyu. 1 µs’lik kritik bölgede dönmek bağlam değiştirmeden ucuzdur. Tek CPU’da dönmek anlamsızdır: sahip, dönen iş parçacığı CPU’yu bırakmadan ilerleyemez. Uyuyan sahip ise uzun süre dönecek demektir. Pratikte uyarlamalı kilitler önce kısa süre döner, sonra uyur.
Klasik Soru · Çizelgeleme
Soru 11: Çeteleri Dilimlere Yerleştirmek
6 CPU’lu bir sistemde beş paralel uygulama çete çizelgelemeyle çalışacak; iş parçacığı sayıları A: 4, B: 2, C: 3, D: 3, E: 5. Bir çetenin tüm iş parçacıkları aynı dilimde, farklı CPU’larda çalışmalıdır.
- Bir tur en az kaç dilim sürer? Bir yerleşim verin.
- CPU kullanımı yüzde kaçtır?
- Zaman paylaşımında A’nın iki iş parçacığı ileti alışverişi yaparken ne olurdu?
Cevabı göster
| dilim | CPU 0–5 | boş |
|---|---|---|
| 0 | A A A A B B | 0 |
| 1 | C C C D D D | 0 |
| 2 | E E E E E — | 1 |
(a) Toplam 17 iş parçacığı, dilim başına 6 CPU → en az ⌈17 / 6⌉ = 3 dilim; yerleşim yukarıda. E (5) yalnızca 1 iş parçacıklık boşlukla birleşebilir; hiçbir çete 1 olmadığından o dilimde 1 CPU boş kalır.
(b) 17 / 18 ≈ %94.
(c) A0’ın gönderdiği iletiyi A1 ancak kendi dilimi gelince görür, yanıt da bir dilim bekler: her istek–yanıt dilim boyu gecikir. Çetede üyeler aynı anda koştuğu için iletiler hemen yanıtlanır.
Çıktı Sorusu · Çoklu Bilgisayarlar
Soru 12: Ara Bağlantıların Çapı
64 düğümlü bir çoklu bilgisayar için dört ara bağlantı düşünülüyor: çift yönlü halka, 8 × 8 ızgara, 8 × 8 simit (torus) ve 6 boyutlu hiperküp. Her birinin çapını (en uzak iki düğüm arası atlama sayısı) ve bağlantı sayısını bulun. Düğüm sayısı 128’e çıkınca hiperküpün çapı ne olur?
Cevabı göster
| topoloji | çap | bağlantı |
|---|---|---|
| halka | 32 | 64 |
| 8 × 8 ızgara | 14 | 112 |
| 8 × 8 simit | 8 | 128 |
| 6B hiperküp | 6 | 192 |
Halka: 64 / 2 = 32. Izgara: (8 − 1) + (8 − 1) = 14, bağlantı 2 × 8 × 7. Simit: sarma bağlantılarıyla 4 + 4 = 8, bağlantı 2 × 64. Hiperküp: çap log₂64 = 6, bağlantı 64 × 6 / 2.
128 düğümde hiperküpün çapı yalnızca 7 olur (düğüm ikiye katlanınca çap 1 artar); halkada ise 64’e çıkar. Bedeli, düğüm başına bağlantı sayısının da artmasıdır.
Adım Adım Çalıştırma · Çoklu Bilgisayarlar
Soru 13: Hiperküpte Yönlendirme
4 boyutlu hiperküpte 0110 düğümünden 1001 düğümüne giden ileti, her adımda soldaki ilk farklı biti düzelterek ilerliyor. Hangi düğümlerden geçer, kaç atlama yapar?
4B hiperküp 4 × 4 simit olarak çizildi (satır ve sütunlar Gray koduyla): komşular tek bitte farklıdır, kesikli çizgiler karşı kenara sarar. Kaynak 0110, hedef 1001.
fark = 0110 ⊕ 1001 = 1111; soldan ilk farklı bit 1. bit → 1110. (Atlama 1)
fark = 1110 ⊕ 1001 = 0111; soldan ilk farklı bit 2. bit → 1010. (Atlama 2)
fark = 1010 ⊕ 1001 = 0011; soldan ilk farklı bit 3. bit → 1000. (Atlama 3)
fark = 1000 ⊕ 1001 = 0001; soldan ilk farklı bit 4. bit → 1001. (Atlama 4) Hedefe varıldı: atlama sayısı = Hamming uzaklığı = 4, bu da 4B hiperküpün çapıdır. Kural yerel olduğundan yönlendirme tablosu gerekmez.
cur = kaynak; // 0110 while (cur != hedef) { // hedef 1001 fark = cur ^ hedef; bit = en_soldaki_bir(fark); cur = cur ^ bit; // komşuya ilet }
Çıktı Sorusu · Çoklu Bilgisayarlar
Soru 14: Sakla ve İlet ya da Kesip Geç
8 KiB’lık bir paket kaynaktan hedefe 3 anahtar, yani 4 bağlantı üzerinden gidiyor. Her bağlantı 25 Gb/s; her anahtar başlığı 0,05 µs’de işliyor (kablo gecikmesini yok sayın).
- Paketin bir bağlantıdan geçme süresi nedir?
- Sakla ve ilet ile toplam gecikme nedir?
- Kesip geç ile toplam gecikme nedir?
- Atlama sayısı iki katına çıkarsa hangisi çok etkilenir?
Cevabı göster
(a) 8192 × 8 / 25 × 10⁹ s = 2,62 µs.
(b) Her anahtar paketin tamamını alıp sonra iletir: 4 × 2,62 + 3 × 0,05 = 10,64 µs.
(c) Başlık gelince yol kurulur, paket boru gibi akar: 2,62 + 3 × 0,05 = 2,77 µs.
(d) Sakla ve iletin gecikmesi atlama sayısıyla doğrusal büyür (8 bağlantıda yaklaşık 21 µs); kesip geçte yalnızca başlık işleme süreleri eklenir. HPC ağları ve veri merkezi anahtarları bu yüzden kesip geç ya da solucan deliği yöntemini kullanır.
Çoktan Seçmeli · Çoklu Bilgisayarlar
Soru 15: Uzak Prosedür Çağrısında Koçan
İstemci toplam = hesapla(dizi, n) çağrısını sıradan bir fonksiyon gibi yazıyor ama fonksiyon başka bir makinede çalışıyor. İstemci koçanının (stub) görevi nedir ve RPC’de hangi parametre türü sorun çıkarır?
B: Koçan yerel bir prosedür gibi çağrılır, parametreleri bir iletiye paketler (marshalling), çekirdek aracılığıyla sunucuya gönderir ve yanıtı açıp döndürür. İşaretçi başka bir adres alanında anlamsızdır: dizi değer olarak gönderilir, gerekirse geri kopyalanır (kopyala-geri yükle). Küresel değişkenler, kısmi hatalar ve bayt sırası da ayrıca ele alınmalıdır.
Çoktan Seçmeli · Sanallaştırma
Soru 16: Tip 1 ve Tip 2 Hipervizör
Bir öğrenci dizüstündeki Windows üzerinde VirtualBox ile Linux çalıştırıyor; bir veri merkezi ise sunucularını doğrudan donanım üzerinde çalışan ESXi ile bölüştürüyor. Bunlar sırasıyla hangi türdür?
C: Tip 1 hipervizör donanımı doğrudan yönetir ve misafir işletim sistemlerini çalıştırır (ESXi, Xen, Hyper-V; KVM Linux’u hipervizöre dönüştürür). Tip 2 sıradan bir uygulama gibi bir ana işletim sistemi üzerinde çalışır ve aygıt erişimini ona bırakır. Donanım desteği (VT-x) iki türde de kullanılabilir; tür, hipervizörün nerede çalıştığıyla belirlenir.
Çıktı Sorusu · Sanallaştırma
Soru 17: İki Boyutlu Sayfa Yürüyüşü
Misafir işletim sistemi 4 düzeyli sayfa tabloları kullanıyor; ana makine EPT için 5 düzeyli tablo kullanıyor. Misafirin bir sanal adresinde TLB ıskası oluyor ve hiçbir tablo girdisi önbellekte değil.
- EPT ile en kötü durumda kaç bellek erişimi gerekir (son veri erişimi hariç)?
- Hipervizör gölge sayfa tabloları kullansaydı aynı ıska kaç erişim isterdi?
- Gölge tablonun bedeli nerededir?
Cevabı göster
(a) Misafir tablosunun 4 düzeyinin her girdisi bir misafir fiziksel adresidir ve EPT’den (5 erişim) geçmelidir; ardından girdi okunur. Son misafir fiziksel adresi de çevrilmelidir: (4 + 1) × (5 + 1) − 1 = 29 erişim. (İki taraf da 4 düzeyli olsaydı 24.)
(b) Gölge tablo doğrudan misafir sanal → ana fiziksel eşlemesini tutar: 4 erişim, tek boyutlu yürüyüş.
(c) Misafirin tablolarını salt okunur yapmak gerekir; misafir her tablo değişikliğinde tuzağa düşer (VM çıkışı) ve hipervizör gölgeyi günceller. EPT bu çıkışları kaldırır, bedeli uzun ıska yürüyüşüdür; büyük sayfalar ve VM etiketli TLB bu yüzden önemlidir.
Çoktan Seçmeli · Sanallaştırma
Soru 18: Konteynerde uname -r
Linux 6.8 çekirdeğiyle çalışan bir sunucuda, Ubuntu 20.04 tabanlı bir Docker konteyneri ve Ubuntu 20.04 kurulu bir KVM sanal makinesi çalışıyor. İkisinde de uname -r komutu çalıştırılırsa hangisi doğrudur?
D: Konteynerler ana makinenin tek çekirdeğini paylaşır; yalnızca kullanıcı alanı (kütüphaneler, araçlar) Ubuntu 20.04’tür. Yalıtım ad alanları, cgroups ve seccomp ile sağlanır. Sanal makine ise kendi misafir çekirdeğini önyükler. Bu yüzden konteynerde farklı bir işletim sistemi (ör. Linux üstünde Windows çekirdeği) çalıştırılamaz.
Çoktan Seçmeli · Dağıtık Sistemler
Soru 19: Değişiklik Ne Zaman Görünür?
İstemci 1 bir dosyayı açıp sonuna “c” ekliyor ama henüz kapatmıyor; bu sırada istemci 2 dosyayı açıp okuyor. Dosya “ab” idi. Oturum semantiği kullanan bir sistemde (ör. AFS) istemci 2 ne görür?
C: Oturum semantiğinde değişiklikler dosya kapatılana kadar yalnızca onu yapan istemcide görünür; kapatıldıktan sonra açanlar yeni sürümü görür. A, tek makinedeki UNIX semantiğidir: her yazma hemen görünür ama dağıtık sistemde önbellekler yüzünden pahalıdır. Değişmez dosyalar ve işlemler diğer seçeneklerdir; hepsi tutarlılık ile performans arasında bir ödünleşimdir.