Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

GÖREV YÖNETİMİ (PROCESS – TASK) (SERVER İŞLETİM SİSTEMİ TARAFLI) Öğr. Gör. Mevlüt ERSOY.

Benzer bir sunumlar


... konulu sunumlar: "GÖREV YÖNETİMİ (PROCESS – TASK) (SERVER İŞLETİM SİSTEMİ TARAFLI) Öğr. Gör. Mevlüt ERSOY."— Sunum transkripti:

1 GÖREV YÖNETİMİ (PROCESS – TASK) (SERVER İŞLETİM SİSTEMİ TARAFLI) Öğr. Gör. Mevlüt ERSOY

2 Konular Görev kavramı Görevler ve görev kontrol blokları arasındaki ilişkiler Görev zamanlama Görevler arası iletişim Veri yapılarının amacı ve işletim sistemini yönetmek için kullanılan veri yapıları Threads (iş parçacıkları) Ölümcül Kilitlenme

3 Görevlerde Üç Temel Konu İşletim sisteminin karşılaması gereken gereksinimler; Çoklu işlemleri çalıştırmalı (senkronizasyon) Görevler için kaynak ataması yapmalı (kilitlenme) Görevler arası iletişim

4 Görev Nedir? Sıralı bir işlemci üzerindeki veri ile bir programın çalıştırılmasından sonuçlanan aktivitelerdir. Bir programın çalıştırılması sonucu oluşan şeye görev denir. Görev bir programın özet formudur. Diskte yerleşmiş programı, işletim sisteminin ilgili datalarını ekleyerek ve kaynakları belirleyerek programı belleğe yerleştirip koşabilir hale getirilmesine görev denir. Program pasif sabit diskte (çalıştırılabilir dosya), görev aktiftir.

5 Yürütülebilir Bir Program Kaynak Kod Nesne Dosyası.bin, … Çalıştırılabilir Programlar Kütüphane Dosyaları Ve diğer dosyalar Derleme Bağlantı Ve değişkenler

6 Görevi Oluşturan Bileşenler (Görev İskeleti)(PCB)(Basitleştirilmiş)

7 struct task_struct { volatile long state; struct thread_info *thread_info; atomic_t usage; unsigned long flags; unsigned long ptrace; int lock_depth; int prio, static_prio; struct list_head run_list; prio_array_t *array; /* */ }; “include/linux/sched.h”

8 UNIX Türevi Sistemde Görevin Yapısı Görevin gerçek kullanıcı id'si ve etkin kullanıcı id'si. Görevin gerçek grup id'si ve etkin grup id'si. Görevin çalışma dizini. Görevin kullanmakta olduğu dosyalara ilişkin bilgiler. Görevin bellek alanına ilişkin bilgiler. Görevin thread’lerine ilişkin bilgiler. Görevlerarası geçiş için gereken bilgiler.

9 GÖREV YÖNETİMİNİN AMAÇLARI Makul cevaplama süresi içerisinde, birkaç görevi aynı anda yürüterek işlemciden maksimum faydalanmayı sağlamak. Görevleri kaynaklara dağıtmak. Görevler arası haberleşmeyi sağlamak. Kullanıcıların görev oluşturabilmesine ortam oluşturmak.

10 Sıralı Çalıştırılan Görevler Program 2Program 1Program 3 Start Terminate

11 Eşzamanlı Çalışan Görevler Program 2Program 1Program 3 Start Terminate Start Terminate

12 Eş Zamanlı Çalıştırma Nasıl Yapılır? Birden fazla işlemci ve her işlemcide birden fazla görev çalıştırılıyor. Start Terminate Start Terminate Code 1 Data 1 PCB 1 Code 2 Data 2 PCB 2 Code 3 Data 3 PCB 3

13 Görevlerin Anahtarlaması Görev Anahtarlama Bağlam Anahtarlama

14

15

16 Görevlerin Durumları

17 Bellekteki Görevler

18 Bellekteki Görev

19 Görevin bellekteki hali

20 Görevlerin Bulunduğu Durumlar

21 Sunuş (New) Hazır Çalışıyor Void main(){I/O bekliyor printf(‘Merhaba Dünya’);Hazır }Çalışıyor Terminate(bitiş)

22 GÖREV KUYRUKLARI

23 Görevlerle İlgili Sistem Çağrıları Create Delete Suspend Resume Delay Change – priority Change - attributes

24 Görev Ne zaman Oluşur? Yeni Toplu İş Etkileşimli Oturum Açma(Kullanıcı Sisteme girmiş) İşletim Sistemi tarafından oluşturulan bir hizmet sunmak için – Yazıcıdan çıktı almak için Varolan görev başka görevi oluşturduğunda (Process Spawning)

25 Görev Ne zaman Sonlanır? Normal Tamamlanma Zaman Sınırını Aşılması Hafıza uygun olmadığında Sınır İhlali Hata koruması Aritmetik hatalar Zaman aşımları Giriş Çıkış hataları Geçersiz komut Ayrıcalıklı komut Veri yanlışları İşletim Sistemine müdahale Ana programın sonlandırılması Ana görevin istekleri

26 Görevin Askıya Alınma Sebepleri Swap işlemi Hatalı durum oluşması Etkileşimli kullanıcı isteği – Debug (hata ayıklama) – Ayrılan sürenin dolması (quantum) – Parent görev tarafından

27 İşletim Sistemi Kontrol Yapıları Kaynakları yönetmek ve görevleri kontrol etmek için neye ihtiyaç var?

28 Memory Tables Bellek Tablolarının içermesi gerekenler; – Görevler için ana bellek tahsisi – Görevler için ikincil bellek tahsisi – Ana ve sanal bellek bloklarının koruma özellikleri (paylaşımlı bellek bölgesine hangi görev erişebilir.) – Sanal Bellek yönetimi için gereken bilgiler

29 I/O Tables Sistemin kanallarını ve I/O aygıtlarını yönetmek için

30 File Tables Dosyalar hakkında bilgi sağlar. İkincil bellek alanında yer bilgilerini tutar. Anlık durumlarını tutar vb.

31 Process Tables (Görev Tabloları)

32 Görev Kontrol Yapıları Yönetilmesi için gerekli özellikleri – Kimlik numarası – Bellekteki yeri (Daha önemli olan nedir?) - Kullanıcı Verisi - Kullanıcı programı - Yığın - Görev Kontrol Bloğu – Durumu (Görev Kontrol Bloğu) bilinmesi gerekir.

33 Görev Kontrol Yapıları

34 Görev Kimliği Sayısal bir bilgidir – Görev id – Görevden oluşan görevlerin kimliği (parent process) – Kullanıcı kimliği

