Sunuyu indir
Sunum yükleniyor. Lütfen bekleyiniz
YayınlayanHartono Gunardi Değiştirilmiş 6 yıl önce
1
İşletim Sistemleri (Operating Systems) Hafta_4 İplik-İşlemcik (Thread)
Yrd. Doç. Dr. Hüseyin POLAT
2
İplik-İşlemcik (Thread)
3
Thread (İşlemcik-İplik)
Her process’in kendine özel adres uzayı ve tek akış kontrolü vardır. Process’ler arası paylaşım ve etkileşim çoğu uygulama için çok önemlidir. Process’ler arasındaki paylaşım ve etkileşim arttıkça; paylaşım karmaşıklığı, ölümcül kilitlenmelerin artması, sürekli paylaşılanlara ulaşmak için harcanan zaman kaybı vb. problemler ortaya çıkar. Processler arasındaki paylaşım zorluklarının çözümü için Thread’lar kullanılır. Thread’lar aynı adres uzayında çalışan paralel hafif process’lerdir. Thread’lar aynı process ortamında birden fazla işlem yürütme imkanı sağlarlar.
4
Thread (İşlemcik-İplik)
İcra edilmekte olan bir process’in, aynı kodunu ve aynı adres uzayını kullanarak işlemlerini gerçekleştiren paralel birbirinden bağımsız yapılardır, Thread’ler process’lerin içinde yer alır, process’leri oluştururlar. Bir process birden fazla thread’e sahip olabilir, modern işletim sistemleri çoklu thread yapısını desteklerler.
5
Thread (İşlemcik-İplikler)
Belli bir process’e bağlıdır. Bağlı bulundukları process’in adres uzayını kullanırlar, Thread’ler adres uzayı, bellek, açık dosyalar gibi kaynakları, global değişkenleri ve çocuk process’leri paylaşırlar. Her thread’a özel olan program sayacı, saklayıcılar yığınlar ve durum bilgileri paylaşılmaz. Çoklu thread yapısı, programın bir bölümü bloke olsa yada uzun bir işlem yürütüyor olsa bile çalışmaya olanak sağlar. Çoklu thread çalışmada, thread’lar istenen sıra ile çalıştırılırlar.
6
Thread (İşlemcik-İplikler)
Thread’lar birbirinden bağımsız değillerdir. Çoklu thread yazılım geliştirmede, thread’ların aynı adres uzayına erişmeleri sonucu oluşabilecek kilitlenme problemlerinin sezilmesi ve giderilmesi zorunludur. Thead’lar, işlerin birbirine çok bağlı olduğu birlikte yürütüldüğü ve paylaşıldığı durumlarda; Process’ler işlerin birbirinden büyük oranda bağımsız olduğu durumlarda kullanılır.
7
Thread (İşlemcik) Thread’ler de process’ler gibi bağlam(durum) değiştirebilirler. Hazır, Bekliyor/Bloke, Çalışıyor durumlarda olabilirler. Tüm thread’ların belirli öncelikleri (priority) vardır. İşletim sistemleri, uygulamalar içinde çalışan thread’ları önceliklerine göre sıralayarak çalıştırırlar, ancak bazı yöntemlerle belirli bir dereceye kadar akışları değiştirilerek de kullanılabilirler.
8
Single-thread ve Multi-thread
(a) Tek threadli üç process (b) Üç threadli bir process Her process’in kendi içerisinde çalışan en az bir thread olabildiği gibi birden fazla thread da olabilir.
9
Single-thread ve Multi-thread
Code ve data bölümlerinin paylaşılması bir uygulamanın thread’larının aynı adres uzayında birbirinden farklı işlem yapabilmelerini sağlar. Örneğin üç ayrı işlemi gerçekleştirecek üç ayrı process yerine tek process içinde üç thread ile aynı işlemler gerçekleştirilebilir.
10
Context Switching İşlemci (CPU) anlık olarak tek bir iş ile uğraşabilir. Fakat işletim sistemi tasarımında bulunan bir özellik sayesinde, işlemcide birden fazla işin aynı anda çalışıyormuş gibi hissettirilmesi mümkündür. Aslında anlık olarak tek process çalıştırıp birden fazla iş yapıyormuş gibi gösteren işletim sistemi özelliği kısaca çok görevlilik (multi tasking) olarak adlandırılır. Bu özellik işlemcinin (CPU), process’leri sırayla çalıştırması sayesinde elde edilir. Process’ler arasında işlemcinin geçiş yapmasına da içerik değiştirme (context switching) ismi verilir.
11
Context Switching Çoklu program işleme tekniğinde, CPU’da, "bir process’den diğer "bir process’e geçerken, periyodik olarak context anahtarlama gerçekleşir. Aslında her context anahtarlamanın bilgisayar açısından bir maliyeti vardır. Dolayısıyla context anahtarlama aslında iyi bir özellik olmasına karşılık bir de maliyeti vardır ve oranı yükseldikçe dezavantaj haline gelir.
12
Context Switching CPU,bir process’den diğerine anahtarlandığında data ve durum kaydedicilerinin kaydedilmesi gereklidir. Örneğin 1 birimlik bilginin yüklenmesi için 20 nanosaniyeye(ns) ihtiyaç duyulduğu ve 50 tanede kaydedici olduğu düşünülürse, bu kaydedicilerin kaydedilmesi 1milisaniye(ms) alacaktır. Ayrıca yeni yüklenecek process’in kaydedicileri de 1ms’de CPU’nun kaydedicilerine aktarılacağından bu süreç 2ms sürecektir. Bu süre zarfında işe dönük birçok komut işletilebilecekken, anahtarlamaya geniş bir zaman ayrılması gerekmektedir.
13
Context Switching context switching aşağıdaki 3 durumda oluşabilir:
multitasking yaparken, Kesmeleri (interrups) yakalama esnasında (intel x86 gibi kesme güdümlü mimarilerde), user ve kernel modları arası geçişlerde (işletim sistemine göre, context switching olup olmayacağı değişir).
14
Context Switching Eğer işletim sistemi bir process çalışırken context anahtarlama yapmaya karar verirse, kalınan noktadan itibaren tekrar devam edebilmesi için o anki tüm context'i saklaması ve tekrar yükleyebilmesi gerekir. İşletim sistemi bir process’in o anki halini saklamak için Process Control Block (PCB) yapısını kullanır. Bu yapıya tekrar devam edebilmek için gerekli her şey yazılır. Sıra tekrar aynı process’e gelince de PCB tekrar yüklenir ve kalınan yerden devam edilir.
15
Context Switching Contex anahtarlama sırasında işlemler sürekli olarak ana bellek üzerine yazılır ya da ana bellek üzerinden okunurlar. Bu nedenle ana bellek üzerinde sürekli olarak okunup yazılma işlemi gerçekleştirilir, Bu iki durumda istenmeyen durumlardır. Gerçekleşen bu context anahtarlamadan dolayı belirli bir zaman kaybı olur. İyi bir işletim sisteminde context anahtarlama sayısının düşük olması istenir,
16
Context Switching
17
Thread Modeli: Context Switch
Process’lerin oluşturulması ve bellek tahsisi maliyetli iken; Thread’ların kaynakları paylaşması nedeniyle oluşturulmaları ve içerik değiştirme (contex switching) sırasında yüklenmeleri daha az maliyetli olmaktadır.
18
Thread Modeli: Context Switch
Aynı processe ait threadler arasında Context Switch pahalı değildir. Kod, veri, dosya, sinyaller vs. kaydetme veya geri yükleme şartı yoktur. Thread context anahtarlama şunları yine de gerektirir. Register set switch, PC değişimi, stack değişimi, state Ama bellek yönetimi ile ilgili bir iş yok! Kısmen Verimli Farklı processlere ait threadler arasında Context Switch pahalıdır
19
Thread (İşlemcik) kullanımının avantajları
Thread kullanımı process’lere göre bazı avantajlara sahiptir. Process oluşturmak işletim sistemi için ‘bellek tahsisi, bağlam-durum değiştirme (context switching)’ işlemleri gibi sebeplerden dolayı çok maliyetli bir iştir. Aynı process içindeki thread’ler arasında gerçekleşen context anahtarlama zamanı, process’ler arasında gerçekleşen context anahtarlama zamanından oldukça küçüktür. Aynı zamanda process’ler ana bellek üzerine yazılıp-okunurken thread’ler kaydediciler (register) üzerine yazılıp-okunurlar. Bu sebeple bir programın birden çok işlem yapması gerekiyorsa eğer birden fazla process üretmesi yerine Thread kullanımı işletim sistemi açısından daha avantajlıdır. (Solaris işletim sisteminde, thread oluşturma 30 kat daha hızlıdır ve thread’lerde context switch 5 kat daha hızlıdır.)
20
Thread (İşlemcik) kullanımının avantajları
Thread sistem gereksinimleri process’lere göre daha düşüktür; çünkü kendi işlemci durumu kayıtları olmasına rağmen, sistem kaynakları ve bellek alanlarını oluşturuldukları process’den alırlar. Process’ler arasında haberleşme mesaj iletimi ile sağlanırken, thread’ler aynı adres boşluğunu kullandıkları için aralarında mesajlaşmaya gerek yoktur. Eğer arzu edilirse thread’ler kendi aralarında mesajlaşa bildikleri gibi dışarıdan diğer bir process ile de mesajlaşabilirler.
21
Thread (İşlemcik) kullanımının avantajları
Kullanıcı etkileşimli uygulamalarda, bir kısım bloklanmış, kilitlenmiş veya uzun süren işlem yürütüyorsa, kullanıcı ile etkileşim yapan kısmı çalışmasını sürdürür. Sistemin cevap verebilirlik özelliği artmış olur. Process’ler kaynaklarını shared memory veya message passing teknikleri aracılığıyla paylaşabilirler. Thread’ler ait oldukları process’in sahip olduğu hafıza alanını ve diğer kaynakları paylaşabilirler.
22
Thread (İşlemcik) kullanımının avantajları
Bir process oluştururken hafıza ve kaynak tahsis edilmesi maliyeti yüksek bir iştir. Ne kadar çok proses olursa RAM'de o kadar çok yer işgal edilir. Thread’ler ait oldukları process’in kaynaklarını kullanırlar. Thread’ların oluşturulmaları ve yok edilmeleri process’lere göre daha kolaydır. Çok işlemcili mimarilerde thread’ler farklı işlemci çekirdekleri üzerinde eşzamanlı çalışabilir. Ancak, tek thread yapısına sahip process sadece bir işlemci çekirdeği üzerinde çalışabilir.
23
Thread (İşlemcik) kullanımının dezavantajları
Aksi belirtilmedikçe bir thread, başka bir thread’ın çalışmasına karışamaz, bu yüzden birçok thread’ın aynı anda, aynı verileri kullanma ihtimalleri vardır ki, bazen bu durum tehlikeli sonuçlara neden olabilir. Bu şekilde birçok thread tarafından paylaşılabilen verilere, “kritik bölge verileri” (critical region) adı verilir. Kritik bölgede birden çok thread çalışıyorsa, thread’ların hafızaya ve işleme zarar vermeden çalışabilmeleri için senkronize olmaları şarttır.
24
Thread (İşlemcik) kullanımının dezavantajları
Her thread ortak veri kullandığı için birinin bir veri üzerindeki etkisi diğer threadleri etkiler. Örneğin, bir thread bir dosya ile işlemini bitirdiğinde dosyayı kapatsın. Eğer process’deki başka thread bu dosyayı kullanıyorsa, uygulama çalışmaz ya da sonuçlar yanlış olabilir. Hatalı ve bilinçsizce yazılan kodlar sonucunda deadlock (kilitlenme) meydana gelebilir. Bu durumda, iki ya da daha fazla thread, birbirlerini bekleyerek, sonsuza kadar çalışabilirler.
25
Thread (İşlemcik) kullanımının dezavantajları
Bir Thread oluşturulması için gerekli süre, gerçekleştireceği işlemin süresine göre daha fazla olabildiği gibi işlem bitince thread’ın sonlandırılması da sözkonusudur. Bazı durumlarda gerçekleştirilecek işlemin mevcut bir thread ile yapılması, yeni bir thread oluşturulmasını beklemekten çok daha az maliyetlidir. Her işlem için yeni bir thread oluşturmak sistemde yük oluşturup eşzamanlı çalışmayı engelleyebilir. Çok sayıda thread, sistem kaynaklarının tükenmesine neden olabilir.
26
Multi tasking (Çoklu görev )
Multitasking, işletim sisteminin aynı anda birden fazla program çalıştırabilmesidir, (aslında işlemci çekirdeğinde bir anda sadece tek bir process işlem görür) Birden fazla program mantıksal olarak aynı anda çalışmakta iken fiziksel olarak sıralı olarak çalışmaktadır. Multitasking process’ler üzerinden işler. Process’ler zamanı paylaşır ve bir process’in işinin bittiği yerde diğeri başlar. İşletim sistemi, çalışacak process’leri öncelikle sıraya sokar ve sonra sırası geleni çalıştırır. Bu işlem sonucunda programlar aynı anda çalışıyorlarmış gibi görünür. Multitasking yapılabilmesi için illaki çok işlemci gereksinimi yoktur.
27
Multi threading (Çoklu işlemcik )
Multi threading aynı adres alanında birden çok thread'in aynı anda çalışmasıdır. Process’lerin zaman paylaşımında olduğu gibi thread’lar kendi aralarında bir zaman paylaşımı oluştururlar. Tek işlemcili sistemlerde, bir process’e adanan sürede, process’in sahip olduğu thread’ler zaman paylaşımlı olarak çalışırlar dolayısıyla gerçek paralel çalışma (parallel execution) sağlanamaz. Tek işlemci farklı thread’lar arasında çok hızlı geçiş yapar ve bu durumda process’ler gerçekte olmasa bile eş zamanlı çalışıyormuş izlenimi verir. Tek thread yapısına sahip process sadece bir işlemci üzerinde çalışabilir.
28
Multi threading (Çoklu işlemcik )
Bilgisayar tasarımındaki en önemli gelişmelerden birisi, çok işlemcili sistemlerin geliştirilmesidir. Son zamanlarda, tek chip içerisine birden fazla işlemci(core) çekirdeği yerleştirilmektedir ve bu tür sistemler multicore olarak adlandırılır. Her bir core işletim sistemi için ayrı bir işlemci olarak görünür. Tek bir core üzerinde çalışan çoklu thread’e sahip bir uygulama için eşzamanlı çalışma, thread’lerin belirli aralıklarla çalıştırılmasını ifade eder. Çok core’a sahip sistemlerde eşzamanlı çalışma, her core’a bir thread atanarak thread’lerin paralel çalışmasını ifade eder.
29
Multi threading (Çoklu işlemcik )
Bir process içerisinde üç adet thread bulunsun. Eğer bilgisayarda tek işlemci var ise, bu threadlerin her biri CPU’nun 1/3 hızında çalışabilir. Eğer sistemde birden fazla işlemci var ise, her thread farklı işlemcide çalıştırılır, bu şekilde uygulama işlemci ve thread sayısına bağlı olarak hızlanır. Çok işlemcili sistemlerde farklı thread’lar farklı işlemciler üzerinde eş zamanlı olarak çalışabilir. Böylece gerçek paralel çalışma sağlanabilir. Pek çok modern işletim sistemi hem zaman dilimleme hem de çok işlemcili thread kullanımını desteklemektedir.
30
Multi threading (Çoklu işlemcik )
CPU’nun sahip olduğu core sayısı arttıkça eşzamanlı gerçekleştirilen görev sayısı da artacaktır.
31
Multi threading (Çoklu işlemcik )
Amdahl kuralına (Gene Amdahl) göre core sayısına göre bir sistemdeki performans artışı aşağıdaki gibi ifade edilir: Burada, S uygulamada seri çalışması zorunlu olan kısmın oranını, N ise core sayısını ifade eder. Bir uygulamada, %75 paralel ve %25 seri çalışıyorsa (S=0,25), 2 core’a (N=2) sahip sistemde bu uygulamayı çalıştırınca 1,6 kat hız artar. Core sayısı 4 olduğunda, 2.28 kat hız artışı sağlanır. Core sayısı sonsuza giderken hız artışı (1/S) ‘e doğru gider. Intel CPU’lar her core için 2 thread, Oracle T4 CPU ise 4 thread destekler.
32
Thread Kullanımı: Kelime İşlemci
Örneğin, bir kelime işlemci programında, yazma işlemi gerçekleştirilirken, klavyeden bilginin alınması, ekrana basılması ayrı ayrı gerçekleşen iki thread’dır. Bunun yanında bir diğer thread yazım hatalarını kontrol ediyor olabilir. Bu yüzden Thread kullanışlıdır, çünkü bir kelime işlemcide farklı mantıksal olarak paralel bir şekilde çalıştırılan görevler bulunur.
33
Thread Kullanımı: Kelime İşlemci
Bir kelime işlemi uygulaması, bir thread ile klavyeden giriş alabilir, bir thread ile spell check yapabilir ve başka bir thread ile ekran görüntüsünü düzenleyebilir. Her thread, paylaşmadan kullandığı kendisine ait bileşenlere sahiptir.
34
Thread Kullanımı: Web Server
Bir web server, her client (istemci) ile ayrı ayrı ilgilenmelidir. Bir Web browser, bir thread ile veri aktarımı yapabilir, başka thread ile verileri ekranda görüntüleyebilir. Bir Web sunucu process’i multithreaded çalışırsa, her gelen istek için ayrı bir thread oluşturulur ve process portu dinlemeye devam eder.
35
MultiThread (Çoklu İşlemcik) Modelleri
Thread’lar user thread, kernel thread ve hybrid thread olmak üzere üçe ayrılır. User Thread: Kernel katmanının üstünde olup kullanıcı işlemleri tarafından oluşturulurlar. Bu thread’ların oluşturulması, çizelgelemesi ve yönetilmesi kernel’den bağımsız olarak gerçekleştirilir. User thread’larının tamamı kullanıcı adres uzayı içerisinde koşturulur. Kernel Thread: Doğrudan doğruya işletim sistemi tarafında oluşturulur. Kernel thread’larının oluşturulması, çizelgelemesi ve yönetimi işletim sistemi tarafında gerçekleştirilir. Hybrid Thread : User ve kernel uzayının birlikte çalıştığı yapıdır.
36
User Thread Thread kullanıcı uzayında gerçeklendiğinde kernel thread’lardan habersizdir, sadece process’lerden haberdardır. Thread tablosu kullanıcı uzayında tutulur. Multithread yapısını desteklemeyen işletim sistemlerinde de gerçeklenebilir. Kullanıcı uzayındaki tüm thread yönetimi user level kütüphaneleri kullanılarak yapılır. Sistem çağrısı ve kernel interrupt yoktur.
37
Kernel Thread İşletim sistemi kernel’i, her process’deki ayrı thread’lerden haberdardır. Thread tablosu, kernel tarafından yönetilir. Yeni thread oluşturmak için kernel’a sistem çağrısı yapılır. İşletim sistemi hangi thread’ın çalışacağına karar verir. Yalnız çalışacak olan thread aynı process’in thread’ı olmayabilir. Bu gerçeklemede sistem çağrısı yapmak maliyetlidir, çok sık thread oluşturma, yoketme gibi işlemler varsa vakit kaybı çoktur.
38
Hybrid Thread Kernel sadece kernel level thread’lardan haberdardır.
Bir kernel level thread birden fazla user level thread’ı sırasıyla çalıştırır. Diğer thread işlemleri, user level thread işlemleri şeklindedir. Birkaç user thread’inin, bir kernel thread üzerine yönlendirilmesi
39
MultiThread (Çoklu İşlemcik) Modelleri
Modern işletim sistemlerinden çoğu hem user hem de kernel thread’ları, yani hybrid thread yapısını destekler. (Windows, Linux, Unix, Mac OS X, Solaris vs) Kernel thread ile user thread arasındaki ilişkilendirme aşağıda verilen üç modelden birisi oluşturularak gerçekleştirilir. Many-to-one model (Çoktan-Bire Modeli) One-to-one model (Bire Bir Modeli) Many-to-many model (Çoktan Çoğa Modeli)
40
Many-to-one model (Çoktan-Bire Modeli)
Many-to-one modelinde, çok sayıda kullanıcı thread’i bir tane kernel thread’i ile eşleştirilir. Thread yönetimi kullanıcı alanında yapılır, yani verimlidir. Aynı anda sadece bir tane kullanıcı thead’i kernel thread’e erişebilir. Aynı anda kernel katmanında sadece bir thread bulunabildiği için işlemci üzerinde sadece bir thread koşturulabilir. Sadece bir kernel thread’i kullanıldığı için multicore sistemlerde birden fazla thread için eşzamanlı çalışma yapılamaz.
41
One-to-one model (Bire Bir Modeli)
One-to-one modelinde, bir kullanıcı thread’i bir kernel thread’i ile eşleştirilir. Bu nedenle işlemci üzerinde birden fazla thread multicore sistemlerde eşzamanlı koşturulabilir. Bir user thread için bir kernel thread oluşturulması gereklidir. Kernel thread oluşturmanın getirdiği ek yük performansı bir derece etkiler. Many-to-one modeline göre daha fazla concurrency. (Concurrency, birden fazla process arasında kısa aralıklarla geçiş yaparak daha fazla eşzamanlılık sağlar.)
42
Many-to-many model (Çoktan Çoğa Modeli)
Many-to-many modelinde, çok sayıda kullanıcı thread’i ile aynı sayıdaki veya daha az sayıdaki kernel thread’i eşleştirilir. Uygulama, gerektiğince user thread oluşturabilir. Kernel threadler multicore sistemler üzerinde paralel çalışır.
43
Intel Hyper-Threading Teknolojisi
Hyper Threading özelliğine sahip olmayan bir işlemcide Thread işlenmesi. Hyper Threading teknolojisini desteklemeyen herhangi bir işlemcide thread’ler First in First out mantığı ile sırasıyla işlenecektir.
44
Intel Hyper-Threading Teknolojisi
Hyper Threading özelliğine sahip bir işlemcide iş parçacığının işlenmesi Eğer işlemci Hyper Threading teknolojisini desteklediğinde, thread’ler aynı anda sanki iki ayrı işlemci varmış gibi işlenir. Ancak Hyper Threading teknolojisine sahip işlemci, fiziksel iki işlemci olmadığından, tek bir işlemcinin mantıksal iki işlemcisi gibi davranacaktır.
45
Intel Hyper-Threading Teknolojisi
Hyper-Threading özelliğine sahip olmayan fiziksel iki çekirdekli işlemcide iki thread’ınişlenmesi iki thread işlemcilerde ayrı ayrı işlenir. İki farklı işlemcinin performansı Hyper Threading teknolojisini destekleyen işlemciden daha üstündür. Ancak thread’ler arasında bir işlem önceliğinin olmaması gereklidir.
46
Intel Hyper-Threading Teknolojisi
Hyper-Threading özelliğine sahip fiziksel iki çekirdekli işlemcide 4 thread’ın işlenmesi Bu durumda 4 thread’den 2 tanesi bir işlemcide, diğer 2 tanesi de diğer işlemcide işlem görecektir.
Benzer bir sunumlar
© 2024 SlidePlayer.biz.tr Inc.
All rights reserved.