İŞletİm sİstemlerİ · İŞletİm sİstemlerİ İplİkler dr. mehmet sarigÜl....

32
İŞLETİM SİSTEMLERİ İPLİKLER Dr. Mehmet SARIGÜL

Upload: others

Post on 19-Oct-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

  • İŞLETİM SİSTEMLERİİPLİKLER

    Dr. Mehmet SARIGÜL

  • İPLİKLER(Threads)

    Her prosesin kendi adres uzayı vardır ve tek bir iplik olarak iş yapmaya başlar. Bir prosese bağlı bir çok iplik sanki farklı proseslermişçesine aynı adres uzayını kullanarak çalışırlar.

    İplik adı verilen bu mini prosesleri oluşturmanın bir çok farklı nedeni olabilir.

  • İplik Kullanımı

    İplik kullanımının en önemli nedeni bir proses içerisinde birden çok aktivitenin bir arada çalışmasını sağlamaktır.

    İplikler sayesinde aynı adres uzayını aynı verileri paylaşan birçok iş eş zamanlı olarak çalışabilir.

  • İplik Kullanımı İplik kullanımının bir diğer avantajı ise iplik

    yaratmanın proses yaratmaya göre oldukça hızlı olmasıdır. İşletim sistemlerinin genelinde iplik yaratmak prosese göre 10-100 kat daha hızlıdır.

    Üçüncü bir avantaj ise performanstır. İplikler sayesinde hesaplama işlemleri ve giriş çıkış işlemleri gibi farklı kaynaklar kullanan işlemler paralel olarak çalışabilir.

  • İplik Kullanımı

    Bir metin düzenleyiciyi ele alalım. 600 sayfalık bir döküman üzerinde düzenleme yapıyorsunuz. İlk saydanın ilk satırını sildiniz. Bu 600 sayfanın hepsinin birer satır kaymasına neden olacak. Eğer bu işlem iplikler olmadan yapılırsa 600 sayfanın tek tek işlenmesini beklemeniz gerekir.

  • İplik Kullanımı

    Ama bu metin düzenleyicisi iki iplikli bir yapıya sahip ve bir iplik arkada bu büyük düzenleme işlemini yaparkan bir diğer iplik kullanıcıdan giriş almaya ve metin yazmaya devam ediyor.

    Bu çok iplikli yapı sayesinde kullanıcı giriş yapmaya ve metni kaydırma, metin ekleme, görüntüleme vb işlemleri yapmaya devam edebiliyor.

  • İplik Kullanımı

    Bu işlemler dışında çoğu metin düzenleyici belirli sürelerle döküman yedeklemesi yapar. Eğer bu işlem bir iplik yardımı ile yapılmasa her yedeklemede kullanıcının tüm yedeklemenin bitmesini beklemesi gerekirdi. Ama bu ayrı bir iplik ile yapılarak bu önlenebilir.

  • İplik Kullanımı Bu üç iplikli yapı sayesinde bu program

    kullanıcının girişlerine sürekli açık olmakla birlikte hem metin düzenleme işlemlerini arkaplanda yapabilmekte hem de belirli sürelerle yedek alıp diske yazabilmektedir.

    Bu şekilde kullanıcıya daha kaliteli bir metin düzenleme deneyimi sağlanır.

    Burada 3 iplik yerine 3 proses kullanılabilir miydi?

  • İplik Kullanımı

    Burada 3 proses ile bu işlemleri yapmak mümkün değildir. Çünkü 3 iplikte aynı hafıza üzerinde çalıştığından, aynı döküman üzerinde işlem yapabilmektedir. Proseslerin ise her biri kendi uzayında çalışır.

  • İplik Kullanımı

    Bir web sunucusunu düşünelim. Web sunucusu sık ziyaret edilen sayfaların bilgilerini bellek üzerinde cache denilen bellek üzerinde bir alanda tutar.

    Bir web sayfasının ana sayfası diğer sayfalarına göre daha sık ziyaret edilecektir.

  • İplik Kullanımı

    Ağ üzerinden gelen istekleri karşılama için bir iplik görevlendirilir. Bu iplik gelen istekleri boşta olan bir işçi ipliğe yönlendirir.

  • İplik Kullanımı

    İşçi iplik istenen sayfanın cache üzerinde olup olmadığını kontrol eder. Eğer istenen sayfa cache üzerinde değilse diskten okuyarak ilgili sayfayı getirir.

    Bu sırada başka bir istek gelirse sevk edici iplik boştaki başka bir işçi ipliğe görev verir.

    İşi olmayan işçi iplikler bloke duruma geçer.

  • İplik Kullanımı

    Eğer bu web sunucusu çok iplikli bir yapıda olmasa idi ne olurdu?

  • İplik Modeli İplikler tıpkı prosesler gibi bir program sayacına sahiptir. Bu

    sayaç işlenecek kodun bilgisini tutar. İplikler yazmaç bilgilerine ve bir yığına sahiptir. Bu yığın içerisinde çağrılan ve henüz dönüş alınamamış prosedürlerin bilgileri vardır.

    İplikler prosese aynı veri uzayı içerisinde paralel işlem yapma özgürlüğü kazandırır.

    İplikler aslında proseslere benzerler ama, prosesler fiziksel hafızayı, diskleri, yazıcıları ve diğer kaynakları paylaşırken, iplikler aynı adres uzayını, aynı kaynakları paylaşır.

  • İplik Modeli Aşağıda sol tarafta 3 tane proses görülmektedir.

    Bunların içerisinde sadece tek bir iplik bulunmaktadır. Sağ tarafta ise bir prosesin içerisinde aynı adres uzayında çalışan 3 tane iplik bulunmaktadır.

  • İplik Modeli Sağda görülen 3 iplikli yapıda işletim sisteminin

    ipliklerden haberi yoktur. Bu prosese diğer prosesler kadar işlemci zamanı verilir. Bu nedenle aslında her bir iplik 1/3 işlemci zamanı kullanmış olur.

  • İplik Modeli İplikler prosesler kadar bağımsız değildir. Tüm iplikler

    aynı adres uzayında çalışır. Aynı açık dosyalara, aynı çocuk proseslere, aynı alarmlara ve sinyallere erişim imkanları vardır. Bu nedenle bir iplik başka bir ipliğin yığınına ulaşabilir, hatta yok edebilir. İplikler arasında prosesler gibi bir koruma söz konusu değildir.

    Bunun nedeni öncelikle bunun mümkün olmamasıdır ve aslında gerekli de olmamasıdır. Bu bir çok iplik aynı kişi tarafından çalıştırılmaktadır ve senkronizasyonları prosesin sorumluluğundadır.

  • İplik Modeli İpliklerde prosesler gibi durumlara sahiptir. Bir iplik

    çalışıyor, bloklanmış ya da hazır durumda olabilir. Bir iplik proses henüz çalışırken sonlanabilir.

    İplik eğer CPU üzerinde çalışıyor ise ‘Çalışıyor’ durumdadır. Çalışmak için sıra bekliyor ise ‘Hazır’ durumdadır. Dışarıdan bir giriş bekliyor ise ‘Bloklanmış’ durumdadır.

  • İplik Modeli Program tek bir iplik olarak başlar. Yeni bir iplik

    oluşturmak için thread_create() prosedürü çağrılır. Bu şekilde oluşturulan yeni iplik çağıran iplik ile aynı

    adres uzayında malışmaya başlar. Bir iplik sonlanınca thread_exit() prosedürünü çağırır. Bir iplik başka bir ipliğin sonlanmasını thread_join()

    prosedürü ile bekleyebilir. thread_yield prosedürü ile bir iplik gönüllü olarak işlemci

    zamanını başka ipliklere verebilir.

  • İplik Modeli - Problemler İplikler bir çok konuda kolaylık sağlamakla birlikte bazı

    problemlere de neden olurlar. ● Örneğin 3 ipliğe sahip bir proses fork ile ayrıldığında

    yeni proses 3 ipliğemi sahip olacak? ● Diyelimki bu ipliklerde biri blok durumda giriş bekliyor

    diğer prosesin ipliğide aynı girişi mi bekleyecek.● Kullanıcı girişi iki ipliğe de iletilecek mi? ● Bir iplik bir dosya ile işini bitirip kapatırsa ama başka bir

    iplik henüz o dosyayı okuyorsa ne olacak?

  • İplik Modeli Unix tabanlı işletim sistemleri çoğunlukla iplikler için

    Pthreads kütüphanesini kullanırlar. Bu kütüphane iplikler ile ilgili 60’tan fazla prosedür

    çağrısı bulunmaktadır.

  • Örnek#include #include #include void *myID(){printf(“I am a thread.”);}main(){pthread_t thred;

    int th_no;th_no = pthread_create(&thred, NULL, myID, NULL)pthread_exit(&thred);}

  • Çalışma Uzayına Göre İplikler İplikleri çalıştırmanın iki temel yolu vardır. Bunlar

    kullanıcı uzayında ya da çekirdek uzayında çalıştırmadır. Bu ikisinin beraber kullanıldığı hibrit bir yaklaşım da bulunmaktadır.

    Her bir yöntemin kendi içinde avantaj ve dezavantajları bulunur.

  • Kullanıcı Uzayında Çalışma İplikler kullanıcı uzayında çalıştığı zaman çekirdeğin

    ipliklerden haberi yoktur. Kullanıcı uzayında kütüphane destekli iplik kullanımı,

    işletim sistemi iplik desteklemiyor olsa dahi iplik çalıştırma imkanı sunar.

  • Kullanıcı Uzayında Çalışma Aşağıdaki şekilde kullanıcı ve çekirdek uzayında

    çalışma görünmektedir.

    a) Kullanıcı Uzayında Çalışma b) Çekirdek uzayında çalışma

  • Kullanıcı Uzayında Çalışma İplikler kullanıcı uzayında çalışıyorsa her bir proses kendi

    iplik tablosunu tutmakla yükümlüdür. Bu tablo yapısı itibariyle çekirdek üzerinde tutulan proses tablosuna benzer.

    Bu tablo içerisinde ipliklerin program sayacı, yazmaçları, yığın işaretçileri, durumları,..vb bulunur.

    Proseslerden farklı olarak, bir iplik thread_yield prosedürünü çağırarak kendi iplik bilgileri iplik tablosuna yazabilir. Sonrasında zamanlayıcı çağrılarak hazır ipliklerden birini çalıştırır. İpliklerde anahtarlama proseslere göre oldukça hızlıdır.

  • Kullanıcı Uzayında Çalışma - Problemler

    Proses içerisindeki bir iplik sistem çağrısı yaptığında tüm proses bekleme durumuna geçebilir!

    ● Nasıl Çözülebilir? (Bloklamayan sistem çağrıları) Sayfa hataları (Page Faults) tüm prosesi dondurur. İplikler arası senkronizasyon daha zordur. Başka

    ipliğin çalışması için, ilk ipliğin gönüllü olarak çalışmayı bırakması gerekir.

  • Çekirdek Uzayında Çalışma İplikleri çekirdek uzayında çalıştırmak mümkündur.

    Burada öncekinden farklı olarak çekirdek çalışan ipliklerden haberdardır.

    İplik tablosu çekirdek tarafından tutulur ve iplik bilgileri buraya yazılır.

    Bir proses bir iplik oluşturacağı ya da yok edeceği zaman bunu çekirdek çağrısı yaparak gerçekleştirir.

  • Çekirdek Uzayında Çalışma İplikler sistem çağrısı yapabilir. Bir iplik sistem çağrısı

    sonucunu beklerken çekirdek başka ipliği çalıştırabilir. İplik oluşturmak kullanıcı uzayına göre daha

    maliyetlidir. Sayfa hatası durumunda, istenilen bilgi getirilene

    kadar başka bir iplik çalışmaya geçebilir.

  • Hibrit Uzayda Çalışma İki kullanımın avantajlarını birleştirmek için hibrit bir

    yaklaşım kullanılabilir. Bu yaklaşımda bazı iplikler kullanıcı uzayında bazıları

    çekirdek uzayında çalışır.

  • Hibrit Uzayda Çalışma Bu durumda çekirdek sadece bazı ipliklerden

    haberdardır ve onlar için anahtarlama yapar. Bu çekirdek uzayı ipliklerinin altında birden fazla

    kullanıcı uzayı ipliği olabilir. Bu şekilde amaca göre istenilen iplik istenilen uzayda

    çalıştırılabilir.

  • Bu sunum Dr. Mehmet SARIGÜL tarafından hazırlanmıştır.