İşletim Sistemleri-II



Benzer belgeler
Multicore/Multithread Programlama

Proses. Prosesler 2. İşletim Sistemleri

PROSESLER. Proses. Proses

İŞLETİM SİSTEMLERİ (POSIX THREADS v1)

İşletim Sistemlerine Giriş

KOCAELİ ÜNİVERSİTESİ BİLGİSAYAR MÜHENDİSLİĞİ. BİLGİSAYAR LABORATUVARI II FİNAL SINAVI SORU ve CEVAPLARI(I. ogr)

Struct VE GÖSTERİCİLER FONKSİYONLARDA STRUCT KULLANIMI Programlama dilleri hafta -

Bilgisayar İşletim Sistemleri BLG 312

AHMET YESEVİ ÜNİVERSİTESİ BİLİŞİM SİSTEMLERİ VE MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ LİSANS DÖNEM ÖDEVİ

YAPILAR BİRLİKLER SAYMA SABİTLERİ/KÜMELERİ. 3. Hafta

else *on=*on+1; return gecici; } int giseyeyerlestir(struct gise*giseler) {//giseye bos olmasi durumunda yerlestirme yapiliyor...

Adı Soyadı Öğrenci No. Toplam (100p) 2 (10p) +10p. 5 (25p) +10p. 3 (20p) 4 (25p) 1 (20p)

Giriş. İplik Modeli. geleneksel işletim sistemlerinde her prosesin özel adres uzayı ve tek akış kontrolü var.

mod ile açılacak olan dosyanın ne amaçla açılacağı belirlenir. Bunlar:

ALGORİTMA VE PROGRAMLAMA II

PROGRAMLAMAYA GİRİŞ FONKSİYONLAR

BİLG Dr. Mustafa T. Babagil 1

Final Sınavı Soruları Güz, Süre: 90 Dakika

İşletim Sistemlerine Giriş

Diziler. Yrd.Doç.Dr.Bülent ÇOBANOĞLU

İşletim Sistemleri. Dr. Binnur Kurt Omega Eğitim ve Danışmanlık İşletim Sistemleri

enum bolumler{elektronik, insaat, bilgisayar, makine, gida};

Genel Programlama II

Giriş. geleneksel işletim sistemlerinde her prosesin. aynı adres uzayında birden fazla akış kontrolü gerekebilir

Sınav tarihi : Süre : 60 dak.

PROCESS YARATIMI (TEKRAR):

ÇOK BOYUTLU DİZİLER VE DİNAMİK BELLEK YÖNETİMİ İLE İLGİLİ ÖRNEKLER

BMB1002 Bilgisayar Programlamaya Giriş. Dosyalar. Prof. Dr. Necmettin Kaya

Ders 8: Metotlar. barisgokce.com

AHMET YESEVİ ÜNİVERSİTESİ BİLİŞİM SİSTEMLERİ VE MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ LİSANS DÖNEM ÖDEVİ

elemanlı bir dizide bir sinyalin 1 er saniye aralıklarla ölçülen gerilim değerleri tutulmaktadır. Bu sinyalin tepeden tepeye genliğini,

Prosesler Arası Haberleşme ve Senkronizasyon

Yrd. Doç. Dr. Caner ÖZCAN

İş Parçacıkları Thread(s)

10. DOSYA GİRİŞ ÇIKIŞ FONKSİYONLARI

DİZİLER-KATARLAR ALGORİTMA VE PROGRAMLAMA II

sayi=3 harf=a reelsayi=8.72 Bellek durumu 5. İşaretç iler (pointers)

Fonksiyonlar. C++ ve NESNEYE DAYALI PROGRAMLAMA 51. /* Fonksiyon: kup Bir tamsayının küpünü hesaplar */ long int kup(int x) {

BİLGİSAYAR TEMELLERİ VE PROGRAMLAMAYA GİRİŞ

YZM 3102 İşletim Sistemleri

Temel Bilgisayar Programlama Final Sınavı Çalışma Notları

DOSYA İŞLEMLERİ Programlama dilleri hafta -

Programlama Dilleri. C Dili. Programlama Dilleri-ders08/ 1

Süreç 1 Kavramı ve Oluşturma Yöntemleri

İstanbul Teknik Üniversitesi IEEE Öğrenci Kolu DİZİLER

Stack Islemleri. Postfix ve Infix notasyonlari. Stack ozellikleri

BMT 101 Algoritma ve Programlama I 11. Hafta. Yük. Müh. Köksal Gündoğdu 1

Görsel Programlama DERS 11. Görsel Programlama - Ders11/ 1

BLM-112 PROGRAMLAMA DİLLERİ II. Ders-1 Kapsama Kuralları & Rasgele Sayı Üretimi & Rekürsif (Özyinelemeli) Fonksiyonlar

Final Sınavı Soruları Bahar 2018

#include<stdio.h> #include<conio.h> #define doktorsayisi 3. typedef struct dr{ int ay1, ay2, ay3, ay4; } doktor; float hesapla(doktor dktr){

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-12 Fonksiyonlar. Yrd. Doç. Dr. Ümit ATİLA

Hafta 13 Fonksiyonlar

şeklinde tanımlanmıştır. O halde, dosyaları daha önceki bilgilerimizi kullanarak FILE *Dosya1, *Dosya2;

Hafta 12 Karakter Tutan Diziler

Ders 4: Diziler (Arrays( Arrays) barisgokce.com

int main(void) { int num = 0; int input = 1; int retval = 0; struct NODE *nodepointer; nodepointer = (struct NODE *)malloc(sizeof(struct NODE));

Jval tipi. Genel veri yapılarını kullanacağımız zaman Jval den faydalanırız.önemli olanlar aşağıda mevcuttur:

Bil 101 Bilgisayar Yazılımı 1 Çözümlü Sorular Timur Karaçay

Yrd. Doç. Dr. Caner ÖZCAN

void setup() fonksiyonu: Bu fonksiyon program ilk açıldığında bir kere çalışır ve gerekli kalibrasyon, setup komutlarını buraya yazarız.

HSancak Nesne Tabanlı Programlama I Ders Notları

İŞLETİM SİSTEMLERİ DÖNEMİÇİ SINAVI

Bölüm 5: İşlemci Zamanlaması. Operating System Concepts with Java 8 th Edition

KOCAELİ ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ

Yrd. Doç. Dr. Caner ÖZCAN

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

MAK 1005 Bilgisayar Programlamaya Giriş. Fonksiyonlar. Prof. Dr. Necmettin Kaya

BMÜ-111 Algoritma ve Programlama. Bölüm 5. Tek Boyutlu Diziler

ALGORİTMA VE PROGRAMLAMA II

Temel Giriş/Çıkış Fonksiyonları

Programlama Dilleri 1. Ders 3: Rastgele sayı üretimi ve uygulamaları

Bilgisayar Programlama. 1.Hafta

BLM-112 PROGRAMLAMA DİLLERİ II. Ders-3 İşaretçiler (Pointer) (Kısım-2)

İNÖNÜ ÜNİVERSİTESİ MÜH. FAK. BİLGİSAYAR MÜH. BÖL. ALGORİTMA VE PROGRAMLAMA 1 DERSİ LAB. ÖDEVİ

2) /* Kullanıcıdan alınan iki sayının obebini alt fonksiyon yardımı ile hesaplayan C programı*/

if (ad == "Sabri") Console.WriteLine("Merhaba Sabri. Ne zamandır gözükmüyodun...");

ATATÜRK ÜNİVERSİTESİ BİLGISAYAR MÜHENDİSLİĞİ BÖLÜMÜ BM 104- NESNEYE YÖNELİK PROGRAMLAMA DERSİ BAHAR DÖNEMİ ÖDEV-3

6. HAFTA KBT204 İNTERNET PROGRAMCILIĞI II. Öğr.Gör. Hakan YILMAZ.

ELN1002 BİLGİSAYAR PROGRAMLAMA 2

Temel Bilgisayar Programlama

Bilgisayar İşletim Sistemleri BLG 312

enum, struct, union ve typedef Yapıları

Strings(Karakter Dizisi)

Hafta 11 Çok Boyutlu Diziler

void main() { int a[] = {1, 2, 3, 4, 5, 6}; int *p=&a[2]; int **pp=&p; printf("%d", **pp+2); }

8. İŞARETCİLER (POINTERS)

Matris İşlemleri Uygulaması

Sınav tarihi : Süre : 60 dak. a) strstr b) strchr c) strcat d) strcpy e) strlen. a) b) d) e) 0

