seo alt işletmeli çalışma

2 Temmuz 2013 Salı Unknown 0 yorum

ALT İŞLEMLİ ÇALIŞMA (THREAD MECHANISMS)

işletim

            Bir proses en azından bir alt işlem (thread) içerir. Bu alt işleme ana alt işlem (main thread) denir. Her alt işlem, sanki ayrı bir program gibi işletim sistemi tarafından çizelgeleme işlemine sokulur. (süresi 20 milisaniyedir.). Program WinMain fonksiyonunun bulunduğu ana alt işlemden çalışmaya başlar. CreateThread API fonksiyonuyla program içerisindeki bir fonksiyon, bir alt işlem olarak belirlenebilir. Yani artık, bu prosesin iki alt işlemi vardır. Her iki alt işlemde birbirinden bağımsız olarak, sanki farklı programlarmış gibi çalışabilirler. Alt işlemler arasındaki geçiş, ya aynı prosesin iki alt işlemi arasında ya da farklı proseslerin alt işlemleri arasında olabilir. Aynı prosesin alt işlemleri arasında yapılan geçişin performans maliyeti fazla deeğildir.

Alt İşlemler ve Prosesler Arsında Haberleşme

Bir prosesin iki alt işlemi asenkron çalışan iki ayrı fonksiyondur. Bunlar aynı prosese ilişkin oldukları için aynı global değişkenleri kullanabilirler. Ancak farklı proseslere ilişkin alt işlemler arasındaki haberleşmeye kısaca proseslwer arasındaki haberleşme (interproses com)denir.prosesler arsındaki heberleşme aynı makinadaki iki programın ya da Network içindeki herhangi iki makine arasındaki proseslerin haberleşmesi biçiminde iki bölümde incelenmektedir. Her iki yöntem için de farklı yöntemler kullanılmaktadır.


Bir Alt İşlemin Yaratılması

            CreateThread API fonksiyonuyla yapılmaktadır.

Fonksiyonun 1. Parametresi; alt işlemin güvenlik parametrelerine ilişkin bir yapının adresidir. NULL geçilebilir.
2. Parametre; bir alt işlemin kullanılacağı stack uzunluğudur. 0 girilirse, default bir uzunluğu alır.
3. Parametre; geri dönüş değeri void, parametresi LPVOID türünden bir fonksiyon göstericisidir. Yani bu parametreye alt işlem olarak tanımlanacak fonksiyonun adresi geçirilecektir.
4. Parametre; alt işlem olarak tanımlanan fonksiyona geçirilecek parametredir.
5. Parametre; yaratılan alt işlemin davranışını belirtir. Bu parametreye 0 girilirse, alt işlem yaratılır yaratılmaz çalıştırılır.
6. Parametre; DWORC türünden bir değişkenin adresini alır. Fonksiyon bu değişkene alt işlemin ID değerini yerleştirir.
Fonksiyonun geri dönüş değeri, yaratılan alt işleme ilişkin çeşitli bilgilerin saklandığı bir bölgenin adresi olan handle değerid

            Bir thread CreateThread API fonksiyonuyla yaratıldığında alt işlemin yönetilebilmesi için bir handle alınır. Bu alan CloseHandle API fonksiyonula silinebilir.Prototipi:


void WINAPI MyThread(..... stdcall) biçiminde çağırılmalıdır.

Bir alt işlemin çalışması ExitThread fonksiyonuyla sonlandırılabilir. Eğer bu fonksiyon çağırılmamışsa alt işlem fonksiyonunun sonunda derleyici tarafından otomatik olarak sonlandırılır. Prototipi:



Alt İşlemlerin Bekletilmesi


            Bir alt işlem Sleep fonksiyonuyla istenilen kadar milisaniye çizelge dışı bırakılabilir. Tabii bu bekleme işlemi çizelge dışına atılarak gerçekleştirilir. Meşgul bir döngü(busy loop) kullanılmaz. Prototipi:



            Bu fonksiyona 0 parametresi geçildiğinde kalan quanta süresi kadar bir bekleme oluşabilir(Yani sanki o quanta süresi bitmiş gibi işlem yapılır). Ancak Sleep fonksiyonu kodun içinde bulunan thread'i bekletebilir(Yani başka bir alt işlem bekletilemez). Başka bir alt işlemin bekletilmesi SuspendThread API fonksiyonuyla yapılmaktadır. Prototipi:


            Bu fonksiyon bir alt işlemin çalışmasını ResumeThread API fonksiyonu çağırılana kadar durdurur. Prototipi:



            Alt işlem kullanımına ilişkin örnek programın açıklanması:
Program kodu UNICODE uyumlu yazılmıştır. Ancak Windows 95 ve 98 sistemlerinde RegisterClass API fonksiyonu UNICODE sisteminde çalışmaz, sıfırla geri döner. Tabii Windows NT sistemlerinde böyle bir problem yoktur.

Alt İşlemler ve Mesaj Kuyruğu


            Bir alt işlem içerisinde CreateWindow ile pencere yaratıldığında o alt işleme ilişkim bir mesaj kuyruğu da yaratılır. Yani her alt işlemin farklı bir mesaj kuyruğu vardır.

Alt İşlemlerin Seri Hale Getirilmesi


            İki alt işlem asenkron bir biçimde çalışır. Ancak pek çok uygulamada belli bir eş zamanlılığın sağlanması gerekebilir. Örneğin paralel porta takılan bir aygıt beş satırlık bir kod ile iki alt işlem tarafından programlanıyor olabilir. Bir alt işlemde programlama işlemi başladığında alt işlemler arasında geçiş olur, akış diğer alt işleme gelirse o alt işlem de aynı programlayan kodu çalıştırırsa problemli bir durum ortaya çıkar. Çünkü tekrar bir alt işlemler arası geçiş ile program diğer alt işlemden devam ettiğinde alt işlem programlama adımlarının bazılarının yapıldığını sanarak kaldığı yerden devam eder. Oysa bu işlemler diğer alt işlemler tarafından bozulmuştur. Eğer bir kod bir bölgedeyse o kod o bölgeden çıkana kadar başka bir kodun o işlemleri yapan bölgeye girmesi istenmiyorsa o bölgeye kritik bölge denir(critical section). Kritik kod(bölge) işletim sistemlerinin sağladığı özel fonksiyonlarla ele alınmalıdır. Kritik kodların global değişkenlerle yaratılması mümkün değildir.



Bu işlem gerçekleştirilemez.

            Kritik kodların üstesinden gelebilmek için Windows işletim sisteminde çeşitli API fonksiyonları vardır. Örneğin:

CreateSemaphore
CreateEvent
CreateMutex

Bu API fonksiyonlarıyla bir handle alınır. Bu handle

ReleaseSemaphore
ReleaseEvent
ReleaseMutex

gibi API fonksiyonlarıyla bırakılır. WaitForSingleObject API fonksiyonuyla bekleme  alt işlem çizelge dışı bırakılarak yapılır.

            Örneğin Semaphore nesnesi şöyle kullanılır. CreateSemaphore fonksiyonu ile semaphore yaratılır ve bişr handle elde edilir. Handle içerisinde bir sayaç vardır. Bu sayacın ilk durumu CreateSemaphore fonksiyonuyla belirlenir. WaitForSingleObject semaphore nesnesinin sayaç değeri 0 ise bekler, 0 dışı ise beklemez ama 1 düşürür. ReleaseSemaphore ise sayacı bir arttırır. Yani kritik kod WaitForSingleObject ile ReleaseSemaphore arasındaki koddur. Semaphore nesnesi prosesler arasında bir isim verilerek de kullanılabilir.  

Grafik İşlemlerinde Görüntü Modu ve Koordinat Sistemleri

            Windows'da kullanılan orijin noktası 3 biçimde olabilir:

1. Ekranın sol üst köşesi orijin olabilir(Popup menu çıkartırken kullandığımız fonksiyonlar bu orijine ilişkindir).
2. Orijin pencere başlığının sol üst köşesi olabilir(GetWindowDC ile alınan handle orijin noktasının böyle olduğunu varsayarak çizim yapar).
3. Pencerenin çalışma alanının sol üst köşesi orijin noktası olabilir(Bütün GDI fonksiyonları bu noktayı orijin kabul eder).

            Windows'da GDI fonksiyonları için orijin nokası çalışma alanının istenilen bir noktasına çekilebilir. Çalışma alanının orijin belirten noktasına "View port origin" denilmektedir. View port origin noktası her zaman pixel cinsinden belirlenir. Orijin noktası SetViewportOrgEx fonksiyonuyla değiştirilebilir. Prototipi:

);

            View port orijini dışında yine pencere görüntüsünü kaydırmak amacıyla pencere orijin noktası değiştirilebilir. Yani pencere içerisindeki görüntü kaydırılarak istenilen bir DC bölgesinin pencere sınırları içerisinde kalması sağlanabilir. SetViewportOrgEx yalnızca çizim fonksiyonları için orijin noktasını değiştirir. Halbuki pencere orijininin değiştirilmesi yalnızca görüntünün kaydırlması anlamına gelir. Pencere orijinini değiştiren SetWindowOrgEx fonksiyonu vardır. Prototipi:


0 yorum: