Bölüm 15: İşletim Sistemi Tasarımı
Giriş
Nasıl Çalışalım?
Kurallar (aksi belirtilmedikçe): yol çözümleme sorularında her dizin tek bir disk bloğuna sığar ve önbellek boştur; C kodlarında int 32 bittir.
Soru 1 · Hedefler ve Zorluklar
Hangisi Temel Hedef Değil?
Bir işletim sisteminin dört temel hedefi genellikle soyutlama tanımlamak, ilkel işlemler sağlamak, yalıtım sağlamak ve donanımı yönetmek olarak sayılır. Aşağıdakilerden hangisi bu hedeflerden biri değildir?
- Dosya ve süreç gibi kavramlarla donanımın karmaşıklığını gizlemek
- Bu kavramlar üzerinde çalışan sistem çağrıları sunmak
- Kullanıcıların birbirinin belleğine karışmasını engellemek, denetimli paylaşıma izin vermek
- Kesmeleri, zamanlayıcıları ve MMU’yu yönetmek
- Uygulamaların kaynak kodunu derleyip en hızlı makine koduna çevirmek
Cevabı göster
Doğru cevap: E) Uygulamaların kaynak kodunu derleyip en hızlı makine koduna çevirmek
Derleme bir araç zincirinin (derleyici) işidir; İS, derlenmiş programı yükler ve çalıştırır. Diğer dört seçenek sırasıyla soyutlama, ilkel işlem, yalıtım ve donanım yönetimi hedefleridir.
Soru 2 · Hedefler ve Zorluklar
Tasarım Neden Zor?
İşletim sistemi tasarlamayı sıradan bir uygulama yazmaktan daha zor kılan etkenlerden dördünü seçip her birini bir cümleyle açıklayın.
Cevabı göster
- Devasa boyut: on milyonlarca satır; hiç kimse bütünü kavrayamaz.
- Eşzamanlılık: kesmeler, aygıtlar ve iş parçacıkları aynı anda çalışır; yarış ve kilitlenme hataları zor bulunur.
- Düşmanca kullanıcılar: her girdi şüphelidir; sistem bozulmaya ve veri çalınmaya karşı korunmalıdır.
- Uzun ömür ve geriye dönük uyumluluk: sistem on yıllarca yaşar; eski programlar çalışmalı, gelecekteki donanım öngörülmelidir.
Diğerleri: yalıtıma rağmen paylaşım, genellik (kullanım biçimi bilinmez), taşınabilirlik.
Soru 3 · Hedefler ve Zorluklar
Mikroçekirdeğin Ödünleşimi
Bir ekip ağ sürücüsünü çekirdekten çıkarıp kullanıcı alanında ayrı bir sunucu süreci olarak çalıştırmaya karar veriyor. Bu kararın tipik kazancı ve bedeli hangisidir?
- Kazanç: daha yüksek paket hızı; bedel: daha karmaşık donanım
- Kazanç: sürücü çökerse yalnız o süreç ölür (yalıtım, güvenilirlik); bedel: her istekte ek bağlam değiştirme ve mesaj kopyalama (performans)
- Kazanç: daha az bellek kullanımı; bedel: güvenliğin azalması
- Kazanç ve bedel yoktur; yalnızca kodun yeri değişir
- Kazanç: sürücü çekirdek ayrıcalığı kazanır; bedel: yalıtım azalır
Cevabı göster
Doğru cevap: B) Kazanç: sürücü çökerse yalnız o süreç ölür (yalıtım, güvenilirlik); bedel: her istekte ek bağlam değiştirme ve mesaj kopyalama (performans)
İS tasarımının temel ödünleşimlerinden biri performans ile yalıtım/modülerlik arasındadır. Kullanıcı alanındaki sürücü hatası tüm sistemi düşürmez (MINIX 3 onu yeniden başlatabilir); ama her paket IPC, bağlam değiştirme ve kopyalama maliyeti öder.
Soru 4 · Arayüz Tasarımı
Hangi İlke?
“Programcı bir sistem çağrısının yaklaşık maliyetini sezebilmelidir; ucuz görünen bir çağrı gizlice pahalı olmamalıdır. Verimli gerçeklenemeyen bir özellik muhtemelen eklenmeye değmez.” Bu cümle arayüz tasarımının hangi ilkesini anlatır?
- Basitlik
- Bütünlük
- Verimlilik
- Geriye dönük uyumluluk
- Diklik
Cevabı göster
Doğru cevap: C) Verimlilik
Arayüz ilkeleri basitlik (az ama iyi düşünülmüş kavram), bütünlük (gereken her şey yapılabilmeli) ve verimliliktir. Örnek: lseek yalnız bir sayıyı değiştirir ve ucuzdur, read ise disk erişimi gerektirebilir.
Soru 5 · Arayüz Tasarımı
Çağrı Eklemek ve Kaldırmak
Aşağıdaki ifade doğru mu, yanlış mı? Gerekçenizi yazın.
“Bir işletim sistemine yeni bir sistem çağrısı eklemek ile var olan bir sistem çağrısını kaldırmak aynı kolaylıktadır.”
Cevabı göster
Yanlış. Eklemek kolaydır; ama bir çağrı yayımlandıktan sonra onu kullanan programlar ortaya çıkar ve kaldırmak bu programları bozar (geriye dönük uyumluluk). Bu yüzden arayüz az ve genel tutulur, kolaylık fonksiyonları kütüphaneye konur; çekirdek yerine kütüphaneyi değiştirmek daha güvenlidir.
Soru 6 · Arayüz Tasarımı
Olay Döngüsünün Sonucu
Uygulamanın kuyruğuna olaylar şu sırayla geliyor: KEY CLICK KEY TIMER CLICK KEY QUIT. get_message QUIT için 0 döndürüyor. Program ne yazdırır?
int n = 0;
msg_t m;
while (get_message(&m)) { /* QUIT → 0 */
switch (m.type) {
case KEY: n++; break;
case CLICK: n += 10; break;
case TIMER: if (n > 10) n = 0; break;
}
}
printf("%d\n", n);- 0
- 11
- 12
- 22
- 33
Cevabı göster
Doğru cevap: B) 11
11
Akışı program değil, olayların sırası belirler. Bir işleyici uzun sürerse kuyruktaki diğer olaylar bekler ve arayüz donar; uzun işler ayrı iş parçacığına verilir.
Soru 6 · Çözüm
Adım Adım Çözüm
Her turda get_message kuyruğun başındaki olayı alır, switch onu ilgili işleyiciye yönlendirir.
Başlangıç: n = 0; yedi olay sırada.
KEY: n bir artar. Şimdi n = 1.
CLICK: n 10 artar. Şimdi n = 11.
KEY: n bir artar. Şimdi n = 12.
TIMER: n > 10 ise sıfırlanır. Şimdi n = 0.
CLICK: n 10 artar. Şimdi n = 10.
KEY: n bir artar. Şimdi n = 11.
QUIT: get_message 0 döndürür, döngü biter.
Döngüden sonra printf: 11 yazılır.
int n = 0;
msg_t m;
while (get_message(&m)) { /* QUIT → 0 */
switch (m.type) {
case KEY: n++; break;
case CLICK: n += 10; break;
case TIMER: if (n > 10) n = 0; break;
}
}
printf("%d\n", n);Soru 7 · Sistem Yapısı
Exokernel ile Sanal Makine
Exokernel’i sanal makine monitöründen (hipervizör) ayıran temel fark hangisidir?
- Exokernel her uygulamaya makinenin tam bir kopyasını verir.
- Exokernel kaynakları (bloklar, sayfalar, zaman dilimleri) bölüştürüp kimin neye sahip olduğunu izler; dosya, süreç gibi soyutlamaları kullanıcı alanındaki kütüphane işletim sistemi (libOS) sağlar ve yeniden eşleme katmanı gerekmez.
- Exokernel çekirdek bileşenlerini çalışırken dinamik olarak yükler.
- Exokernel yalnızca gerçek zamanlı sistemlerde kullanılır.
- Sanal makine monitörü kullanıcı kipinde, exokernel ise donanımda çalışır.
Cevabı göster
Doğru cevap: B) Exokernel kaynakları (bloklar, sayfalar, zaman dilimleri) bölüştürüp kimin neye sahip olduğunu izler; dosya, süreç gibi soyutlamaları kullanıcı alanındaki kütüphane işletim sistemi (libOS) sağlar ve yeniden eşleme katmanı gerekmez.
Hipervizör her konuğa sanal bir donanım kopyası sunar ve konuk adreslerini gerçeklerine eşler. Exokernel ise yalnızca güvenli paylaştırma yapar. Bileşenlerin dinamik yüklenmesi genişletilebilir sistemlerin özelliğidir; libOS fikri bugün unikernel’lerde yaşar.
Soru 8 · Sistem Yapısı
Katmanlı Yapının Artı ve Eksisi
Her katmanın yalnızca hemen altındaki katmanın sunduğu işlemleri kullandığı katmanlı bir çekirdek için hangisi doğrudur?
- Katmanlar alttan üste tek tek test edilebilir; ama katman sırasını doğru seçmek zordur ve her istek birçok katmandan geçtiği için ek maliyet oluşur.
- Katmanlı yapıda bir katmandaki hata hiçbir zaman diğer katmanları etkilemez, ayrıca ek maliyet de yoktur.
- Katmanlı yapı mikroçekirdekle aynı şeydir.
- Katmanlar istedikleri katmanı doğrudan çağırabilir; sıra önemli değildir.
Cevabı göster
Doğru cevap: A) Katmanlar alttan üste tek tek test edilebilir; ama katman sırasını doğru seçmek zordur ve her istek birçok katmandan geçtiği için ek maliyet oluşur.
Hiyerarşi modülerlik ve sistematik test sağlar: alt katman doğrulanınca üstü ona güvenerek test edilir. Bedeli, örneğin bellek yönetimi mi zamanlayıcının altında olmalı, sorusu gibi sıralama ikilemleri ve geçiş maliyetidir.
Soru 9 · Sistem Yapısı
Mesajlaşma Kendiliğinden Güvenli mi?
Aşağıdaki ifade doğru mu, yanlış mı? Gerekçenizi yazın.
“Mikroçekirdekte bileşenler mesajlarla haberleştiği için sistem kendiliğinden güvenlidir; ek yetki denetimine gerek yoktur.”
Cevabı göster
Yanlış. Mesajlaşma hata yalıtımı sağlar ama güvenliği garanti etmez. Hangi sürecin hangi sunucuya mesaj gönderebileceği, hangi aygıt yazmacına erişebileceği çekirdeğin yetki (ör. yetenek) denetimine bağlıdır; seL4 gibi sistemler bu yüzden yeteneklerle ve biçimsel doğrulamayla çalışır.
Soru 10 · Sistem Yapısı
Modül mü, eBPF mi?
Linux’ta çekirdeği yeniden derlemeden genişletmenin iki yolu yüklenebilir çekirdek modülü (LKM) ve eBPF programıdır. Hangisi doğrudur?
- İkisi de yüklenmeden önce çekirdekteki bir doğrulayıcıdan geçer.
- Modül tam çekirdek ayrıcalığıyla çalışır ve bir hatası çekirdeği çökertebilir; eBPF programı yüklenmeden önce doğrulanır (sonlanma, bellek erişimi) ve sınırlı yardımcı fonksiyonları çağırabilir.
- eBPF programları kullanıcı kipinde çalışır, bu yüzden çekirdeğe hiç erişemez.
- Modüller yalnızca kullanıcı alanı sürücüleri için kullanılır.
Cevabı göster
Doğru cevap: B) Modül tam çekirdek ayrıcalığıyla çalışır ve bir hatası çekirdeği çökertebilir; eBPF programı yüklenmeden önce doğrulanır (sonlanma, bellek erişimi) ve sınırlı yardımcı fonksiyonları çağırabilir.
Genişletilebilir sistemlerin ana sorunu eklentinin güvenliğidir. Klasik modül bu sorunu çözmez; SPIN güvenli dille, Linux eBPF ise doğrulayıcıyla çözer. eBPF bugün izleme, ağ (XDP), güvenlik ve zamanlama (sched_ext) için kullanılır.
Soru 11 · Sistem Yapısı
Çekirdek İş Parçacıkları
Çekirdek iş parçacıkları (ör. kswapd, kworker) için hangisi yanlıştır?
- Kullanıcı adres uzayları yoktur; yalnızca çekirdek belleğinde çalışırlar.
- Engellenebilir ve uyuyabilirler; kesme işleyicisinde yapılamayan uzun işler onlara ertelenir.
- Aralarında bağlam değiştirmek ucuzdur, çünkü kullanıcı sayfa tablosu değişmez.
psçıktısında köşeli parantez içinde görünürler.- Sıradan bir kullanıcı süreci bir sistem çağrısıyla istediği kadar çekirdek iş parçacığı oluşturabilir.
Cevabı göster
Doğru cevap: E) Sıradan bir kullanıcı süreci bir sistem çağrısıyla istediği kadar çekirdek iş parçacığı oluşturabilir.
Çekirdek iş parçacıklarını çekirdek kendisi oluşturur (kthread_create). Kullanıcı süreçleri yalnızca çekirdeğin zaten çalıştırdığı iş parçacıklarına iş verebilir (ör. io_uring iş havuzu).
Soru 12 · Tasarım İlkeleri
Mekanizma mı, Politika mı?
Aşağıdakilerden hangisi bir politikadır (mekanizma değil)?
- MMU’nun sanal adresi sayfa tablosuyla fiziksel adrese çevirmesi
- Zamanlayıcı kesmesi geldiğinde bağlam değiştirme kodunun yazmaçları kaydetmesi
- Bellek dolduğunda hangi sayfanın diske çıkarılacağına karar veren kural
- Çekirdeğin “en yüksek öncelikli hazır iş parçacığını çalıştır” işlevi
- LSM kancalarının her dosya açılışında çağrılması
Cevabı göster
Doğru cevap: C) Bellek dolduğunda hangi sayfanın diske çıkarılacağına karar veren kural
Mekanizma “nasıl yapılır”ı, politika “ne yapılacağına karar”ı belirler. Sayfa değiştirme kuralı (LRU, saat …) bir politikadır; MMU, bağlam değiştirme, öncelik tabanlı seçim ve LSM kancaları ise politikadan bağımsız mekanizmalardır.
Soru 13 · Tasarım İlkeleri
Ayırmanın Yararı
Mekanizma ile politikanın ayrılmasını bir zamanlayıcı örneğiyle açıklayın. Bu ayrım neden yararlıdır?
Cevabı göster
- Mekanizma: çekirdek “öncelikleri verilen iş parçacıklarından en yükseğini çalıştır” işlevini sunar.
- Politika: öncelikleri iş parçacıklarını en iyi bilen taraf belirler: veritabanı sorguları yüksek, yedekleme düşük öncelik alır ve bunu bir sistem çağrısıyla bildirir.
- Yarar: çekirdek kodu değişmeden farklı uygulamalar farklı davranış elde eder; çekirdek küçük ve kararlı kalır, politika kolayca değiştirilip denenir. Linux’ta sched_ext politikanın tamamını eBPF programı olarak yüklemeye izin verir.
Soru 14 · Tasarım İlkeleri
Diklik Örneği
Hangisi diklik (orthogonality) ilkesinin iyi bir örneğidir?
- Linux’ta
clone()çağrısında bellek, dosyalar, sinyal işleyicileri ve ad alanlarının paylaşımının ayrı bayraklarla, birbirinden bağımsız seçilmesi - Her dosya türü için ayrı bir okuma sistem çağrısı tanımlanması
- Süreç oluşturmanın 10 parametreli tek bir çağrıyla yapılması
- Aynı işi yapan iki farklı sistem çağrısının bulunması
Cevabı göster
Doğru cevap: A) Linux’ta clone() çağrısında bellek, dosyalar, sinyal işleyicileri ve ad alanlarının paylaşımının ayrı bayraklarla, birbirinden bağımsız seçilmesi
Diklik, ayrı kavramların bağımsız olarak birleştirilebilmesidir: birini değiştirmek diğerini etkilemez. clone bayraklarıyla süreç ve iş parçacığı aynı mekanizmanın iki ucu olur; konteynerler de CLONE_NEW* bayraklarıyla kurulur.
Soru 15 · Tasarım İlkeleri
Yol Çözümleme Maliyeti
open("/home/ali/ders/notlar.txt") çağrısında (a) önbellek boşken dosyanın i-node’una ulaşmak için kaç disk okuması gerekir? (b) Ad önbelleğinde /home/ali → i-node eşlemesi ve o i-node bellekte varsa kaç okuma kalır?
Cevabı göster
- (a) Kök i-node’u + kök dizin bloğu, ardından home, ali ve ders için birer i-node + birer dizin bloğu, en sonda notlar.txt’nin i-node’u: 2 + 2 + 2 + 2 + 1 = 9 okuma.
- (b) Arama ali dizininden başlar: ali’nin dizin bloğu, ders i-node’u, ders bloğu, notlar.txt i-node’u = 4 okuma. Kısmi isabet bile kazançtır; Linux’ta bu iş dcache’indir.
Soru 15 · Çözüm
Adım Adım Çözüm
Her dizin için önce i-node’u (verisinin yeri), sonra dizin bloğu (ad → i-node numarası) okunur.
Kök i-node’u ve kök dizinin bloğu okunur, “home” aranır: 2 okuma.
Aynı işlem home ve ali için tekrarlanır: toplam 6 okuma.
ders dizini (7, 8) ve dosyanın kendi i-node’u (9): önbelleksiz 9 okuma.
(b) /home/ali bellekteyse yalnızca ali’nin bloğu, ders i-node + bloğu ve dosya i-node’u kalır: 4 okuma.
Soru 16 · Tasarım İlkeleri
En Geç Bağlama
Bir ad ile gerçek nesne arasındaki bağın kurulduğu an açısından aşağıdakilerden hangisi en geç bağlamadır?
- Derleyicinin değişkenlere mutlak bellek adresleri yazması
- Statik kütüphanenin bağlayıcı tarafından yürütülebilir dosyaya kopyalanması
- Yükleyicinin program yüklenirken adresleri yeniden konumlandırması
- Sanal sayfanın fiziksel çerçevesinin her erişimde sayfa tablosu (ve TLB) üzerinden çözülmesi
Cevabı göster
Doğru cevap: D) Sanal sayfanın fiziksel çerçevesinin her erişimde sayfa tablosu (ve TLB) üzerinden çözülmesi
Derleme, bağlama ve yükleme anında kurulan bağlar sırasıyla daha geçtir; sanal bellek ise bağı her erişimde yeniden kurar. Geç bağlama daha esnektir (sayfa her yere taşınabilir) ama ek dolaylılık ve maliyet getirir.
Soru 17 · Tasarım İlkeleri
İki Düzeyli Adlar
İnsanın kullandığı harici ad ile sistemin içinde kullanılan dahili ad eşleştirmelerinden hangisi yanlıştır?
/home/ali/rapor.txt→ (dizinler) → i-node numarasıwww.giresun.edu.tr→ (DNS) → IP adresi- Dosya tanımlayıcısı 3 → (süreç dosya tablosu) → çekirdekteki açık dosya nesnesi
- Sanal adres → (sayfa tablosu) → fiziksel çerçeve
- i-node numarası → (dizin) → dosya yolu
Cevabı göster
Doğru cevap: E) i-node numarası → (dizin) → dosya yolu
Eşleme hep insan dostu addan hızlı, benzersiz iç ada doğrudur. Dizin ad → i-node yönünde eşler; i-node yalnızca bağ sayısını tutar, adını bilmez (bir i-node’un birden çok sert bağı olabilir).
Soru 18 · Tasarım İlkeleri
Statik Tablo Dolarsa
Aşağıdaki ifade doğru mu, yanlış mı? Gerekçenizi yazın.
“Süreç tablosunu derleme zamanında sabit boyutlu bir dizi olarak tutan bir çekirdekte tablo dolduğunda yeni süreç oluşturulamaz.”
Cevabı göster
Doğru. Statik tablo basittir ve bellek ayırıcı gerektirmez; bedeli sabit sınırdır (eski UNIX’teki NPROC). Dinamik yapılar (bağlı liste, karma tablo, xarray) bu sınırı kaldırır ama ayırıcı, parçalanma ve daha karmaşık kilitleme getirir. Ara yol ayarlanabilir sınırlardır (/proc/sys/kernel/pid_max).
Soru 19 · Teknikler ve Performans
Yeniden Girişli mi?
strtok fonksiyonu kaldığı konumu kendi içindeki bir static char * değişkende saklar. İki iş parçacığı aynı anda farklı dizgileri strtok ile parçalarsa ne olur ve doğru çözüm nedir?
- Sorun olmaz; her iş parçacığının kendi yığını vardır.
- Paylaşılan statik durum karışır, parçalar yanlış dizgiden gelebilir; durumu çağırana taşıyan
strtok_rkullanılmalıdır. - Program derlenmez; derleyici statik değişkene izin vermez.
- Yalnızca tek çekirdekli makinede sorun olur; çok çekirdekte olmaz.
Cevabı göster
Doğru cevap: B) Paylaşılan statik durum karışır, parçalar yanlış dizgiden gelebilir; durumu çağırana taşıyan strtok_r kullanılmalıdır.
Yeniden girişli kod aynı anda iki kez çalışabilmelidir (iki iş parçacığı, ya da kesme işleyicisinin aynı fonksiyonu çağırması). Kural: paylaşılan statik durum yok; gerekirse durum parametre olarak taşınır ya da kilitle korunur.
Soru 20 · Teknikler ve Performans
Bit Sayma Döngüsü
bit_count(0x6D) ne döndürür? Aynı sonucu bir bellek okumasıyla verecek tablonun boyutu nedir?
int bit_count(int byte) {
int i, count = 0;
for (i = 0; i < 8; i++)
if ((byte >> i) & 1)
count++;
return count;
}- 4; 8 B
- 5; 256 B
- 6; 256 B
- 5; 64 KiB
Cevabı göster
Doğru cevap: B) 5; 256 B
0x6D = 0110 1101 → 5 bit 1. Döngü her bayt için 8 tur, kaydırma, maskeleme ve dal yapar; 256 girdilik char bits[256] tablosu (256 B) sonucu tek okumayla verir: yer harcayıp zaman kazanmak.
Soru 20 · Çözüm
Adım Adım Çözüm
Her turda bayt i bit sağa kaydırılır ve en düşük bit 1 ile maskelenir.
0x6D’nin ikili gösterimi 0110 1101; sayaç sıfır.
(byte >> 0) & 1 = 1: sayaç artar.
(byte >> 1) & 1 = 0: dal alınmaz.
(byte >> 2) & 1 = 1: sayaç artar.
(byte >> 3) & 1 = 1: sayaç artar.
(byte >> 4) & 1 = 0: dal alınmaz.
(byte >> 5) & 1 = 1: sayaç artar.
(byte >> 6) & 1 = 1: sayaç artar.
(byte >> 7) & 1 = 0: dal alınmaz.
Döngü 8 tur döndü; 5 döndürülür.
int bit_count(int byte) {
int i, count = 0;
for (i = 0; i < 8; i++)
if ((byte >> i) & 1)
count++;
return count;
}Soru 21 · Teknikler ve Performans
Renk Paletiyle Takas
800 × 600 bir görüntü (a) piksel başına 24 bit RGB, (b) piksel başına 8 bitlik palet indeksi + 256 renklik palet (renk başına 3 bayt) ile saklanıyor. İki boyutu ve oranı hesaplayın. (b) neyi feda eder?
- 1.440.000 B ve 480.768 B; ≈ 3 : 1
- 1.440.000 B ve 480.000 B; tam 3 : 1
- 480.000 B ve 1.440.768 B; ≈ 1 : 3
- 1.920.000 B ve 480.768 B; ≈ 4 : 1
Cevabı göster
Doğru cevap: A) 1.440.000 B ve 480.768 B; ≈ 3 : 1
(a) 800 × 600 × 3 = 1.440.000 B. (b) 480.000 + 768 = 480.768 B; oran ≈ 3 : 1. Yer yaklaşık üçte bire iner; bedeli her piksel çizilirken bir tablo bakışı (zaman) ve en fazla 256 renk sınırıdır.
Soru 22 · Teknikler ve Performans
Önbellek ile İpucu
Dağıtık bir dosya sisteminde istemci “bu dosya muhtemelen B sunucusunda” bilgisini tutuyor ve kullanmadan önce B’ye soruyor; yanlışsa dizin hizmetine başvuruyor. Bu bilgi neden önbellek değil ipucudur?
- Çünkü bellekte değil diskte tutulur.
- Çünkü yanlış olabilir ve geçersiz kılınması gerekmez; kullanılmadan önce ucuz bir doğrulama yapılır. Önbellekteki değerin ise her zaman doğru olması gerekir.
- Çünkü yalnızca bir kez kullanılabilir.
- Çünkü ipucu her zaman önbellekten daha hızlıdır.
Cevabı göster
Doğru cevap: B) Çünkü yanlış olabilir ve geçersiz kılınması gerekmez; kullanılmadan önce ucuz bir doğrulama yapılır. Önbellekteki değerin ise her zaman doğru olması gerekir.
Önbellek tutarlılık ister: kaynak değişince kayıt geçersiz kılınmalıdır. İpucu yanlış çıkabilir; doğruluğu kullanım anında denetlendiği için tutarlılık yükü yoktur. Diğer örnekler: dal tahmini, madvise ile verilen erişim ipucu.
Soru 23 · Teknikler ve Performans
Yaygın Durumu Hızlandırmak
Linux futex tabanlı kilit neden “yaygın durumu hızlı, nadir durumu doğru yap” ilkesinin iyi bir örneğidir?
- Çünkü her kilit alma işlemi çekirdekte yapılır.
- Çünkü çekişme yokken kilit kullanıcı alanında tek bir atomik işlemle alınır; çekirdeğe yalnızca nadir çekişme durumunda (bekleme ve uyandırma için) girilir.
- Çünkü kilit hiç atomik işlem kullanmaz.
- Çünkü bekleyen iş parçacığı sürekli döner (spin), bu da her zaman en hızlısıdır.
Cevabı göster
Doğru cevap: B) Çünkü çekişme yokken kilit kullanıcı alanında tek bir atomik işlemle alınır; çekirdeğe yalnızca nadir çekişme durumunda (bekleme ve uyandırma için) girilir.
Kilitlerin büyük çoğunluğu çekişmesiz alınır; hızlandırılması gereken bu durumdur. Diğer örnekler: vDSO ile çekirdeğe girmeden clock_gettime, TLB isabeti, sistem çağrılarının hızlı yolu.
Soru 24 · Proje Yönetimi ve Test
Brooks Yasası ve İletişim Yolları
Gecikmiş bir projede 5 kişilik ekibe 3 kişi ekleniyor. İletişim yolu sayısı (her çift arasında bir yol) kaç olur, kaç kat artar? Bu sonuç Brooks yasasını nasıl destekler?
- 8 ve 13; ≈ 1,6 kat
- 10 ve 28; 2,8 kat
- 20 ve 56; 2,8 kat
- 10 ve 16; 1,6 kat
Cevabı göster
Doğru cevap: B) 10 ve 28; 2,8 kat
n(n − 1) / 2: 5 kişide 10, 8 kişide 28 yol; artış 2,8 kat (kişi sayısı yalnızca 1,6 kat). Yeni gelenler eğitim için mevcut ekibin zamanını da tüketir: “Gecikmiş bir yazılım projesine eleman eklemek, onu daha da geciktirir.”
Soru 25 · Proje Yönetimi ve Test
Zaman Nereye Gider?
Brooks’un deneyiminden önerdiği zaman dağılımına göre 12 aylık bir sistem projesinde planlama, kodlama, modül testi ve sistem testine kaçar ay ayrılmalıdır? Bu dağılım ne anlatır?
Cevabı göster
1/3 planlama = 4 ay, 1/6 kodlama = 2 ay, 1/4 modül testi = 3 ay, 1/4 sistem testi = 3 ay (toplam 12). Kod yazmak işin yalnızca altıda biridir; zamanın yarısı teste gider. Planlamayı ve testi kısıp “kodlamaya geçmek” projeyi hızlandırmaz.
Soru 26 · Proje Yönetimi ve Test
Çekirdekte assert
Bir çekirdek geliştiricisi bağlı listeye her eklemeden sonra assert(liste_tutarli(l)); satırı koyuyor. Bu satırın asıl yararı nedir?
- Bozulmuş bir değişmezi (invariant), hatanın oluştuğu yere yakın bir noktada yakalayıp sorunun izini kısaltması
- Listedeki tüm hataları otomatik olarak düzeltmesi
- Birim testlerine gerek bırakmaması
- Listeye ekleme işlemini hızlandırması
Cevabı göster
Doğru cevap: A) Bozulmuş bir değişmezi (invariant), hatanın oluştuğu yere yakın bir noktada yakalayıp sorunun izini kısaltması
Bozulma çoğu zaman çok sonra, ilgisiz bir yerde çökme olarak görünür. Değişmez denetimi hatayı kaynağına yakın yakalar. Hiçbir şeyi düzeltmez ve testlerin yerini tutmaz; sıcak yollarda maliyeti nedeniyle hata ayıklama derlemelerinde açılır.
Soru 27 · Proje Yönetimi ve Test
Hata Ayıklayıcıda Kaybolan Hata
Çok çekirdekli bir makinede ara sıra görülen bir veri bozulması, kod hata ayıklayıcıyla adım adım çalıştırılınca hiç ortaya çıkmıyor. En olası açıklama hangisidir?
- Hata ayıklayıcı bellek hatalarını otomatik düzeltir.
- Hata bir yarış durumudur: iş parçacıklarının belirli bir zamanlamayla iç içe geçmesine bağlıdır; adım adım çalıştırma zamanlamayı değiştirdiği için o iç içe geçme oluşmaz.
- Hata derleyicinin sürümünden kaynaklanır.
- Disk dolduğu için oluşur.
Cevabı göster
Doğru cevap: B) Hata bir yarış durumudur: iş parçacıklarının belirli bir zamanlamayla iç içe geçmesine bağlıdır; adım adım çalıştırma zamanlamayı değiştirdiği için o iç içe geçme oluşmaz.
Yarış hataları zamanlamaya ve iç içe geçme (interleaving) sırasına duyarlıdır; gözlemlemek onları değiştirebilir. Çözüm yolları: kilit disiplinini denetleyen araçlar (lockdep, ThreadSanitizer), stres testleri ve olay sırasını kaydeden günlükler.
Soru 28 · Proje Yönetimi ve Test
Günlük Kaydı Neyi Sağlar?
Aşağıdaki ifade doğru mu, yanlış mı? Gerekçenizi yazın.
“Çekirdeğe ayrıntılı günlük (log) kaydı eklemek, sistemde kilitlenme oluşmayacağını garanti eder.”
Cevabı göster
Yanlış. Günlük kaydı bir yürütme geçmişi tutar: olayların sırası ve durum geçişleri sonradan incelenebilir; bu, kilitlenmenin nedenini bulmayı kolaylaştırır. Ama hiçbir şeyi önlemez; aşırı kayıt zamanlamayı değiştirip hatayı gizleyebilir ve performansı düşürür.
Soru 29 · Proje Yönetimi ve Test
Kullanılabilirlik ile Güvenlik
İS tasarımında kullanılabilirlik ile güvenlik arasındaki ödünleşimi üç örnekle açıklayın. Tasarımcı bu dengeyi nasıl kurabilir?
Cevabı göster
- Kimlik doğrulama: MFA güvenliği artırır ama her girişi uzatır; geçiş anahtarları ikisini birden iyileştirmeye çalışır.
- İzinler: sıkı erişim denetimi ve sık onay pencereleri zararı sınırlar, ama kullanıcıyı yorar; “onay yorgunluğu” güvenliği yeniden düşürür.
- Güncellemeler: otomatik yama hızla koruma sağlar ama beklenmedik yeniden başlatma ve uyumluluk sorunları doğurabilir.
Denge: güvenli varsayılanlar, en az ayrıcalık, kullanıcıya yalnızca anlamlı kararlar bırakmak (psikolojik kabul edilebilirlik).
Soru 30 · Proje Yönetimi ve Test
Gümüş Kurşun
Aşağıdaki ifade doğru mu, yanlış mı? Gerekçenizi yazın.
“Yeterince güçlü yeni bir programlama aracı ya da dili, yazılım geliştirmedeki karmaşıklığın tamamını ortadan kaldırabilir.”
Cevabı göster
Yanlış. Brooks’un “gümüş kurşun yok” savı: araçlar yalnızca arızi karmaşıklığı (sözdizimi, derleme, bellek yönetimi ayrıntıları) azaltır. Problemin kendisinden gelen özsel karmaşıklık (ne inşa edileceğine, kavramsal yapıya karar vermek) kalır; yapay zekâ destekli kodlama da tasarım sorumluluğunu kaldırmaz.
Özet
Özet: Sık Yapılan Hatalar
- Mekanizma ile politikayı karıştırmak: “nasıl” mekanizma, “hangisi / ne zaman” karar politikadır (sayfa değiştirme kuralı politikadır, MMU mekanizmadır).
- Exokernel’i sanal makine sanmak: exokernel kaynağı bölüştürür, kopyasını vermez; soyutlamalar libOS’tadır.
- Dinamik bileşen yüklemeyi exokernel’e bağlamak: bu, genişletilebilir sistemlerin (modül, eBPF) özelliğidir.
- Yol çözümlemede yalnızca dizin bloklarını saymak: her dizin için önce i-node, sonra blok okunur; dosyanın kendi i-node’u da eklenir.
- İpucuyu önbellek gibi doğru varsaymak: ipucu kullanılmadan önce doğrulanmalıdır.
- Brooks yasasında yolu n − 1 sanmak: her çift için bir yol vardır, n(n − 1) / 2.
- assert ve günlük kaydının hataları düzelttiğini ya da önlediğini düşünmek: ikisi de bulmayı kolaylaştırır.