Process, Thread ve İşletim Sistemi
İşletim sisteminin programları nasıl izole edip zamanladığını; process, thread, context switch ve system call kavramlarıyla öğrenin.
Müzik çalarken tarayıcı ve kod editörü aynı anda nasıl çalışır? CPU çekirdeği sınırlı olsa da işletim sistemi işleri çok kısa aralıklarla planlar ve uygulamaları birbirinden izole eder.
Process ve thread
Program diskteki talimatlar bütünüdür. Process, programın çalışan örneği; kodu, sanal adres alanı ve işletim sistemi kaynaklarıyla bir kapsayıcıdır. Thread, process içinde zamanlanan yürütme akışıdır. Aynı process’in thread’leri belleği paylaşır; farklı process’ler varsayılan olarak ayrı adres alanlarına sahiptir.
Paylaşım thread’ler arası iletişimi hızlandırır fakat race condition riskini doğurur. Process izolasyonu daha güçlüdür; iletişim için pipe, socket veya shared memory gibi IPC mekanizmaları gerekir.
Scheduler ne yapar?
Scheduler, hangi thread’in hangi CPU çekirdeğinde ne kadar çalışacağını seçer. Bir iş durdurulup diğerine geçerken register ve yürütme bilgisi saklanır; buna context switch denir. Fazla thread daha fazla hız garantilemez, context switch ve koordinasyon maliyetini artırabilir.
User mode ve kernel mode
Uygulamalar donanıma sınırsız erişmez. İşletim sisteminin kaynakları yöneten çekirdeğine kernel denir. Dosya okuma, ağ paketi gönderme veya yeni process oluşturma gibi ayrıcalıklı işler için uygulama system call (sistem çağrısı) ile kernel’den hizmet ister. Bu sınır hata ve saldırı etkisini azaltır.
read, write, open ve fork Unix dünyasındaki temel sistem çağrılarına örnektir. Yüksek seviyeli diller bunları standart kütüphaneler arkasında sunar. Örneğin fs.readFile en sonunda işletim sistemi dosya hizmetinden yararlanır.
CPU-bound ve I/O-bound
CPU-bound iş zamanının çoğunu hesaplama yaparak geçirir; paralel çekirdek kullanımı faydalı olabilir. I/O-bound iş ise ağ veya disk cevabını bekler. Async I/O, bir iş beklerken thread’i boş yere tutmak yerine başka işin ilerlemesine izin verir; böylece az sayıda thread çok sayıda bekleyen işi yönetebilir. Doğru concurrency modeli yükün türüne bağlıdır.
Alıştırma
Aynı programdan iki örnek çalıştırıp process kimliklerini gözlemleyin. Ardından her örneğin bellek alanının ayrı, dosya gibi kaynakların ise işletim sistemi üzerinden paylaşılabilir olduğunu düşünün.