Isletim Sistemleri Uygulama 4 - Unix`de semafor islemleri

Transkript

Isletim Sistemleri Uygulama 4 - Unix`de semafor islemleri
İşletim Sistemleri Uygulama 4
İşletim Sistemleri Uygulama 4
Unix’de semafor işlemleri
Bilgisayar Mühendisliği
İstanbul Teknik Üniversitesi
34469 Maslak, İstanbul
13 Mart 2013
BM
BLG 312
İşletim Sistemleri Uygulama 4
Bugün
İşletim Sistemleri Uygulama 4
Semafor İşlemleri
Örnekler
BM
BLG 312
İşletim Sistemleri Uygulama 4
Semafor İşlemleri
Örnekler
Semafor yaratma
◮
Unix’de semafor işlemlerinde kullanılacak başlık dosyaları
◮
◮
◮
◮
sys/ipc.h
sys/sem.h
sys/types.h
Semafor yaratma
int semget(key t key, int nsems, int semflg);
semflg:
IPC CREAT|0700 (Son 9 bit: erişim izinleri)
nsems sayıda semafor içeren bir semafor kümesi oluşturulur ve key ile
ilişikilendirilir:
◮
◮
IPC PRIVATE
IPC CREAT & (key ile ilişikilendirilmiş bir semafor seti hazırda yok ise)
BM
BLG 312
İşletim Sistemleri Uygulama 4
Semafor İşlemleri
Örnekler
Semafor yaratma
◮
Unix’de semafor işlemlerinde kullanılacak başlık dosyaları
◮
◮
◮
◮
sys/ipc.h
sys/sem.h
sys/types.h
Semafor yaratma
int semget(key t key, int nsems, int semflg);
semflg:
IPC CREAT|0700 (Son 9 bit: erişim izinleri)
nsems sayıda semafor içeren bir semafor kümesi oluşturulur ve key ile
ilişikilendirilir:
◮
◮
IPC PRIVATE
IPC CREAT & (key ile ilişikilendirilmiş bir semafor seti hazırda yok ise)
BM
BLG 312
İşletim Sistemleri Uygulama 4
Semafor İşlemleri
Örnekler
Semafor yaratma
◮
Unix’de semafor işlemlerinde kullanılacak başlık dosyaları
◮
◮
◮
◮
sys/ipc.h
sys/sem.h
sys/types.h
Semafor yaratma
int semget(key t key, int nsems, int semflg);
semflg:
IPC CREAT|0700 (Son 9 bit: erişim izinleri)
nsems sayıda semafor içeren bir semafor kümesi oluşturulur ve key ile
ilişikilendirilir:
◮
◮
IPC PRIVATE
IPC CREAT & (key ile ilişikilendirilmiş bir semafor seti hazırda yok ise)
BM
BLG 312
İşletim Sistemleri Uygulama 4
Semafor İşlemleri
Örnekler
Semafor yaratma
◮
Unix’de semafor işlemlerinde kullanılacak başlık dosyaları
◮
◮
◮
◮
sys/ipc.h
sys/sem.h
sys/types.h
Semafor yaratma
int semget(key t key, int nsems, int semflg);
semflg:
IPC CREAT|0700 (Son 9 bit: erişim izinleri)
nsems sayıda semafor içeren bir semafor kümesi oluşturulur ve key ile
ilişikilendirilir:
◮
◮
IPC PRIVATE
IPC CREAT & (key ile ilişikilendirilmiş bir semafor seti hazırda yok ise)
BM
BLG 312
İşletim Sistemleri Uygulama 4
Semafor İşlemleri
Örnekler
Semafor yaratma
◮
Unix’de semafor işlemlerinde kullanılacak başlık dosyaları
◮
◮
◮
◮
sys/ipc.h
sys/sem.h
sys/types.h
Semafor yaratma
int semget(key t key, int nsems, int semflg);
semflg:
IPC CREAT|0700 (Son 9 bit: erişim izinleri)
nsems sayıda semafor içeren bir semafor kümesi oluşturulur ve key ile
ilişikilendirilir:
◮
◮
IPC PRIVATE
IPC CREAT & (key ile ilişikilendirilmiş bir semafor seti hazırda yok ise)
BM
BLG 312
İşletim Sistemleri Uygulama 4
Semafor İşlemleri
Örnekler
Semafor yaratma
◮
Unix’de semafor işlemlerinde kullanılacak başlık dosyaları
◮
◮
◮
◮
sys/ipc.h
sys/sem.h
sys/types.h
Semafor yaratma
int semget(key t key, int nsems, int semflg);
semflg:
IPC CREAT|0700 (Son 9 bit: erişim izinleri)
nsems sayıda semafor içeren bir semafor kümesi oluşturulur ve key ile
ilişikilendirilir:
◮
◮
IPC PRIVATE
IPC CREAT & (key ile ilişikilendirilmiş bir semafor seti hazırda yok ise)
BM
BLG 312
İşletim Sistemleri Uygulama 4
Semafor İşlemleri
Örnekler
Semafor işlemleri
◮
int semop(int semid, struct sembuf *sops, unsigned nsops);
◮
◮
◮
semop, semid ile ilişkili semafor kmesinden seçilen semaforlar üzerinde işlem yapar.
sops ile işaret edilen nsops tane elemanın her biri, belirli bir semafor üzerinde yapılacak
işlemi belirtir (elemanlar sembuf tipinde)
struct sembuf{
unsigned short sem num; // numaralama 0’dan başlar
short sem op;
short sem flg;
};
◮
Bu işlemler listedeki sıralarına göre atomik olarak yürütülürler.
◮
sem flg
◮
◮
◮
SEM UNDO: process sonlanınca işlemi geri al
IPC NOWAIT: Eksiltemeyince hata ver ve dön
sem op
◮
◮
== 0 :
!= 0 :
olmalı
sıfır olmasını bekle (Okuma Hakkı olmalı)
değer semafor değerine eklenir(çıkarılır) (Değiştirme hakkı
BM
BLG 312
İşletim Sistemleri Uygulama 4
Semafor İşlemleri
Örnekler
Semafor işlemleri
◮
int semop(int semid, struct sembuf *sops, unsigned nsops);
◮
◮
◮
semop, semid ile ilişkili semafor kmesinden seçilen semaforlar üzerinde işlem yapar.
sops ile işaret edilen nsops tane elemanın her biri, belirli bir semafor üzerinde yapılacak
işlemi belirtir (elemanlar sembuf tipinde)
struct sembuf{
unsigned short sem num; // numaralama 0’dan başlar
short sem op;
short sem flg;
};
◮
Bu işlemler listedeki sıralarına göre atomik olarak yürütülürler.
◮
sem flg
◮
◮
◮
SEM UNDO: process sonlanınca işlemi geri al
IPC NOWAIT: Eksiltemeyince hata ver ve dön
sem op
◮
◮
== 0 :
!= 0 :
olmalı
sıfır olmasını bekle (Okuma Hakkı olmalı)
değer semafor değerine eklenir(çıkarılır) (Değiştirme hakkı
BM
BLG 312
İşletim Sistemleri Uygulama 4
Semafor İşlemleri
Örnekler
Semafor işlemleri
◮
int semop(int semid, struct sembuf *sops, unsigned nsops);
◮
◮
◮
semop, semid ile ilişkili semafor kmesinden seçilen semaforlar üzerinde işlem yapar.
sops ile işaret edilen nsops tane elemanın her biri, belirli bir semafor üzerinde yapılacak
işlemi belirtir (elemanlar sembuf tipinde)
struct sembuf{
unsigned short sem num; // numaralama 0’dan başlar
short sem op;
short sem flg;
};
◮
Bu işlemler listedeki sıralarına göre atomik olarak yürütülürler.
◮
sem flg
◮
◮
◮
SEM UNDO: process sonlanınca işlemi geri al
IPC NOWAIT: Eksiltemeyince hata ver ve dön
sem op
◮
◮
== 0 :
!= 0 :
olmalı
sıfır olmasını bekle (Okuma Hakkı olmalı)
değer semafor değerine eklenir(çıkarılır) (Değiştirme hakkı
BM
BLG 312
İşletim Sistemleri Uygulama 4
Semafor İşlemleri
Örnekler
Semafor işlemleri
◮
int semop(int semid, struct sembuf *sops, unsigned nsops);
◮
◮
◮
semop, semid ile ilişkili semafor kmesinden seçilen semaforlar üzerinde işlem yapar.
sops ile işaret edilen nsops tane elemanın her biri, belirli bir semafor üzerinde yapılacak
işlemi belirtir (elemanlar sembuf tipinde)
struct sembuf{
unsigned short sem num; // numaralama 0’dan başlar
short sem op;
short sem flg;
};
◮
Bu işlemler listedeki sıralarına göre atomik olarak yürütülürler.
◮
sem flg
◮
◮
◮
SEM UNDO: process sonlanınca işlemi geri al
IPC NOWAIT: Eksiltemeyince hata ver ve dön
sem op
◮
◮
== 0 :
!= 0 :
olmalı
sıfır olmasını bekle (Okuma Hakkı olmalı)
değer semafor değerine eklenir(çıkarılır) (Değiştirme hakkı
BM
BLG 312
İşletim Sistemleri Uygulama 4
Semafor İşlemleri
Örnekler
Semafor işlemleri
◮
int semop(int semid, struct sembuf *sops, unsigned nsops);
◮
◮
◮
semop, semid ile ilişkili semafor kmesinden seçilen semaforlar üzerinde işlem yapar.
sops ile işaret edilen nsops tane elemanın her biri, belirli bir semafor üzerinde yapılacak
işlemi belirtir (elemanlar sembuf tipinde)
struct sembuf{
unsigned short sem num; // numaralama 0’dan başlar
short sem op;
short sem flg;
};
◮
Bu işlemler listedeki sıralarına göre atomik olarak yürütülürler.
◮
sem flg
◮
◮
◮
SEM UNDO: process sonlanınca işlemi geri al
IPC NOWAIT: Eksiltemeyince hata ver ve dön
sem op
◮
◮
== 0 :
!= 0 :
olmalı
sıfır olmasını bekle (Okuma Hakkı olmalı)
değer semafor değerine eklenir(çıkarılır) (Değiştirme hakkı
BM
BLG 312
İşletim Sistemleri Uygulama 4
Semafor İşlemleri
Örnekler
Semafor kontrolü
◮
Değer Kontrolü
int semctl(int semid, int semnum, int cmd, arg);
◮
cmd
◮
IPC RMID
GETVAL
SETVAL
SETALL
GETALL
: semafor kümesindeki tüm semaforlar yok et, bekleyen prosesleri uyandır
: belirtilen semafora ait semval değerini getir
: belirtilen semafora ait semval değerini arg.val ne eşitle
: semafor kümesindeki tüm semaforlarn semval değerlerini arg.arrayi kullanarak
değiştir
: semafor kümesindeki tüm semaforlarn semval değerlerini getir
BM
BLG 312
İşletim Sistemleri Uygulama 4
Semafor İşlemleri
Örnekler
Temel semafor işlemleri : Artırma
v o i d s e m s i g n a l ( i n t se mi d , i n t v a l ){
s t r u c t se mb u f s e m a f o r ;
s e m a f o r . sem num =0;
s e m a f o r . se m op=v a l ;
s e m a f o r . s e m f l g =1;
semop ( se mi d , &s e m a f o r , 1 ) ;
}
3
BM
BLG 312
İşletim Sistemleri Uygulama 4
Semafor İşlemleri
Örnekler
Temel semafor işlemleri : Eksiltme
v o i d s e m w a i t ( i n t se mi d , i n t v a l ){
s t r u c t se mb u f s e m a f o r ;
s e m a f o r . sem num =0;
s e m a f o r . se m op=(−1∗ v a l ) ;
s e m a f o r . s e m f l g =1;
semop ( se mi d , &s e m a f o r , 1 ) ;
}
1
6
BM
BLG 312
İşletim Sistemleri Uygulama 4
Semafor İşlemleri
Örnekler
Örnek 1
#i n c l u d e
#i n c l u d e
#i n c l u d e
#i n c l u d e
#i n c l u d e
#i n c l u d e
#i n c l u d e
#i n c l u d e
<s t d i o . h>
<u n i s t d . h>
<s t d l i b . h>
<s y s / t y p e s . h>
<s y s / w a i t . h>
<s i g n a l . h>
<s y s / i p c . h>
<s y s / sem . h>
3
8
#d e f i n e SEMKEY 8
i n t son se m ;
13
v o i d m y s i g n a l ( v o i d ){
}
BM
BLG 312
İşletim Sistemleri Uygulama 4
Semafor İşlemleri
Örnekler
Örnek 1
v o i d s e m s i g n a l ( i n t se mi d , i n t v a l )
{
s t r u c t se mb u f s e m a f o r ;
s e m a f o r . sem num =0;
s e m a f o r . se m op=v a l ;
s e m a f o r . s e m f l g =1;
semop ( se mi d , &s e m a f o r , 1 ) ;
5
}
10
v o i d s e m w a i t ( i n t se mi d , i n t v a l )
{
s t r u c t se mb u f s e m a f o r ;
s e m a f o r . sem num =0;
s e m a f o r . se m op=(−1∗ v a l ) ;
s e m a f o r . s e m f l g =1;
semop ( se mi d , &s e m a f o r , 1 ) ;
15
}
20
v o i d m y s i g s e t ( i n t num){
stru ct si ga ct i o n mysigaction ;
m y s i g a c t i o n . s a h a n d l e r =( v o i d ∗) m y s i g n a l ;
m y s i g a c t i o n . s a f l a g s =0;
s i g a c t i o n (num,& m y s i g a c t i o n , NULL ) ;
}
BM
25
BLG 312
İşletim Sistemleri Uygulama 4
Semafor İşlemleri
Örnekler
Örnek 1
i n t main ( v o i d )
{
i n t f =1, i ;
int cocuklar [1 0];
4
mysigset (12);
f o r ( i =0; i <10; i ++){
i f ( f >0)
f=f o r k ( ) ;
i f ( f==−1){
p r i n t f ( ” f o r k e r r o r . . . . \ n” ) ;
exit (1);
}
i f ( f ==0)
break ;
else
c o c u k l a r [ i ]= f ;
}
BM
9
14
19
BLG 312
İşletim Sistemleri Uygulama 4
Semafor İşlemleri
Örnekler
Örnek 1
i f ( f >0){ /∗an n e ∗/
son se m=se mge t (SEMKEY, 1 , 0700| IPC CREAT ) ;
s e m c t l ( sonsem , 0 , SETVAL , 0 ) ;
sleep (1);
f o r ( i =0; i <10; i ++)
k i l l ( cocuklar [ i ] , 12);
1
6
s e m w a i t ( sonsem , 1 0 ) ;
p r i n t f ( ”Tum c o c u k l a r o l d u\n” ) ;
11
s e m c t l ( sonsem , 0 , IPC RMID , 0 ) ;
}
BM
BLG 312
İşletim Sistemleri Uygulama 4
Semafor İşlemleri
Örnekler
Örnek 1
e l s e { /∗ c oc u k ∗/
1
pause ( ) ;
son se m=se mge t (SEMKEY, 1 , 0 ) ;
p r i n t f ( ”Ben %d . s i r a d a y a r a t i l a n cocugum . K i m l i g i m=%d\n” , i , g e t p i d ( ) ) ;
p r i n t f ( ” su an . . . . %d\n ” ,
s e m c t l ( sonsem , 0 , GETVAL , 0 ) ) ;
6
s e m s i g n a l ( sonsem , 1 ) ;
}
return 0;
}
11
BM
BLG 312
İşletim Sistemleri Uygulama 4
Semafor İşlemleri
Örnekler
Örnek 2 - Ölümcül kilitlenme
#i n c l u d e
#i n c l u d e
#i n c l u d e
#i n c l u d e
#i n c l u d e
#i n c l u d e
#i n c l u d e
#i n c l u d e
<s t d i o . h>
<u n i s t d . h>
<s t d l i b . h>
<s y s / t y p e s . h>
<s y s / w a i t . h>
<s i g n a l . h>
<s y s / i p c . h>
<s y s / sem . h>
4
9
#d e f i n e SEMKEY A 1
#d e f i n e SEMKEY B 2
#d e f i n e SEMKEY C 3
v o i d m y s i g n a l ( i n t si gn u m ){
}
14
BM
BLG 312
İşletim Sistemleri Uygulama 4
Semafor İşlemleri
Örnekler
Örnek 2 - Ölümcül kilitlenme
v o i d s e m s i g n a l ( i n t se mi d , i n t v a l )
{
s t r u c t se mb u f s e m a f o r ;
s e m a f o r . sem num =0;
s e m a f o r . se m op=v a l ;
s e m a f o r . s e m f l g =1;
semop ( se mi d , &s e m a f o r , 1 ) ;
5
}
10
v o i d s e m w a i t ( i n t se mi d , i n t v a l )
{
s t r u c t se mb u f s e m a f o r ;
s e m a f o r . sem num =0;
s e m a f o r . se m op=(−1∗ v a l ) ;
s e m a f o r . s e m f l g =1;
semop ( se mi d , &s e m a f o r , 1 ) ;
15
}
20
v o i d m y s i g s e t ( i n t num){
stru ct si ga ct i o n mysigaction ;
m y s i g a c t i o n . s a h a n d l e r =( v o i d ∗) m y s i g n a l ;
m y s i g a c t i o n . s a f l a g s =0;
s i g a c t i o n (num,& m y s i g a c t i o n , NULL ) ;
}
BM
25
BLG 312
İşletim Sistemleri Uygulama 4
Semafor İşlemleri
Örnekler
Örnek 2 - Ölümcül kilitlenme
i n t main ( v o i d )
{
i n t semA , semB , semC , c [ 2 ] , f , i , s i r a m ;
3
mysigset (12);
f o r ( i =0; i <2; i ++){
f=f o r k ( ) ;
i f ( f ==0)
break ;
else
c [ i ]= f ;
}
8
13
i f ( f==−1){
p r i n t f ( ”FORK h a t a . . . . \ n ” ) ;
exit (1);
}
18
BM
BLG 312
İşletim Sistemleri Uygulama 4
Semafor İşlemleri
Örnekler
Örnek 2 - Ölümcül kilitlenme
i f ( f !=0){
p r i n t f ( ” Anne k a y n a k l a r i y a r a t m a y a b a s l i y o r . . . . \ n ” ) ;
1
semA=se mge t (SEMKEY A , 1 , 0700| IPC CREAT ) ;
s e m c t l ( semA , 0 , SETVAL , 1 ) ;
6
semB=se mge t (SEMKEY B , 1 , 0 7 0 0 | IPC CREAT ) ;
s e m c t l ( semB , 0 , SETVAL , 1 ) ;
semC=se mge t (SEMKEY C , 1 , 0 7 0 0 | IPC CREAT ) ;
s e m c t l ( semC , 0 , SETVAL , 0 ) ;
11
sleep (2);
p r i n t f ( ” Anne c o c u k l a r i b a s l a t i y o r
. . . . . . . \ n” ) ;
16
f o r ( i =0; i <2; i ++)
k i l l (c [ i ] ,12);
s e m w a i t ( semC , 2 ) ;
p r i n t f ( ” Anne : C o c u k l a r i n
isi
b i t t i , kaynaklar iade
s e m c t l ( semC , 0 , IPC RMID , 0 ) ;
s e m c t l ( semA , 0 , IPC RMID , 0 ) ;
s e m c t l ( semB , 0 , IPC RMID , 0 ) ;
21
e d i l i y o r . . . \ n” ) ;
26
exit (0);
}
BM
BLG 312
İşletim Sistemleri Uygulama 4
Semafor İşlemleri
Örnekler
Örnek 2 - Ölümcül kilitlenme
e l s e{
1
s i r a m=i ;
p r i n t f ( ” c oc u k %d an n e d e n h a b e r b e k l i y o r
. . . . \ n” , s i r a m ) ;
pause ( ) ;
6
semA=se mge t (SEMKEY A , 1 , 0 ) ;
semB=se mge t (SEMKEY B , 1 , 0 ) ;
semC=se mge t (SEMKEY C , 1 , 0 ) ;
p r i n t f ( ” c oc u k %d an n e d e n h a b e r a l d i ,
BM
basliyor
BLG 312
11
. . . . \ n” , s i r a m ) ;
İşletim Sistemleri Uygulama 4
Semafor İşlemleri
Örnekler
Örnek 2 - Ölümcül kilitlenme
i f ( s i r a m==0){
p r i n t f ( ” c oc u k %d : sem A e k s i l t i y o r u m .\ n ” , s i r a m ) ;
s e m w a i t ( semA , 1 ) ;
3
sleep (1);
p r i n t f ( ” c oc u k %d : sem A tamam , sem B e k s i l t i y o r u m .\ n ” , s i r a m ) ;
s e m w a i t ( semB , 1 ) ;
8
p r i n t f ( ” c oc u k %d :
s l e e p ( 5 ) ; /∗ K . B .
k r i t i k b ol ge md e yi m .\ n ” , s i r a m ) ;
i s l e m l e r i ∗/
s e m s i g n a l ( semB , 1 ) ;
s e m s i g n a l ( semA , 1 ) ;
s e m s i g n a l ( semC , 1 ) ;
13
}
BM
BLG 312
İşletim Sistemleri Uygulama 4
Semafor İşlemleri
Örnekler
Örnek 2 - Ölümcül kilitlenme
else
i f ( s i r a m==1){
p r i n t f ( ” c oc u k %d : sem B e k s i l t i y o r u m .\ n ” , s i r a m ) ;
s e m w a i t ( semB , 1 ) ;
4
sleep (1);
p r i n t f ( ” c oc u k %d : sem B tamam , sem A e k s i l t i y o r u m .\ n ” , s i r a m ) ;
s e m w a i t ( semA , 1 ) ;
9
p r i n t f ( ” c oc u k %d : k r i t i k b ol ge md e yi m .\ n ” , s i r a m ) ;
s l e e p ( 5 ) ; /∗ K . B . i s l e m l e r i ∗/
s e m s i g n a l ( semA , 1 ) ;
s e m s i g n a l ( semB , 1 ) ;
s e m s i g n a l ( semC , 1 ) ;
14
}
}
return 0;
}
19
BM
BLG 312
İşletim Sistemleri Uygulama 4
Semafor İşlemleri
Örnekler
Örnek 3 - Ölümcül kilitlenmeyi giderme
#i n c l u d e
#i n c l u d e
#i n c l u d e
#i n c l u d e
#i n c l u d e
#i n c l u d e
#i n c l u d e
#i n c l u d e
<s t d i o . h>
<u n i s t d . h>
<s t d l i b . h>
<s y s / t y p e s . h>
<s y s / w a i t . h>
<s i g n a l . h>
<s y s / i p c . h>
<s y s / sem . h>
1
6
#d e f i n e SEMKEY AB 1
#d e f i n e SEMKEY C 2
11
v o i d m y s i g n a l ( v o i d ){
}
BM
BLG 312
İşletim Sistemleri Uygulama 4
Semafor İşlemleri
Örnekler
Örnek 3 - Ölümcül kilitlenmeyi giderme
v o i d s e m s i g n a l ( i n t se mi d , i n t v a l )
{
s t r u c t se mb u f s e m a f o r ;
1
s e m a f o r . sem num =0;
s e m a f o r . se m op=v a l ;
s e m a f o r . s e m f l g =1;
semop ( se mi d , &s e m a f o r , 1 ) ;
6
}
v o i d s e m m u l t i s i g n a l ( i n t se mi d , i n t v a l , i n t n se ms )
{
s t r u c t se mb u f s e m a f o r [ 2 ] ;
int
11
i;
16
f o r ( i =0; i<n se ms ; i ++){
s e m a f o r [ i ] . se m op=v a l ;
s e m a f o r [ i ] . s e m f l g =1;
s e m a f o r [ i ] . sem num=i ;
}
21
// b i r s e m a f o r s e t i u z e r i n d e a y n i an d a i k i
semop ( se mi d , s e m a f o r , 2 ) ;
islem yapiliyor
f o r ( i =0; i<n se ms ; i ++){
p r i n t f ( ” s i g n a l : %d su an . . . . %d\n ” , i ,
s e m c t l ( se mi d , i , GETVAL , 0 ) ) ;
}
}
BM
BLG 312
26
İşletim Sistemleri Uygulama 4
Semafor İşlemleri
Örnekler
Örnek 3 - Ölümcül kilitlenmeyi giderme
v o i d s e m w a i t ( i n t se mi d , i n t v a l )
{
s t r u c t se mb u f s e m a f o r ;
s e m a f o r . sem num =0;
s e m a f o r . se m op=(−1∗ v a l ) ;
s e m a f o r . s e m f l g =1;
semop ( se mi d , &s e m a f o r , 1 ) ;
5
}
10
v o i d s e m m u l t i w a i t ( i n t se mi d , i n t v a l , i n t n se ms){
s t r u c t se mb u f s e m a f o r [ 2 ] ;
int i ;
f o r ( i =0; i<n se ms ; i ++){
s e m a f o r [ i ] . se m op=(−1∗ v a l ) ;
s e m a f o r [ i ] . s e m f l g =1;
s e m a f o r [ i ] . sem num=i ;
}
15
20
// b i r s e m a f o r s e t i u z e r i n d e a y n i an d a i k i
semop ( se mi d , s e m a f o r , 2 ) ;
islem yapiliyor
f o r ( i =0; i<n se ms ; i ++){
p r i n t f ( ” w a i t : %d su an . . . . %d\n ” , i ,
s e m c t l ( se mi d , i , GETVAL , 0 ) ) ;
}
}
BM
BLG 312
25
İşletim Sistemleri Uygulama 4
Semafor İşlemleri
Örnekler
Örnek 3 - Ölümcül kilitlenmeyi giderme
v o i d m y s i g s e t ( i n t num){
stru ct si ga ct i o n mysigaction ;
m y s i g a c t i o n . s a h a n d l e r =( v o i d ∗) m y s i g n a l ;
m y s i g a c t i o n . s a f l a g s =0;
s i g a c t i o n (num,& m y s i g a c t i o n , NULL ) ;
}
2
7
i n t main ( v o i d )
{
i n t semAB , semC , c [ 2 ] , f , i , s i r a m ;
mysigset (12);
12
f o r ( i =0; i <2; i ++){
f=f o r k ( ) ;
i f ( f ==0)
break ;
else
c [ i ]= f ;
}
17
i f ( f==−1){
p r i n t f ( ”FORK h a t a . . . . \ n ” ) ;
exit (1);
}
22
BM
BLG 312
İşletim Sistemleri Uygulama 4
Semafor İşlemleri
Örnekler
Örnek 3 - Ölümcül kilitlenmeyi giderme
i f ( f !=0){
p r i n t f ( ” Anne k a y n a k l a r i y a r a t m a y a b a s l i y o r . . . . \ n ” ) ;
semAB=se mge t (SEMKEY AB , 2 , 0700| IPC CREAT ) ;
s e m c t l ( semAB , 0 , SETVAL , 1 ) ;
s e m c t l ( semAB , 1 , SETVAL , 1 ) ;
5
semC=se mge t (SEMKEY C , 1 , 0 7 0 0 | IPC CREAT ) ;
s e m c t l ( semC , 0 , SETVAL , 0 ) ;
10
sleep (2);
p r i n t f ( ” Anne c o c u k l a r i b a s l a t i y o r
. . . . . . . \ n” ) ;
f o r ( i =0; i <2; i ++)
k i l l (c [ i ] ,12);
15
sleep (5);
s e m w a i t ( semC , 2 ) ;
p r i n t f ( ” Anne : C o c u k l a r i n
isi
b i t t i , kaynaklar iade
20
e d i l i y o r . . . \ n” ) ;
s e m c t l ( semC , 0 , IPC RMID , 0 ) ;
s e m c t l ( semAB , 0 , IPC RMID , 0 ) ;
25
exit (0);
}
BM
BLG 312
İşletim Sistemleri Uygulama 4
Semafor İşlemleri
Örnekler
Örnek 3 - Ölümcül kilitlenmeyi giderme
e l s e{
s i r a m=i ;
3
p r i n t f ( ” c oc u k %d an n e d e n h a b e r b e k l i y o r
. . . . \ n” , s i r a m ) ;
pause ( ) ;
semAB=se mge t (SEMKEY AB , 2 , 0 ) ;
semC=se mge t (SEMKEY C , 1 , 0 ) ;
8
p r i n t f ( ” c oc u k %d an n e d e n h a b e r a l d i ,
basliyor
. . . . \ n” , s i r a m ) ;
p r i n t f ( ” c oc u k %d : sem AB e k s i l t i y o r u m .\ n” , s i r a m ) ;
s e m m u l t i w a i t ( semAB , 1 , 2 ) ;
p r i n t f ( ” c oc u k %d :
sleep (5);
13
k r i t i k b ol ge md e yi m .\ n ” , s i r a m ) ;
18
s e m m u l t i s i g n a l ( semAB , 1 , 2 ) ;
s e m s i g n a l ( semC , 1 ) ;
}
return 0;
23
}
BM
BLG 312

Benzer belgeler

Isletim Sistemleri Uygulama 6 - Ninova

Isletim Sistemleri Uygulama 6 - Ninova p r i n t f ( ” I ’m t h e NO−SYNC p r i n t e r manager .\ n” ) ; // Run two t h r e a d s on p r i n t T h i s f u n c t i o n w i t h s e p a r a t e params p t h r e a d c r e a t e (&a , NULL ...

Detaylı

PHP`ye Giriş

PHP`ye Giriş geçtiğini alt ve üst sınırlar vererek anlatır.

Detaylı