Arasınav Sınavı Soruları Güz 2017 Süre: 90 Dakika

Bil101 Bilgisayar Yazılımı I. M. Erdem ÇORAPÇIOĞLU Bilgisayar Yüksek Mühendisi

BLGM 343 DENEY 8 * TCP İLE VERİ İLETİŞİMİ

Diziler (Arrays) Çok Boyutlu Diziler

Karakter katarları ile ilgili fonksiyonlar içerir Yerel kayan noktalı sayılar tanımlanır

BLM-112 PROGRAMLAMA DİLLERİ II. Ders-8 Dosya İşlemleri-1. Yrd. Doç. Dr. Ümit ATİLA

ALGORİTMA VE PROGRAMLAMA I

Windows'da çalışırken pek çok durumda bir işe başlamadan önce işletim sisteminin o işe ilişkin bilgileri depolayacağı bir alan yaratması gerekir.

NESNE TABANLI PROGRAMLAMA Final Sınavı Cevapları

BIL222 Veri Yapıları ve Algoritmalar

İNÖNÜ ÜNİVERSİTESİ MÜH. FAK. BİLGİSAYAR MÜH. BÖL. ALGORİTMA VE PROGRAMLAMA 1 DERSİ LAB. ÖDEVİ

Transkript:

EGE ÜNİVERSİTESİ BİLGİSAYAR MÜHENDİSLİĞİ İşletim Sistemleri-II Ödev-II Barış Taşkend 05090000006 16.02.2012