35 İşlemci Durum Bilgisi Kullanıcı kayıtlıkları (User Mod) Kontrol ve durum kayıtlıkları – Program Counter – Bayraklar – Durum Bilgisi Stack Pointer

36 Görev Kontrol Bilgisi Zamanlama ve Durum Bilgisi – Görev durumu – Öncelik – Zamanlamaya bağlı bilgiler (Algoritma bilgisi) – Olay Veri yapısı Görevler arası iletişim Görev ayrıcalıkları Bellek Yönetimi Kaynak sahipliği ve kullanımı

37 Çalışma Modları Kullanıcı modu – Düşük haklar ve ayrıcalıklar – Kullanıcı programları genel olarak bu modda çalışır Sistem modu/Çekirdek Modu/Kontrol Modu – Yüksek haklar ve ayrıcalıklar – İşletim Sistemi çekirdeği görevleri bu modda çalışır. Kernel Fonksiyonları – Görev Yönetimi,Bellek Yönetimi, Giriş Çıkış yönetimi, Destek fonksiyonları (Kesmeler, Hesaplar ve Görüntüleme)

38 Bir Görevin oluşturulması Bir görev çalışmakta olan diğer görevlerden oluşturulubilir. – Oluşturan göreve parent, yeni göreve child görev denir. – Parent, child görevin kaynaklarını veya yetkilerini tanımlar (veya bağışlar) – Bir parent görev çhild tamamlanana kadar bekler veya paralel olarak çalışabilir.

39 UNIX Görev Oluşturulması UNIX de child görev fork sistem çağrısı kullanılarak oluşturulur. – Fork, child görev için parent görevden kayıtlık ve değişkenleri kopyalar – Fork tarafından geri döndürülen değerlerde tek fark Parent görevde, fork child görevin görev id sini döndürür. Child görevde, 0 değerini döndürür. – Child, yeni ve farklı bir programı exec sistem çağrısı ile kendi içinde başlatabilir.

40 UNIX Görev Oluşturulması POSIX sistemlerinde yeni bir görev fork fonksiyonu ile oluşturulur. Fonksiyonun prototipi şöyledir: #include pid_t fork(void); Fonksiyon başarı durumunda yeni oluşturulan görevin id değerine, başarısızlık durumunda -1 değerine geri döner.

41 Örnek Unix Program: Fork #include main() { int parentID = getpid(); /* Görevin id*/ char prgname[1024]; gets(prgname); /* istediğimiz bir programın adını okur*/ int cid = fork(); if(cid == 0) { /* child görev*/ execlp( prgname, prgname, 0); /* Programı yükle*/ printf("I didn't find program %s\n", prgname); } else { /* Parent görev*/ sleep (1); /* Başlamak için childa zaman ver. */ waitpid(cid, 0, 0); /* child görevin bitmesini bekle. */ printf("Program %s sonlandı\n", prgname); }

42 Görev oluşturma

43 UNIX’ de görevlerin durumları

44 Kullanıcı modunda koşuyor Çekirdek modunda koşuyor Bellekte ve koşmaya hazır Bellekte uyuyor İkincil bellekte ve koşmaya hazır İkincil bellekte uyuyor

45 UNIX’ de görevlerin durumları Pre-empt olmuş (çekirdek modundan kullanıcı moduna dönerken iş sıralayıcı görevi kesip yerine bir başka görevi çalışcak şekilde belirlemiş) Oluşturulmuş ama koşmaya hazır değil Zombie (görev sonlanmış ancak parent görevin kullanılabilmesi için bazı kayıtları hala tutmakta, ilgili kaynakları henüz geri verilmemiş)

46 Görev Sonlandırma Görevin sonlanması, görevin sahip olduğu tüm kaynakları bırakmasıdır. UNIX de – Bir görev exit sistem çağrısı kullanarak kendini sonlandırabilir. – Bir görev kill sistem çağrısı kullanarak bir child görevi sonlandırabilir.

47 Örnek: Görev Sonlandırma #include main() { int parentID = getpid(); /* Görev id*/ int cid = fork(); if(cid == 0) { /* child görev*/ sleep (5); /* 5 saniye sonra kendini sonlandır. */ printf ( «child görevden çıkılıyor\n" ); exit (0); printf ( «Hata!exit çağrısı atlandı!"); /* çalışmaz*/ } else { /* Parent görev*/ printf ( "Çocuğu öldürmek için bir karakteri yazınız.\n" ); char answer[10]; gets (answer); if ( !kill(cid, SIGKILL) ) { printf(«Çocuk öldü.\n"); }

48 Parent Child İlişkisi root p5 p3 p4 p2 p1

49 Linux Görev Ağacı

50 Windows Api

51 GÖREV ZAMANLAMA

52 Konular Tek işlemcili yapıları kapsıyor. Zamanlamanın Amaçları Algoritmalar – FCFS & Round Rubin – SJF – Multilevel Feedback Queues – Lottery Zamanlama

53 Zamanlama iki türlü yapılabilir; – Programın bulunduğu duruma göre Görev; – İşlemcide çalışabilir durumda olabilir. – Parçaları veya tümü bellekte olabilir. – Henüz başlatılmamış olabilir. – Zamanlama dönemine göre Uzun vadeli zamanlama Orta Vadeli Zamanlama (Bellek Yönetimi ile ilgili konu) Kısa Vadeli Zamanlama Giriş Çıkış Zamanlama (ileri konularda anlatılacak.)

54 Zamanlama Dönemine Göre; Uzun Vadeli Zamanlama – Görevlerin çalıştırılabilecek durumda olup olmamasına göre hazır görevler kuyruğuna atılıp atılmamasına karar verilir. Orta Vadeli Zamanlama – Görevlerin ana belleğe alınıp alınmamasına göre karar verilir. Kısa Vadeli Zamanlama (Dispatcher – Seçici) – Hangi görevin çalıştırılacağına karar verilir. (İşlemci zamanlama) Giriş Çıkış Zamanlama – Birden fazla görev aynı I/O cihazına erişmek isteyebilir. Burada hangi görevin I/O cihazına erişilebilineceğine karar verilir.

55 Orta Vadeli Zamanlama

56 Kısa Vadeli Zamanlama (Dispatcher – Seçici) Kısa Vadeli Zamanlamayı etkileyen durumlar – Saat Kesmeleri – Giriş/Çıkış Kesmesi – İşletim sistem çağrıları – Sinyaller (Semafor vb.)

57

58

