Sunuyu indir
Sunum yükleniyor. Lütfen bekleyiniz
YayınlayanBerk Niazi Değiştirilmiş 9 yıl önce
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
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 2 Program 1 Program 3 Start Terminate
11
Eşzamanlı Çalışan Görevler
Program 2 Program 1 Program 3 Start Terminate
12
Eş Zamanlı Çalıştırma Nasıl Yapılır?
Start Terminate Code 1 Data 1 PCB 1 Code 2 Data 2 PCB 2 Code 3 Data 3 PCB 3 Birden fazla işlemci ve her işlemcide birden fazla görev çalıştırılıyor.
13
Görevlerin Anahtarlaması
Görev Anahtarlama Bağlam Anahtarlama
16
Görevlerin Durumları
17
Bellekteki Görevler
18
Bellekteki Görev
19
Görevin bellekteki hali
20
Görevlerin Bulunduğu Durumlar
21
Görevlerin Bulunduğu Durumlar
Sunuş (New) Hazır Çalışıyor Void main(){ I/O bekliyor printf(‘Merhaba Dünya’); } 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 Geçersiz komut Zaman Sınırını Aşılması Ayrıcalıklı komut Hafıza uygun olmadığında Veri yanlışları İşletim Sistemine müdahale Sınır İhlali Hata koruması Ana programın sonlandırılması Aritmetik hatalar Ana görevin istekleri Zaman aşımları Giriş Çıkış hataları
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 Veri yapısı
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 Sistem modu/Çekirdek Modu/Kontrol 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 <unistd.h> 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 <unistd.h> #include <sys/wait.h> #include <stdio.h> 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
UNIX’ de görevlerin durumları
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 <signal.h> #include <unistd.h> #include <stdio.h> 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.)
59
Zamanlama Kriterleri Tarafsızlık Etkinlik Tepki Süresi Geriye Döndürme
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
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
Zamanlama Algoritmalarının Amaçları
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.
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 Dezavantaj
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
79
Threadin paylaştıkları
Her threade özel Adres Uzayı Global değişkenler Açık dosyalar Çocuk görevler Bekleyen sinyaller Sinyal işleyiciler Kullanıcı bilgileri 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
Thread kullanımına örnek- Web Sitesi Sunucusu
Web sunucusunda threadler kullanılmasaydı?
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ı
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
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 yordamlarSistem ç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
Threadlerin Kullanıcı uzayında gerçeklenmesi Threadlerin Dezavantajları
OS kullanıcı düzeyinde thread varlığını bilmediği için, gereksiz zamanlama kararları verilebilir.
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
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_cancel (thread) pthread_attr_init (attr) pthread_attr_destroy (attr)
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; 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 <KB olmayan kod> gir_KB;
<KB işlemleri> cik_KB; end P2() • 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 devre dışı 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; /* 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
144
Üretici Tüketici Problemi
Üretici Görev Tüketici Görev Üretim Buffera koy Tüketim Bufferdan al BUFFER
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); take(); n--; m = n; consume(); if (m==0) semWaitB(delay); void main() n = 0; parbegin (producer, consumer);
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.
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.
161
200 KB bir sistemde;
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 Okuma – Yazma Yazma – Okuma Yazma – 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
1. A görevi R yi tutar ve S i ister. 2. B görevi T yi ister.
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
Ölümcül kilitlenme tespiti
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.
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
Benzer bir sunumlar
© 2024 SlidePlayer.biz.tr Inc.
All rights reserved.