İçindekiler 1. Barrier... 2 1.1. Giriş... 2 1.2. Barrier Nedir ve Nasıl Çalışır?... 2 1.2.1. Barrier Nedir?... 2 1.2.2. Barrier Nasıl Çalışır?... 3 1.3. Barrier Tanımlama ve Barrier Fonksiyonları... 4 1.4. Bariyer kullanarak hazırladığım at yarışı simülasyonu... 6 1.4.1. Program hakkında... 6 1.4.2. Programın Kaynak Kodu... 6 1.4.3. Programın Ekran Çıktısı... 9 2. multi_thr.c programı hakkında... 9 3. Thread Cancellation ve fonksiyonları... 10 Kaynaklar... 12 1

1. Barrier 1.1. Giriş Süreçlerin, birbirileriyle paylaşılan ve eşleşmiş bellek alanı kullanarak haberleşip adres uzayını, dosyaları ve mesajlar yoluyla verileri paylaştığı durumda paylaşılan verilere erişim verilerde tutarsızlık oluşturabilir. Birden fazla sürecin aynı veriye aynı anda erişip değiştirmeye çalıştığı ve çıkışın süreçlerin çalışma sıralarına bağlı olduğu duruma race condition (yarış durumu) denir. Aynı şekilde multithread sistemlerde thread lerin aynı veriye ulaşıyor olması da yarış durumuna ve tutarsızlığa neden olmaktadır. [1][7] Bir sürece/thread e ilişkin program kodunda paylaşılan kaynaklar, veriler üzerinde işlem yapılan kısma kritik bölge denir. Aynı kaynağa ilişkin kritik bölge kod parçasını ancak bir anda tek bir sürecin veya thread in yürütmesi gerekir. Diğerlerinin bekletilmesi içinde bulunan kodun yapısına göre mutex, semafor, spinlock, barrier, reader-writer lock gibi senkronizasyonlar aracılığıyla sağlanabilir. Aşağıda, araştırma konum olan barrier ler hakkında ayrıntılı bilgi vereceğim. [1][7] 1.2. Barrier Nedir ve Nasıl Çalışır? 1.2.1. Barrier Nedir? Barrier, bir kritik bölge senkronizasyon mekanizmasıdır. Bazı paralel işlemler süreçler ya da threadler devam etmeden önce belirli bir noktada buluşmaya ihtiyaç duyarlar. Bu durumlarda barrier kullanılır. Bunun yerine semafor da kullanılabilir fakat barrier daha uygundur. [2][3][7] 2

