Bölüm 15: İşletim Sistemi Tasarımı

İşletim Sistemleri · Çalışma Soruları
Hedefler ve ZorluklarArayüz TasarımıSistem YapısıTasarım İlkeleriTeknikler ve PerformansProje Yönetimi ve Test
Sercan KÜLCÜ · Giresun Üniversitesi

Giriş

Nasıl Çalışalım?

1 · Önce çözünHer slaytta bir soru var. Cevabı açmadan önce kâğıda kendi cevabınızı ve gerekçenizi yazın.
2 · Sonra açın“Cevabı göster” kutusu doğru seçeneği ve kısa bir açıklamayı verir. Yanlış seçeneklerin neden yanlış olduğunu da düşünün.
3 · Adım adım izleyinHesap ve kod sorularından sonra gelen “Adım Adım Çözüm” slaytında ‹ › düğmeleriyle çözümü ilerletin.

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?

Çoktan seçmeli

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?

  1. Dosya ve süreç gibi kavramlarla donanımın karmaşıklığını gizlemek
  2. Bu kavramlar üzerinde çalışan sistem çağrıları sunmak
  3. Kullanıcıların birbirinin belleğine karışmasını engellemek, denetimli paylaşıma izin vermek
  4. Kesmeleri, zamanlayıcıları ve MMU’yu yönetmek
  5. 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?

Açık uçlu

İş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

Çoktan seçmeli

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?

  1. Kazanç: daha yüksek paket hızı; bedel: daha karmaşık donanım
  2. 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)
  3. Kazanç: daha az bellek kullanımı; bedel: güvenliğin azalması
  4. Kazanç ve bedel yoktur; yalnızca kodun yeri değişir
  5. 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?

Çoktan seçmeli

“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?

  1. Basitlik
  2. Bütünlük
  3. Verimlilik
  4. Geriye dönük uyumluluk
  5. 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

Doğru / Yanlış

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

Kod izleme

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);
  1. 0
  2. 11
  3. 12
  4. 22
  5. 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

Çoktan seçmeli

Exokernel’i sanal makine monitöründen (hipervizör) ayıran temel fark hangisidir?

  1. Exokernel her uygulamaya makinenin tam bir kopyasını verir.
  2. 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.
  3. Exokernel çekirdek bileşenlerini çalışırken dinamik olarak yükler.
  4. Exokernel yalnızca gerçek zamanlı sistemlerde kullanılır.
  5. 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

Çoktan seçmeli

Her katmanın yalnızca hemen altındaki katmanın sunduğu işlemleri kullandığı katmanlı bir çekirdek için hangisi doğrudur?

  1. 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.
  2. Katmanlı yapıda bir katmandaki hata hiçbir zaman diğer katmanları etkilemez, ayrıca ek maliyet de yoktur.
  3. Katmanlı yapı mikroçekirdekle aynı şeydir.
  4. 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?

Doğru / Yanlış

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?

Çoktan seçmeli

Linux’ta çekirdeği yeniden derlemeden genişletmenin iki yolu yüklenebilir çekirdek modülü (LKM) ve eBPF programıdır. Hangisi doğrudur?

  1. İkisi de yüklenmeden önce çekirdekteki bir doğrulayıcıdan geçer.
  2. 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.
  3. eBPF programları kullanıcı kipinde çalışır, bu yüzden çekirdeğe hiç erişemez.
  4. 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ı

Çoktan seçmeli

Çekirdek iş parçacıkları (ör. kswapd, kworker) için hangisi yanlıştır?

  1. Kullanıcı adres uzayları yoktur; yalnızca çekirdek belleğinde çalışırlar.
  2. Engellenebilir ve uyuyabilirler; kesme işleyicisinde yapılamayan uzun işler onlara ertelenir.
  3. Aralarında bağlam değiştirmek ucuzdur, çünkü kullanıcı sayfa tablosu değişmez.
  4. ps çıktısında köşeli parantez içinde görünürler.
  5. 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ı?

Çoktan seçmeli

Aşağıdakilerden hangisi bir politikadır (mekanizma değil)?

  1. MMU’nun sanal adresi sayfa tablosuyla fiziksel adrese çevirmesi
  2. Zamanlayıcı kesmesi geldiğinde bağlam değiştirme kodunun yazmaçları kaydetmesi
  3. Bellek dolduğunda hangi sayfanın diske çıkarılacağına karar veren kural
  4. Çekirdeğin “en yüksek öncelikli hazır iş parçacığını çalıştır” işlevi
  5. 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ı

Açık uçlu

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

Çoktan seçmeli