59 Zamanlama Kriterleri Tarafsızlık – Her göreve eşit davranma Etkinlik – Görevlerin çalışmasını aksatmayacak Tepki Süresi – Etkileşimli görevler için istek zamanı ile cevaplama zamanı düşük olacak Geriye Döndürme – Görev bekleme konumunda kalmayacak. Çıktı – Birim zamanda çalıştırılan görev sayısı maksimum olmalıdır. İşlemci Kullanımı – (gerçek zamanlı sistemlerde çok önemli değildir.) Zaman Sınırı

60 Zamanlama(Scheduling) Ne Zaman Yapılmalıdır ? Zamanlamanın yapılmasına ihtiyaç duyulan zamanlar: 1. Yeni bir görev oluşturulduğunda, ana görevin ya da çocuk görevin çalıştırılmasının kararı verilmelidir. Bu iki görevde hazır durumuna gelir. 2.Bir görevin çalışması bittiğinde ve işlemciyi kullanmayı bıraktığında karar verilmelidir. 3.Bir görev I/O işlemi için bloklandığında başka bir görev seçilmelidir. 4.Bir I/O kesmesi geldiğinde bir zamanlama kararı yapılmalıdır. Eğer kesme bir I/O cihazından geliyorsa, bu I/O cihazından gelecek olan veriyi bekleyen görev çalıştırılmalıdır.

61 Bilgisayarlarda genelde bir donanım saati(clock) bulunur. Bu saat periyodik olarak işlemciye kesmeler gönderir. Bu kesmeler ile işlemci zamanlama işlemlerini gerçekleştirir. Zamanlama işlemi her saat kesmesinde ya da belirli sayıda olduğunda gerçekleştirilmelidir. Zamanlama algoritmaları, saat kesmelerini nasıl kullandıklarına göre ikiye ayrılır; a)Kesintisiz (non-preemptive) b)Kesintili (preemptive)

62 Zamanlama Algoritması Seçme Politikaları Neye göredir? Ortalama yanıt süresi en aza indirmek - kullanıcıya mümkün olduğunca çabuk çıkış sağlamak ve en kısa sürede alındığında olarak giriş işlemek. Tepki süresi değişikliğini en aza indirmek- Etkileşimli sistemlerde düşük ortalama tahmin edilebilir. Maksimum çıktı – Yükü en aza indirmek, sistem kaynaklarını en verimli kullanım için, Minimum bekleme süresi – Her bir işlem için işlemci üzerinde aynı miktarda süre vermek. Ortalama yanıt süresi hesaplanır.

63 Zamanlama Algoritmalarının Amaçları Tüm sistemlerde; – Adil olma: Her süreç işlemciyi adil kullanmalıdır. – Politika Zorlama: Belirtilen politika kullanılmalıdır. – Denge: Sistemin tüm parçaları meşgul olmalıdır. Toplu İş Sistemlerinde; – Üretilen İş: Saat başına üretilen iş maksimum olmalıdır. – Dönüş Süresi: Sürecin sunumu ve sonlanması arasındaki sürenin minimum olmasıdır. – İşlemci Kullanımı: İşlemci her zaman meşgul olmalıdır.

64 Etkileşimli Sistemlerde; – Cevap Süresi: İsteklere hızlı şekilde cevap verilmelidir. – Orantılı Olma: Kullanıcının beklentilerini karşılamalıdır. Gerçek Zaman Sistemleri; – Son teslim süresine riayet etme: Veri kaybından sakınmalıdır. – Tahmin Edilebilirlik: Çoklu ortam sistemlerinde nitelik bozulmasından sakınmalıdır. Zamanlama Algoritmalarının Amaçları

65 Zamanlama Algoritmaları FCFS : İlk gelen ilk çalışır Round Robin : Alternatif işler için zaman dilimi kullanılır. Priority : Öncelik Shortest Job First: En Kısa İş önce Shortest Remaining Time: En kısa kalan Önce Multilevel Queues: Her öncelik sırasında round rubin

66 FCFS : Avantaj ve Dezavantajlar Avantajlar: basittir Dezavantajlar – Uzun işlerin arkasından gelen kısa işlerin ortalama bekleme süresi yüksektir.

67 Round Rubin Algoritması Çeşitleri genellikle zaman paylaşımlı sistemlerde kullanılır. -Avantaj: Her iş CPU eşit sürlerde çalışır. Bu durum adil değildir, -Dezavantaj: Ortalama bekleme süresi kötü olabilir.

68 SJF/SRTF Avantaj – Ortalama bekleme süresini en aza indirme olasılığı vardır. Dezavantaj – Bir işin CPU’ yu bırakma zamanın tahmini imkansızdır. – CPU bağımlı görevler uzun süre çalıştırıldığında açlık durumu artabilir.

69 Multilevel Feedback Queuens

70 Mobil Sistemlerde Çokgörevlilik Bazı mobil sistemlerde (örneğin, iOS erken versiyonu), sadece bir işlem çalışmasına izin verilirken diğerleri askıdadır – Taşınmaz ekrandan dolayı, iOS kullanıcılara sınırlılıklar sağlamak için Kullanıcı sadece ön plandaki görevi kontrol edebilir. Çoklu Arka plan görevleri, bellekte çalışıyor fakat ekranda görüntülenmiyor ve sınırlı çalışıyor Sınırlılık, tek, kısa görev ve olayların bildirimlerini alan görevleri kapsar, ses çalma gibi uzun süreli çalışan görevleri özeldir. – Android ön ve arka planda çalışan görevleri daha az sınırlandırır. Arka planda görevler, işlemleri yerine getirmek için servisleri kullanırlar. Servis arka plan işlemini askıya alsa bile çalışmaya devam edebilir. Servisin kullanıcı arayüzü yoktur ve çok küçük bir bellek kullanır.

71 THREADS (İŞ PARÇACIKLARI)

72 Görevler & Threads Görevler ve threadler birbirleriyle ilgili kavramlardır. Bir görev; – Adres alanı, kaynakları vb. tanımlar. – çekirdek düzeyli bir varlıktır. (Kernel Level) – Bir görevin yapısına sistem çağrıları ile erişilir. Bir thread; – Bir görev içinde tek sıralı yürütme akışı tanımlar. – Threadler, görevlerden kontrol bilgileri sayesinde ayrılır. – Her görev kendi içinde çoklu threade ayrılabilir. – Genellikle kullanıcı düzeyli bir varlıktır (User Level)(Çekirdek düzeylide olabilir, ancak sistemi yavaşlatır) – Kullanıcı seviyesindeki kütüphanelerle ulaşılır. – Threadler arasında işbirliğinde sistem çağrılarını kullanmazlar. – Mesaj yollama ve paylaşılan bellek alanı kullanımı daha basittir.

73 Bir görev iki farklı bölümden oluşmaktadır. – Kaynakları(açık dosyalar, çocuk görevler, program texti, program verileri, göreve özel olan diğer veriler...) – Çalışan kod kısmı, yani şu anda çalışan kod ve bir sonraki çalışacak kod bölümü.(program sayacı, yazmaçlar, yığın(stack), çağrılmış fakat geri dönülmemiş prosedürler).

74 İş Parçacığı(thread) kavramının bize getirdiği, aynı görev ortamında çoklu çalıştırma (execution-yürütme) işleminin yerine getirilmesidir. Tek bir görev içerisinde çoklu iş parçacıklarının(multithread) çalışması, çoklu programlamada birden fazla görevin aynı anda (işlemcide sırayla) çalışmasına eşdeğerdir.

75 Threadlerin Kullanıcı Uzayında Gerçekleştirilmesi

76 Thread Karakteristiği Bir Thread Control Block içinde; – Program Counter – Register Set – Yığın bulunur. Bu yüzden Görev Kontrol Bloğu Thread Kontrol Bloğuna indirgenmiştir. Geleneksel olarak bir görevi bir işi icra eden tek bir thread olarak görebiliriz. Görev içindeki threadler aynı bellek uzayında otururlar. Bu uzay kullanıcı düzeyli uzaydır.

77 Tek ve Çoklu Threadler

78

79 Threadin paylaştıkları Adres Uzayı Global değişkenler Açık dosyalar Çocuk görevler Bekleyen sinyaller Sinyal işleyiciler Kullanıcı bilgileri Her threade özel Program sayacı Saklayıcılar Yığın durum

80 her threadin kendi yığını var – yığında çağrılmış ama dönülmemiş yordamlarla ilgili kayıtlar ve yerel değişkenler – her thread farklı yordam çağrıları yapabilir geri dönecekleri yerler farklı ⇒ ayrı yığın gerekli

81 Performans açısından Threadler UNIX sistemlerde thread oluşturmak görev oluşturmaktan 10 kat daha hızlıdır.(Mac geliştiricileri) Bir threadin terminete olması görevden daha az zaman gerektirir. Görevler arasındaki anahtarlama için geçen süreden aynı göreve ait threadlerin anahtarlanması için geçen süre daha fazladır. Threadler arası iletişim daha etkindir.

82 Threadlerin Kullanımına Örnek 3 thread ile bir kelime işlemci programının kontrolü

83 Web sunucusunda threadler kullanılmasaydı? Thread kullanımına örnek- Web Sitesi Sunucusu

84 Thread Karakteristiği Eğer bir thread görev değişkenlerinden birini değiştirirse bütün threadler bu değişikliği görür. Eğer bir thread bir dosya açıp okursa diğer threadlerde bu dosyayı okuyabilir. Threadler görevlere göre daha hızlıdır. Neden?

85 Thread Karakteristiği Sisteme daha az yük getirir. Threadlerin oluşturulmasıyla çekirdeğin yapısı etkilenmez. Dolayısıyla çekirdek seviyeli kaynaklar tüketilmediği için thread oluşturmak daha ucuzdur.

86 Neden threadler? Bir proses içinde birden fazla işlem olabilir Bazı işlemler bazen bloke olabilir; threadlere bölmek performansı arttırır – threadlerin kendi kaynakları yok Oluşturulmaları / yok edilmeleri proseslere göre kolay Threadlerin bazıları işlemciye yönelik bazıları giriş-çıkış işlemleri yapıyorsa performans artar – çok işlemcili sistemlerde faydalı

87

88 Örnek Thread Programı

89 Threadlerin Türleri İki türlü – kullanıcı uzayında (User Level) – çekirdek uzayında (Kernel Level) (lightweight process) hibrid bir gerçekleme de olabilir

90

91

92 Threadlerin Kullanıcı uzayında gerçeklenmesi Çekirdeğin threadlerden haberi yoktur Çoklu thread yapısını desteklemeyen işletim sistemlerinde de gerçeklenebilir Threadlerin üzerinde çalıştığı sistem – Thread yönetim fonksiyonları Örn: thread_create, thread_exit, thread_yield, thread_wait Thread tablosu – Program sayacı, saklayıcılar, yığın işaretçisi, durumu…

93 Threadlerin Kullanıcı uzayında gerçeklenmesi Thread bloke olacak bir işlem yürüttüyse – Örneğin bir başka threadin bir işi bitirmesini beklemek Bir rutin çağırır Rutin threadi bloke duruma sokar Threadin progream sayacı ve saklayıcı içeriklerini thread tablosunda saklar Sıradaki threadin bilgilerini tablodan alıp saklayıcılara yükler Sıradaki threadi çalıştırır. Hepsi yerel yordamlar  Sistem çağrısını yapmaktan daha hızlı

94 Threadlerin Avantajları Threadlerin ayrı bir zamanlama algoritmaları olabilir Thread yönetim veri yapısı kullanıcı adres uzayı içinde olduğu için Thread anahtarlamada kernel mod ayrıcalıkları verilmesine gerek yoktur. Tüm çağrılar yerel rutinler  Çekirdeğe çağrı yapmaktan daha hızlı

95 OS kullanıcı düzeyinde thread varlığını bilmediği için, gereksiz zamanlama kararları verilebilir. Threadlerin Kullanıcı uzayında gerçeklenmesi Threadlerin Dezavantajları

96 Threadlerin Kullanıcı uzayında gerçeklenmesi Threadlerin Problemleri sistem çağrılarının gerçekleşmesi – Kullanıcı taraflı thread bir sistem çağrısı çalıştırdığında görev bloke olur  tüm threadler bloke olur – Bazı sistemlerde yapılan çağrının bloke olup olmayacağını döndüren sistem çağrıları da var. Sistem çağrılarına arabirim yazılır. Önce kontrol edilir, bloke olunacaksa sistem çağrısı yapılmaz, thread bekletilir.

97 Threadlerin Kullanıcı uzayında gerçeklenmesi Threadlerin Problemleri Sayfa hataları – Programın çalışması gereken kod parçasına ilişkin kısım ana bellekte değilse Sayfa hatası olur Görev bloke olur Gereken sayfa ana belleğe alınınr. Görev çalışabilir – Sayfa hatasına thread sebep olduysa Çekirdek threadlerden habersiz Tüm görev bloke edilir.

