Professional Documents
Culture Documents
Operating System Concepts – 8th Edition, Silberschatz, Galvin and Gagne ©2009
Bölüm 4: Çoklu İş Parçacığı Programlama
Genel Bakış
Çoklu İş Parçacık Modelleri (Multithreading Models)
İş Parçacığı (Thread) Kütüphaneleri
İş Parçacığı Sorunları
İşletim Sistemi Örnekleri
Windows XP İş Parçacıkları (Thread)
Linux İş Parçacıkları
Operating System Concepts – 8th Edition 4.2 Silberschatz, Galvin and Gagne ©2009
Tek ve Çoklu İş Parçacıklı Süreçler
Operating System Concepts – 8th Edition 4.3 Silberschatz, Galvin and Gagne ©2009
Çok İş Parçacıklı Sunucu Mimarisi
(2) isteği
karşılamak için
(1) istek yeni iş parçacığı
yarat
istemci sunucu İş parçacığı
Operating System Concepts – 8th Edition 4.4 Silberschatz, Galvin and Gagne ©2009
Yararları
Yanıt verme
çoklu iş parçacıkları interaktif bir uygulamanın bir parçası bloklanmışken veya
uzun bir işlem yapıyorken dahi diğer parçalarının çalışmasına izin verir.
Dolayısıyla kullanıcıya daha iyi yanıt verilir
Kaynak Paylaşımı
Süreçler kaynakları mesaj geçişi ve paylaşılan bellek metotları ile paylaşırlar ve
bunlar da programcılar tarafından açıkça yönetilmelidir.
İş parçacıkları (thread) ise ait oldukları sürece ayrılan kaynakları paylaşırlar. Bu
da bir uygulamanın aynı adres alanında farklı işparçacıklarına sahip olabilmesine
olanak sağlar.
Ekonomi
Süreçlere bellek ve kaynakları paylaştırmak maliyetli bir iştir.
İş parçacıkları ait oldukları sürece ayrılan kaynakları paylaştıkları için iş
parçacıklarının yaratılma ve bağlamlarının değiştirilmesi daha ekonomiktir.
Ölçeklenebilirlik
Çoklu iş parçacıklarının (multithreading) yararları çok işlemcili sistemlerde daha
fazladır, çünkü iş parçacıkları farklı işlemcilerde paralel olarak koşturulabilirler.
Operating System Concepts – 8th Edition 4.5 Silberschatz, Galvin and Gagne ©2009
Çok Çekirdekli Programlama
Çok çekirdekli (Multicore) sistemler programcı üzerinde baskı oluşturur.
Yapılması gereken işler:
Etkinliklerin bölünmesi – Uygulamaların incelenerek bağımsız
çekirdeklerde paralel şekilde koşturulabilmesi için ayrı, koşutzamanlı
görevlere ayrılabilmesi gerekir.
Denge – Görevler paralel koşturulmak için ayrılırken aynı değerde eşit
işlere göre ayrılmalıdırlar.
Veri parçalama (Data splitting) – Uygulamalar ayrı görevlere
bölünürken görevler tarafından erişilecek ve değiştirilecek veri de ayrı
çekirdeklerde çalışacak şekilde bölünmelidir.
Veri bağımlılığı (Data dependency) – Görevler tarafından erişilecek
veri de iki ya da daha fazla görev arasındaki bağımlılıklar açısından
incelenmelidir.
Sınama ve Hata ayıklama - Bir program çoklu çekirdek üzerinde
paralel koşturuluyorsa birçok faklı işleme yolu ortaya çıkar.
Koşutzamanlı programların testi ve hata ayıklaması bu yüzden tek iş
parçacıklı programlara göre daha zordur.
Operating System Concepts – 8th Edition 4.6 Silberschatz, Galvin and Gagne ©2009
Tek-çekirdekli Sistemde Koşutzamanlı İşleme
Tek çekirdek
zaman
Operating System Concepts – 8th Edition 4.7 Silberschatz, Galvin and Gagne ©2009
Çok-çekirdekli Sistemde Paralel İşleme
çekirdek 1
çekirdek 2
zaman
Operating System Concepts – 8th Edition 4.8 Silberschatz, Galvin and Gagne ©2009
Çok İş Parçacıklı Modeller
Kullanıcı İş Parçacıkları
İş Parçacığı yönetimi kullanıcı seviyesi iş parçacığı kütüphaneleri tarafından
gerçekleştirilir
Operating System Concepts – 8th Edition 4.9 Silberschatz, Galvin and Gagne ©2009
Çok İş Parçacıklı Modeller
Operating System Concepts – 8th Edition 4.10 Silberschatz, Galvin and Gagne ©2009
Çok İş Parçacıklı Modeller
Kullanıcı ve Çekirdek İş Parçacıkları arasında bir ilişki olması gereklidir.
Bu ilişki farklı tiplerde olabilir.
Bunlar:
Çokluya-Tek (Many-to-One)
Bire-Bir (One-to-One)
Çokluya-Çoklu (Many-to-Many)
Operating System Concepts – 8th Edition 4.11 Silberschatz, Galvin and Gagne ©2009
Çokluya-Tek (Many-to-One)
Birçok kullanıcı seviyesi iş parçacığı tek bir çekirdek iş parçacığına eşlenir
Örnek:
Solaris Green Threads
GNU Portable Threads
kullanıcı iş parçacığı
çekirdek iş parçacığı
Operating System Concepts – 8th Edition 4.12 Silberschatz, Galvin and Gagne ©2009
Bire-Bir (One-to-One)
Her kullanıcı seviyesi iş parçacığı ayrı bir çekirdek iş parçacığına eşlenir
Örnek
Windows NT/XP/2000
Linux
Solaris 9 ve sonrası
kullanıcı iş parçacığı
çekirdek iş parçacığı
Operating System Concepts – 8th Edition 4.13 Silberschatz, Galvin and Gagne ©2009
Çokluya-Çoklu Model (Many-to-Many)
Birçok kullanıcı seviyesi iş parçacığının birçok çekirdek iş parçacığına
eşlenmesine izin verilir
İşletim sisteminin yeterli sayıda çekirdek iş parçacığı yaratmasına izin
verilir
Örnek:
Solaris'in 9. versiyondan önceki versiyonları
ThreadFiber paketini içeren Windows NT/2000 sürümü
kullanıcı iş parçacığı
kullanıcı iş parçacığı
çekirdek iş parçacığı
Operating System Concepts – 8th Edition 4.15 Silberschatz, Galvin and Gagne ©2009
İş Parçacığı Kütüphaneleri
İş Parçacığı kütüphaneleri (Thread library) iş parçacıklarını yaratmak ve
yönetmek için kullanıcılara bir API sunmaktadır
Uygulama için iki temel yol mevcuttur
Tümüyle kullanıcı alanında bir kütüphane
İşletim Sistemi tarafından desteklenen Çekirdek-seviye kütüphane
Operating System Concepts – 8th Edition 4.16 Silberschatz, Galvin and Gagne ©2009
Pthreads
Kullanıcı veya çekirdek seviyesinde tanımlanabilir
İş Parçacığı yaratma ve senkronizasyonu için bir POSIX standard
(IEEE 1003.1c) API'sidir
API, iş parçacığı kütüphanesinin davranışını tanımlar. Uygulama
kütüphanenin gelişimine bağımlıdır
UNIX işletim sistemlerinde yaygın olarak kullanılır (Solaris, Linux,
Mac OS X)
Operating System Concepts – 8th Edition 4.17 Silberschatz, Galvin and Gagne ©2009
Win32 İş Parçacıkları
Win32 iş parçacığı kütüphanesini kullanarak iş parçacığı yaratma işlemidir.
Pthreads tekniğine birçok yönden benzerdir.
Win32 API'sinde iş parçacıkları CreateThread() fonksiyonu kullanılarak
gerçekleştirilir.
Operating System Concepts – 8th Edition 4.18 Silberschatz, Galvin and Gagne ©2009
Java İş Parçacıkları
Java iş parçacıkları Java Sanal Makinesi (JVM) tarafından yönetilir
Genellikle alttaki işletim siteminin sağladığı iş parçacığı modelleri
kullanılır.
Java iş parçacıkları iki şekilde yaratılırlar:
Thread sınıfını genişleterek (extend)
Runnable arayüzünü (interface) implemente ederek
Operating System Concepts – 8th Edition 4.19 Silberschatz, Galvin and Gagne ©2009
İş Parçacığı Sorunları
Operating System Concepts – 8th Edition 4.20 Silberschatz, Galvin and Gagne ©2009
fork() ve exec()'in Anlamları
fork() yalnızca çağıran iş parçacığını mı yoksa tüm iş parçacıklarını mı
çoğaltır?
Bazı UNIX sistemlerinde her iki tür de kullanılır. Bazıları tüm iş
parçacıklarını çoğaltır, bazıları ise sadece fork() sistem çağrısını
uyandıran iş parçacığını çoğaltır.
Eğer bir iş parçacığı exec() sistem çağrısını uyandırıyorsa exec()'in
parametrelerinde yer alan program tüm süreçlerin (tüm iş parçacıkları) yerini
alır.
Hangi versiyonun kullanılacağı uygulamaya göre değişir.
Eğer exec() çatallanmadan hemen sonra çağrılacaksa o zaman tüm iş
parçacıklarını çoğaltma gerekli değildir, çünkü program exec()’de
belirtilen parametreler tarafından değiştirilir. Bu durumda sadece
çağıran iş parçacığı çoğaltılır.
Ancak çatallanmadan sonra hemen exec() çağrılmıyorsa, tüm süreçler
çoğaltılmalıdır.
Operating System Concepts – 8th Edition 4.21 Silberschatz, Galvin and Gagne ©2009
İş Parçacığı İptal Etme (Thread Cancellation)
Operating System Concepts – 8th Edition 4.22 Silberschatz, Galvin and Gagne ©2009
Sinyal İşleme (Signal Handling)
Operating System Concepts – 8th Edition 4.23 Silberschatz, Galvin and Gagne ©2009
İş Parçacığı Havuzları (Thread Pools)
Bir havuzda, birçok iş parçacığını çalışmayı beklemek üzere
yaratmaktır
Avantajları:
Genellikle mevcut bir iş parçacığında gerçekleşen bir isteğe
hizmet etmek yeni bir iş parçacığı yaratmaktan biraz daha hızlıdır
Uygulamalardaki iş parçacığı sayılarının havuzun boyutu ile
sınırlandırılması
Operating System Concepts – 8th Edition 4.24 Silberschatz, Galvin and Gagne ©2009
İş Parçacığına Özel Veri (Thread Specific Data)
Operating System Concepts – 8th Edition 4.25 Silberschatz, Galvin and Gagne ©2009
Zamanlayıcı Aktivasyonları
(Scheduler Activations)
Operating System Concepts – 8th Edition 4.26 Silberschatz, Galvin and Gagne ©2009
İşletim Sistemi Örnekleri
Windows XP İş Parçacıkları
Linux İş Parçacıkları
Operating System Concepts – 8th Edition 4.27 Silberschatz, Galvin and Gagne ©2009
Windows XP İş Parçacıkları
Operating System Concepts – 8th Edition 4.28 Silberschatz, Galvin and Gagne ©2009
Windows XP İş Parçacıkları
İş parçacığı
başlangıç adresi
Ana süreci
gösteren gösterge
İş planlama
ve
senkronizasyon
bilgisi
Çekirdek yığıtı
(kernel stack)
İş parçacığı
tanımlayıcı
kullanıcı yığıtı
(user stack)
İş parçacığı
Yerel depolama
Operating System Concepts – 8th Edition 4.29 Silberschatz, Galvin and Gagne ©2009
Linux İş Parçacıkları
clone() bir alt görevin ana görev (süreç) ile aynı adres
alanını paylaşmasına izin verir. Bu işlem bir bayrak
seti ile yönetilir.
Operating System Concepts – 8th Edition 4.30 Silberschatz, Galvin and Gagne ©2009
Linux İş Parçacıkları
Operating System Concepts – 8th Edition 4.31 Silberschatz, Galvin and Gagne ©2009
Bölüm 4 Son
Operating System Concepts – 8th Edition, Silberschatz, Galvin and Gagne ©2009