Bölüm 3: Süreçler
Giriş
Nasıl çalışalım?
33 soru · Çoktan seçmeli: 19 · Açık uçlu: 5 · Doğru / Yanlış: 2 · Hesaplama: 3 · Kod izleme: 4. Sorular konu başlıklarına göre gruplanmış ve kolaydan zora sıralanmıştır.
Soru 1 · Süreç Kavramı
Süreç ile Program İlişkisi
Çoktan seçmeli Aşağıdakilerden hangisi süreç ile program arasındaki ilişkiyi doğru anlatır?
- Bir program aynı anda yalnızca tek bir süreç olarak çalışabilir
- Süreç diskte saklanan yürütülebilir dosyanın adıdır
- Program diskteki pasif komut dizisidir; süreç onun yürütülmekte olan, kendi durumu ve kaynakları olan örneğidir
- Süreç ve program aynı kavramın iki adıdır
Cevabı göster
Doğru cevap: C · Program diskteki pasif komut dizisidir; süreç onun yürütülmekte olan, kendi durumu ve kaynakları olan örneğidir
Aynı programdan birden çok süreç oluşabilir (iki ayrı tarayıcı penceresi, iki bash); her birinin kendi program sayacı, yığını, verisi ve PCB’si vardır.
Soru 2 · Süreç Kavramı
Değişkenler Nereye Yerleşir?
Çoktan seçmeli Bir fonksiyonun içinde static int sayac; (ilk değersiz), int *p = malloc(100); ile ayrılan 100 bayt ve yerel int i; tanımlı. Bu üçü sürecin adres uzayında sırasıyla nerede tutulur?
- Veri bölümü (BSS) · öbek · yığın
- Yığın · öbek · veri bölümü
- Öbek · yığın · metin (kod) bölümü
- Veri bölümü · yığın · öbek
Cevabı göster
Doğru cevap: A · Veri bölümü (BSS) · öbek · yığın
static yerel değişkenler program boyunca yaşar: ilk değersizse BSS’de, değerliyse veri bölümündedir. malloc ile ayrılan alan öbektedir; p göstericisinin kendisi ise yığındadır. Yerel i fonksiyonun yığın çerçevesindedir.
Soru 3 · Süreç Kavramı
Tek Çekirdekte Aynı Anda?
Açık uçlu Tek çekirdekli eski bir dizüstünde müzik çalarken tarayıcıda gezinebiliyor ve bir dosya indirebiliyorsunuz. Tek CPU varken bu programların aynı anda çalışıyor gibi görünmesi nasıl sağlanır? Gerekli donanım ve İS mekanizmalarını adlandırın.
Cevabı göster
- Zaman paylaşımı (sözde paralellik): İS her sürece milisaniyeler mertebesinde kısa bir zaman dilimi verir; değişim insanın algılayamayacağı kadar sık olur.
- Zamanlayıcı kesmesi: dilim dolunca denetimi çekirdeğe geri verir.
- Çizelgeleyici: hazır süreçlerden sıradakini seçer.
- Bağlam değiştirme: çalışan sürecin yazmaçlarını PCB’sine kaydeder, seçilenin bağlamını yükler.
- G/Ç bekleyen süreç (indirme, disk) bloke olur; CPU o sırada diğerlerine verilir.
Herhangi bir anda yalnızca bir süreç çalışır: bu eşzamanlılıktır, paralellik değildir.
Soru 4 · Süreç Kavramı
İş (Job) ile Süreç
Açık uçlu Toplu iş sistemlerinden kalan iş (job) terimi ile süreç arasındaki fark nedir? Bir derleme işinin birden fazla süreç içerebileceğini örnekleyin.
Cevabı göster
- İş: kullanıcının sisteme verdiği, baştan sona yapılacak iş birimidir (ör. “projeyi derle ve testleri çalıştır”). Toplu iş sistemlerinde işler kuyruğa alınıp sırayla yürütülürdü; kabukta
jobsile görülen iş, bir boru hattı da olabilir. - Süreç: İS’nin yönettiği, kendi adres uzayı, PCB’si ve CPU durumu olan yürütme birimidir.
- Örnek:
make -j4tek bir iştir; amamake, dört paralelgcc, hergcciçincc1,as,ldgibi birçok süreç oluşturur.
Soru 5 · Durumlar ve PCB
Ağdan Veri Beklerken
Çoktan seçmeli Bir sunucu süreci recv() çağırdı ama ağdan henüz veri gelmedi. Süreç hangi duruma geçer?
- Hazır
- Çalışıyor
- Sonlandı
- Bekliyor (bloke)
- Yeni
Cevabı göster
Doğru cevap: D · Bekliyor (bloke)
Süreç bir olay (veri gelmesi) beklemektedir; CPU’yu bırakır ve aygıtın bekleme kuyruğuna girer. Veri gelince ağ kartının kesmesi onu hazır duruma taşır; doğrudan çalışıyor durumuna geçmez.
Soru 6 · Durumlar ve PCB
Zaman Dilimi Dolan Süreç
Çoktan seçmeli Çalışmakta olan bir sürecin zaman dilimi doldu ve çizelgeleyici CPU’yu başka bir sürece verdi. İlk süreç hangi duruma geçer?
- Bekliyor (bloke)
- Hazır
- Sonlandı
- Yeni
Cevabı göster
Doğru cevap: B · Hazır
Süreç hiçbir şey beklemiyor; yalnızca sırası geçti. Bu yüzden hazır kuyruğunun sonuna eklenir. Bekliyor durumu yalnızca G/Ç ya da başka bir olay beklenirken kullanılır; iki durumu karıştırmak çok yaygın bir hatadır.
Soru 7 · Durumlar ve PCB
Hangisi Durum Değil?
Çoktan seçmeli Beş durumlu süreç modelinde aşağıdakilerden hangisi bir süreç durumu değildir?
- Yeni
- Derleniyor
- Bekliyor
- Hazır
- Sonlandı
Cevabı göster
Doğru cevap: B · Derleniyor
Derleme, bir programın süreç olmadan önceki geliştirme aşamasıdır. Modelin durumları yeni, hazır, çalışıyor, bekliyor ve sonlandı’dır. (Yedi durumlu modelde bunlara diske takas edilmiş “askıya alınmış hazır/bekliyor” durumları eklenir.)
Soru 8 · Durumlar ve PCB
Hangi Geçiş Olmaz?
Çoktan seçmeli Beş durumlu modelde aşağıdaki geçişlerden hangisi doğrudan gerçekleşmez?
- Hazır → Çalışıyor
- Çalışıyor → Bekliyor
- Çalışıyor → Hazır
- Bekliyor → Çalışıyor
- Bekliyor → Hazır
Cevabı göster
Doğru cevap: D · Bekliyor → Çalışıyor
Beklenen olay gerçekleşince süreç önce hazır kuyruğuna döner; CPU’yu ancak çizelgeleyici seçince alır. Bekliyor → Çalışıyor diye bir ok yoktur.
Soru 9 · Durumlar ve PCB
Bir Sürecin Yaşamını İzleyin
Hesaplama Tek CPU’lu bir sistemde P süreci için olaylar sırasıyla şöyle: (1) İS süreci kabul eder, (2) çizelgeleyici P’yi seçer, (3) P diskten okuma ister, (4) disk okumayı bitirir, (5) P yeniden seçilir, (6) P’nin zaman dilimi dolar, (7) P seçilir, (8) P exit() çağırır. Her olaydan sonra P hangi durumdadır? P hazır kuyruğuna kaç kez girer?
Cevabı göster
(1) hazır → (2) çalışıyor → (3) bekliyor → (4) hazır → (5) çalışıyor → (6) hazır → (7) çalışıyor → (8) sonlandı.
Hazır kuyruğuna 3 kez girer (1, 4 ve 6. olaylar). Dikkat: 4. olayda süreç çalışmaya değil hazıra geçer; 6. olayda bekliyor’a değil hazıra.
Soru 9 · Adım Adım Çözüm
Soru 9: Adım Adım Çözüm
Süreç oluşturuluyor: PCB ayrıldı, bellek hazırlanıyor.
1) İS süreci kabul etti → hazır (1. kez kuyrukta).
2) Çizelgeleyici seçti → çalışıyor.
3) Diskten okuma istedi → bekliyor.
4) Disk kesmesi: okuma bitti → hazır (2. kez).
5) Yeniden seçildi → çalışıyor.
6) Zaman dilimi doldu → hazır (3. kez).
7) Seçildi → çalışıyor.
8) exit() çağırdı → sonlandı. Hazır kuyruğuna toplam 3 kez girdi.
Soru 10 · Durumlar ve PCB
PCB Neden Var?
Çoktan seçmeli İşletim sisteminin her süreç için bir süreç denetim bloğu (PCB) tutmasının temel nedeni nedir?
- Sürecin durumunu ve yönetim bilgisini tutarak, CPU’dan alınan sürecin daha sonra kaldığı yerden sürdürülebilmesini sağlamak
- Sürecin yürütülebilir kodunu diskte saklamak
- Süreçlerin birbirine ileti göndermesini sağlamak
- Sürecin kaynak kodunu derlemek
Cevabı göster
Doğru cevap: A · Sürecin durumunu ve yönetim bilgisini tutarak, CPU’dan alınan sürecin daha sonra kaldığı yerden sürdürülebilmesini sağlamak
PCB, çekirdeğin süreç hakkında bildiği her şeyin (kimlik, durum, yazmaçlar, bellek, dosyalar, çizelgeleme bilgisi) toplandığı veri yapısıdır. Bağlam değiştirmede yazmaçlar buraya kaydedilir ve buradan yüklenir; kod ise adres uzayında durur.
Soru 11 · Durumlar ve PCB
PCB’de Ne Tutulmaz?
Çoktan seçmeli Aşağıdakilerden hangisi bir sürecin PCB’sinde tutulmaz?
- Program sayacı ve diğer yazmaçların kayıtlı değerleri
- Açık dosya tanımlayıcıları tablosu
- Programın C kaynak kodu
- Sayfa tablosunun adresi gibi bellek yönetimi bilgisi
- Çizelgeleme önceliği
Cevabı göster
Doğru cevap: C · Programın C kaynak kodu
Kaynak kod derlenip yürütülebilir dosyaya dönüştükten sonra süreçle ilgisi kalmaz. Bellek yönetimi bilgisi (taban/sınır ya da sayfa tablosu göstericisi) ise PCB’nin standart bir parçasıdır.
Soru 12 · Durumlar ve PCB
PCB Alanlarını Gruplayın
Açık uçlu Bir PCB’de bulunan bilgileri beş gruba ayırın ve her gruptan bir örnek alan verin. Linux’ta PCB’ye karşılık gelen yapının adı nedir?
Cevabı göster
- Kimlik: PID, ebeveyn PID’i, kullanıcı/grup kimliği.
- CPU durumu: program sayacı, yığın göstericisi, genel yazmaçlar, durum yazmacı.
- Çizelgeleme: süreç durumu, öncelik, kuyruk göstericileri, kullanılan CPU zamanı.
- Bellek yönetimi: sayfa tablosu göstericisi ya da taban/sınır değerleri, bölüm sınırları.
- G/Ç ve dosyalar: açık dosya tablosu, çalışma dizini, bekleyen sinyaller.
Linux’ta PCB task_struct yapısıdır; iş parçacıkları da birer task_struct ile temsil edilir.
Soru 13 · Süreç Oluşturma
fork() Ne Döndürür?
Çoktan seçmeli fork() başarılı olduğunda ebeveyn ve çocuk süreçte dönüş değerleri nedir?
- Ebeveynde çocuğun PID’i, çocukta 0
- Her ikisinde de çocuğun PID’i
- Ebeveynde 0, çocukta ebeveynin PID’i
- Ebeveynde 1, çocukta −1
Cevabı göster
Doğru cevap: A · Ebeveynde çocuğun PID’i, çocukta 0
Bir çağrı, iki dönüş: çocuk kendi PID’ini getpid(), ebeveyninkini getppid() ile öğrenebilir; ebeveynin ise çocuğun PID’ini başka yoldan öğrenme imkânı yoktur. −1 yalnızca ebeveynde ve çocuk oluşturulamadığında döner.
Soru 14 · Süreç Oluşturma
Kaç Tane A?
Kod izleme Tüm fork() çağrılarının başarılı olduğunu varsayın. Ekrana kaç kez A yazılır? Toplam kaç süreç oluşur?
int main(void) { fork(); if (fork() == 0) fork(); printf("A\n"); return 0; }
Cevabı göster
6 kez A, toplam 6 süreç (ebeveyn dahil).
- 1.
fork: 1 → 2 süreç. - 2.
fork: her ikisi çatallanır → 4 süreç; yalnızca yeni doğan 2 çocukta dönüş 0’dır. - Bu 2 çocuk 3.
fork’u yapar → 6 süreç. Hepsiprintf’e ulaşır.
Koşul olmasaydı 2³ = 8 olurdu; koşul, son çatallanmayı yarıya indirir.
Soru 14 · Adım Adım Çözüm
Soru 14: Adım Adım Çözüm
int main(void) { fork(); if (fork() == 0) fork(); printf("A\n"); return 0; }
Başlangıçta tek süreç: P0.
1. fork: P0, P1’i doğurur. İkisi de sonraki satırdan devam eder.
2. fork: P0 → P2, P1 → P4. P0 ve P1’de dönüş ≠ 0, koşul yanlış; P2 ve P4’te 0.
Yalnızca P2 ve P4 içerideki fork’u çalıştırır: P2 → P3, P4 → P5.
Altı sürecin hepsi printf’i çalıştırır: 6 satır A (sıra belirsiz).
Soru 15 · Süreç Oluşturma
Döngü İçinde fork()
Kod izleme Çıktı terminale gidiyor. Program hangi satırları kaç kez yazar? Program bitene kadar toplam kaç süreç oluşur?
int main(void) { for (int i = 0; i < 2; i++) { if (fork() == 0) printf("i=%d\n", i); } return 0; }
Cevabı göster
i=0 (1 kez) i=1 (2 kez)
Toplam 4 süreç, 3 satır. i = 0’da doğan çocuk C1 i=0 yazar ama döngüden çıkmaz: i = 1’de o da çatallanır. i = 1’de P0’ın çocuğu C2 ve C1’in çocuğu C3 i=1 yazar.
Tuzak: çıktı bir dosyaya ya da boruya yönlendirilirse stdio tamponu satır sonunda boşaltılmaz; C1’in tamponundaki i=0 C3’e de kopyalanır ve iki kez görünebilir.
Soru 16 · Süreç Oluşturma
Global ve Öbek Değişkenleri
Kod izleme Çocuk, global g’yi ve öbekteki *h’yi değiştiriyor. Ebeveyn ne yazdırır?
int g = 1; int main(void) { int *h = malloc(sizeof(int)); *h = 10; pid_t p = fork(); if (p == 0) { g = 2; *h = 20; return 0; } waitpid(p, NULL, 0); printf("g=%d *h=%d\n", g, *h); return 0; }
Cevabı göster
g=1 *h=10
fork sonrası çocuğun adres uzayı ebeveyninkinin kopyasıdır: veri, öbek ve yığın dahil. h iki süreçte aynı sanal adresi gösterir ama bu adresler farklı fiziksel sayfalara eşlenir (yazınca kopyala, COW).
Süreçler değişkenlerini paylaşmaz; paylaşmak için açıkça IPC (paylaşımlı bellek, boru) gerekir.
Soru 16 · Adım Adım Çözüm
Soru 16: Adım Adım Çözüm
int g = 1; int main(void) { int *h = malloc(sizeof(int)); *h = 10; pid_t p = fork(); if (p == 0) { g = 2; *h = 20; return 0; } waitpid(p, NULL, 0); printf("g=%d *h=%d\n", g, *h); return 0; }
Ebeveyn öbekte bir tamsayı ayırır, 10 yazar.
fork: çocuk, ebeveynin bellek görüntüsünün kopyasını alır.
Ebeveyn waitpid ile çocuğu bekler (bekliyor durumu).
Çocuk kendi g kopyasını değiştirir.
Aynı sanal adres, ama çocuğun fiziksel sayfası: ebeveyn etkilenmez.
Çocuk bitti, ebeveyn uyandı: kendi değerlerini yazar.
Soru 17 · Süreç Oluşturma
execv() Başarılı Olunca
Çoktan seçmeli Bir süreç execv("/bin/ls", args) çağırdı ve çağrı başarılı oldu. Hangisi doğrudur?
- Yeni bir süreç oluşur ve yeni bir PID alır
- Aynı süreç (aynı PID) yeni programın kodu ve verisiyle baştan başlar; çağrı geri dönmez
execvebeveyne 0, çocuğa PID döndürür- Açık dosya tanımlayıcılarının tümü her zaman kapatılır
Cevabı göster
Doğru cevap: B · Aynı süreç (aynı PID) yeni programın kodu ve verisiyle baştan başlar; çağrı geri dönmez
exec süreç oluşturmaz, var olan sürecin adres uzayını değiştirir. PID, ebeveyn ilişkisi ve (close-on-exec işaretlenmemiş) açık dosya tanımlayıcıları korunur; kabuk yönlendirmesi tam da buna dayanır.
Soru 18 · Süreç Oluşturma
Kabuk Yönlendirmeyi Nasıl Yapar?
Açık uçlu Kabuk sort < veri.txt > sonuc.txt komutunu çalıştırıyor. Hangi süreç hangi sistem çağrılarını hangi sırayla yapar? fork ile exec’in ayrı çağrılar olması burada neden işe yarar?
Cevabı göster
- Kabuk
fork()yapar. - Çocuk
open("veri.txt", O_RDONLY)→dup2(fd, 0);open("sonuc.txt", O_WRONLY|O_CREAT|O_TRUNC)→dup2(fd, 1); fazla tanımlayıcılarıcloseeder. - Çocuk
execvp("sort", …):sort0 ve 1’i miras alır, yönlendirmeden habersizdir. - Ebeveyn kabuk
waitpid()ile bekler.
İki çağrı arasındaki aralık, çocuğun yeni programı başlatmadan önce kendi ortamını (dosyalar, dizin, sinyaller) düzenleyebilmesini sağlar.
Soru 19 · Süreç Sonlandırma
wait() Çağırmayan Ebeveyn
Çoktan seçmeli Bir çocuk süreç exit(3) ile bitti; ebeveyni ise hiç wait() çağırmadan çalışmayı sürdürüyor. Çocuk şimdi hangi durumdadır?
- Zombi
- Yetim (orphan)
- Hazır
- Bekliyor
Cevabı göster
Doğru cevap: A · Zombi
Çocuğun belleği serbest bırakılmıştır ama süreç tablosundaki girdisi (PID, çıkış kodu 3) ebeveyn okuyana kadar durur: zombi. Çok sayıda zombi PID’leri tüketebilir; çözüm ebeveynin wait çağırması ya da SIGCHLD’i ele almasıdır.
Soru 20 · Süreç Sonlandırma
Ebeveyni Önce Biten Çocuk
Doğru / Yanlış Ebeveyni çocuğundan önce sonlanan süreçlerle ilgili ifadeleri değerlendirin.
- Ebeveyn sonlanınca çocukları da otomatik olarak sonlandırılır.
- Çekirdek yetimleri belirli aralıklarla tarayıp bulur ve init’e verir.
- Yetim bir süreç bittiğinde uzun süre zombi kalmaz.
Cevabı göster
- Yanlış. UNIX’te çocuk çalışmayı sürdürür ve yetim olur. (Terminal kapanınca gönderilen SIGHUP gibi özel durumlar ayrıdır.)
- Yanlış. Bağlama ebeveyn sonlandığı anda yapılır: çocuğun ebeveyni init (PID 1) ya da Linux’ta tanımlıysa bir alt toplayıcı (subreaper) olur.
- Doğru. Yeni ebeveyni init, biten çocuklarını
waitile toplar; zombi girdisi kısa sürede temizlenir.
Soru 21 · Süreç Sonlandırma
kill -9 Neden Yakalanamaz?
Çoktan seçmeli kill -9 1234 komutu PID’i 1234 olan sürece ne gönderir ve bu neden sürecin kendi işleyicisiyle engellenemez?
SIGTERM; süreç temizlik yapıp kendi isteğiyle çıkarSIGINT; yalnızca terminaldeki ön plan sürecini etkilerSIGKILL; çekirdek süreci doğrudan sonlandırır, bu sinyal yakalanamaz ve yok sayılamazSIGSTOP; süreç sonlanmaz, yalnızca durdurulur
Cevabı göster
Doğru cevap: C · SIGKILL; çekirdek süreci doğrudan sonlandırır, bu sinyal yakalanamaz ve yok sayılamaz
Yönetici, kontrolden çıkmış bir süreci her zaman durdurabilmelidir; bu yüzden SIGKILL ve SIGSTOP için işleyici kurulamaz. Önce SIGTERM (varsayılan kill) denemek iyi uygulamadır, çünkü sürece temizlik şansı verir.
Soru 22 · Bağlam Değiştirme
Bağlam Değiştirmede Ne Olur?
Çoktan seçmeli Bağlam değiştirme (context switch) sırasında çekirdek aşağıdakilerden hangisini yapar?
- Tüm süreçlerin önceliklerini sıfırlar
- Çalışan sürecin bütün belleğini diske yazar
- Çalışan sürecin kaynak kodunu yeniden derler
- Çalışan sürecin program sayacını ve yazmaçlarını PCB’sine kaydeder, seçilen sürecinkileri PCB’sinden yükler
Cevabı göster
Doğru cevap: D · Çalışan sürecin program sayacını ve yazmaçlarını PCB’sine kaydeder, seçilen sürecinkileri PCB’sinden yükler
Ayrıca sayfa tablosu yazmacı yeni sürecinkine çevrilir (TLB gerekirse temizlenir) ve süreç durumları güncellenir. Kaydetme olmasa süreç kaldığı komuttan devam edemezdi.
Soru 23 · Bağlam Değiştirme
Bağlam Değiştirme Çok Sıklaşırsa
Çoktan seçmeli Bir sistemde saniyedeki bağlam değiştirme sayısı aşırı artarsa ne beklenir?
- CPU zamanının artan bir kısmı faydalı iş yerine geçişlere gider; önbellek ve TLB sürekli soğur
- Süreçler daha az bellek kullanmaya başlar
- CPU kullanımı ve iş verimi kendiliğinden artar
- Sistem kilitlenme riskinden tamamen kurtulur
Cevabı göster
Doğru cevap: A · CPU zamanının artan bir kısmı faydalı iş yerine geçişlere gider; önbellek ve TLB sürekli soğur
Bağlam değiştirme saf ek yüktür: o sırada hiçbir süreç ilerlemez. Doğrudan maliyet mikrosaniyeler mertebesindedir; asıl dolaylı maliyet, yeni sürecin verisinin önbellekte ve TLB’de olmamasıdır.
Soru 24 · Bağlam Değiştirme
Bağlam Değiştirme Yükü
Hesaplama Bir bağlam değiştirme 50 µs sürüyor. Zaman dilimi 4 ms iken ve 0,5 ms’ye düşürüldüğünde CPU zamanının yüzde kaçı geçişlere gider? (Her dilimin sonunda bir geçiş olduğunu ve süreçlerin dilimi tam kullandığını varsayın.)
Cevabı göster
Bir döngü = dilim + geçiş. Oran = geçiş / (dilim + geçiş).
- 4 ms: 0,05 / 4,05 ≈ %1,23
- 0,5 ms: 0,05 / 0,55 ≈ %9,09
Dilim küçüldükçe yanıt süresi iyileşir ama ek yük hızla artar; dilim, geçiş süresinin çok üstünde seçilmelidir.
Soru 25 · Bağlam Değiştirme
Kaç Süreç Gerekir?
Hesaplama Süreçler zamanlarının %60’ını G/Ç bekleyerek geçiriyor (p = 0,6) ve birbirinden bağımsız. CPU kullanımı = 1 − pⁿ modeline göre bellekte 1, 3 ve 5 süreç varken CPU kullanımı nedir? Kullanımın %95’i aşması için en az kaç süreç gerekir?
Cevabı göster
- n = 1: 1 − 0,6 = %40
- n = 3: 1 − 0,216 = %78,4
- n = 5: 1 − 0,0778 = %92,2
%95 için 0,6ⁿ < 0,05 olmalı: 0,6⁵ ≈ 0,078 yetmez, 0,6⁶ ≈ 0,047 yeter → n = 6 (%95,3). Her ek süreç daha az kazandırır.
Soru 25 · Adım Adım Çözüm
Soru 25: Adım Adım Çözüm
1. Tüm n süreç aynı anda G/Ç bekliyorsa CPU boştadır; bunun olasılığı pⁿ. Kullanım = 1 − pⁿ.
2. 0,6¹ = 0,6 → %40; 0,6³ = 0,216 → %78,4; 0,6⁵ = 0,07776 → %92,2.
3. %95 koşulu: 1 − 0,6ⁿ > 0,95 ⇔ 0,6ⁿ < 0,05 ⇔ n > ln 0,05 / ln 0,6 ≈ 5,86.
4. En küçük tamsayı n = 6: 0,6⁶ = 0,046656 → kullanım %95,3.
Not: Model kabadır; gerçekte süreçler bağımsız değildir ve bellek sınırı vardır.
Soru 26 · Bağlam Değiştirme
İşbirliği Yapmayan Süreç
Çoktan seçmeli Sistem çağrısı yapmadan sonsuz döngüde dönen bir süreçten CPU’yu geri alabilmek için İS asıl olarak neye güvenir?
- Sürecin ara sıra
yieldçağıracağına - Açılışta kurulan, periyodik kesme üreten donanım zamanlayıcısına
- Maskelenemez kesmeye (NMI)
- Sürece
killsinyali göndermeye
Cevabı göster
Doğru cevap: B · Açılışta kurulan, periyodik kesme üreten donanım zamanlayıcısına
Sınırlı doğrudan yürütmede süreç CPU’da doğrudan çalışır; zamanlayıcı kesmesi denetimi düzenli olarak çekirdeğe döndürür. yield işbirliği gerektirir; NMI donanım hataları içindir; sinyal göndermek için İS’nin zaten çalışıyor olması gerekir.
Soru 27 · Bağlam Değiştirme
Bu Süreç Hangi Tür?
Çoktan seçmeli Bir metin düzenleyici zamanının çoğunu tuş beklemekle geçiriyor; her tuşta yalnızca birkaç mikrosaniye CPU kullanıyor. Bu süreç için hangisi doğrudur?
- CPU’ya bağlıdır; uzun CPU patlamaları vardır
- Hiç bağlam değiştirmeye uğramaz
- G/Ç’ye bağlıdır; kısa CPU patlamaları ve sık bekleme vardır
- Hazır kuyruğunda en uzun süre kalan süreçtir
Cevabı göster
Doğru cevap: C · G/Ç’ye bağlıdır; kısa CPU patlamaları ve sık bekleme vardır
G/Ç’ye bağlı süreçler kısa çalışıp bloke olur; çizelgeleyici onlara hızlı CPU verirse etkileşim akıcı olur. CPU’ya bağlı süreçler (derleme, video kodlama) ise uzun patlamalarla çalışır.
Soru 28 · Süreçler Arası İletişim
Hangisi IPC Mekanizması Değil?
Çoktan seçmeli Aşağıdakilerden hangisi süreçler arasında veri aktarmak için kullanılan bir IPC mekanizması değildir?
- Adlandırılmış boru (FIFO)
- İleti kuyruğu
- Soket
- Bağlam değiştirme
- Paylaşımlı bellek
Cevabı göster
Doğru cevap: D · Bağlam değiştirme
Bağlam değiştirme, çekirdeğin CPU’yu bir süreçten diğerine vermesidir; süreçler arasında veri taşımaz. Diğerleri paylaşımlı bellek ya da ileti geçirme ailesinden IPC yöntemleridir.
Soru 29 · Süreçler Arası İletişim
Büyük Görüntüleri Aktarmak
Çoktan seçmeli Bir kamera süreci saniyede 60 büyük görüntüyü bir işleme sürecine aktarıyor. Kopyalama maliyeti en düşük yöntem hangisidir ve bunun bedeli nedir?
- Boru; bedeli yoktur
- Paylaşımlı bellek; ortak bölgeye erişimi eşzamanlamak (kilit, semafor) programcının sorumluluğundadır
- İleti kuyruğu; çekirdek veriyi bir kez kopyalar
- Dosyaya yazıp okumak; disk hızlı olduğu için ek yük yoktur
Cevabı göster
Doğru cevap: B · Paylaşımlı bellek; ortak bölgeye erişimi eşzamanlamak (kilit, semafor) programcının sorumluluğundadır
Paylaşımlı bellek kurulduktan sonra veri çekirdekten geçmez; iki süreç aynı fiziksel sayfaları görür. İleti geçirme ve borularda her ileti çekirdeğe kopyalanıp oradan alınır; buna karşılık eşzamanlama çekirdek tarafından sağlanır.
Soru 30 · Süreçler Arası İletişim
Paylaşımlı Bellek mi, İleti Geçirme mi?
Açık uçlu Paylaşımlı bellek ile ileti geçirmeyi hız, eşzamanlama, kullanım kolaylığı ve dağıtık sistemlere uygunluk açısından karşılaştırın.
Cevabı göster
| Paylaşımlı bellek | İleti geçirme | |
|---|---|---|
| Hız | Kurulumdan sonra çekirdeğe girilmez, en hızlısı | Her ileti için sistem çağrısı ve kopyalama |
| Eşzamanlama | Programcı sağlar (yarış koşulu riski) | Çekirdek sağlar (send/receive) |
| Kolaylık | Büyük ve karmaşık veri yapıları için uygun | Küçük iletiler için basit, çakışma yok |
| Dağıtık sistem | Aynı makine gerektirir | Ağ üzerinden de çalışır (soketler) |
Soru 31 · Süreçler Arası İletişim
Yazma Ucu Kapalı Boş Boru
Çoktan seçmeli Bir borunun tüm yazma uçları kapatılmış ve boruda okunmamış veri kalmamış. Bir süreç bu borunun okuma ucundan read() çağırırsa ne olur?
read()hemen 0 döndürür (dosya sonu)- Süreç sonsuza kadar bloke olur
- Çekirdek süreci
SIGPIPEile sonlandırır read()önceki verinin bir kopyasını yeniden döndürür
Cevabı göster
Doğru cevap: A · read() hemen 0 döndürür (dosya sonu)
Yazma ucu açık ve boru boşsa okuyucu veri gelene kadar bloke olur. Yazacak kimse kalmadığında ise 0 döner. SIGPIPE tersi durumda gelir: okuyucusu kalmamış boruya yazan süreç alır.
Soru 32 · Süreçler Arası İletişim
Boru Üzerinden Veri
Kod izleme Ebeveyn ne yazdırır? Ebeveyn 11. satırdaki close(fd[1])’i unutsaydı ne olurdu?
int main(void) { int fd[2]; char buf[16]; pipe(fd); if (fork() == 0) { close(fd[0]); write(fd[1], "merhaba", 7); close(fd[1]); return 0; } close(fd[1]); int n = read(fd[0], buf, sizeof buf - 1); buf[n] = '\0'; printf("%d: %s\n", n, buf); n = read(fd[0], buf, sizeof buf - 1); printf("%d\n", n); wait(NULL); return 0; }
Cevabı göster
7: merhaba 0
İlk read veri gelene kadar bekler ve 7 bayt alır. Çocuk yazma ucunu kapatıp çıkınca boruya yazabilecek kimse kalmaz; ikinci read 0 (dosya sonu) döndürür.
Ebeveyn kendi yazma ucunu kapatmasaydı, borunun hâlâ bir yazıcısı olurdu: ikinci read sonsuza kadar bloke olurdu.
Soru 32 · Adım Adım Çözüm
Soru 32: Adım Adım Çözüm
int main(void) { int fd[2]; char buf[16]; pipe(fd); if (fork() == 0) { close(fd[0]); write(fd[1], "merhaba", 7); close(fd[1]); return 0; } close(fd[1]); int n = read(fd[0], buf, sizeof buf - 1); buf[n] = '\0'; printf("%d: %s\n", n, buf); n = read(fd[0], buf, sizeof buf - 1); printf("%d\n", n); wait(NULL); return 0; }
pipe: okuma ucu 3, yazma ucu 4 (ilk boş numaralar).
fork sonrası ebeveyn kullanmayacağı yazma ucunu kapatır.
Boru boş: ebeveyn read’de bloke olur.
Çocuk yazma ucuna 7 bayt yazar; ebeveyn uyanır.
read 7 döndürür; buf sonlandırılıp yazdırılır.
Çocuk yazma ucunu kapatır ve çıkar: borunun açık yazma ucu kalmadı.
İkinci read dosya sonu görür: 0.
Soru 33 · Süreçler Arası İletişim
İleti Geçirme ve Soketler
Doğru / Yanlış İfadeleri değerlendirin.
- Engelleyici gönderme ile engelleyici almanın birlikte kullanılmasına randevu (rendezvous) denir.
- Farklı bilgisayarlardaki iki süreç paylaşımlı bellekle doğrudan haberleşebilir.
- Dolaylı iletişimde süreçler iletiyi birbirine değil, bir posta kutusuna (port) gönderir.
Cevabı göster
- Doğru. Gönderici alıcı iletiyi alana, alıcı da ileti gelene kadar bekler; iki süreç bu noktada eşzamanlanır. Engellemeyen (eşzamansız) gönderimde ise ileti bir tampona bırakılır.
- Yanlış. Paylaşımlı bellek aynı makinenin fiziksel belleğini gerektirir; ağ üzerinden haberleşme için soketler (IP adresi + port) kullanılır.
- Doğru. Doğrudan iletişimde alıcı adıyla belirtilir; dolaylıda birden çok süreç aynı posta kutusunu paylaşabilir.
Özet
Özet: Sık Yapılan Hatalar
| Yanlış düşünce | Doğrusu |
|---|---|
| Zaman dilimi dolan süreç “bekliyor” durumuna geçer. | Hiçbir şey beklemiyor: hazır kuyruğuna döner. |
| G/Ç biten süreç hemen çalışmaya başlar. | Önce hazır olur; CPU’yu çizelgeleyici verir. |
| fork sayısı her zaman 2ⁿ’dir. | Koşullar ve döngüler sayıyı değiştirir; süreç ağacını çizin. |
| Çocuğun değiştirdiği global/öbek değişkeni ebeveyni etkiler. | Adres uzayları ayrıdır (COW); paylaşım için IPC gerekir. |
| exec yeni bir süreç oluşturur. | Aynı PID, yeni program; başarılıysa geri dönmez. |
| Yetim süreç zombidir. | Yetim çalışmaya devam eder; zombi ise bitmiş ama toplanmamıştır. |
| Boş boruda read() her zaman bloke olur. | Yazma ucu açıksa bloke olur; tüm yazma uçları kapalıysa 0 döner. |
| Bağlam değiştirme milisaniyeler sürer. | Doğrudan maliyet mikrosaniye mertebesidir; asıl bedel önbellek/TLB soğumasıdır. |