You are on page 1of 36

BTP201 İşletim Sistemleri

İş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.

You might also like