Bölüm 2: İşletim Sistemi Yapıları

İşletim Sistemleri · Çalışma Soruları
Servisler ve KorumaSistem ÇağrılarıÇekirdek YapılarıSanal MakinelerBağlama ve Açılış
Sercan KÜLCÜ · Giresun Üniversitesi · Bilgisayar Mühendisliği

Giriş

Nasıl çalışalım?

1 · Önce çözünHer slaytta bir soru var. Cevabı açmadan önce kâğıda kendi cevabınızı yazın; çoktan seçmelide eleme gerekçenizi de not edin.
2 · Cevabı açın“Cevabı göster” kutusu doğru cevabı ve kısa gerekçeyi verir. Açık uçlu sorularda kendi cevabınızı anahtar kavramlarla karşılaştırın.
3 · Adım adım izleyinHesaplama ve kod sorularının ardından gelen “Adım Adım Çözüm” slaytında › düğmesiyle çözümü satır satır ilerletin.

29 soru · Çoktan seçmeli: 16 · Açık uçlu: 6 · Doğru / Yanlış: 2 · Hesaplama: 2 · Kod izleme: 3. Sorular konu başlıklarına göre gruplanmış ve kolaydan zora sıralanmıştır.

Soru 1 · Servisler ve Koruma

Hangisi İS Hizmeti Değil?

Çoktan seçmeli İşletim sistemleri kullanıcıya ve programlara bir dizi hizmet sunar. Aşağıdakilerden hangisi bu hizmetlerden biri değildir?

  1. Programı belleğe yükleyip çalıştırmak ve sonlandırmak
  2. Dosya oluşturma, okuma, silme işlemleri
  3. Bir elektronik tablodaki formülleri yeniden hesaplamak
  4. Süreçlerin birbiriyle haberleşmesini sağlamak
  5. Donanım ve yazılım hatalarını algılayıp ele almak
Cevabı göster

Doğru cevap: C · Bir elektronik tablodaki formülleri yeniden hesaplamak

Formül hesaplamak, uygulamanın kendi mantığıdır; İS ona yalnızca CPU ve bellek sağlar. Program yürütme, dosya sistemi, iletişim ve hata algılama ise İS’nin standart hizmet gruplarındandır.

Soru 2 · Servisler ve Koruma

Kullanıcı Kipinde Serbest Komut

Çoktan seçmeli Aşağıdaki işlemlerden hangisi ayrıcalıklı olmak zorunda değildir, yani kullanıcı kipindeki bir program tarafından serbestçe yapılabilir?

  1. Sistem saatini okumak
  2. Kesmeleri kapatmak
  3. Donanım zamanlayıcısına yeni bir değer yazmak
  4. Belleğin herhangi bir bölgesini sıfırlamak
  5. İşlemciyi doğrudan çekirdek kipine geçirmek
Cevabı göster

Doğru cevap: A · Sistem saatini okumak

Saati okumak kimseye zarar vermez. Zamanlayıcıyı ayarlayan bir program CPU’yu tekeline alabilir, kesmeleri kapatan İS’yi devre dışı bırakır, belleği temizleyen başka süreçlerin verisini siler; doğrudan çekirdek kipine geçiş de korumayı anlamsızlaştırır. Çekirdeğe yalnızca tuzak (sistem çağrısı) ile denetimli girilir.

Soru 3 · Servisler ve Koruma

İS’yi Koruyan Üç Donanım Desteği

Açık uçlu İS’nin kendini ve süreçleri hatalı programlardan koruyabilmesi için donanımdan beklediği üç desteği yazın ve birlikte nasıl çalıştıklarını açıklayın.

Cevabı göster
  • Çift kip (kip biti) ve ayrıcalıklı komutlar: tehlikeli komutlar yalnızca çekirdek kipinde çalışır; kullanıcı kipinde denenirse tuzak oluşur.
  • Bellek koruması (taban/sınır yazmaçları ya da MMU ve sayfa tabloları): süreç yalnızca kendi adres uzayına erişir; dışına çıkarsa tuzak oluşur.
  • Zamanlayıcı: periyodik kesmeyle denetimi çekirdeğe geri verir; sonsuz döngüdeki süreç CPU’yu tekeline alamaz.

Birlikte: kullanıcı programı ayrıcalıklı komut veya izinsiz bellek erişimiyle sisteme zarar veremez; zamanlayıcı da çekirdeğin her zaman yeniden söz sahibi olmasını sağlar. Zamanlayıcı ve MMU yazmaçlarını değiştirmek de ayrıcalıklıdır.

Soru 4 · Servisler ve Koruma

