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
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 ...