Hangisi diklik (orthogonality) ilkesinin iyi bir örneğidir?

  1. 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
  2. Her dosya türü için ayrı bir okuma sistem çağrısı tanımlanması
  3. Süreç oluşturmanın 10 parametreli tek bir çağrıyla yapılması
  4. 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

Hesaplama

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.

/ i-node + dizin bloğu → home (1, 2)/home i-node + dizin bloğu → ali (3, 4)/home/ali i-node + dizin bloğu → ders (5, 6)…/ders i-node + dizin bloğu → notlar (7, 8)notlar.txt i-node (9)

Kök i-node’u ve kök dizinin bloğu okunur, “home” aranır: 2 okuma.

/ i-node + dizin bloğu → home (1, 2)/home i-node + dizin bloğu → ali (3, 4)/home/ali i-node + dizin bloğu → ders (5, 6)…/ders i-node + dizin bloğu → notlar (7, 8)notlar.txt i-node (9)

Aynı işlem home ve ali için tekrarlanır: toplam 6 okuma.

/ i-node + dizin bloğu → home (1, 2)/home i-node + dizin bloğu → ali (3, 4)/home/ali i-node + dizin bloğu → ders (5, 6)…/ders i-node + dizin bloğu → notlar (7, 8)notlar.txt i-node (9)

ders dizini (7, 8) ve dosyanın kendi i-node’u (9): önbelleksiz 9 okuma.

/home/ali i-node’u bellekte (dcache + i-node önbelleği)/home/ali dizin bloğu → ders (1)…/ders i-node + dizin bloğu → notlar (2, 3)notlar.txt i-node (4)

(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

Çoktan seçmeli

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?

  1. Derleyicinin değişkenlere mutlak bellek adresleri yazması
  2. Statik kütüphanenin bağlayıcı tarafından yürütülebilir dosyaya kopyalanması
  3. Yükleyicinin program yüklenirken adresleri yeniden konumlandırması
  4. 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

Çoktan seçmeli

İnsanın kullandığı harici ad ile sistemin içinde kullanılan dahili ad eşleştirmelerinden hangisi yanlıştır?

  1. /home/ali/rapor.txt → (dizinler) → i-node numarası
  2. www.giresun.edu.tr → (DNS) → IP adresi
  3. Dosya tanımlayıcısı 3 → (süreç dosya tablosu) → çekirdekteki açık dosya nesnesi
  4. Sanal adres → (sayfa tablosu) → fiziksel çerçeve
  5. 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

Doğru / Yanlış

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?

Çoktan seçmeli

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?

  1. Sorun olmaz; her iş parçacığının kendi yığını vardır.
  2. Paylaşılan statik durum karışır, parçalar yanlış dizgiden gelebilir; durumu çağırana taşıyan strtok_r kullanılmalıdır.
  3. Program derlenmez; derleyici statik değişkene izin vermez.
  4. 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ü

Kod izleme

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;
}
  1. 4; 8 B
  2. 5; 256 B
  3. 6; 256 B
  4. 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

Hesaplama

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. 1.440.000 B ve 480.768 B; ≈ 3 : 1
  2. 1.440.000 B ve 480.000 B; tam 3 : 1
  3. 480.000 B ve 1.440.768 B; ≈ 1 : 3
  4. 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

Çoktan seçmeli

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?

  1. Çünkü bellekte değil diskte tutulur.
  2. Çü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.
  3. Çünkü yalnızca bir kez kullanılabilir.
  4. Çü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

Çoktan seçmeli

Linux futex tabanlı kilit neden “yaygın durumu hızlı, nadir durumu doğru yap” ilkesinin iyi bir örneğidir?

  1. Çünkü her kilit alma işlemi çekirdekte yapılır.
  2. Çü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.
  3. Çünkü kilit hiç atomik işlem kullanmaz.
  4. Çü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ı

Hesaplama

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?

  1. 8 ve 13; ≈ 1,6 kat
  2. 10 ve 28; 2,8 kat
  3. 20 ve 56; 2,8 kat
  4. 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?

Hesaplama

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

Çoktan seçmeli

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?

  1. Bozulmuş bir değişmezi (invariant), hatanın oluştuğu yere yakın bir noktada yakalayıp sorunun izini kısaltması
  2. Listedeki tüm hataları otomatik olarak düzeltmesi
  3. Birim testlerine gerek bırakmaması
  4. 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

Çoktan seçmeli

Ç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?

  1. Hata ayıklayıcı bellek hatalarını otomatik düzeltir.
  2. 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.
  3. Hata derleyicinin sürümünden kaynaklanır.
  4. 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?

Doğru / Yanlış

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

Açık uçlu

İ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

Doğru / Yanlış

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.

Son

Bölüm 15: İşletim Sistemi Tasarımı
Sonraki: Bölüm 16 Çalışma Soruları
1 / 1