Sonsuz Döngüdeki Programı Kim Durdurur?

Çoktan seçmeli Bir öğrencinin programı while (1); satırında takıldı ve hiç sistem çağrısı yapmıyor. Tek çekirdekli bir makinede İS’nin buna rağmen başka süreçleri çalıştırabilmesini ne sağlar?

  1. Programın bir süre sonra kendiliğinden CPU’yu bırakması
  2. Kabuğun programa sinyal göndermesi
  3. Derleyicinin sonsuz döngüyü kaldırması
  4. Donanım zamanlayıcısının periyodik kesmesi
Cevabı göster

Doğru cevap: D · Donanım zamanlayıcısının periyodik kesmesi

Zamanlayıcı kesmesi geldiğinde CPU kesme işleyicisine, yani çekirdeğe atlar; çizelgeleyici başka bir süreci seçebilir. İşbirlikçi sistemlerde süreç CPU’yu kendisi bırakmalıdır; kabuğun sinyal gönderebilmesi için de önce CPU’ya sahip olması, yani zamanlayıcının çekirdeği çalıştırması gerekir.

Soru 5 · Servisler ve Koruma

Çekirdek Kipi, root ve Çoklu Görev

Doğru / Yanlış Aşağıdaki ifadeleri değerlendirin.

  1. root kullanıcısı olarak çalışan bir program CPU’nun çekirdek kipinde yürütülür.
  2. İşbirlikçi (cooperative) çoklu görevde, CPU’yu bırakmayan tek bir süreç bütün sistemi kilitleyebilir.
  3. Kesintili (preemptive) çoklu görev, donanım zamanlayıcısı olmadan gerçeklenemez.
Cevabı göster
  1. Yanlış. root, İS’nin tanıdığı bir yazılım yetkisidir; root süreçleri de kullanıcı kipinde çalışır ve çekirdeğe sistem çağrısıyla girer. Çekirdek kipi ise donanımın sağladığı bir CPU durumudur.
  2. Doğru. Bu modelde geçiş, sürecin gönüllü olarak denetimi bırakmasına bağlıdır; eski Windows 3.x ve klasik Mac OS böyleydi.
  3. Doğru. İS’nin süreci zorla kesebilmesi için periyodik olarak denetimi geri alması gerekir; bunu zamanlayıcı kesmesi sağlar.

Soru 6 · Sistem Çağrıları

Uygulama Diske Neden Doğrudan Yazamaz?

Açık uçlu Bir metin düzenleyici kaydettiğiniz dosyayı diske kendisi yazmıyor, bunun için sistem çağrısı kullanıyor. Sistem çağrısının temel amacı nedir? Bu yaklaşımın iki yararını belirtin.

Cevabı göster

Sistem çağrısı, kullanıcı kipindeki bir programın çekirdekten denetimli biçimde hizmet istediği arayüzdür. Program ayrıcalıklı komutları kullanamadığı için donanıma (disk denetleyicisine) doğrudan erişemez; bir tuzak komutuyla çekirdeğe girer, çekirdek işi onun adına yapar.

  • Koruma: çekirdek izinleri (dosyaya yazma hakkı var mı?) ve parametreleri doğrular; hatalı program diski bozamaz.
  • Soyutlama ve taşınabilirlik: uygulama disk türünü bilmez; aynı write() HDD’de, SSD’de, ağ dosya sisteminde çalışır.
  • Ayrıca paylaşım: çekirdek aynı aygıtı kullanan süreçleri sıraya koyar.

Soru 7 · Sistem Çağrıları

strlen() ile write() Farkı

Çoktan seçmeli strlen() ile write() arasındaki temel fark hangisidir?

  1. strlen() çekirdeğe girdiği için write()’tan yavaştır
  2. write() bir tuzak komutuyla çekirdek kipine geçer; strlen() tamamen kullanıcı kipinde çalışan bir kütüphane fonksiyonudur
  3. İkisi de çekirdek kipinde çalışır, yalnızca dönüş türleri farklıdır
  4. write() derleme sırasında programın içine gömülür, çalışırken çekirdeğe gitmez
Cevabı göster

Doğru cevap: B · write() bir tuzak komutuyla çekirdek kipine geçer; strlen() tamamen kullanıcı kipinde çalışan bir kütüphane fonksiyonudur

Sıradan fonksiyon çağrısı aynı adres uzayında bir call/ret’tir. Sistem çağrısı ise kip değişimi, çağrı numarasıyla tablodan işleyici seçimi ve parametre doğrulaması içerir; bu yüzden onlarca, yüzlerce kat pahalıdır.

Soru 8 · Sistem Çağrıları

