You are on page 1of 34

Bölüm 4:

Çoklu İş Parçacığı Programlama


(Multithreaded Programming)

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

tek iş parçacıklı süreç çok iş parçacıklı süreç

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ığı

(3) Yeni istemci


istekleri için
dinlemeye devam et

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

 Üç temel iş parçacığı kütüphanesi:


 POSIX Pthreads
 Win32 iş parçacıkları
 Java iş parçacıkları

Operating System Concepts – 8th Edition 4.9 Silberschatz, Galvin and Gagne ©2009
Çok İş Parçacıklı Modeller

Çekirdek İş Parçacıkları (Kernel Threads)


 Çekirdek iş parçacıkları direk olarak işletim sistemi tarafından desteklenir ve
yönetilir.
 Tüm güncel işletim sistemleri, örneğin
 Windows XP/2000
 Solaris
 Linux
 Tru64 UNIX
 Mac OS X
Çekirdek iş parçacıklarını destekler.

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)

 Çift seviyeli model

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ığı

Operating System Concepts – 8th Edition 4.14


çekirdek Silberschatz,
iş parçacığı Galvin and Gagne ©2009
Çift-seviyeli Model
 Kullanıcı iş parçacığının ayrı bir çekirdek iş parçacığına da bağlanmasına
izin vermesi dışında Çokluya-Çoklu Model ile aynıdır
 Örnekler
 IRIX
 HP-UX
 Tru64 UNIX
 Solaris 8 ve öncesi

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ı

 fork() ve exec() sistem çağrılarının anlamları


 Hedef İş parçacığını iptal etme (Thread cancellation)
 Asenkron veya ertelenmiş
 Sinyal (Signal) işleme
 İş Parçacığı Havuzları (Thread pools)
 İş Parçacığına Özel Veri (Thread-specific data)
 Zamanlayıcı aktivasyonu (Scheduler activations)

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)

 Bir iş parçacığının işlenmesi sona ermeden önce sonlandırılması


 İki genel yaklaşım vardır:
 Asenkron iptal etme (Asynchronous cancellation) – bir iş
parçacığı hedef iş parçacığını hemen sona erdirir
 Ertelenmiş iptal etme (Deferred cancellation) - iptal edilip
edilemeyeceğini periyodik olarak kontrol etme şansını hedef iş
parçacığına verir

Operating System Concepts – 8th Edition 4.22 Silberschatz, Galvin and Gagne ©2009
Sinyal İşleme (Signal Handling)

 Sinyaller UNIX sistemlerinde belirli bir olayın gerçekleştiğinin


süreçlere bildirilmesinde kullanılır
 Sinyaller senkron ve asenkron tiplerde olabilir
 Sinyalleri işlemek için sinyal işleyiciler (signal handler) kullanılır
1. Sinyal belirli bir olay tarafından yaratılır
2. Sinyal sürece iletilir
3. Sinyal işlenir
 Çok iş parçacıklı sistemlerde sinyallerin iletilme seçenekleri:
 Sinyalin uygulandığı iş parçacığına sinyali iletmek
 Sinyali süreçteki tüm iş parçacıklarına iletmek
 Sinyali süreçteki belirli iş parçacıklarına iletmek
 Belirli bir iş parçacığını süreçteki tüm sinyalleri almak üzere
görevlendirmek

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)

 Her iş parçacığının kendi veri kopyasına sahip olmasına izin


verilir
 İş parçacığı yaratma süreci üzerinde kontrol olmayan
durumlarda kullanışlıdır (ör., bir iş parçacığı havuzu kullanırken)

Operating System Concepts – 8th Edition 4.25 Silberschatz, Galvin and Gagne ©2009
Zamanlayıcı Aktivasyonları
(Scheduler Activations)

 Hem Çokluya-Çoklu hem de İki-seviyeli modellerde uygulamaya


tahsis edilen çekirdek iş parçacıklarının sayısının korunması için
haberleşmeye ihtiyaç bulunmaktadır
 Zamanlayıcı aktivasyonları (Scheduler activations) upcall adı verilen
bir mekanizma sunar – çekirdekten iş parçacığına doğru bir iletişim
mekanizması
 Bu iletişim, uygulamanın doğru sayıda çekirdek iş parçacığını
kullanmasına olanak sağlar

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ı

 Bire-Bir eşlemeyi kullanır, çekirdek-seviyesidir


 Her iş parçacığı
 Bir iş parçacığı id'si
 Kayıtçı kümesi (Register set)
 Ayrı kullanıcı ve çekirdek yığıtları
 Özel veri depolama alanlarına sahiptir
 Kayıtçı kümesi, yığıtlar ve özel depolama alanı iş parçacığının
bağlamı (context) olarak bilinir
 Bir iş parçacığının temel veri yapıları:
 ETHREAD (executive thread block) (yönetici iş parçacığı bloğu)
 KTHREAD (kernel thread block) (çekirdek iş parçacığı bloğu)
 TEB (thread environment block) (iş parçacığı ortam bloğu)

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

çekirdek alanı kullanıcı alanı

Operating System Concepts – 8th Edition 4.29 Silberschatz, Galvin and Gagne ©2009
Linux İş Parçacıkları

 Linux iş parçacığı (thread) yerine görev (task)


terimlerini kullanır

 İş parçacığı yaratma işlemi clone() sistem çağrısı


aracılığıyla gerçekleştirilir

 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ı

bayrak (flag) anlamı

Dosya sistemi bilgisi paylaşılıyor


Aynı bellek alanı paylaşılıyor
Sinyal işleyiciler paylaşılıyor
Açık dosyalar kümesi paylaşılıyor

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

You might also like