98 Threadlerin Kullanıcı uzayında gerçeklenmesi Threadlerin Problemleri Zamanlama – Thread kendisi çalışmayı bırakmazsa diğer threadler çalışamaz Altta çalışan sistem belirli sıklıkta saat kesmesi isteyebilir – Threadlerin de saat kesmesi ile işi varsa karışır – Çok threadli çalışma istendiği durumlarda sıkça bloke olan ve sistem çağrısı yapan threadler olur Çekirdek düzeyinde işlemek çekirdeğe çok yük getirmez.

99 Bir süreçte üç adet thread bulunsun. Eğer bilgisayarda tek işlemci var ise, bu threadlerin her biri CPU nun1/3 hızda ç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.

100 Thread kullanımının kötü yanları ise; threadleri kullanan uygulamanın yazımının özenli yapılması gereklidir. 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 süreçteki başka thread bu dosyayı kullanıyorsa, uygulama çalışmaz ya da sonuçlar yanlış olabilir.

101 Thread Modelleri Many-to-one, one-to-one, many-to-many and two-level

102 Many-to-one Threading Bu multithread mekanizmasında işletim sisteminin çekirdeği(kernel) multithread mekanizmasından habersizdir. İşletim sistemi basit olarak bir process veya thread çalıştırdığını düşünmektedir. Ancak user alanında thread kütüphanesi sayesinde birden fazla thread oluşturulup kullanılabilmekte ve threadler arası geçiş yapılabilmektedir. Solaris Green Threadleri, GNU Portable Threadleri ve Linux üzerindeki Pthread kütüphanesi de bu mekanizmadadır. Bu mekanizmanın önemli bir dezavantajı vardır, eğer threadlerden biri bloke olur ise, kernel işlemin sadece bir thread taarafından yapıldığını düşündüğünden threadler arası geçiş yapamaz, böylece görev içerisindeki tüm threadler bloke olur.

103 One – To – One Threading Her bir user threadi için kernel tarafında bir threadin oluşturulduğu mekanizmadır. Bu mekanizmanın kullanılabilmesi için, işletim sisteminin kernel tarafında thread mekanizmasını desteklemesi gerekmektedir. Windows NT/XP/2000 threadleri, Linux threadleri ve Solaris 9 threadleri bu gruba girmektedir. – Avantajları : Bir thread tarafından yapılan bir sistem çağrısı aynı görev içerisindeki diğer threadleri bloke etmez. Bir görev birden fazla işlemci kullanabilir. Threadlerin oluşturulması, yok edilişi ve birbirleri arasındaki geçişi görevlere göre daha ekonomiktir. – Dezavantajları : Kernel threadlerinin oluşturulması, yok edilişi ve birbirleri arasındaki geçişi user threadlerine gore daha maliyetlidir. CPU zamanlama algoritmaları adil değildir : Her threade aynı zaman dilimi verilir. Bu sebeple çok sayıda threadi olan işlemler daha az sayıda threadleri olan işlemlere göre daha çok CPU zamanı kazanmış olurlar.

104 Many – To – Many Threading Bu mekanizmanın kullanılabilmesi için kernel multithreadingi desteklemek zorundadır. Fakat one-to-one model de olduğu gibi her bir user threadine karşılık bir tane kernel threadi olmak zorunda değildir. N tane user threadine karşılık M tane kernel threadi oluşturulmakta (M<=N) ve user threadi önce n. thread ile daha sonra n+1. thread ile ilgilenebilmektedir, user threadleri değiştirilebilir. İşletim sistemi gerekli sayıda kernel threadinin oluşmasına ve birçok kernel threadinin user threadine eşleşmesine izin verir. IRIX, HP-UX ve Tru64 UNIX threadleri bu gruba girmektedir.

105 Thread Programları Tasarımı (Paralel Programlama) Çok çekirdekli bilgisayarlarda, pthreadler paralel programlama yapıları için uygundur. Paralel Programlama unsurları, – problem bölümleme – yük dengeleme (Load Balancing) – İletişim – veri bağımlılıkları – Senkronizasyon ve yarış koşulları – bellek sorunları – I / O sorunları – Program karmaşıklığı – Programcı çaba / maliyet / zaman

106 Bir iş parçacığı oluşturulduktan sonra, nasıl bilirsin a) işletim sistemi tarafından ne zaman çalıştırmak için planlanmış olabilir b) hangi işlemci / çekirdek üzerinde çalışacak?

107 Creating and Terminating Threads pthread_create (thread,attr,start_routine,arg) pthread_exit (status) pthread_create pthread_exit pthread_cancel (thread) pthread_cancel pthread_attr_init (attr) pthread_attr_init pthread_attr_destroy (attr) pthread_attr_destroy

108 Creating and Terminating Threads pthread_create arguments: – thread: yeni iş parçacığı için benzersiz bir tanımlayıcı – attr: Konu özelliklerini ayarlamak için kullanılabilir özellik nesnesi. Varsayılan değerler için bir thread özelliklerini nesne veya NULL belirtebilirsiniz. – start_routine: C rutini oluşturulduktan sonra yürütülecek iş parçacığı. – arg: start rutin için üretilen bir argüman. Void tipindeki bir işaretçi olarak referanstan geçmiş olması gerekir. Herhangi bir argüman geçirilecekse NULL kullanılabilir.

109 prosesin başta bir threadi var Thread kütüphane yordamları ile yeni thread yaratır – örn: thread_create – parametresi: koşturacağı yordamın adı yaratılan thread aynı adres uzayında koşar bazı sistemlerde threadler arası anne – çocuk hiyerarşik yapısı var – çoğu sistemde tüm threadler eşit

110 işi biten thread kütüphane yordamı çağrısı ile sonlanır – örn: thread_exit zaman paylaşımı için zamanlayıcı yok – threadler işlemciyi kendileri bırakır örn: thread_exit Threadler arası – senkronizasyon ve – haberleşme olabilir

111 Görevler Arası İletişim(Eş Zamanlılık) IPC

112 Konular Eşzamanlılık Prensipler Karşılıklı Dışlama Semaforlar Monitörler Mesaj geçişi Üretici Tüketici Problemi

113 OS Tasarımları İşletim Sistemi tasarımının ana konusu threadler ve görevlerin yönetimi ile ilgilidir. – Multiprogramming: – Multiprocessing: – Distributed Processing: Tasarımlarda eş zamanlılık esastır.

114 Eş zamanlı Görevler Eş zamanlı Görevler olması durumunda bazı tasarım konuları önem kazanır: – Görevler arası haberleşme – Kaynak paylaşımı – Birden fazla Görevin senkronizasyonu – İşlemci zamanı ataması

115 Eş zamanlılık 3 farklı konuda ortaya çıkar Çoklu uygulamalar Aktif uygulamalar arasında paylaşılacak işlem süresi için kullanılır Yapısal Uygulamalar Modüler tasarımı ve yapısal programlama uzantısı İşletim Sistemi yapıları İşletim Sisteminin kendisi görevleri ve threadin bir kümesi olarak uygular

116 Konu ile ilgili bazı terimler Atomik işlemler Bölünmez bir veya daha fazla komutlar dizisi olarak uygulanan bir işlev veya eylem Atomsallık eşzamanlı süreçler arasındaki izolasyonu garanti eder. Kritik bölge Paylaşılan kaynak için erişimi gerektiren bir görev içindeki kod bölümüdür. Bir görev bu kod bölümünde ise başka görevler bu kod bölümünü çalıştırmaması gerekir. Ölümcül kilitlenme İki veya daha fazla görevin biri diğerinden bir şeyler beklediğinden dolayı ilerleyemediği durumdur. Karşılıklı dışlama Bir görev paylaşılan kaynaklara erişen kritik bir bölümde olduğunda başka bir görev bu paylaşılan kaynakların kritik bölgesine girmek istediğinde kritik bölgede olan görevin engellemesi durumudur. Yarış durumları Çoklu görev veya thread bir paylaşılan veri alanına okuma yazma yaptığı ve sonuçta çalışan görevlerin çalışmasının bağıl zamanlamasına bağlı olmasıdır. Açlık Zamanlayıcının süresiz olarak çalışabilir bir görevi gözden kaçırmasıdır ve hiç seçmemesidir.

117 Görevler Arası İletişim Bir görev diğerine nasıl veri gönderir? – Bir ya da daha fazla görevin birbirlerinin yollarını kullanırken dikkatli olmaları ve birbirlerinin iletişim yollarına girmemeleri. İletişimdeki uygun sıra nasıl olmalıdır? – Bir görev veri gönderiyor diğeri bu veriyi yazdırıyorsa, ilk görev veri göndermediğinde ikincinin beklemesi ya da ikinci yazdırırken birincinin beklemesi gereklidir. İletişimde kullanılacak sıra önemlidir.

118 İletişim Ne için Yapılır? Kaynak paylaşımı (dosya, I/O aygıtı,...) Karşılıklı haberleşme (iki görev birbirine haber gönderir) Senkronizayon (Bir görevin çalışması başka bir görevin belirli işlemleri tamamlamış olmasına bağlı olabilir)

119 Görevlerin Etkileşimi Görevler birbirinden habersizdir. – Rekabet Görevlerin dolaylı olarak birbirlerinden haberleri vardır. – Paylaşma yoluyla işbirliği Görevlerin doğrudan birbirlerinden haberi vardır. – Haberleşme yoluyla işbirliği

120 Görevler Arası Rekabet (Yarış Durumları) Birbirinden habersiz Görevlerin aynı kaynağı (örneğin bellek, işlemci zamanı) kullanma istekleri – işletim sistemi kullanımı düzenlemeli Bir Görevin sonuçları diğerlerinden bağımsız olmalı Görevin çalışma süresi etkilenebilir.

121 Görevler Arasında Paylaşma Yoluyla İşbirliği Paylaşılan değişken /dosya/veritabanı – Görevler birbirlerinin ürettiği verileri kullanabilir. Karşılıklı dışlama gerekir (mutual exclution) Senkronizasyon gerekebilir. – Sorunlar Ölümcül kilitlenme Yarış açlık

122 Senkronizasyon Görevlerin yürütülme sıraları önceden kestirilmez Görevlerin üretecekleri sonuçlar çalışma sıralarına bağlı olmamalıdır ÖRNEK: Bir P1 görevi bir P2 görevinin ürettiği bir sonucu kullanıp işlem yapacaksa, P2’ nin işini bitirip sonucu üretmesini beklemeli

123 Görevler Arasında Paylaşma Yoluyla İşbirliği Örnek: a=b korunacak başta a=1, b=1 P1: a=a+1; b=b+1; P2:b=2*b; a=2*a; a=a+1; b=2*b; b=b+1; a=2*a; Sıralı çalışırsa sonuçta a=4 ve b=4 Bu sırayla çalışırsa sonuçta a=4 ve b=3X

124 Görevler Arasında Haberleşme Yoluyla İşbirliği Mesaj aktarımı yoluyla haberleşme – Karşılıklı dışlama gerekli değil Ölümcül kilitlenme olabilir – Birbirinden mesaj bekleyen Görevler Açlık olabilir – İki Görev arasında mesajlaşır, üçüncü bir Görev bu iki Görevden birinden mesaj bekler

125 Karşılıklı dışlama(Mutual Execution) Kritik bölge – Program kodunun, paylaşılan kaynaklar üzerinde işlem yapılan kısmı. – Bir program içerisinde ortak olarak paylaşılan alanlara erişim yapılan kod bölümlerine verilen isim. – Belirli bir anda sadece tek bir Görev kritik bölgesindeki kodu yürütebilir.

126 Karşılıklı Dışlamada Dikkat Edilmesi Gerekenler İki görev aynı anda kritik bölge içerisine girmemelidir. Kritik bölüme girmek isteyen görevler eğer başka bir görev kritik bölgede değilse engellenmemelidir. Bir görev kritik bölge içinde sonsuza kadar beklememelidir. Kritik bölge dışında çalışan bir görev, başka görevleri bloklayamaz. Sistemdeki işlemci sayısı ve hızı ile ilgili kabuller yapılmamalıdır, bu değerlerden bağımsız olmalıdır.

127 Karşılıklı Dışlama P1() begin gir_KB; cik_KB; end P2() begin gir_KB; cik_KB; end KB: Kritik Bölge İkiden fazla Görev de aynı kaynaklar üzerinde çalışıyor olabilir.

128 Senkronizasyon Yöntemleri Özel Donanım Desteği Gerektirmeyen Yöntemler – Kesme Yapısının Kullanımı – Değişkenleri Kilitleme(Lock Variables) – Dikkatli Değiştirme(Strict Alternation) – Dekker Algoritması Donanım Desteği Gerektiren Yöntemler Üst Düzey Zaman Uyumlama Araçları – Semafor – Monitör – Mesaj Geçirme (Message Passing)

129 Özel Donanım Desteği Gerektirmeyen Karşılıklı Dışlama Kesmeleri Devre Dışı Bırakma (Dezavantajları) – görevler kritik bölgeye girdiklerinde tüm kesmeleri devredışı bırakabilirler. Kritik bölge dışına çıktıklarında eski durumuna getirebilirler. Bu durumda eğer bir görev bu işlemi uygulasa ve çıktığında eski durumuna getirmez ise sistem çalışmaz duruma gelir. – Sistemde birden fazla işlemci varsa bu işlem sadece tek bir işlemciyi etkiler. Kullanıcı görevlerine bu hakkı vermek oldukça tehlikelidir. Çekirdek bazen bu yöntemi kullanır.