Sistem Çağrısı ile Fonksiyon Çağrısı

Açık uçlu Sistem çağrısı ile sıradan bir fonksiyon çağrısını dört yönden karşılaştırın: kip, giriş yolu, maliyet, güvenlik.

Cevabı göster
Fonksiyon çağrısıSistem çağrısı
KipKullanıcı kipinde kalırKullanıcı → çekirdek → kullanıcı kipi
Giriş yolucall ile herhangi bir adreseTuzak komutu (syscall); yalnızca çekirdeğin belirlediği giriş noktası
MaliyetBirkaç nsKip geçişi, yazmaç kaydetme, doğrulama: çok daha pahalı
GüvenlikDenetim yokÇekirdek parametreleri ve izinleri doğrular

Programcı için ikisi de fonksiyon gibi görünür, çünkü libc sistem çağrılarını küçük sarmalayıcı fonksiyonlarla sunar.

Soru 9 · Sistem Çağrıları

Hangisi Çekirdeğe Girmez?

Çoktan seçmeli Aşağıdaki işlemlerden hangisi çekirdeğe girmeden, yalnızca kütüphane koduyla tamamlanabilir?

  1. Bir dosyanın adını değiştirmek (rename)
  2. "42" dizgesini tamsayıya çevirmek (atoi)
  3. Bir dosyayı açmak (open)
  4. Yeni bir süreç oluşturmak (fork)
Cevabı göster

Doğru cevap: B · "42" dizgesini tamsayıya çevirmek (atoi)

atoi, sprintf, strlen yalnızca bellekteki veriyle çalışır. Dosya adı değiştirmek ve dosya açmak dosya sistemine, süreç oluşturmak çekirdek yapılarına dokunur; bunlar sistem çağrısı gerektirir. Benzer biçimde bir veriyi şifrelemek de kütüphaneyle yapılabilir; printf ise kütüphane fonksiyonudur ama tamponu boşaltırken write() sistem çağrısını kullanır.

Soru 10 · Sistem Çağrıları

Sistem Çağrılarını Sınıflandırın

Açık uçlu Şu sistem çağrılarını türlerine göre eşleştirin: fork, open, ioctl, pipe, getpid, chmod, waitpid. Türler: süreç denetimi, dosya yönetimi, aygıt yönetimi, bilgi bakımı, iletişim, koruma.

Cevabı göster
  • Süreç denetimi: fork, waitpid
  • Dosya yönetimi: open
  • Aygıt yönetimi: ioctl (aygıta özgü ayar/komut)
  • Bilgi bakımı: getpid (ayrıca time)
  • İletişim: pipe (ayrıca socket, shmget)
  • Koruma: chmod (ayrıca chown, umask)

Bellek ayırma (brk, mmap) da süreç denetimi grubunda sayılır; şifreleme ya da sıralama gibi işlemler bir çağrı türü değildir.

Soru 11 · Sistem Çağrıları

read() Çağrısının Yolu: Sıralama

Açık uçlu Bir program read(fd, buf, 100) çağırıyor. Adımları doğru sıraya koyun: (a) çekirdek, çağrı numarasıyla sistem çağrısı tablosundan işleyiciyi bulur ve parametreleri doğrular; (b) libc sarmalayıcısı çağrı numarasını ve argümanları yazmaçlara koyar; (c) dönüş değeri yazmaca yazılır, CPU kullanıcı kipine döner; (d) uygulama read fonksiyonunu çağırır; (e) syscall komutu tuzak üretir, CPU çekirdek kipine geçer; (f) sys_read veriyi bulur ve kullanıcı tamponuna kopyalar.

Cevabı göster

d → b → e → a → f → c

Veri gerekiyorsa ve henüz önbellekte değilse sys_read disk isteği verir; süreç bloke olur, başka süreç çalışır ve disk kesmesiyle uyandırılır. Dönüş değeri okunan bayt sayısıdır (dosya sonunda 0, hatada −1 ve errno).

Soru 11 · Adım Adım Çözüm

Soru 11: Adım Adım Çözüm

Kullanıcı kipiÇekirdek kipi1 · read(fd, buf, n)2 · libc: no → yazmaç4 · tablo[no] + doğrula5 · sys_read3 · syscall (tuzak)6 · sonuç yazmaçta,kullanıcı kipine dönüş

d, b: Uygulama read’i sıradan bir fonksiyon gibi çağırır; libc çağrı numarasını (x86-64 Linux’ta rax) ve argümanları yazmaçlara yerleştirir.

e: syscall tuzağı: donanım kip bitini çevirir ve çekirdeğin önceden belirlediği giriş noktasına atlar.