1.2.2. Barrier Nasıl Çalışır? Bir grup işin yaptıkları işlerde aşamadan aşamaya geçerken birbirlerini beklemelerini sağlar. Bir süreç bariyeri geçince bloklanır. Bariyeri geçen her süreç bloklanır. Son süreç de bariyeri geçtiğinde hepsi tekrar çalışırlar. Örneğin; bir milyon x bir milyon boyutundaki matrisi çok işlemcili bir sistemde belirli bir işe tabi tutulsun. n+1. adım n. adım bitmeden gerçekleşmemelidir. [4] Aşağıdaki şekilde de görüldüğü üzere, başlangıçta 3 thread aynı anda çalışmaktadır. Belirli bir zaman sonra thread 1 bariyere takılmaktadır ve bu andan itibaren diğer tüm threadlerin de bariyere takılmasını bekler. Daha sonrasında thread 2 de bariyere takılır ve o da diğer threadlerin aynı yere gelmesini bekler. Üçüncü ve son thread de bariyere geldikten sonra, artık tüm thread ler ortak bir noktada buluşmuşlardır. Bu andan itibaren thread ler aynı anda serbest kalırlar ve kalan işlemlerine paralel bir şekilde devam ederler.[2] Bariyerin çekirdek mekanizması bir counter şeklindedir. Counter, initialize sırasında thread sayısına eşitlenir. Bariyere gelen her bir thread bariyer içindeki counter ı bir azaltır. Bariyer, içindeki counter sayısı sıfır olana kadar kendisine gelen threadleri tutar ve işleme devam etmelerine izin vermez.[2][5] Seri-paralel algoritmaların (SPAs) sağlanması için de bariyerler önemli avantaj sağlarlar. Her bir algoritma adımında bir önceki işlemlerin bitip bitmediğinin kontrol edilmesi gerekebilir ve/veya her bir adım farklı sayıda thread ile çalıştırılacak olabilir. Buna benzer durumlarda thread lerin yeni adım için bitmesini beklemek gerekebilir. [6] Aşağıdaki şekilde de görüldüğü gibi her bir stage için ayrı thread sayısı gerekiyor ve her bir stage den önce bir önceki stage i çalıştıran thread lerin tamamın bitmiş olması gerekiyorsa bariyerler ideal bir çözüm olarak kullanılabilir.[6] 3

Başlangıç için iki thread yeterlidir fakat, daha sonralarda thread sayısını arttırılıp azaltılması gerekebilir. Ayrıca her bir adım için, önceki adımlardaki işlemleri yürüten thread lerin de bitmiş olması sağlanmıştır.[6] Bariyere gelen thread lerin bekleme ve ardından çalışma mekanizmasını kod ile açıklayacak olursak, aşağıdaki kodda da görüldüğü gibi, bariyer bekleme fonksiyonuna gelen threadler burada bir mutex i başka bir thread aynı anda gelmesin die lock ederler. Daha sonra gelen thread bariyerdeki bekleyen thread sayısını (curcount) bir arttırır. Eğer bu thread geldikten sonra oluşan değer toplam thread değerine ulaşmamışsa bu thread if condition a girmez ve beklemeye geçer. Eğer theadlerin hepsi geldiyse son gelen thread if içine girer ve broadcast ile tüm bekleyen thread leri serbest bırakır. Böylece bariyerde bekleyen thread lerin hepsi aynı anda serbest bırakılmıştır.[8] 1.3. Barrier Tanımlama ve Barrier Fonksiyonları Bariyer oluşuturulurken yapılacak adımlar şöyledir: 1. Main fonksiyonun üstünde global olarak bariyer tanımlama 4

2. Main fonksiyonu içerisin de bariyeri initialize etme 3. Thread lerin diğer thread leri bekleyeceği kısmın belirlenmesi [9] pthread_barrier_t b; // barrier tanımlama Parameters: b: bariyerin pointer ı. pthread_barrier_init(&b,attr,count); // barrier initialize Parameters: b: bariyerin pointer ı. attr: bariyer attribute unun pointeri, NULL default değer olarak kullanılır. count: beklecenek thread sayısı. Return Value: Sonuç başaralı ise 0 döner, değilse hata numarı döner. pthread_barrier_wait(&b); // barrier de thread bekletme fonksiyonu Parameters: b: bariyerin pointer ı. int pthread_barrier_destroy(pthread_barrier_t *b) ; //bariyer yok etme Parameters: b: bariyerin pointer ı. Return Value: Sonuç başaralı ise 0 döner, değilse hata numarı döner. int pthread_barrier_wait (pthread_barrier_t* b) ; // bariyerde thread bekletme Parameters: b: bariyerin pointer ı. Return Value: Sonuç başaralı ise, PTHREAD_BARRIER_SERIAL_THREAD ya da 0 döner, değilse hata numarı döner. [10] Diğer Barrier Fonksiyonları: pthread_barrier_reinit // bariyeri yeniden initialize etmeye yarar pthread_barrier_size // bariyerdeki thread sayısını verir pthread_barrierattr_create // bariyer attribute u oluşturma pthread_barrierattr_delete // bariyer attribute u oluşturma pthread_barrier_checkin // bariyer thread check in pthread_barrier_checkou // bariyer thread check out pthread_barrier_getflags // bariyer bayraklarını döndürme 5

pthread_barrier_getloginfo // bariyer login bilgisini döndürme 1.4. Bariyer kullanarak hazırladığım at yarışı simülasyonu 1.4.1. Program hakkında Program bir at yarışı simülasyonudur. Bildiği gibi at yarışının başlaması için tüm atların başlangıç çizgisine gelmesi gerekmektedir. Daha sonra start verilir ve koşu başlar. Programımda koşacak olan her bir atın işlemi, bir thread tarafından yönetilmektedir. Atlar yani thread ler önce rastgele atanan bir ısınma süresi kadar beklerler ve bu süreyi ekrana yazdırırlar, bekledikten sonra bariyere yani atların başlangıç çizgisine gelirler ve barrier de diğer thread leri beklerler, yani diğer atların başlangıç çizgisine gelmesi beklerler. Tüm threadler barrier e geldikten sonra yarış başlar ve tüm threadler yani atlar serbest bırakılır, böylece tüm threadler yine random olan bir yarışı bitirme süresi boyunca beklerler, her at da kendi yarış bitirme süresinde yarışı bitirmiş olur ve bitirdiği anda ekrana bitirme süresini yazar. Daha sonra main thread imiz kazanan atı belirtir. 1.4.2. Programın Kaynak Kodu #include <pthread.h> #include <stdio.h> #include <stdlib.h> #include <time.h> #define NUM_THREADS 10 char *isimler[num_threads]; // at isimlerini tuttugum dizi typedef struct // at özelliklerini tuttugum struct int thread_id; char *isim; int isinmasuresi; int bitirmesuresi; thread_data; thread_data thread_data_array[num_threads]; // at ozelliklerinin dizisi pthread_barrier_t barr; // bir bariyer tanimliyorum void * atlarikostur(void *arg) // atlarin kosmasini saglayan fonksiyonum int id=(int) arg; // main'den fonksiyona yolladigim thread_id yi bir degere atiyorum 6