130 Kesmenin Kontrolü

131 Değişkenleri Kilitleme (Locking Variables) Süreçler arasında paylaşılan bir değişkeniniz olsun. Bu değişkenin ilk değeri 0 olsun. Bir süreç kritik bölgeye girdiğinde ilk önce bu değişkeni kontrol etsin. Eğer kilit değişkenimizin değeri 0 ise süreç bunu 1 yapsın ve kritik bölgede yapmak istediklerini yapsın. Eğer 1 ise, 0 oluncaya kadar beklesin. Bu yöntemde de bahsedilen problem vardır. Bir süreç kilit değerini 0 olarak okusun, 1 yapamadan işlemci başka bir sürece geçerse, her iki süreçte kritik bölgeye girmiş olur.

132 Özel Donanım Desteği Gerektirmeyen Karşılıklı Dışlama Dikkatli Değiştirme (Strict Alternation)

133 Dikkatli Değiştirme (Strict Alternation) Çoklu Görev İçin –Çalışmayan Algoritma

134 Neden Çalışmaz

135 Özel Donanım Desteği Gerektirmeyen Karşılıklı Dışlama Dekker Algoritması

136 Özel Donanım Gerektiren Yöntemler Test and Set türü komutlar ts reg, durum Motorola  tas Intel 80x86  xchg

137 xchg komutunun kullanımı

138 Semaforlar 1965 Dijkstra Etkili bir işbirliği sağlamak amacıyla geliştirdi. İki veya daha fazla görev özel bir sinyal alana kadar özel bir yerde bekletilmeye zorlayan basit bir sinyal aracığıyla işbirliği yapabilir. Bu sinyal için, semafor olarak adlandırılan özel değişkenler kullanılır. Semafor, görevler arası sinyalleme için integer bir değer kullanır. Atomik bir işlemdir. Semafor s ise; Sinyali İletmek için, semSignal(s) Sinyali almak için semWait(s) çalıştırılır.