a, f: Çekirdek tablodan sys_read’i seçer, fd ve buf adresini doğrular, veriyi kullanıcı tamponuna kopyalar.

c: Sonuç yazmaca konur, kullanıcı kipine dönülür; uygulama bir sonraki satırdan devam eder.

Soru 12 · Sistem Çağrıları

Çok Parametreli Sistem Çağrısı

Çoktan seçmeli Bir sistem çağrısının yazmaçlara sığmayacak kadar çok parametresi var. Parametreleri çekirdeğe iletmenin yaygın yolu hangisidir?

  1. Parametreleri çekirdeğin global değişkenlerine doğrudan yazmak
  2. Parametreleri diske yazıp çekirdeğin oradan okumasını sağlamak
  3. Her parametre için ayrı bir sistem çağrısı yapmak
  4. Parametreleri bellekte bir bloğa (yapıya) yazıp yalnızca bloğun adresini bir yazmaçla geçirmek
Cevabı göster

Doğru cevap: D · Parametreleri bellekte bir bloğa (yapıya) yazıp yalnızca bloğun adresini bir yazmaçla geçirmek

Üç yöntem vardır: yazmaçlar, bellekteki blok + adresi, yığın. Linux ve Solaris az sayıda parametreyi yazmaçla, fazlasını blok adresiyle iletir. Kullanıcı programı çekirdek belleğine yazamaz; çekirdek, verilen adresteki bloğu kendisi doğrulayıp kopyalar.

Soru 13 · Sistem Çağrıları

Dosya Kopyalama Döngüsü

Kod izleme kaynak 10 000 baytlık bir dosyaya, hedef boş bir dosyaya açık dosya tanımlayıcısıdır. Program ne yazdırır? read ve write için toplam kaç sistem çağrısı yapılır?

char buf[4096];
int okuma = 0, yazma = 0;
long toplam = 0;
ssize_t n;
for (;;) {
    n = read(kaynak, buf, sizeof buf);
    okuma++;
    if (n <= 0)
        break;
    write(hedef, buf, n);
    yazma++;
    toplam += n;
}
printf("okuma=%d yazma=%d toplam=%ld\n",
       okuma, yazma, toplam);
Cevabı göster
okuma=4 yazma=3 toplam=10000

read sırasıyla 4096, 4096, 1808 ve 0 döndürür. 0 dosya sonudur; döngü biter ama o çağrı da sayılır.

Toplam 4 + 3 = 7 sistem çağrısı (her biri iki kip geçişi). Son write 4096 değil, n = 1808 bayt yazmalıdır.

Soru 13 · Adım Adım Çözüm

Soru 13: Adım Adım Çözüm

char buf[4096];
int okuma = 0, yazma = 0;
long toplam = 0;
ssize_t n;
for (;;) {
    n = read(kaynak, buf, sizeof buf);
    okuma++;
    if (n <= 0)
        break;
    write(hedef, buf, n);
    yazma++;
    toplam += n;
}
printf("okuma=%d yazma=%d toplam=%ld\n",
       okuma, yazma, toplam);

İlk read: tampon dolar, 4096 bayt.

Okunan kadar yazılır; toplam 4096.

İkinci read: yine 4096 bayt (kalan 5904).

Toplam 8192; dosyada 1808 bayt kaldı.

Üçüncü read yalnızca kalanı döndürür: 1808.

write(hedef, buf, 1808): tamponun yalnızca dolu kısmı yazılır.

Dördüncü read 0 döndürür: dosya sonu.

okuma 4 oldu; n <= 0 → break.

4 read + 3 write = 7 sistem çağrısı.

Soru 14 · Sistem Çağrıları

Tampon Boyutunun Bedeli

Hesaplama Her sistem çağrısının yalnızca kip geçişi ve giriş/çıkış maliyeti 0,2 µs olsun. 1 MiB’lık bir dosya önce 1 baytlık, sonra 4096 baytlık tamponla read döngüsüyle okunuyor (dosya sonunu gösteren son çağrı dahil). Her durumda kaç read yapılır ve bu ek yük ne kadardır?

Cevabı göster

1 MiB = 1 048 576 B.

  • 1 B tampon: 1 048 576 + 1 = 1 048 577 çağrı → × 0,2 µs ≈ 209,7 ms.
  • 4096 B tampon: 1 048 576 / 4096 = 256, + 1 = 257 çağrı → 51,4 µs.

Fark yaklaşık 4 000 kattır. Bu yüzden stdio (fread, getc) kullanıcı alanında tamponlar ve çekirdeğe büyük parçalarla gider.