sleep(thread_data_array[id].isinmasuresi); // isinma suresi boyunca uyutuyorum. printf("%s isimli at, pistte %d isinma turu atti ve %d. cepteki yerini aldi...\n",thread_data_array[id].isim,thread_data_array[id].isinmasuresi,thread_data_array[i d].thread_id+1); pthread_barrier_wait(&barr); // gelen threadin (atin) diger threadleri beklemesini sagliyorum (start icin diger atlari bekleme) if(id==1) sleep(1); printf("\natlar ceplerdeki yerlerini aldi ve koşuya hazirlar...\n"); sleep(1); printf("\nstart verildi ve koşu başladı!\n\n"); else sleep(2); sleep(thread_data_array[id].bitirmesuresi); // threadler bekliyor (atlar kosuyor) printf("%s isimli at, 1 dakika %d saniye sonra bitis cizgisini gecti...\n",thread_data_array[id].isim,thread_data_array[id].bitirmesuresi); pthread_exit(0); // thread bitir int main() srand((unsigned)time(0)); pthread_t threads[num_threads]; //threadleri tuttugum dizi int i=0,kazananatid=0; isimler[0]="meliksah"; // atlarin isimleri isimler[1]="kurtiniadis"; isimler[2]="kafkasli"; isimler[3]="altin Bike"; isimler[4]="caprice"; isimler[5]="ace of Base"; isimler[6]="yavuzhan"; isimler[7]="grand Ekinoks"; isimler[8]="turbo"; isimler[9]="trapper"; if(pthread_barrier_init(&barr, NULL, NUM_THREADS)) // barrier initialize ediyorum 7

printf("bariyer olusturulamadi\n"); return -1; printf("\n AT YARISI SIMULASYONU\n"); printf("\natlar yaris öncesi isinma turlarini atmak icin yaris pistine ciktilar...\n\n"); sleep(1); for(i=0; i<num_threads; i++) //threadleri olusturuyorum (atlari olusuturp bilgileri ekliyorum) thread_data_array[i].thread_id=i; thread_data_array[i].isim=isimler[i]; thread_data_array[i].isinmasuresi=(rand()%10)+1; thread_data_array[i].bitirmesuresi=(rand()%10)+1; pthread_create(&threads[i], NULL, atlarikostur,(void *)i); // threadleri fonksiyona yolluyorum (atlari kosturtuyorum) for(i=0; i< NUM_THREADS; i++) //tum threadler sonlanana kadarbeklyirum (tum atlar yarisi bitirine kadar bekliyorum) if(pthread_join(threads[i],null)) printf("join islemi yapilamadi\n"); return -1; printf("\nbutun atlar bitis cizgisini gecti.\n"); for(i=0; i<num_threads; i++) //kazanan ati buluyorum if(thread_data_array[i].bitirmesuresi<thread_data_array[kazananatid].bitirmesuresi) kazananatid=thread_data_array[i].thread_id; printf("kazanan atin adi: %s!\n\n",thread_data_array[kazananatid].isim); return 0; 8

