Üretici – Tüketici Problemi

tarafından
101
Üretici – Tüketici Problemi

Üretici – Tüketici ProblemiPeterson algoritması ve TSL komutu da doğru bir şekilde kullanılabilir fakat bu metotlar yoğun beklemeyi yani işlemcinin boşuna kullanılmasını gerektirir.Ayrıca yoğun olarak bekleyen süreç, kritik bölgede çalışan bir süreçten daha öncelikli olabilir.Bu durumda zamanlayıcı(scheduler) her zaman yoğun bekleyen sürece çalışma hakkı verebilir, bu şekilde sonsuza kadar iki süreçde bekler.Yoğun bekleme yerine, beklenen sürecin bloklandığı çeşitli yöntemler vardır. sleep() ve wakeup() gibi sistem çağrıları, işletim sistemlerinde bulunur. sleep() süreci bloklar, wakeup() da verilen süreci uyandırır ve hazır durumuna getirir.Örneğin, iki süreç ortak bir tampon alanı kullansınlar. Bu alana konulan değeri üretici üretsin, tüketici de bu değeri alarak kullansın.Üretici eğer tampon boş ise yeni bir değer üretip koymalı, tüketici de sadece tamponda değer var ise bu alanı okumalıdır. Diğer durumlarda süreçler uyumalıdır.Üretici yeni bir ürünü tampon alanına koyduğunda tüketiciyi uyandırır ve kendisi uyur. Tüketici de tampon alanındaki değeri aldıktan sonra üreticiyi uyandırır ve kendisi uyur.image011Burada da bir yarış durumu olabilir. sayac alanına ortak erişim yapıldığı ve kontrolsüz yapıldığı için hata oluşabilir.Örneğin, tampon boş olsun. Tüketici sayac  alanını 0 okur.  Bu noktada zamanlayıcı üreticiyi çalıştırsın, üretici yeni bir ürünü tampona eklesin. sayac ı arttırsın. Üretici tüketiciyi uyandırmak için uyan() metodunu çağırsın. Tüketici uyu() metodunu tam olarak çalıştırmadan uyan() metodu çalıştırılır. tuketici sayac değerini 0 okuduğu için uyur. Her seferinde üretici yeni bir değeri tampona ekler, en sonunda her iki süreçde sonsuza kadar uyurlar. Semaforlar (Semaphores)Yoğun bekleme gerektirmeyen, süreç sayısından bağımsız bir yöntemdir.E.W. Dijkstra tarafından 1965 de geliştirilmiştir. Yazılım ve işletim sistemi desteği ile çalışır.DOWN   =(P)    ve UP =(V) isimli iki metodu bulunmaktadır. Bu metotlar kesilemez metotlardır ve işletim sistemi tarafından gerçekleştirilirler. Genelde kesmeler iptal edilerek semafora erişilir. Birden fazla işlemci varsa TSL komutu ile semafor korunmalıdır.Semafor adı verilen özel bir değişkene erişim için kullanılırlar. Bu değişkene sadece bu metotlar ile erişilebilir.s değişkeni semafor olsun.DOWN = P metodu =kritik_bolgeye_gir DOWN(s){if (s>0)s=s-1; elses_de_bekle(uyu);}UP = V metodu =kritik_bolgeden_cik UP(s){if (s_de_bekleyen) sıradakini_aktif_yap;elses=s+1;}semaforlar tamsayı değerleridir (>=0). Kritik bölge erişimleri ikili semafor (binary semaphore = mutex) kullanılarak yapılır. mutex ve semaphore veri yapıları ve metotları işletim sistemlerinde bulunur.image013