Soru 15 · Sistem Çağrıları

Hangi Tanımlayıcı Numarası?

Kod izleme Program yeni başlamış, yalnızca 0, 1 ve 2 numaralı dosya tanımlayıcıları açık; tüm dosyalar mevcut. Ekrana ne yazılır?

int a = open("a.txt", O_RDONLY);
int b = open("b.txt", O_RDONLY);
close(a);
int c = open("c.txt", O_RDONLY);
int d = dup(b);
close(0);
int e = open("e.txt", O_RDONLY);
printf("%d %d %d %d %d\n", a, b, c, d, e);
Cevabı göster
3 4 3 5 0
  • Kural: open ve dup en küçük boş numarayı verir.
  • a = 3, b = 4; close(a) 3’ü boşaltır → c = 3.
  • dup(b) 4’ün kopyası → 5. close(0) standart girdiyi kapatır → e = 0.

Bu kural, kabuğun girdi/çıktı yönlendirmesinin temelidir: artık scanf e.txt’den okur.

Soru 16 · Sistem Çağrıları

exec Başarılıysa Geri Döner mi?

Kod izleme Program ne yazdırır? "echo" yerine yanlışlıkla "ecoh" yazılsaydı çıktı ne olurdu?

int main(void) {
    printf("A\n");
    fflush(stdout);
    pid_t p = fork();
    if (p == 0) {
        execlp("echo", "echo", "B", NULL);
        printf("C\n");
        return 1;
    }
    waitpid(p, NULL, 0);
    printf("D\n");
    return 0;
}
Cevabı göster
A
B
D

Başarılı execlp çocuğun bellek görüntüsünü echo programıyla değiştirir ve geri dönmez; printf("C") hiç çalışmaz. Ebeveyn çocuğu bekledikten sonra D’yi yazar.

Program bulunamazsa execlp −1 döndürür, çocuk C’yi yazar: A, C, D. fflush, A’nın tamponda kalıp çocuğa da kopyalanmasını önler.

Soru 17 · Çekirdek Yapıları

Bu Hangi Yapı?

Çoktan seçmeli Bir çekirdekte dosya sistemi, ağ yığını, sürücüler ve çizelgeleyici aynı ayrıcalıklı adres uzayında çalışıyor ve birbirlerini doğrudan fonksiyon çağrısıyla kullanıyor. Bu yapı hangisidir?

  1. Monolitik çekirdek
  2. Mikroçekirdek
  3. Exokernel
  4. İstemci–sunucu modeli
Cevabı göster

Doğru cevap: A · Monolitik çekirdek

Monolitik çekirdekte tüm hizmetler tek bir büyük programdır; bileşenler arası iletişim ucuz bir fonksiyon çağrısıdır. Mikroçekirdekte ve istemci–sunucu modelinde ise hizmetler kullanıcı alanında ayrı sunuculardır ve ileti ile haberleşir.

Soru 18 · Çekirdek Yapıları

Mikroçekirdekte Okuma Neden Yavaş?

Çoktan seçmeli Aynı donanımda bir dosya okuma isteği, mikroçekirdek tabanlı bir İS’de çoğu zaman monolitik bir çekirdeğe göre daha yavaş tamamlanır. Bunun temel nedeni nedir?

  1. Mikroçekirdekte sürücüler derlenmemiş betiklerdir
  2. Mikroçekirdekler önbellek kullanamaz
  3. İstek, kullanıcı alanındaki dosya sunucusuna ileti olarak gider; ek kip geçişleri, bağlam değişimleri ve veri kopyaları gerekir
  4. Mikroçekirdekler sanal belleği desteklemez
Cevabı göster

Doğru cevap: C · İstek, kullanıcı alanındaki dosya sunucusuna ileti olarak gider; ek kip geçişleri, bağlam değişimleri ve veri kopyaları gerekir

Monolitikte tek tuzak + çekirdek içi fonksiyon çağrıları yeter. Mikroçekirdekte uygulama → çekirdek → dosya sunucusu → (sürücü sunucusu) → geri dönüş zincirinde her adım bir IPC iletisidir. L4 gibi tasarımlar bu maliyeti çok azaltmıştır ama sıfırlayamaz.

Soru 19 · Çekirdek Yapıları

Bir Okuma İsteğinin Maliyeti

Hesaplama Bir kip geçişi 0,1 µs, bir bağlam değiştirme 1 µs sürsün. Monolitik çekirdekte okuma isteği tek bir sistem çağrısıdır (girişte ve dönüşte birer kip geçişi). Mikroçekirdekte aynı istek dört iletiyle tamamlanıyor: uygulama → dosya sunucusu → disk sürücüsü → dosya sunucusu → uygulama; her ileti bir sistem çağrısı (iki kip geçişi) ve bir bağlam değiştirme gerektiriyor. Diskin kendisi hariç ek yükleri karşılaştırın.

