Skip to content

Instantly share code, notes, and snippets.

@talayhan
Last active September 2, 2015 07:27
Show Gist options
  • Select an option

  • Save talayhan/6581eb3dbd77331c9cee to your computer and use it in GitHub Desktop.

Select an option

Save talayhan/6581eb3dbd77331c9cee to your computer and use it in GitHub Desktop.
Priority Inversion ve Donation Nedir ?

Priority Inversion ve Donation

Priorty Scheduling

Priorty scheduling schedule işleminde bir sonraki process veya thread den hangisinin CPU yu kullanacağının karar verilmesidir. Priority bu genelde integer olan bir değer, her thread e önem sırasına göre atanır. Çalışmaya hazır olan yani READY STATE de bulunan threadlerden en yüksek priority e sahip olan seçilerek çalıştırılır. Buradaki mantık en yüksek öneme sahip olan thread işini ilk yapmalı, daha düşük öneme sahip threadler bekleyebilir. Genelde threadler prioritylerine göre sıralı bir queue veri yapısında tutulmaktadır böylece hep bir sonraki thread en yüksek öneme sahip thread olarak tutulmaktadır.

Figure 1: Burada 3 thread bulunmaktadır. A, B ve C sırasıyla priority leri de 1,2,3. İlk olarak thread C seçilecektir bir sonraki schedule işleminde.


Priority Inversion

Varsayalım ki threadlerimiz resourcelarını paylaşıyorlar. Böyle bir durumda aynı anda birden çok threadin aynı resource a erişmesini istemediğimizden mutex yapısını kullanıyoruz. Eğer bir thread resource u kullanıyorsa mutexi kitliyor, diğer thread kullanmak istediğinde mutex kilitliyse, mutex açılana kadar beklemeye başlıyor. Bu sayede birden çok thread aynı anda aynı resource a erişemiyor. Aşağıdaki figüre bakabiliriz.

Figure 2: Burada da 3 threadimiz var. Thread C nin priority si en yüksek olmasına rağmen A nın resourcunu beklediğinden, bir sonraki schedule işleminde B threadi işleme alınıyor.

Priority Donation

Priority inversion durumunda yüksek priorty e sahip olan thread beklediğinden böyle bir problem oluşmaktadır. Bu problemi aşmak için Priority Donation (Önem sırası Bağışı) yapmakta.

Figure 3: Yukarıda bir priority donation örneği gösterilmektedir. Thread C, Thread A yı beklediğinden kendi yüksek priority sini A ya bağışlıyor, Thread A nın önem sırası yükseldiğinden bir sonraki schedule işleminde o çalıştırılıp, mutexi serbest bırakıyor.

Figure 4: Daha sonraki durumda tekrar Thread A nın prioritysi eski haline getiriliyor.


References

(CS.Berkeley)[http://www.cs.berkeley.edu/~kamil/teaching/sp04/pri/]

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment