Bölüm 15: Linux

Bölüm 15: Linux · Çalışma Soruları
Tarihçe ve kabukÇekirdek ve modüllerSinyallerÇizelgelemeBellekG/Ç ve dosyalarİzinler ve konteynerlerAndroid
Sercan KÜLCÜ

Çoktan Seçmeli · Tarihçe

Soru 1: Linux Nasıl Doğdu?

Linux çekirdeğinin ortaya çıkışı için hangisi doğrudur?

B: Linux UNIX kodu içermez, POSIX arayüzünü yeniden gerçekleştirir. Torvalds 1991’de MINIX üzerinde kendi monolitik çekirdeğini geliştirdi ve GNU’nun derleyici, kabuk ve araçlarıyla birleştirdi; bu yüzden tam sistem için “GNU/Linux” adı da kullanılır.

Çıktı Sorusu · Boru Hatları

Soru 2: Boru Hattının Çıktısı

Komutlar sırayla çalıştırılıyor. İkinci ve üçüncü komutlar ne yazdırır? uniq -c’den önce neden sort gerekir?

$ printf "ag\ndisk\nag\ncpu\ndisk\nag\n" > olay.txt
$ sort olay.txt | uniq -c | sort -rn | head -2
$ uniq -c olay.txt | head -3
Cevabı göster
      3 ag
      2 disk
      1 ag
      1 disk
      1 ag

uniq -c yalnız ardışık aynı satırları sayar. sort aynı satırları yan yana getirir: 3 ag, 1 cpu, 2 disk; sort -rn sayıya göre büyükten küçüğe dizer, head -2 ilk iki satırı alır. Sıralanmamış dosyada her satır ayrı bir grup sayılır. Kabuk ilk hatta 4 süreç ve 3 boru kurar; sort, girdinin sonunu (EOF) görmeden çıktı veremez.

Çoktan Seçmeli · Yönlendirme

Soru 3: Yönlendirmenin Sırası

/yok dizini mevcut değil. Hangi komutta ls’in hata iletisi ekrana yazılır, dosyaya gitmez?

D: yönlendirmeler soldan sağa uygulanır. 2>&1 önce stderr’i stdout’un o anki hedefine (terminal) kopyalar; ardından yalnız stdout dosyaya çevrilir. A’da önce stdout dosyaya gider, sonra stderr ona eşlenir; B ikisini birden, C yalnız stderr’i dosyaya yollar.

Klasik Soru · pipe ve dup2

Soru 4: Boru Uçlarını Kapatmak

Kabuk ls | wc -l satırını pipe, fork, dup2 ve exec ile kurar. Adımları sırayla yazın. Kabuk kendi elindeki yazma ucunu kapatmayı unutursa ne olur?

Cevabı göster
  • pipe(fd): en küçük boş numaralar, okuma ucu 3, yazma ucu 4.
  • 1. çocuk: dup2(4, 1), fazla uçları kapatır, exec("ls"). ls hiçbir şey bilmeden boruya yazar.
  • 2. çocuk: dup2(3, 0), fazla uçları kapatır, exec("wc").
  • Kabuk iki ucu da kapatır ve iki çocuğu wait ile bekler.
  • Yazma ucu herhangi bir süreçte açık kaldıkça wc EOF görmez: ls bitse bile wc sonsuza dek bekler, kabuk da onu.

Çoktan Seçmeli · Yüklenebilir Modüller

Soru 5: Modül Yüklemek

Linux’ta yüklenebilir çekirdek modülleri (.ko) için hangisi doğrudur?

C: modprobe /lib/modules/$(uname -r)/modules.dep’i okur; insmod bunu yapmaz. Modül çekirdek ayrıcalığıyla, çekirdeğin adres alanında çalışır: hatası tüm sistemi çökertebilir. Yüklemek için CAP_SYS_MODULE gerekir; Secure Boot açıkken imza da doğrulanır.

Çoktan Seçmeli · Sinyaller

Soru 6: Yakalanamayan Sinyal

Bir süreç sigaction ile hangi sinyal için işleyici kuramaz ya da onu yok sayamaz?

D: SIGKILL ve SIGSTOP yakalanamaz, engellenemez, yok sayılamaz; yönetici süreci her durumda durdurabilsin diye. kill PID varsayılan olarak SIGTERM (15) gönderir: süreç kaynaklarını temizleyip nazikçe çıkabilir. Önce SIGTERM, gerekirse SIGKILL denenir.

Hesaplama Sorusu · EEVDF

Soru 7: nice ve Sanal Çalışma Süresi

Adil sınıfta ağırlıklar: nice 0 → 1024, nice 5 → 335, nice −5 → 3121. Sanal çalışma süresi artışı Δv = gerçek süre × 1024 / ağırlık. (a) Her görev 6 ms çalışırsa vruntime’ı ne kadar ilerler? (b) Sürekli hazır bir nice 0 ve bir nice 5 görevi tek CPU’yu hangi oranda paylaşır?

Cevabı göster

(a) nice 0: 6 × 1024 / 1024 = 6 ms; nice 5: 6 × 1024 / 335 ≈ 18,34 ms; nice −5: 6 × 1024 / 3121 ≈ 1,97 ms.

(b) Pay ağırlıkla orantılıdır: 1024 / (1024 + 335) ≈ %75,3 ve 335 / 1359 ≈ %24,7.

Düşük ağırlıklı görevin vruntime’ı hızlı ilerlediği için daha seyrek seçilir. EEVDF ayrıca yalnız uygun (v ≤ V) görevler arasından en erken sanal son tarihi seçer.

Hesaplama Sorusu · Sayfa Tablosu Yürüyüşü

Soru 8: Sayfa Tablosu İndisleri

x86-64’te 4 KiB sayfa ve 4 düzeyli sayfa tablosu var; her tablo 512 girdilik. Sanal adres 0x00007F3A5C1E2468 için PGD, PUD, PMD ve PTE indisleri ve sayfa içi ofset nedir? PTE çerçeve numarası 0x1A2B3 ise fiziksel adres ne olur? TLB ıskasında kaç ek bellek okuması gerekir?

Cevabı göster

Ofset 12 bit, her indis 9 bit: 47–39 PGD, 38–30 PUD, 29–21 PMD, 20–12 PTE, 11–0 ofset.

PGDPUDPMDPTEofset
2542332244820x468

Örneğin PGD = adres >> 39 = 0xFE = 254. Fiziksel adres = 0x1A2B3 × 4096 + 0x468 = 0x1A2B3468.

TLB ıskasında 4 tablo okuması gerekir (5 düzeyli sayfalamada 5). Dev sayfalar (2 MiB, 1 GiB) yürüyüşü kısaltır.

Çoktan Seçmeli · Aygıt Dosyaları

Soru 9: Major ve Minor

ls -l /dev çıktısında brw-rw---- 1 root disk 8, 1 sda1 satırı var. Hangisi doğrudur?

B: baştaki b blok aygıtı (rastgele erişim, sayfa önbelleği ve G/Ç çizelgeleyicisi), c karakter aygıtıdır. Boyut sütunu yerine “major, minor” görünür: major sürücüyü, minor o sürücünün yönettiği birimi (burada sda’nın 1. bölümü) seçer. Ağ arayüzleri /dev’de yoktur.

Çoktan Seçmeli · ext4

Soru 10: ext4 Günlük Modu

Bir ext4 bölümü varsayılan data=ordered moduyla bağlı. Bir program dosyanın sonuna yeni bloklar ekliyor, fsync() çağırmadan elektrik kesiliyor. Yeniden bağlamada hangisi garanti edilir?

B: ordered modunda yalnız üst veri günlüğe yazılır, ama veri blokları ilgili işlem commit edilmeden önce asıl yerlerine yazılır. fsync çağrılmadığı için işlem henüz commit edilmemiş olabilir (ext4 varsayılan olarak yaklaşık 5 s’de bir commit eder); o zaman ekleme tümüyle kaybolur, ama dosya hiçbir zaman çöp blok göstermez. Veriyi de günlüğe yazan data=journal modudur (A); sıra garantisinin olmadığı mod data=writeback’tir (D); bağlamada günlük yeniden oynatıldığı için tam fsck gerekmez (C).