1.4.3. Programın Ekran Çıktısı 2. multi_thr.c programı hakkında Bu programda bir adet main thread içersinde çağırılan beş tane thread in çeşitli fonksiyonları çalıştırması ve bu fonksiyonlarda diğer thread ler ile etkileşim halinde olması sağlanmıştır. Kodun işleyişinden bahsedecek olursak, öncelik main içerisinde, main threadin tanımlası yapılmıştır ve thread fonksiyonları çağırılmıştır. Ayrıca bir de thread cancel işlemi yapılmıştır.( Aşağıdaki 3 numaralı başlıkta thread cancellation işlemini ayrıntılı açıklamış 9

bulunmaktayım.) Kodun işleyişindeki methodlara bakacak olursak, sub_a: Burada bir thread başka bir threadi oluşturmuş ve daha sonra bekleyip yok etmiştir. sub_b: Burada bir thread kendi numarasını bir değere atamış ve daha sonra kendisini sonladırmıştır. sub_c: Burada bir thread main thread ile join olmuş yani main thread in bitmesini beklemiştir. Mai thread bittikten sonra başka bir thread oluşturmuş ve bunu da daha sonra sonlandırmıştır. sub_d: Burada bir thread, başka bi threadi cancel etmiştir. Daha sonra başka bir thread oluşturmuş ve bunu da sonlandırmıştır. sub_e: Burada bir thread başka bir thread ile join olmuş yani onun sonlanmasını beklemiştir. Daha sonra da başka bir thread i cancel etmiştir. Main içerisinde bu 5 thread oluşturulmuş ve bu yukarıdaki fonksiyonlara yollanmıştır. Fonksiyonlar içerisinde de bu thread ler sürekli birbirleri çağırmış, oluşturmuş ya da sonlarmıştır. Kısacası sürekli thread lerin birbirileriyle etkileşim içerisinde olabileceği gösterilmiştir. Buradaki hazır fonksiyonlar da şunlardır; pthread_create() thread oluşturur pthread_self() thread in numarasını döndürür pthread_join() join eden thread in join edilen thread sonlanana kadar beklemesini sağlar pthread_attr_init() pthread attribute u oluşturur pthread_attr_setscope() pthread attribute scope unu set eder 3. Thread Cancellation ve fonksiyonları Bir thread in kendisini sonlandırmadan, başka bir thread tarafında sonlarılmasına thread cancellation denir. Thread cancellation ın, thread exit işlemine göre avantajı thread cancel fonksiyonunu kullanıcının istediği şekilde yazabilmesidir. Bu işlem şu şekilde olur: Cancel işleminde kullanılacak fonksiyon yazılır. Hazırlanan fonksiyon stack e atılır. 10

Cancel işlemi gerçekleştirilir. Eğer başka bir cancel işleminde de bu fonksiyon kullanılacaksa stack te kalır ve başka cancellation larda da kullanılır. İşi biten cancel fonksiyonu stack ten çıkarılır. İşlemin tekrarlanması gerektiği durumlarda aynı ya da farklı cancel fonksiyonları stack e atılarak işlem tekrar uygulanabilir. Fonksiyonları: pthread_cleanup_push(myfonk, NULL); myfonk cancel fonksiyonunu stack e push eder. pthread_cleanup_pop(1); stack ten bir fonksiyonu çıkarır. Pthread_cancel() hazır cancel fonksiyonu [11][12][13] 11

Kaynaklar [1] İşletim Sistemleri ve Sistem Programlama, Karahan Kitabevi, 2102 [2] http://books.google.com.tr/books?id=txijdj9kbiac&printsec=frontcover&hl=tr#v=onepage &q&f=false [3] http://en.wikipedia.org/wiki/barrier_(computer_science) [4] http://members.comu.edu.tr/msahin/courses/isletim_sistemi_giris/ders04.pdf [5] http://books.google.com.tr/books?id=xx5tfraqq8cc&printsec=frontcover&hl=tr&source=gb s_ge_summary_r&cad=0#v=onepage&q&f=false [6] http://books.google.com.tr/books?id=3g6lrxrd4wsc&printsec=frontcover&hl=tr&source=gbs _ge_summary_r&cad=0#v=onepage&q&f=false [7] http://cs.unomaha.edu/~stanw/031/csci4510/th2.pdf [8] http://web.eecs.utk.edu/~dongarra/web-pages/spring-2011/hw3.pdf [9] http://pages.cs.wisc.edu/~travitch/pthreads_primer.html [10] http://user.it.uu.se/~ansan501/teaching/avdark/2010/lecture3.handouts.pdf [11] http://www.kernel.org/doc/man-pages/online/pages/man7/pthreads.7.html [12] http://alpha-supernova.dev.filibeto.org/lib/rel/4.0b/html/aa-q2dpc- TKT1_html/thrd0045.html [13] http://www.mkssoftware.com/docs/man3/pthread_cancel.3.asp 12