Cevabı göster

Monolitik: 2 × 0,1 = 0,2 µs.

Mikroçekirdek: ileti başına 2 × 0,1 + 1 = 1,2 µs → 4 × 1,2 = 4,8 µs, yani 24 kat.

Disk erişimi milisaniyeler sürdüğünde bu fark küçük kalır; ancak önbellekten karşılanan sık ve küçük isteklerde belirleyici olur. Mikroçekirdek tasarımları bu yüzden IPC’yi en hızlı yol olarak eniyiler.

Soru 20 · Çekirdek Yapıları

Mikroçekirdeğin Asıl Kazancı

Çoktan seçmeli Aşağıdakilerden hangisi mikroçekirdek yapısının avantajıdır?

  1. Kullanıcı alanında çöken bir sürücü yeniden başlatılabilir; çekirdek ve diğer hizmetler çalışmayı sürdürür
  2. Bileşenler arası iletişim, monolitik çekirdektekinden daha ucuzdur
  3. Bir sistem çağrısı daha az kip geçişiyle tamamlanır
  4. Tüm hizmetler tek bir ikili dosyada olduğundan dağıtım kolaydır
Cevabı göster

Doğru cevap: A · Kullanıcı alanında çöken bir sürücü yeniden başlatılabilir; çekirdek ve diğer hizmetler çalışmayı sürdürür

Ayrıcalıklı kod çok küçüktür (MINIX 3’te birkaç bin satır); hatalar yalıtılır, güvenilirlik ve güvenlik artar, hizmetler bağımsız güncellenebilir. Diğer üç ifade ya monolitik yapıyı anlatır ya da tersi doğrudur.

Soru 21 · Çekirdek Yapıları

Hangi Çekirdeği Önerirsiniz?

Açık uçlu Bir otomobil üreticisi, frenlere yardımcı sürücü destek birimi için çekirdek seçiyor; bir sürücünün hatası tüm sistemi çökertmemeli. Aynı firma veri merkezindeki yüksek trafikli sunucular için de çekirdek arıyor. Monolitik ve mikroçekirdek yapıları başarım ve güvenilirlik/güvenlik açısından karşılaştırarak her biri için öneride bulunun.

Cevabı göster
MonolitikMikroçekirdek
BaşarımYüksek: hizmetler arası doğrudan çağrıDüşük: IPC, kip ve bağlam geçişleri
GüvenilirlikBir sürücü hatası tüm çekirdeği çökertebilirHata ilgili sunucuda kalır, yeniden başlatılabilir
GüvenlikAyrıcalıklı kod büyük, saldırı yüzeyi genişAyrıcalıklı kod küçük, doğrulanabilir (seL4)
BakımBüyük, iç içe geçmiş kodModüler, hizmetler ayrı geliştirilir

Öneri: güvenlik kritik araç birimi için mikroçekirdek (ör. QNX); verim odaklı sunucular için monolitik (Linux). Seçim bir başarım–güvenilirlik ödünleşimidir.

Soru 22 · Çekirdek Yapıları

Yüklenebilir Modül Nerede Çalışır?

Çoktan seçmeli Linux’ta modprobe ile çalışma sırasında yüklenen bir ağ kartı sürücüsü hangi kipte ve hangi adres uzayında çalışır?

  1. Kullanıcı kipinde ayrı bir sunucu süreci olarak
  2. Çekirdek kipinde, çekirdek adres uzayında; çekirdeğin geri kalanıyla doğrudan fonksiyon çağrısıyla konuşur
  3. Hipervizörün içinde, çekirdekten bağımsız olarak
  4. Ağ kartının ürün yazılımında; İS’ye hiç yüklenmez
Cevabı göster

Doğru cevap: B · Çekirdek kipinde, çekirdek adres uzayında; çekirdeğin geri kalanıyla doğrudan fonksiyon çağrısıyla konuşur

Yüklenebilir modüller çekirdeği esnek ve modüler yapar ama mikroçekirdeğe dönüştürmez: modül yüklendikten sonra çekirdeğin bir parçasıdır, aralarında IPC yoktur ve bir modül hatası tüm çekirdeği etkileyebilir. Sürücü çekirdek ikilisine derlenmiş olarak da gelebilir; ikisinde de çekirdek alanındadır.

Soru 23 · Çekirdek Yapıları

Katmanlı Yapının Zayıf Yanı