Çıktı Sorusu · Bağlar

Soru 11: Katı ve Sembolik Bağ

Komutlar boş bir dizinde sırayla çalıştırılıyor. Her komut ne yazdırır?

$ echo veri > a.txt
$ ln a.txt b.txt          # katı bağ
$ ln -s a.txt c.txt       # sembolik bağ
$ stat -c %h a.txt        # bağ sayısı
$ rm a.txt
$ cat c.txt
$ echo yeni > a.txt
$ cat b.txt; cat c.txt
$ stat -c %h b.txt
Cevabı göster
2
cat: c.txt: No such file or directory
veri
yeni
1
  • Katı bağ aynı i-node’a ikinci addır: bağ sayısı 2. rm yalnız adı siler, sayaç 1’e iner, veri kalır.
  • Sembolik bağ hedefin yolunu tutar: a.txt silinince bağ sarkar.
  • Yeni a.txt yeni bir i-node’dur: c.txt yol üzerinden ona ulaşır (“yeni”), b.txt eski i-node’u göstermeye devam eder (“veri”).

Hesaplama Sorusu · İzin Hesapları

Soru 12: umask ve chmod

umask 033 iken (a) touch not.txt ile oluşan dosyanın, (b) mkdir arsiv ile oluşan dizinin izni nedir? (c) “666 − 033 = 633” hesabı neden yanlıştır? (d) İzni 640 olan bir dosyaya chmod u+x,g+w,o+r uygulanırsa?

Cevabı göster

Yeni dosya 666, yeni dizin 777 ister; umask’taki bitler silinir: istenen & ~umask.

(a) 666 & ~033 = 644 → rw-r--r--. (b) 777 & ~033 = 744 → rwxr--r--: grup ve diğerleri dizini listeleyebilir ama içine giremez.

(c) umask bit temizler, çıkarma yapmaz. 033’ün x bitleri dosyada zaten yoktur; çıkarma 633’ü (rw--wx-wx) verir ve yanlış bitleri açar.

(d) Sembolik mod mevcut bitlere ekler: rw- + x = rwx (7), r-- + w = rw- (6), --- + r = r-- (4) → 764, rwxrw-r--.

Çoktan Seçmeli · Erişim Denetimi

Soru 13: İzin Denetiminin Sırası

proje.txt’nin izni ----rwxr-- (0074), sahibi ali, grubu dev; ali de dev grubunun üyesi. ali, veli (dev üyesi) ve ayse (başka grup) dosyayı okumaya çalışıyor. Kimler okuyabilir?

A: çekirdek ilk eşleşen sınıfa bakar. euid sahibe eşitse yalnız sahip bitleri (---) kullanılır, grup üyeliğine hiç bakılmaz: ali okuyamaz. veli grup bitlerini (rwx), ayse diğer bitlerini (r--) alır; ikisi de okur. Sahip izni chmod ile kendine geri verebilir.

Çoktan Seçmeli · Konteynerler

Soru 14: Ad Alanı mı, cgroup mu?

Bir konteynerin (a) yalnız kendi süreçlerini görmesini ve içeride PID 1 olmasını, (b) en çok 512 MB bellek kullanmasını hangi Linux özellikleri sağlar?

B: ad alanları ne görüleceğini (PID, bağlama, ağ, ana makine adı, kullanıcı eşlemesi), cgroups ne kadar kullanılacağını (cpu.max, memory.max, pids.max) belirler. seccomp sistem çağrılarını, SELinux/AppArmor erişimi kısıtlar. İçerideki PID 1 konakta sıradan bir PID’dir.

Çoktan Seçmeli · Android

Soru 15: Android Korumalı Alanı

Android’de bir uygulamanın verisini diğer uygulamalardan ayıran temel mekanizma hangisidir?

C: zygote fork eder, çocuk uygulamanın benzersiz uid’ine, SELinux bağlamına ve seccomp filtresine geçer; dosya izinleri bu uid’e göre denetlenir. Binder, arayanın uid’ini hizmete iletir ki hizmet izni denetleyebilsin. Android’de glibc yoktur, C kütüphanesi Bionic’tir.

Son

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