Professional Documents
Culture Documents
İşletim Sistemlerinde
İş Parçacıklarının Yönetimi
(Thread Management)
BTP201 İşletim Sistemleri
●
Güncel yazılımlar çalıştırıldığında birden çok iş parçacığı olarak çalışır.
– Bir yazılım çok sayıda iş parçacığı olarak işlenir.
– Uygulama şekli ise;
○
Yazılımın sunacağı işlevler ayrı iş parçacıkları olarak
programlanabilir
●
Yazım denetimi
●
Ağ erişimi
●
Görüntüleme
BTP201 İşletim Sistemleri
●
Güncel yazılımlar çalıştırıldığında birden çok iş parçacığı olarak çalışır.
– Bir yazılım çok sayıda iş parçacığı olarak işlenir.
– Neden tercih edilir?
○
Süreç yaratımı “ağır” iken, iş parçacıklarının yaratılması “hafif” olur.
○
Yazılımın kodu basitleşirken verimlilik artar. (Derleyici ve kütüphane)
○
Kernel genel olarak çok sayıda iş parçacığını destekler.
BTP201 İşletim Sistemleri
●
Tek bir iş parçacığına sahip olan ●
Çok sayıda iş parçacığına sahip
süreçte hepsi tek iş parçacığıdır. olan süreçte ise her iş
parçacığının kendisine ait;
– Program
– Veri
– Program
– Dosyalar
– Veri
– Dosyalar
– Yazmaç
– Yazmaç
– Yığıt
– Yığıt
– Süreç kontrol yapısı (PCB)
– Süreç kontrol yapısı (PCB)
bulunur.
BTP201 İşletim Sistemleri
●
Çoklu iş parçacığı mimarisinde;
– İstemci ve sunucu mimarisi olarak tasarlanmıştır.
– İstemci istekte bulunur.
– Sunucu dinlemektedir ve yanıt verir.
○
Yeni bir iş parçacığı yaratılır ve atanır.
– Sunucu dinlemeye devam eder.
BTP201 İşletim Sistemleri
●
Çoklu iş parçacığı mimarisinin yararları;
– Tepki verebilirlik: Eğer iş parçacıklarından birisinin işlenmesi bir
nedenle kesintiye uğrar ise, diğerleri işlemeye devam eder. Grafik
arayüzler için bu önemlidir.
– Kaynak paylaşımı: İş parçacıkları sürece atanmış olan sistem
kaynaklarını paylaşarak kullanırlar. Süreçler arası iletişim
mekanizmaları kullanmaktan daha kolay işler.
BTP201 İşletim Sistemleri
●
Çoklu iş parçacığı mimarisinin yararları;
– Ekonomiklik: Bir sürecin yaratılmasının maliyeti büyük iken bir iş
parçacığının yaratılmasının maliyeti daha düşüktür. (thread
switching/context switching)
– Ölçeklenebilirlik: Bir süreç çok çekirdekli işlemci mimarisinin sunduğu
yararları kullanır.
BTP201 İşletim Sistemleri
●
Multicore Programming – Çoklu Çekirdek Programlama
– Multicore/multiprocessor donanım programcı üzerindeki yükü
arttırmaktadır.
○
Program bu donanımı destekleyecek şekilde tasarlanmalıdır.
○
İşlemciler/çekirdekler arasındaki yükün dengelenmesi gereklidir.
○
Veri paylaştırılmalıdır.
○
Verinin kendi içindeki bağımlılığı sorun yaratır.
○
Programı denemek ve hata ayıklamak daha da zor olur.
BTP201 İşletim Sistemleri
●
Multicore Programming – Çoklu Çekirdek Programlama
– Paralel işleme: Aynı anda farklı bileşenlerde farklı süreçler çalışır.
(Parallelism)
– Eş zamanlılık: Bir çekirdek/işlemci üzerinde birden çok görev zaman
paylaşımlı çalışır. (Concurrency)
BTP201 İşletim Sistemleri
●
Multicore Programming – Çoklu Çekirdek Programlama
●
Concurrent Execution
– Her bir süreç kaynakları belirli bir süre kullanabilir.
– Süreçler zaman paylaşımlı işlenir.
●
Parallel Execution
– Her bir işlemci/çekirdek süreçleri aralarında paylaşır.
– Her bir işlemci/çekirdek kendisine atan belirli süreçleri zaman paylaşımlı
olarak işler.
BTP201 İşletim Sistemleri
●
Multicore Programming – Çoklu Çekirdek Programlama
●
Parallel Execution
– Verinin paralel işlenmesi (Data Parallelism)
○
Aynı veriye ait alt kümeler farklı işlemciler/çekirdeklerde aynı
program tarafından işlenir
– Görevlerin paralel işlenmesi (Task Parallelism)
○
İş parçaları farklı işlemciler/çekirdeklerde ayrı olarak işlenir.
BTP201 İşletim Sistemleri
●
Multicore Programming – Çoklu Çekirdek Programlama
– Ne kadar verimlidir?
– Yanıt: Amdahl Yasası
BTP201 İşletim Sistemleri
●
Multicore Programming – Çoklu Çekirdek Programlama
– Amdahl Yasası
○
Bir uygulamanın seri ve paralel olarak işlenebilecek olan kesimleri
varsa, eklenecek olan her yeni işlemci/çekirdek belirli bir performans
kazancı sağlar.
○
N: işlemci/çekirdek sayısı
○
S: Uygulamanın seri/sıralı olarak çalışan kısmının büyüklüğü
○
Seri çalışan kısım büyüdükçe yarar azalır!
1
hız≤
1−S
S+
N
BTP201 İşletim Sistemleri
●
İş parçacıkları: Kullanıcı ve Sistem (User & Kernel)
– Kullanıcı süreçlerine ait iş parçacıkları uygulama yazılımları için
hazırlanmış kütüphaneler tarafından yönetilir.
○
POSIX Pthreads
○
Windows Threads
○
Java Threads
– Sistem yani Kernel ait iş parçacıkları ise kernel tarafından yönetilir.
○
Windows, Linux, Mac OS, IOS, Android vs.
BTP201 İşletim Sistemleri
●
Çoklu İş Parçacıkları Uygulama Modelleri
– Bire – çok (one to multi)
– Bire – bir (one to one)
– Çok – çok (multi to multi)
BTP201 İşletim Sistemleri
●
Çoklu İş Parçacıkları Uygulama Modelleri
– Bire – çok
○
Birden çok sayıdaki uygulama yazılımına ait iş parçacığı olmasına
karşılık kernel tarafında çalışan tekil iş parçacığı yaratılır.
○
Tek bir iş parçacığı tümünü engelleyebilir.
○
Çok sayıdaki iş parçacığı olmasına karşılık kernel tarafında sadece
tek bir tane vardır.
○
Az sayıdaki işletim sistemi bunu uygular.
●
Solaris Green Threads
●
Gnu Portable Threads
BTP201 İşletim Sistemleri
●
Çoklu İş Parçacıkları Uygulama Modelleri
– Bire – bir
○
Birden çok sayıdaki uygulama yazılımına ait iş parçacığına karşılık
gelen ve kernel tarafında çalışan çok sayıdaki iş parçacığı yaratılır.
○
Uygulama yazılımlarının yarattığı her yeni iş parçacığına karşılık
kernel için yeni bir iş parçacığı yaratılır.
○
İş yükü fazla olduğu için sınırlandırılır.
○
Eş zamanlılık (concurrency) daha fazladır.
○
Uygulayan işletim sistemleri
●
Linux ve Windows
BTP201 İşletim Sistemleri
●
Çoklu İş Parçacıkları Uygulama Modelleri
– Çok – Çok
○
Birden çok sayıdaki uygulama yazılımına ait iş parçacığına karşılık
kernel tarafında çalışan çok sayıdaki iş parçacığı eşleştirilir.
○
İşletim sistemi yeterli sayıda iş parçacığı yaratacaktır.
○
Windows’taki uygulaması ThreadFiber Package
○
Yaygın değildir.
BTP201 İşletim Sistemleri
●
İş Parçacığı Kütüphaneleri – Thread Libraries
– Kütüphanenin amacı programcıya iş parçacıklarını yaratabilecek ve
yönetebilecek bir API sunar.
– İki şekilde uygulanabilir:
○
Kullanıcı tarafında çalışan bir kütüphane uygulaması
○
İşletim sistemi/kernel tarafından desteklenen kütüphane
BTP201 İşletim Sistemleri
●
İş Parçacığı Kütüphaneleri – Pthreads
– POSIX 1003.1c standardı.
○
İş parçacığı yaratımı ve yönetimi için API tanımı
○
API sadece iş parçacığı kütüphanesinin işleyişini tanımlar
○
Kullanıcı veya işletim sistemi tarafında uygulanabilir.
○
Yaygın olarak UNIX ve türevlerinde kullanılır.
●
İş Parçacığı Kütüphaneleri – Windows Threads
●
İş Parçacığı Kütüphaneleri – Java Threads
BTP201 İşletim Sistemleri
●
İş parçacıklarının açık olarak yaratılması (kütüphane/API)
●
İş parçacıklarının örtük yaratılması
– Derleyici veya çalışma zamanı kitaplıkları tarafından yaratılır.
– Yazılımların artan karmaşıklığı ve doğruluğunun kontrol edilmesindeki
zorluklar nedeni yaygınlık kazandı.
●
Beş farklı şekilde uygulanabiliyor.
– Thread pools, Fork-Join, OpenMP, Grand Central Dispatch, Intel
Threading Building Block
BTP201 İşletim Sistemleri
●
Thread Pools
– Bir havuzda çok sayıda iş parçacığı yaratılır ve gerek oldukça atamaları
yapılır.
●
Yararları:
– Bir isteğe var olan bir iş parçacığı ile yanıt vermek, yenisini yaratmaktan
daha çabuktur.
– Havuzun kapasitesi ile iş parçacığı sayısının sınırlanmasını sağlar.
– Bir görevin yaratılması ile görevin yapacağı işin ayrılmasın sağlar.
○
Örneğin iş parçacıkları zamanlanarak çalıştırılabilir.
BTP201 İşletim Sistemleri
●
Thread Pools
– Windows API
– Java Thread Pools
BTP201 İşletim Sistemleri
●
Fork-Join
– FORK() ile görev çoğaltılır ve sonra JOIN() ile birleştirilir.
– İş küçük ise doğrudan işlenir.
– Büyük ise,
○
Küçük alt işlemlere bölünür.
○
Her bir alt işlem işlenir.
○
Her bir alt işleme ait olan sonuçlar birleştirilir sonuç elde edilir.
– JAVA ile uygulanabilir.
BTP201 İşletim Sistemleri
●
OpenMP
– Derleyici yönergeleri ve API oluşur.
– C/C++ ve FORTRAN destekler.
– Bellek paylaşımlı olarak çalışan uygulamalar için idealdir.
– Paralel bölgeler – parallel regions tanımlanır.
– Paralel olarak iş parçacıkları işlenir.
– #pragma omp parallel çekirdek sayısı kadar paralel işlenecek iş
parçacığı yaratır.
BTP201 İşletim Sistemleri
●
Grand Central Dispatch
– Apple tarafından MacOS ve iOS için geliştirilmiştir.
– C/C++, Objective C programlama dilleri için ek API ve çalışma zamanı
kütüphaneleri geliştirilmiştir.
– Paralel bölümler tanımlanır.
– İş parçacıkları ile ilgili ayrıntıların büyük bir bölümünü üstlenir.
– ^{ ...... } bir blok tanımlar.
– Bloklar kuyruğa alınır ve havuzdaki boş iş parçacıklarından birisine
atandığında kuyruktan çıkarılır.
BTP201 İşletim Sistemleri
●
Grand Central Dispatch
– Kuyruklar iki adettir:
○
Asıl kuyruk – main queue (FIFO)
○
Eş zamanlı kuyruk – concurrent queue (FIFO)
– SWIFT programlama dilinde blok gibi tanımlanır (^{....}) ama (^)
bulunmaz.
– Atama fonksiyonu ile kuyruğa atama yapılır.
BTP201 İşletim Sistemleri
●
Intel Thrading Building Blocks
– C++ programlama dili için bir şablon kütüphanesi olarak geliştirilmiştir.
– C++ programlarının paralel çalışmasını sağlar.
– parallel_for (..........);
BTP201 İşletim Sistemleri
●
İş Parçacıkları İle İlgili Sorunlar
– fork() ve exec() sistem çağrılarının anlamsal özellikleri farklılık gösterir.
– Sinyaller
○
Eş zamanlı ve eş zamansız
– İş parçacığının sonlandırılması
○
Eş zamansız veya gecikmeli
– İş parçacığının depolama gereksinimleri
– Zamanlayıcılar
BTP201 İşletim Sistemleri
●
İş Parçacıkları İle İlgili Sorunlar: fork() ve exec()
– fork() anlamsal olarak değişkendir.
○
Bir süreç aynen kopyalanır
○
Bir süreç içinde sadece iş parçacıkları kopyalanır.
○
Bazı UNIX sistemlerde her ikisi de bulunur.
– exec() aynı şekilde işler.
○
Eskilerini kaldırıp yerine yenilerini koyar.
BTP201 İşletim Sistemleri
●
İş Parçacıkları İle İlgili Sorunlar: Sinyaller
– UNIX sistemlerde sinyaller belirli bir olayın gerçekleştiği belirtir.
– Sinyaller, bir izleyici tarafından izlenir.(signal handler)
○
Belirli bir olay gerçekleşir.
○
Sinyal bilgisi sürece iletilir.
○
Sinyale bilgisi iki sekilde işlenir:
●
Kernel ait olan sinyal izleyiciler
●
Uygulamaya ait sinyal izleyiciler
○
Öntanımlı sinyal izleyicisi kernel aittir.
BTP201 İşletim Sistemleri
●
İş Parçacıkları İle İlgili Sorunlar: Sinyaller
– UNIX sistemlerde sinyaller belirli bir olayın gerçekleştiği belirtir.
– Tek bir iş parçacığına sahip olan süreçte sinyal doğrudan sürece iletilir.
– Çok sayıda iş parçacığının olduğu bir süreçte ise; (!?)
○
Uygun iş parçacığına sinyal bilgisi iletilebilir.
○
Tüm iş parçacıklarına sinyal bilgisi iletilebilir.
○
Sürece ait iş parçacıklarından bazılarına iletilebilir.
○
Tüm sinyaller sadece tek bir iş parçacığı tarafından alınabilir.
BTP201 İşletim Sistemleri
●
İş Parçacıklarının Sonlandırılması
– Bir iş parçacığının sonlandırılması isteniyorsa bu hedef iş parçacığı
olarak tanımlanır. (target thread)
– Bir iş parçacığı iki şekilde sonlandırılabilir:
○
Eş zamansız sonlandırma: Sinyal alındığında beklenmeden
sonlandırılır.
○
Gecikmeli sonlandırma: Düzenli aralıklar ile sonlandırılmasının
gerekip gerekmediği kontrol edilir.
– Örnek pthread kütüphanesi eşzamansız olarak sonlandırır.
BTP201 İşletim Sistemleri
●
İş Parçacıklarının Sonlandırılması
– Eğer bir iş parçacığı sonlandırma eylemi doğrudan iş parçacığının
durumuna bağlıdır.
– Bir iş parçacığı sonlandırma işlemlerini engellemiş ise, sonlandırma
isteği engelleme kalkana kadar bekler.
– Öntanımlı uygulama gecikmeli modeldir.
○
İş parçacığı sonlandırma noktasına gelince sonlandırılır.
– Linux üzerinde sinyaller ile iş parçacıkları sonlandırılır.
– JAVA ile interrupt() metodu kullanılarak gerçekleşir.
BTP201 İşletim Sistemleri
●
İş Parçacıklarının Depolama Gereksinimi
– Thread Local Storage
– Her bir iş parçacığının kendisine özel veriye sahip olmasını sağlar.
– Özellikle havuzdan parçacık alınıyorsa bu durumda iş parçacığı
üzerinde tam bir kontrol sağlanamamaktadır. Bu durumlarda yararlıdır.
– Yerel değil genel değişken mantığı ile işler.
– Statik veri gibi düşünülebilir.
BTP201 İşletim Sistemleri
●
Zamanlayıcılar
– Bir uygulamanın gereksinim duyduğu iş parçacıklarının yaratılması ve
yönetimi için bir iletişim yöntemine gereksinim var. (Çok – çok , çift
katmanlı model)
– Lightweight Process – LWP
– Bir tür sanal işlemci gibi görev yapan, aracı bir veri yapısıdır.
– Kernel thread ile user thread arasındaki ilişkiyi kurmaktadır.
– Kaç adet LWP?
– LWP ile kernel arasındaki iletişim upcall ve upcall handler ile sağlanır.