Çoktan seçmeli Her katmanın yalnızca altındaki katmanın hizmetlerini kullandığı katmanlı İS tasarımının temel dezavantajı hangisidir?

  1. Bir isteğin birçok katmandan geçmesiyle oluşan ek yük ve katmanların sırasını belirlemenin zorluğu
  2. Hata ayıklamanın imkânsız olması
  3. Donanım soyutlamasının hiç yapılamaması
  4. Katmanların aynı anda yalnızca bir süreç çalıştırabilmesi
Cevabı göster

Doğru cevap: A · Bir isteğin birçok katmandan geçmesiyle oluşan ek yük ve katmanların sırasını belirlemenin zorluğu

Katmanlı yapının artısı modülerlik ve katman katman doğrulamadır (THE sistemi). Eksisi, her katman geçişinin maliyeti ve karşılıklı bağımlılığı olan hizmetlerin (ör. bellek yönetimi ile disk sürücüsü) hangi katmana konacağının belirsizliğidir.

Soru 24 · Çekirdek Yapıları

Sistemleri Yapılarıyla Eşleştirin

Çoktan seçmeli Aşağıdaki eşleştirmelerden hangisi doğrudur?

  1. MS-DOS: mikroçekirdek · Linux: exokernel · MINIX 3: monolitik
  2. MS-DOS: hibrit · Linux: mikroçekirdek · MINIX 3: katmanlı
  3. MS-DOS: basit (yapısız) · Linux: modüler monolitik · MINIX 3: mikroçekirdek · Windows NT: hibrit
  4. MS-DOS: katmanlı · Linux: hibrit · MINIX 3: exokernel
Cevabı göster

Doğru cevap: C · MS-DOS: basit (yapısız) · Linux: modüler monolitik · MINIX 3: mikroçekirdek · Windows NT: hibrit

MS-DOS’ta uygulamalar donanıma doğrudan erişebilirdi; koruma yoktu. Linux monolitik ama yüklenebilir modüllüdür. MINIX 3 sürücüleri bile kullanıcı alanında çalıştırır. Windows NT ve macOS (XNU) mikroçekirdek fikirlerini monolitik başarımla birleştiren hibrit çekirdeklerdir.

Soru 25 · Çekirdek Yapıları

Donanım Farklılıklarını Kim Gizler?

Çoktan seçmeli Windows çekirdeğinin aynı kaynak kodu, kesme denetleyicisi ve zamanlayıcısı farklı olan anakartlarda değiştirilmeden çalışabiliyor. Bunu sağlayan katman hangisidir?

  1. Kabuk
  2. Sistem çağrısı tablosu
  3. Önyükleyici
  4. Donanım Soyutlama Katmanı (HAL)
Cevabı göster

Doğru cevap: D · Donanım Soyutlama Katmanı (HAL)

HAL, platforma özgü ayrıntıları (kesme denetleyicisi, zamanlayıcı, çok işlemci ayrıntıları) tekdüze bir arayüzün arkasına saklar; çekirdeğin geri kalanı yalnızca bu arayüzü kullanır ve taşınabilir olur.

Soru 26 · Sanal Makineler

Dizüstündeki Sanal Makine

Çoktan seçmeli Bir öğrenci Windows yüklü dizüstüne VirtualBox kurup içinde Linux çalıştırıyor. Kullandığı hipervizör hangi türdendir ve neden?

  1. Tip 2, çünkü hipervizör ana İS (Windows) üzerinde bir uygulama olarak çalışır
  2. Tip 1, çünkü sanal makine donanımı doğrudan kullanır
  3. Konteyner, çünkü Linux çekirdeği Windows ile paylaşılır
  4. Exokernel, çünkü kaynaklar bölüştürülür
Cevabı göster

Doğru cevap: A · Tip 2, çünkü hipervizör ana İS (Windows) üzerinde bir uygulama olarak çalışır

Tip 1 (VMware ESXi, Xen, Hyper-V) doğrudan donanım üzerinde, İS’nin yerinde çalışır; veri merkezlerinde kullanılır. Tip 2 (VirtualBox, VMware Workstation) bir ana İS üzerinde çalışır; aygıt erişimi ana İS üzerinden yapıldığı için genelde biraz daha yavaştır.

Soru 27 · Sanal Makineler

Konteyner mi, Sanal Makine mi?

Doğru / Yanlış İfadeleri değerlendirin.

  1. Her Docker konteyneri kendi işletim sistemi çekirdeğini çalıştırır.
  2. Bir sanal makine, konuk İS’ye sanal CPU, bellek ve aygıtlar sunar; konuk İS kendi çekirdeğiyle çalışır.
  3. Bir Linux konteyneri, doğrudan Windows çekirdeği üzerinde ek katman olmadan çalışabilir.