139 İkili Semafor struct binary_semaphore { enum {zero, one} value; queueType queue; }; void semWaitB(binary_semaphore s) { if (s.value == one) s.value = zero; else { /* ilgili görev s.queue içine yerleşir */; /* görev bloke edilir*/; } void semSignalB(semaphore s) { if (s.queue is empty()) s.value = one; else { /* s.queue dan bir P görevi silinir*/; /* hazır görevler kuyruğuna yerleştirilir*/; }

140 /* program mutualexclusion */ const int n = /* görev sayısı*/; semaphore s = 1; void P( int i) { while (true) { semWait(s); /* kritik bölge*/; semSignal(s); /* diğer komutlar */; } void main() { parbegin (P(1), P(2),…, P(n)); }

141 SEMAFORLAR

142

143

144 Üretici Tüketici Problemi Üretici Görev Tüketici Görev Üretim Buffera koyTüketim Bufferdan al BUFFER

145

146 Üretici Tüketici yapısı

147 İkili Semafor ile Üretici Tüketici Problemi Çözümü /* program producerconsumer */ int n; binary_semaphore s = 1, delay = 0; void producer() { while (true) { produce(); semWaitB(s); append(); n++; if (n==1) semSignalB(delay); semSignalB(s); } void consumer() { int m; /* a local variable */ semWaitB(delay); while (true) { semWaitB(s); take(); n--; m = n; semSignalB(s); consume(); if (m==0) semWaitB(delay); } void main() { n = 0; parbegin (producer, consumer); }

148

149

150 MONITORLER Semaforlar karşılıklı dışlama uygulamak ve koordine işlemleri için ilkel ama güçlü ve esnek bir araç sağlar., Monitör, semafor ile eşdeğer işlevsellik sağlayan ve kontrolü daha kolay bir programlama dili yapısıdır.

151 Message Passing – Mesaj Gönderme Süreçler arasında mesaj gönderip, almak için send ve receive şeklinde iki sistem çağrısı bulunur. Bu çağrılar aşağıdaki gibi kütüphane fonksiyonu olarak tanımlansınlar. send (varış,&mesaj); //varış ile verilmiş olan sürece mesajı gönderir receive(kaynak,&mesaj);//kaynakdan gelen mesajı alır. Eğer mesaj yoksa gelene kadar bloklanır ya da bir hata kodu geriye çevirir.

152 Bu işlemlerde çeşitli problemler çıkabilir. Örneğin, mesaj gidecek olan bilgisayar ağ üzerinde başka bir bilgisayarda ise mesaj ağda kaybolabilir. Bu yüzden gönderici mesaj göndermeli, alıcı mesajı aldığını belirten kabul (ackowledge) mesajı geriye göndermelidir. Eğer gönderici kabul mesajını belirli bir süre alamazsa mesajı tekrar gönderir. Mesaj ulaşmış fakat kabul mesajı ağda kaybolmuş olabilir. Gönderici mesajı iki kez göndermiş, alıcıda mesajı iki kez almış olur. Bu problem mesaja sıra numarası verilerek çözülür, aynı numaralı iki mesaj gelirse sadece biri kabul edilir. Bu işlemler aynı makine üzerinde olsa dahi semaforlara göre oldukça yavaştırlar.

153 Mesajlar alıcı tarafından alınmadığında postakutusu (mailbox) adı verilen yapılarda depolanır. Depolanan mesajlar, alıcı tarafından alınır. Mesajlaşmada, ilk önce gönderici mesajı göndermek için send() metodunu çalıştırır ve süreç bloklanır. receive() metodu bir alıcı tarafından çalıştırıldığı anda, mesaj tamponlama yapılmadan alıcıya geçirilir. Aynı şekilde, receive() metoduda mesaj yoksa gelene kadar bloklanır. Bu yönteme randevu(rendezvous) denilir.

154 Linux Senkronizasyon Kernel ver. 2.6 öncesi kısa kritik bölge uygulamalarında kesme engelleme Ver. 2.6 ve Sonra, başkasına engel olma Linux sağlar – Semafor – Atomik sayısal değer – Okuyucu ve yazıcı versiyonları

155 Windows Senkronizasyon Tek işlemcili sistemlerde genel kaynaklara erişimi korumak için kesme maskeleme kullanır. Çok işlemcili sistemlerde döndürme kilidi kullanılır. Aynı zamanda dispatcher, semafor, timer, olaylar (değişken) ve mutex kullanır

156 Ölümcül Kilitlenme Aynı kaynakları kullanan Görevler Birinin istediği kaynağı bir diğeri tutuyor ve bırakmıyor Görevlerin hiç biri ilerleyemez ⇒ ölümcül kilitlenme

157 Ölümcül Kilitlenme Sistem kaynaklarını ortak olarak kullanan veya birbiri ile haberleşen bir grup görevin kalıcı olarak bloke olması durumuna ölümcül kilitlenme denir.

158

159 Ölümcül Kilitlenme Bilgisayar Kaynakları Ele Geçirilebilir (Pre-emptable) İşlemci I/O Kanalları Ana bellek İkincil bellek Aygıtlar Dosyalar Veritabanı Semaforlar Ele Geçirilemez (Non Pre-emptable) Kesmeler Sinyaller Mesajlar I/O tampondaki bilgiler CDROM Yazma Ele geçirilebilir kaynak, bir görev bu kaynağa sahip ise elinden alındığında problemler oluşturmayan kaynaktır. Ele geçirilemeyen kaynak, görev bu kaynağa sahiptir ve elinden alınamaz.

160

161 200 KB bir sistemde;

162

163 Aynı kaynakların farklı sıralarda istenilmesinde ölümcül kilitlenme olma olasılığı yüksektir.

164 Ölümcül Kilitlenmeye Neden Olan Durumlar Karşılıklı Dışlama(Mutual Exclusion) Her kaynağı aynı anda bir görev ya kullanıyordur ya da atanmıştır. Tut ve Bekleme Koşulu Elindeki kaynağı bırakmadan başka kaynak ister ve bu kaynağı elde edemediğinde beklemeye geçen görevler Geri Alınamaz Koşulu Bir göreve daha önceden verilen kaynaklar zorla elinden alınamaması durumu. Dairesel Bekleme Koşulu İki veya daha fazla görev zincir şeklinde kendinden önceki göreve ait olan kaynağı bekler.

165 Ölümcül Kilitlenmeyi Önleme Karşılıklı Dışlamayı önleme (dosya örneği) – Okuma – Okuma – Yazma – Yazma – Okuma – Yazma Okuma için birden fazla erişimi yazma için özel erişim Birden fazla görev yazma izni istiyorsa bu durmda bile kilitlenme oluşabilir.

166 Ölümcül Kilitlenme Tespiti (Deadlock Detection) 1. Her tip kaynaktan sistemde bir adet olduğu durumda ölümcül kilitlenme tespiti 2. Her tipten birden fazla kaynak için ölümcül kilitlenme tespiti

167 Kaynak Atama Grafikleri

168 Her tip kaynaktan sistemde bir adet olduğu durumda ölümcül kilitlenme tespiti Örneğin; 7 görev ve 6 adet kaynak olsun. A,B,C,D,E,F,G görevler; R,S,T,U,V,W kaynakları göstersin. Mevcut sistemdeki sahip olunan kaynak durumu ve istenilen kaynak durumu şu şekilde olsun: 1. A görevi R yi tutar ve S i ister. 2. B görevi T yi ister. 3. C görevi S i ister. 4. D görevi U yu tutar ve S ile T yi ister. 5. E görevi T yi tutar ve V yi ister. 6. F görevi W yi tutar ve S i ister. 7. G görevi V yi tutar ve U yu ister. SORU:Sistem ölümcül kilitli midir ? Öyleyse hangi süreçler ?

169 Her tipten birden fazla kaynak için ölümcül kilitlenme tespiti Matris temelli bir algoritma kullanılır. Elimizdeki kaynakların sınıflarını Ei (1<=i<=n) şeklinde isimlendirelim. E var olan kaynak vektörüdür. Her kaynaktan var olan örnek sayısını verir. Örneğin E1 disket sınıfı olsun. E1=2 elimizde 2 adet disket sürücüsü olduğunu göstersin. A vektörü kullanılabilir olan kaynakları göstersin. Ai i. Sınıf kaynaktan kullanılabilir kaç tane örnek olduğunu göstersin. Eğer A1=0 ise, disket sürücüsünden kullanılabilir yok demektir. Tüm disket sürücüleri şu anda kullanılıyordur.

170 Her tipten birden fazla kaynak için ölümcül kilitlenme tespiti Algoritmada iki adet matris kullanılır. C = mevcut anda görevlere tahsis edilmiş kaynaklar matrisidir. R = görevlerin istedikleri kaynakları ve sayılarını gösteren matristir. C nin her satırı bir göreve karşılık gelir. Bu satırın sütunları, görevin sahip olduğu kaynakları göstermektedir. Cij = j kaynağından i görevinde kaç adet var. Rij = i görevinin j kaynağından kaç adet istediğini gösterir.

171 Her tipten birden fazla kaynak için ölümcül kilitlenme tespiti

172 Ölümcül Kilitlenme olasılığı var mıdır?

173 Algoritma: 1-İşaretli olmayan görev ara. Bu görevin R matrisindeki tüm istekleri A dan küçük veya eşit olmalıdır. 2- Bu şekilde bir görev var ise C deki bu sürece karşılık gelen satırın değerlerini A ya ekle. Bu süreci işaretle ve 1. adıma git. 3-Böyle bir süreç yoksa algoritma sonlandırılır. Algoritma bittiğinde işaretli olmayan süreçler ölümcül kilitlidir. Ölümcül kilitlenme tespiti

174 Ölümcül Kilitlenme Onarımı 1. Keserek onarma (Recovery through preemption) 2. Geri alarak onarma (Recovery through rollback) 3. Öldürerek onarma (Recovery through killing process)

175 Ölümcül Kilitlenmeden Kaçınma Deadlock Avoidance Sistem istenilen kaynağın verilmesinin güvenli olup olmadığına karar vermelidir.

176 Güvenli ve Güvensiz Durum Herhangi bir zaman anında sistemin durumu E,A vektörleri ve C,R matrisleri ile gösterilir. Eğer A durumu ölümcül kilitli değilse sistem güvenlidir. Örneğin tek bir kaynak için durumu inceleyelim. Elimizde bu kaynaktan 10 adet olsun. Aşağıda A,B,C süreçlerinin durumları gösterilmektedir.

177 Güvenli ve Güvensiz Durum

178 Yemek yiyen filozoflar problemi


"GÖREV YÖNETİMİ (PROCESS – TASK) (SERVER İŞLETİM SİSTEMİ TARAFLI) Öğr. Gör. Mevlüt ERSOY." indir ppt

Benzer bir sunumlar


Google Reklamları