Cevabı göster
  1. Yanlış. Konteynerler ana makinenin çekirdeğini paylaşır; yalıtım ad alanları (namespaces) ve cgroups ile sağlanır. Bu yüzden sanal makinelere göre çok daha hızlı başlar ve daha az bellek kullanırlar.
  2. Doğru. Hipervizör donanımı sanallaştırır; konuk İS değiştirilmeden (tam sanallaştırma) çalışabilir.
  3. Yanlış. Konteyner, ana çekirdeğin sistem çağrılarını kullanır; Windows’ta Linux konteynerleri arka planda bir Linux sanal makinesi (WSL 2) içinde çalışır.

Soru 28 · Bağlama ve Açılış

Dinamik Bağlamanın Kazancı

Çoktan seçmeli Aynı makinede çalışan 50 program da C kütüphanesini kullanıyor. Kütüphanenin dinamik (paylaşımlı, .so/.dll) bağlanmasının statik bağlamaya göre kazancı hangisidir?

  1. Programlar başka hiçbir dosyaya gerek duymadan her makinede çalışır
  2. Kütüphane kodu bellekte tek kopya olarak paylaşılır ve kütüphane güncellenince programları yeniden bağlamak gerekmez
  3. Programların ilk açılışı her zaman daha hızlıdır
  4. Programın yürütülebilir dosyası büyür ama daha güvenli olur
Cevabı göster

Doğru cevap: B · Kütüphane kodu bellekte tek kopya olarak paylaşılır ve kütüphane güncellenince programları yeniden bağlamak gerekmez

Statik bağlamada kütüphane kodu her yürütülebilir dosyaya kopyalanır: dosya büyür ama bağımsız çalışır ve yükleme anında çözümleme gerekmez. Dinamik bağlamada bağlama yükleme/çalışma zamanında yapılır; bellek ve disk tasarrufu sağlanır, kütüphane yamaları tüm programlara yansır, ancak doğru sürüm sistemde bulunmalıdır.

Soru 29 · Bağlama ve Açılış

USB Belleği Bağlamak

Çoktan seçmeli Linux’ta mount /dev/sdb1 /mnt/usb komutundan sonra hangisi doğrudur?

  1. USB bellek yeni bir sürücü harfi (E:) alır
  2. USB belleğin içeriği sabit diske kopyalanır
  3. USB bellekteki dosya sistemi, dizin ağacına /mnt/usb noktasından eklenir; dosyalar /mnt/usb/... yoluyla erişilir
  4. /mnt/usb dizininin önceki içeriği kalıcı olarak silinir
Cevabı göster

Doğru cevap: C · USB bellekteki dosya sistemi, dizin ağacına /mnt/usb noktasından eklenir; dosyalar /mnt/usb/... yoluyla erişilir

UNIX’te tek bir dizin ağacı vardır; başka aygıtların dosya sistemleri bu ağaca bağlama noktalarından eklenir. Bağlama noktasının eski içeriği silinmez, yalnızca umount edilene kadar görünmez olur.

Özet

Özet: Sık Yapılan Hatalar

Yanlış düşünceDoğrusu
root olarak çalışan program çekirdek kipindedir.root bir İS yetkisidir; süreç yine kullanıcı kipindedir.
Saati okumak da ayrıcalıklı olmalıdır.Okumak zararsızdır; saati/zamanlayıcıyı ayarlamak ayrıcalıklıdır.
printf, atoi, şifreleme sistem çağrısıdır.Bunlar kütüphane işidir; yalnızca printf sonunda write() çağırır.
Son read() de 4096 bayt döner.read() kalanı döndürür; dosya sonunda 0 döner.
exec başarılıysa sonraki satır da çalışır.Başarılı exec geri dönmez; sonraki satırlar yalnızca hata durumunda çalışır.
Linux modül yükleyebildiği için mikroçekirdektir.Modüller çekirdek alanında çalışır; Linux modüler monolitiktir.
Mikroçekirdekte IPC daha verimlidir.IPC mikroçekirdeğin bedelidir; kazancı yalıtım ve güvenilirliktir.
Konteyner kendi çekirdeğini taşır.Konteynerler ana çekirdeği paylaşır; VM ise kendi çekirdeğini çalıştırır.

Son

Bölüm 2: İşletim Sistemi Yapıları
Sonraki: Bölüm 3 Çalışma Soruları
1 / 1 Sercan KÜLCÜ, Tüm hakları saklıdır.