Isletim Sistemleri Uygulama 6 - Ninova

Transkript

Isletim Sistemleri Uygulama 6 - Ninova
İşletim Sistemleri Uygulama 6
İşletim Sistemleri Uygulama 6
Unix’de semafor işlemleri
Bilgisayar Mühendisliği
İstanbul Teknik Üniversitesi
34469 Maslak, İstanbul
3 Nisan 2013
BM
BLG 312
İşletim Sistemleri Uygulama 6
Bugün
İşletim Sistemleri Uygulama 6
Uygulamada adım adım semafor kullanımı
Örnek Senkronizasyon Problemleri - H2 O
Örnek Senkronizasyon Problemleri - Sushi Bar
Örnek Senkronizasyon Problemleri - Parti
Problemi
BM
BLG 312
İşletim Sistemleri Uygulama 6
Uygulamada adım adım semafor kullanımı
Örnek Senkronizasyon Problemleri - H2 O
Örnek Senkronizasyon Problemleri - Sushi Bar
Örnek Senkronizasyon Problemleri - Parti Problemi
Problem
Amaç, bir yazıcı denetim uygulaması yazmaktır. Sistemde sadece bir yazıcı vardır. Bu
yazıcı yazdığı her sayfaya karşılık ekrana bir karakter basacak biçimde benzetilmiştir.
Bu uygulamaya kısa zaman içinde iki ayrı belgeden yüzer tane basma görevi verilmiştir.
Her iki tür belgenin sayfaları birbirine karışmadan baskı işi kotarılmalıdır.
BM
BLG 312
İşletim Sistemleri Uygulama 6
Uygulamada adım adım semafor kullanımı
Örnek Senkronizasyon Problemleri - H2 O
Örnek Senkronizasyon Problemleri - Sushi Bar
Örnek Senkronizasyon Problemleri - Parti Problemi
Senkronizasyon olmadan
1
6
11
16
// i n t s ; // c u r r e n t l y n o t u s e d
v o i d∗ p r i n t T h i s ( v o i d∗ t y p ){
int i , j ;
c h a r∗ s t r =( c h a r ) t y p== ’ a ’ ? ” a b c d e f g h i j ” : ” 0123456789 ” ;
// C r e a t e two t y p e s o f c o n t e n t f o r p r i n t j o b s
f o r ( i =0; i <100; i ++){ // 100 s e p a r a t e p r i n t j o b s
f o r ( j =0; j <10; j ++){ // o f 10 p a g e s e a c h .
p r i n t f ( ”%c ” , s t r [ j ] ) ;
// Each c h a r a c t e r r e p r e s e n t s a page
}
}
p t h r e a d e x i t (NULL ) ;
}
i n t main ( v o i d ){
pthread t a , n ;
s e t v b u f ( s t d o u t , ( c h a r ∗)NULL ,
IONBF , 0 ) ; // no−b u f f e r
printf
// s =1; // c u r r e n t l y n o t u s e d
21
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 , p r i n t T h i s , ( v o i d ∗) ’ a ’ ) ;
p t h r e a d c r e a t e (&n , NULL , p r i n t T h i s , ( v o i d ∗) ’ n ’ ) ;
26
// Wait f o r t h e t h r e a d s t o f i n i s h
p t h r e a d j o i n ( a , NULL ) ;
p t h r e a d j o i n ( n , NULL ) ;
31
p t h r e a d e x i t (NULL ) ;
return 0;
}
BM
BLG 312
İşletim Sistemleri Uygulama 6
Uygulamada adım adım semafor kullanımı
Örnek Senkronizasyon Problemleri - H2 O
Örnek Senkronizasyon Problemleri - Sushi Bar
Örnek Senkronizasyon Problemleri - Parti Problemi
Senkronizasyon olmadan oluşan örnek çıktı
I ’m t h e NO−SYNC p r i n t e r manager .
Oh ! Two h u n d r e d j o b s a r e s u b m i t t e d , and I g o t o n l y one p r i n t e r !
3
8
13
18
23
28
abcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghij
abcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabc0123456
7890123456789012345678901234567890123456789012345678901234567890123456
7890123456789012345678901234567890123456789012345678901234567890123456
78901234567890123456789012345678901234567890123456789012345 d e f g h i j a b c d
efghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcd
efghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcd
efghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcd
efghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcd
efghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcd
efghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcd
efghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcd
efghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcd
efghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcd
efghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcd
efghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcd
efghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcd
efghijabcdefghij678901234567890123456789012345678901234567890123456789
0123456789012345678901234567890123456789012345678901234567890123456789
0123456789012345678901234567890123456789012345678901234567890123456789
0123456789012345678901234567890123456789012345678901234567890123456789
0123456789012345678901234567890123456789012345678901234567890123456789
0123456789012345678901234567890123456789012345678901234567890123456789
0123456789012345678901234567890123456789012345678901234567890123456789
0123456789012345678901234567890123456789012345678901234567890123456789
0123456789012345678901234567890123456789012345678901234567890123456789
0123456789012345678901234567890123456789012345678901234567890123456789
0123456789012345678901234567890123456789012345678901234567890123456789
0123456789012345678901234567890123456789
BM
BLG 312
İşletim Sistemleri Uygulama 6
Uygulamada adım adım semafor kullanımı
Örnek Senkronizasyon Problemleri - H2 O
Örnek Senkronizasyon Problemleri - Sushi Bar
Örnek Senkronizasyon Problemleri - Parti Problemi
Senkronizasyon denemesi
1
6
11
16
int s ;
v o i d∗ p r i n t T h i s ( v o i d∗ t y p ){
int i , j ;
c h a r∗ s t r =( c h a r ) t y p== ’ a ’ ? ” a b c d e f g h i j ” : ” 0123456789 ” ;
f o r ( i =0; i <100; i ++){
i f ( s >0){ // C h e c k i n g f o r t h e v a l u e o f s th en ,
s−−; // m o d i f y i n g i t t o l o c k o t h e r t h r e a d s
f o r ( j =0; j <10; j ++){
p r i n t f ( ”%c ” , s t r [ j ] ) ;
}
s ++; // U n l o c k i n g o t h e r t h r e a d s .
}
}
p t h r e a d e x i t (NULL ) ;
}
i n t main ( v o i d ){
pthread t a , n ;
s e t v b u f ( s t d o u t , ( c h a r ∗)NULL ,
IONBF , 0 ) ; // no−b u f f e r
21
s =1;
p r i n t f ( ” I ’m t h e DUMMY−SYNC p r i n t e r manager .\ n” ) ;
p t h r e a d c r e a t e (&a , NULL , p r i n t T h i s , ( v o i d ∗) ’ a ’ ) ;
p t h r e a d c r e a t e (&n , NULL , p r i n t T h i s , ( v o i d ∗) ’ n ’ ) ;
26
p t h r e a d j o i n ( a , NULL ) ;
p t h r e a d j o i n ( n , NULL ) ;
31
p t h r e a d e x i t (NULL ) ;
return 0;
}
BM
BLG 312
printf
İşletim Sistemleri Uygulama 6
Uygulamada adım adım semafor kullanımı
Örnek Senkronizasyon Problemleri - H2 O
Örnek Senkronizasyon Problemleri - Sushi Bar
Örnek Senkronizasyon Problemleri - Parti Problemi
Senkronizasyon denemesinde oluşan örnek çıktı
3
8
13
18
ubuntu@ubuntu : ˜ / D e s k t o p $ . / a . o u t
I ’m t h e DUMMY−SYNC p r i n t e r manager .
When a p r i n t j o b i s s u b m i t t e d ,
I c r e a t e a new t h r e a d t o p r i n t t h e s t r i n g .
Oh ! Two h u n d r e d j o b s a r e s u b m i t t e d ,
and I g o t o n l y one p r i n t e r !
abcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghij
abcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghij
abcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghij
abcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghij
abcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghij
abcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghij
abcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghij
abcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghij
abcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghij
abcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghij
abcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghij
abcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghij
abcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghij
abcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghij
a b c d e f g h i j a b c d e f g h i j u b u n t u @ u b u n t u : ˜ / Desktop$
BM
BLG 312
İşletim Sistemleri Uygulama 6
Uygulamada adım adım semafor kullanımı
Örnek Senkronizasyon Problemleri - H2 O
Örnek Senkronizasyon Problemleri - Sushi Bar
Örnek Senkronizasyon Problemleri - Parti Problemi
Başarılı senkronizasyon
1
6
11
v o i d s e m s i g n a l ( i n t semid , i n t v a l ){
s t r u c t sembuf s e m a f o r ;
s e m a f o r . sem num =0;
s e m a f o r . sem op=v a l ;
s e m a f o r . s e m f l g =1;
semop ( semid , &s e m a f o r , 1 ) ;
}
v o i d s e m w a i t ( i n t semid , i n t v a l ){
s t r u c t sembuf s e m a f o r ;
s e m a f o r . sem num =0;
s e m a f o r . sem op=(−1∗ v a l ) ;
s e m a f o r . s e m f l g =1;
semop ( semid , &s e m a f o r , 1 ) ;
}
16
21
v o i d c r e a t e S e m a p h o r e ( c h a r ∗a r g v [ ] ) {
i n t someKey = f t o k ( s t r c a t ( g e t c u r r e n t d i r n a m e ( ) , a r g v [ 0 ] ) , 1 ) ;
s = s e m g e t ( someKey , 1 , 0 7 0 0 | IPC CREAT ) ;
s e m c t l ( s , 0 , SETVAL , 1 ) ;
}
BM
BLG 312
İşletim Sistemleri Uygulama 6
Uygulamada adım adım semafor kullanımı
Örnek Senkronizasyon Problemleri - H2 O
Örnek Senkronizasyon Problemleri - Sushi Bar
Örnek Senkronizasyon Problemleri - Parti Problemi
Başarılı senkronizasyonla oluşan örnek çıktı
int s ;
4
9
14
v o i d∗ p r i n t T h i s ( v o i d∗ t y p ){
int i , j ;
c h a r∗ s t r =( c h a r ) t y p== ’ a ’ ? ” a b c d e f g h i j ” : ” 0123456789 ” ;
f o r ( i =0; i <100; i ++){
s e m w a i t ( s , 1 ) ; // d e c r e a s e
f o r ( j =0; j <10; j ++){
p r i n t f ( ”%c ” , s t r [ j ] ) ;
}
s e m s i g n a l ( s , 1 ) ; // i n c r e a s e
}
p t h r e a d e x i t (NULL ) ;
}
i n t main ( i n t a r g c , c h a r ∗a r g v [ ] ) {
pthread t a , n ;
s e t v b u f ( s t d o u t , ( c h a r ∗)NULL ,
IONBF , 0 ) ; // no−b u f f e r
19
createSemaphore ( argv ) ;
p r i n t f ( ” I ’m t h e SEM−SYNC p r i n t e r manager .\ n” ) ;
p t h r e a d c r e a t e (&a , NULL , p r i n t T h i s , ( v o i d ∗) ’ a ’ ) ;
p t h r e a d c r e a t e (&n , NULL , p r i n t T h i s , ( v o i d ∗) ’ n ’ ) ;
p t h r e a d j o i n ( a , NULL ) ;
p t h r e a d j o i n ( n , NULL ) ;
24
s e m c t l ( s , 0 , IPC RMID , 0 ) ; // D e l e t e s
29
p t h r e a d e x i t (NULL ) ;
return 0;
}
BM
BLG 312
printf
İşletim Sistemleri Uygulama 6
Uygulamada adım adım semafor kullanımı
Örnek Senkronizasyon Problemleri - H2 O
Örnek Senkronizasyon Problemleri - Sushi Bar
Örnek Senkronizasyon Problemleri - Parti Problemi
Başarılı senkronizasyon
I ’m t h e SEM−SYNC p r i n t e r manager .
Oh ! Two h u n d r e d j o b s a r e s u b m i t t e d , and I g o t o n l y one p r i n t e r !
3
8
13
18
23
28
abcdefghijabcdefghijabcdefghij0123456789abcdefghij0123456789abcdefghij
0123456789 a b c d e f g h i j 0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j 0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j 0 1 2 3 4 5 6 7 8 9
abcdefghij0123456789abcdefghij0123456789abcdefghij0123456789abcdefghij
0123456789 a b c d e f g h i j 0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j 0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j 0 1 2 3 4 5 6 7 8 9
abcdefghij0123456789abcdefghij0123456789abcdefghij0123456789abcdefghij
0123456789 a b c d e f g h i j 0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j 0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j 0 1 2 3 4 5 6 7 8 9
abcdefghij0123456789abcdefghij0123456789abcdefghij0123456789abcdefghij
0123456789 a b c d e f g h i j 0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j 0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j 0 1 2 3 4 5 6 7 8 9
abcdefghij0123456789abcdefghij0123456789abcdefghij0123456789abcdefghij
0123456789 a b c d e f g h i j 0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j 0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j 0 1 2 3 4 5 6 7 8 9
abcdefghij0123456789abcdefghij0123456789abcdefghij0123456789abcdefghij
0123456789 a b c d e f g h i j 0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j 0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j 0 1 2 3 4 5 6 7 8 9
abcdefghij0123456789abcdefghij0123456789abcdefghij0123456789abcdefghij
0123456789 a b c d e f g h i j 0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j 0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j 0 1 2 3 4 5 6 7 8 9
abcdefghij0123456789abcdefghij0123456789abcdefghij0123456789abcdefghij
0123456789 a b c d e f g h i j 0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j 0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j 0 1 2 3 4 5 6 7 8 9
abcdefghij0123456789abcdefghij0123456789abcdefghij0123456789abcdefghij
0123456789 a b c d e f g h i j 0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j 0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j 0 1 2 3 4 5 6 7 8 9
abcdefghij0123456789abcdefghij0123456789abcdefghij0123456789abcdefghij
0123456789 a b c d e f g h i j 0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j 0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j 0 1 2 3 4 5 6 7 8 9
abcdefghij0123456789abcdefghij0123456789abcdefghij0123456789abcdefghij
0123456789 a b c d e f g h i j 0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j 0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j 0 1 2 3 4 5 6 7 8 9
abcdefghij0123456789abcdefghij0123456789abcdefghij0123456789abcdefghij
0123456789 a b c d e f g h i j 0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j 0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j 0 1 2 3 4 5 6 7 8 9
abcdefghij0123456789abcdefghij0123456789abcdefghij0123456789abcdefghij
0123456789 a b c d e f g h i j 0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j 0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j 0 1 2 3 4 5 6 7 8 9
abcdefghij0123456789abcdefghij0123456789abcdefghij0123456789abcdefghij
0123456789 a b c d e f g h i j 0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j 0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j 0 1 2 3 4 5 6 7 8 9
abcdefghij012345678901234567890123456789ubuntu@ubuntu : ˜ / Desktop$
BM
BLG 312
İşletim Sistemleri Uygulama 6
Uygulamada adım adım semafor kullanımı
Örnek Senkronizasyon Problemleri - H2 O
Örnek Senkronizasyon Problemleri - Sushi Bar
Örnek Senkronizasyon Problemleri - Parti Problemi
Su(H2 O) oluşumu problemi
I
Su molekülünün oluşumunu iki tip iplik(thread) kullanarak modellemek istiyoruz
I
Molekül oluşumu için eşik değeri (enerji, sıcaklık, vs) belirlenir. Eşik değerini aşan
iplik bag() fonksiyonunu çağırır.
I
Bir ipliğin, (i+1). molekül için bag() fonksiyonunu çağırması, ancak ve ancak i.
molekülü oluşturan için üç ipliğin de bag() fonksionunu çalıştırıp tamamlamış
olması gerekir.
I
I
I
Bir O ipliği eşiğe ulaşınca hiçbir H ipliği yoksa, iki H ipliğini bekler
Bir H ipliği eşiğe ulaşınca eşikte kendisinden başka hiçbir iplik yoksa, bir H ipliği ve bir
O ipliğini beklemek zorundadır
İplikler eşiği üçlü gruplar halinde geçmektedirler. Bir grup 2 H, 1 O ipliğinden
oluşmaktadır.
Sözkonusu kısıtları sağlayan senkronizasyon adımlarını H ve O iplikleri için oluşturunuz.
BM
BLG 312
İşletim Sistemleri Uygulama 6
Uygulamada adım adım semafor kullanımı
Örnek Senkronizasyon Problemleri - H2 O
Örnek Senkronizasyon Problemleri - Sushi Bar
Örnek Senkronizasyon Problemleri - Parti Problemi
Su(H2 O) oluşumu problemi
Kullanılması gereken temel bileşenler ve ilk değerleri
I
mutex = Semafor(1) Mutex: Karşılıklı dışlama(MUTual EXclusion)
I
oksijen = 0 Mutex korumalı sayaç
I
hidrojen = 0 Mutex korumalı sayaç
I
barrier = Barrier(3) bag() fonksiyonunu çağıran üç iplik de eşiğe vardığı
zaman bir sonraki 3lü grubun çalışmaya başlamasına izin verilir
I
oxyQueue = Semafor(0) Oksijen ipliklerinin beklediği semafor
I
hydroQueue = Semafor(0) Hidrojen ipliklerinin beklediği semafor
Kuyruk yapılarına bağlı temel fonksiyonlar ise aşağıdaki gibi ismlendirilmiştir.
I
oxyQueue.wait() : Oksijen kuyruğuna katıl
I
hydroQueue.wait() : Hidrojen kuyruğuna katıl
I
oxyQueue.signal() : Oksijen kuyruğundan bir oksijen ipliğini serbest bırak
I
hydroQueue.signal() : Hidrojen kuyruğundan bir hidrojen ipliğini serbest bırak
BM
BLG 312
İşletim Sistemleri Uygulama 6
Uygulamada adım adım semafor kullanımı
Örnek Senkronizasyon Problemleri - H2 O
Örnek Senkronizasyon Problemleri - Sushi Bar
Örnek Senkronizasyon Problemleri - Parti Problemi
Su(H2 O) oluşumu problemi
Kullanılması gereken temel bileşenler ve ilk değerleri
I
mutex = Semafor(1) Mutex: Karşılıklı dışlama(MUTual EXclusion)
I
oksijen = 0 Mutex korumalı sayaç
I
hidrojen = 0 Mutex korumalı sayaç
I
barrier = Barrier(3) bag() fonksiyonunu çağıran üç iplik de eşiğe vardığı
zaman bir sonraki 3lü grubun çalışmaya başlamasına izin verilir
I
oxyQueue = Semafor(0) Oksijen ipliklerinin beklediği semafor
I
hydroQueue = Semafor(0) Hidrojen ipliklerinin beklediği semafor
Kuyruk yapılarına bağlı temel fonksiyonlar ise aşağıdaki gibi ismlendirilmiştir.
I
oxyQueue.wait() : Oksijen kuyruğuna katıl
I
hydroQueue.wait() : Hidrojen kuyruğuna katıl
I
oxyQueue.signal() : Oksijen kuyruğundan bir oksijen ipliğini serbest bırak
I
hydroQueue.signal() : Hidrojen kuyruğundan bir hidrojen ipliğini serbest bırak
BM
BLG 312
İşletim Sistemleri Uygulama 6
Uygulamada adım adım semafor kullanımı
Örnek Senkronizasyon Problemleri - H2 O
Örnek Senkronizasyon Problemleri - Sushi Bar
Örnek Senkronizasyon Problemleri - Parti Problemi
Su(H2 O) oluşumu problemi
Kullanılması gereken temel bileşenler ve ilk değerleri
I
mutex = Semafor(1) Mutex: Karşılıklı dışlama(MUTual EXclusion)
I
oksijen = 0 Mutex korumalı sayaç
I
hidrojen = 0 Mutex korumalı sayaç
I
barrier = Barrier(3) bag() fonksiyonunu çağıran üç iplik de eşiğe vardığı
zaman bir sonraki 3lü grubun çalışmaya başlamasına izin verilir
I
oxyQueue = Semafor(0) Oksijen ipliklerinin beklediği semafor
I
hydroQueue = Semafor(0) Hidrojen ipliklerinin beklediği semafor
Kuyruk yapılarına bağlı temel fonksiyonlar ise aşağıdaki gibi ismlendirilmiştir.
I
oxyQueue.wait() : Oksijen kuyruğuna katıl
I
hydroQueue.wait() : Hidrojen kuyruğuna katıl
I
oxyQueue.signal() : Oksijen kuyruğundan bir oksijen ipliğini serbest bırak
I
hydroQueue.signal() : Hidrojen kuyruğundan bir hidrojen ipliğini serbest bırak
BM
BLG 312
İşletim Sistemleri Uygulama 6
Uygulamada adım adım semafor kullanımı
Örnek Senkronizasyon Problemleri - H2 O
Örnek Senkronizasyon Problemleri - Sushi Bar
Örnek Senkronizasyon Problemleri - Parti Problemi
Su(H2 O) oluşumu problemi
Kullanılması gereken temel bileşenler ve ilk değerleri
I
mutex = Semafor(1) Mutex: Karşılıklı dışlama(MUTual EXclusion)
I
oksijen = 0 Mutex korumalı sayaç
I
hidrojen = 0 Mutex korumalı sayaç
I
barrier = Barrier(3) bag() fonksiyonunu çağıran üç iplik de eşiğe vardığı
zaman bir sonraki 3lü grubun çalışmaya başlamasına izin verilir
I
oxyQueue = Semafor(0) Oksijen ipliklerinin beklediği semafor
I
hydroQueue = Semafor(0) Hidrojen ipliklerinin beklediği semafor
Kuyruk yapılarına bağlı temel fonksiyonlar ise aşağıdaki gibi ismlendirilmiştir.
I
oxyQueue.wait() : Oksijen kuyruğuna katıl
I
hydroQueue.wait() : Hidrojen kuyruğuna katıl
I
oxyQueue.signal() : Oksijen kuyruğundan bir oksijen ipliğini serbest bırak
I
hydroQueue.signal() : Hidrojen kuyruğundan bir hidrojen ipliğini serbest bırak
BM
BLG 312
İşletim Sistemleri Uygulama 6
Uygulamada adım adım semafor kullanımı
Örnek Senkronizasyon Problemleri - H2 O
Örnek Senkronizasyon Problemleri - Sushi Bar
Örnek Senkronizasyon Problemleri - Parti Problemi
Su(H2 O) oluşumu problemi
Kullanılması gereken temel bileşenler ve ilk değerleri
I
mutex = Semafor(1) Mutex: Karşılıklı dışlama(MUTual EXclusion)
I
oksijen = 0 Mutex korumalı sayaç
I
hidrojen = 0 Mutex korumalı sayaç
I
barrier = Barrier(3) bag() fonksiyonunu çağıran üç iplik de eşiğe vardığı
zaman bir sonraki 3lü grubun çalışmaya başlamasına izin verilir
I
oxyQueue = Semafor(0) Oksijen ipliklerinin beklediği semafor
I
hydroQueue = Semafor(0) Hidrojen ipliklerinin beklediği semafor
Kuyruk yapılarına bağlı temel fonksiyonlar ise aşağıdaki gibi ismlendirilmiştir.
I
oxyQueue.wait() : Oksijen kuyruğuna katıl
I
hydroQueue.wait() : Hidrojen kuyruğuna katıl
I
oxyQueue.signal() : Oksijen kuyruğundan bir oksijen ipliğini serbest bırak
I
hydroQueue.signal() : Hidrojen kuyruğundan bir hidrojen ipliğini serbest bırak
BM
BLG 312
İşletim Sistemleri Uygulama 6
Uygulamada adım adım semafor kullanımı
Örnek Senkronizasyon Problemleri - H2 O
Örnek Senkronizasyon Problemleri - Sushi Bar
Örnek Senkronizasyon Problemleri - Parti Problemi
Su(H2 O) oluşumu problemi
Kullanılması gereken temel bileşenler ve ilk değerleri
I
mutex = Semafor(1) Mutex: Karşılıklı dışlama(MUTual EXclusion)
I
oksijen = 0 Mutex korumalı sayaç
I
hidrojen = 0 Mutex korumalı sayaç
I
barrier = Barrier(3) bag() fonksiyonunu çağıran üç iplik de eşiğe vardığı
zaman bir sonraki 3lü grubun çalışmaya başlamasına izin verilir
I
oxyQueue = Semafor(0) Oksijen ipliklerinin beklediği semafor
I
hydroQueue = Semafor(0) Hidrojen ipliklerinin beklediği semafor
Kuyruk yapılarına bağlı temel fonksiyonlar ise aşağıdaki gibi ismlendirilmiştir.
I
oxyQueue.wait() : Oksijen kuyruğuna katıl
I
hydroQueue.wait() : Hidrojen kuyruğuna katıl
I
oxyQueue.signal() : Oksijen kuyruğundan bir oksijen ipliğini serbest bırak
I
hydroQueue.signal() : Hidrojen kuyruğundan bir hidrojen ipliğini serbest bırak
BM
BLG 312
İşletim Sistemleri Uygulama 6
Uygulamada adım adım semafor kullanımı
Örnek Senkronizasyon Problemleri - H2 O
Örnek Senkronizasyon Problemleri - Sushi Bar
Örnek Senkronizasyon Problemleri - Parti Problemi
Su(H2 O) oluşumu problemi
Kullanılması gereken temel bileşenler ve ilk değerleri
I
mutex = Semafor(1) Mutex: Karşılıklı dışlama(MUTual EXclusion)
I
oksijen = 0 Mutex korumalı sayaç
I
hidrojen = 0 Mutex korumalı sayaç
I
barrier = Barrier(3) bag() fonksiyonunu çağıran üç iplik de eşiğe vardığı
zaman bir sonraki 3lü grubun çalışmaya başlamasına izin verilir
I
oxyQueue = Semafor(0) Oksijen ipliklerinin beklediği semafor
I
hydroQueue = Semafor(0) Hidrojen ipliklerinin beklediği semafor
Kuyruk yapılarına bağlı temel fonksiyonlar ise aşağıdaki gibi ismlendirilmiştir.
I
oxyQueue.wait() : Oksijen kuyruğuna katıl
I
hydroQueue.wait() : Hidrojen kuyruğuna katıl
I
oxyQueue.signal() : Oksijen kuyruğundan bir oksijen ipliğini serbest bırak
I
hydroQueue.signal() : Hidrojen kuyruğundan bir hidrojen ipliğini serbest bırak
BM
BLG 312
İşletim Sistemleri Uygulama 6
Uygulamada adım adım semafor kullanımı
Örnek Senkronizasyon Problemleri - H2 O
Örnek Senkronizasyon Problemleri - Sushi Bar
Örnek Senkronizasyon Problemleri - Parti Problemi
Su(H2 O) oluşumu problemi
Kullanılması gereken temel bileşenler ve ilk değerleri
I
mutex = Semafor(1) Mutex: Karşılıklı dışlama(MUTual EXclusion)
I
oksijen = 0 Mutex korumalı sayaç
I
hidrojen = 0 Mutex korumalı sayaç
I
barrier = Barrier(3) bag() fonksiyonunu çağıran üç iplik de eşiğe vardığı
zaman bir sonraki 3lü grubun çalışmaya başlamasına izin verilir
I
oxyQueue = Semafor(0) Oksijen ipliklerinin beklediği semafor
I
hydroQueue = Semafor(0) Hidrojen ipliklerinin beklediği semafor
Kuyruk yapılarına bağlı temel fonksiyonlar ise aşağıdaki gibi ismlendirilmiştir.
I
oxyQueue.wait() : Oksijen kuyruğuna katıl
I
hydroQueue.wait() : Hidrojen kuyruğuna katıl
I
oxyQueue.signal() : Oksijen kuyruğundan bir oksijen ipliğini serbest bırak
I
hydroQueue.signal() : Hidrojen kuyruğundan bir hidrojen ipliğini serbest bırak
BM
BLG 312
İşletim Sistemleri Uygulama 6
Uygulamada adım adım semafor kullanımı
Örnek Senkronizasyon Problemleri - H2 O
Örnek Senkronizasyon Problemleri - Sushi Bar
Örnek Senkronizasyon Problemleri - Parti Problemi
Su(H2 O) oluşumu problemi
Kullanılması gereken temel bileşenler ve ilk değerleri
I
mutex = Semafor(1) Mutex: Karşılıklı dışlama(MUTual EXclusion)
I
oksijen = 0 Mutex korumalı sayaç
I
hidrojen = 0 Mutex korumalı sayaç
I
barrier = Barrier(3) bag() fonksiyonunu çağıran üç iplik de eşiğe vardığı
zaman bir sonraki 3lü grubun çalışmaya başlamasına izin verilir
I
oxyQueue = Semafor(0) Oksijen ipliklerinin beklediği semafor
I
hydroQueue = Semafor(0) Hidrojen ipliklerinin beklediği semafor
Kuyruk yapılarına bağlı temel fonksiyonlar ise aşağıdaki gibi ismlendirilmiştir.
I
oxyQueue.wait() : Oksijen kuyruğuna katıl
I
hydroQueue.wait() : Hidrojen kuyruğuna katıl
I
oxyQueue.signal() : Oksijen kuyruğundan bir oksijen ipliğini serbest bırak
I
hydroQueue.signal() : Hidrojen kuyruğundan bir hidrojen ipliğini serbest bırak
BM
BLG 312
İşletim Sistemleri Uygulama 6
Uygulamada adım adım semafor kullanımı
Örnek Senkronizasyon Problemleri - H2 O
Örnek Senkronizasyon Problemleri - Sushi Bar
Örnek Senkronizasyon Problemleri - Parti Problemi
Su(H2 O) oluşumu problemi
Kullanılması gereken temel bileşenler ve ilk değerleri
I
mutex = Semafor(1) Mutex: Karşılıklı dışlama(MUTual EXclusion)
I
oksijen = 0 Mutex korumalı sayaç
I
hidrojen = 0 Mutex korumalı sayaç
I
barrier = Barrier(3) bag() fonksiyonunu çağıran üç iplik de eşiğe vardığı
zaman bir sonraki 3lü grubun çalışmaya başlamasına izin verilir
I
oxyQueue = Semafor(0) Oksijen ipliklerinin beklediği semafor
I
hydroQueue = Semafor(0) Hidrojen ipliklerinin beklediği semafor
Kuyruk yapılarına bağlı temel fonksiyonlar ise aşağıdaki gibi ismlendirilmiştir.
I
oxyQueue.wait() : Oksijen kuyruğuna katıl
I
hydroQueue.wait() : Hidrojen kuyruğuna katıl
I
oxyQueue.signal() : Oksijen kuyruğundan bir oksijen ipliğini serbest bırak
I
hydroQueue.signal() : Hidrojen kuyruğundan bir hidrojen ipliğini serbest bırak
BM
BLG 312
İşletim Sistemleri Uygulama 6
Uygulamada adım adım semafor kullanımı
Örnek Senkronizasyon Problemleri - H2 O
Örnek Senkronizasyon Problemleri - Sushi Bar
Örnek Senkronizasyon Problemleri - Parti Problemi
Su(H2 O) oluşumu problemi
Kullanılması gereken temel bileşenler ve ilk değerleri
I
mutex = Semafor(1) Mutex: Karşılıklı dışlama(MUTual EXclusion)
I
oksijen = 0 Mutex korumalı sayaç
I
hidrojen = 0 Mutex korumalı sayaç
I
barrier = Barrier(3) bag() fonksiyonunu çağıran üç iplik de eşiğe vardığı
zaman bir sonraki 3lü grubun çalışmaya başlamasına izin verilir
I
oxyQueue = Semafor(0) Oksijen ipliklerinin beklediği semafor
I
hydroQueue = Semafor(0) Hidrojen ipliklerinin beklediği semafor
Kuyruk yapılarına bağlı temel fonksiyonlar ise aşağıdaki gibi ismlendirilmiştir.
I
oxyQueue.wait() : Oksijen kuyruğuna katıl
I
hydroQueue.wait() : Hidrojen kuyruğuna katıl
I
oxyQueue.signal() : Oksijen kuyruğundan bir oksijen ipliğini serbest bırak
I
hydroQueue.signal() : Hidrojen kuyruğundan bir hidrojen ipliğini serbest bırak
BM
BLG 312
İşletim Sistemleri Uygulama 6
Uygulamada adım adım semafor kullanımı
Örnek Senkronizasyon Problemleri - H2 O
Örnek Senkronizasyon Problemleri - Sushi Bar
Örnek Senkronizasyon Problemleri - Parti Problemi
Su(H2 O) oluşumu problemi
Kullanılması gereken temel bileşenler ve ilk değerleri
I
mutex = Semafor(1) Mutex: Karşılıklı dışlama(MUTual EXclusion)
I
oksijen = 0 Mutex korumalı sayaç
I
hidrojen = 0 Mutex korumalı sayaç
I
barrier = Barrier(3) bag() fonksiyonunu çağıran üç iplik de eşiğe vardığı
zaman bir sonraki 3lü grubun çalışmaya başlamasına izin verilir
I
oxyQueue = Semafor(0) Oksijen ipliklerinin beklediği semafor
I
hydroQueue = Semafor(0) Hidrojen ipliklerinin beklediği semafor
Kuyruk yapılarına bağlı temel fonksiyonlar ise aşağıdaki gibi ismlendirilmiştir.
I
oxyQueue.wait() : Oksijen kuyruğuna katıl
I
hydroQueue.wait() : Hidrojen kuyruğuna katıl
I
oxyQueue.signal() : Oksijen kuyruğundan bir oksijen ipliğini serbest bırak
I
hydroQueue.signal() : Hidrojen kuyruğundan bir hidrojen ipliğini serbest bırak
BM
BLG 312
İşletim Sistemleri Uygulama 6
Uygulamada adım adım semafor kullanımı
Örnek Senkronizasyon Problemleri - H2 O
Örnek Senkronizasyon Problemleri - Sushi Bar
Örnek Senkronizasyon Problemleri - Parti Problemi
Su(H2 O) oluşumu problemi
Kullanılması gereken temel bileşenler ve ilk değerleri
I
mutex = Semafor(1) Mutex: Karşılıklı dışlama(MUTual EXclusion)
I
oksijen = 0 Mutex korumalı sayaç
I
hidrojen = 0 Mutex korumalı sayaç
I
barrier = Barrier(3) bag() fonksiyonunu çağıran üç iplik de eşiğe vardığı
zaman bir sonraki 3lü grubun çalışmaya başlamasına izin verilir
I
oxyQueue = Semafor(0) Oksijen ipliklerinin beklediği semafor
I
hydroQueue = Semafor(0) Hidrojen ipliklerinin beklediği semafor
Kuyruk yapılarına bağlı temel fonksiyonlar ise aşağıdaki gibi ismlendirilmiştir.
I
oxyQueue.wait() : Oksijen kuyruğuna katıl
I
hydroQueue.wait() : Hidrojen kuyruğuna katıl
I
oxyQueue.signal() : Oksijen kuyruğundan bir oksijen ipliğini serbest bırak
I
hydroQueue.signal() : Hidrojen kuyruğundan bir hidrojen ipliğini serbest bırak
BM
BLG 312
İşletim Sistemleri Uygulama 6
Uygulamada adım adım semafor kullanımı
Örnek Senkronizasyon Problemleri - H2 O
Örnek Senkronizasyon Problemleri - Sushi Bar
Örnek Senkronizasyon Problemleri - Parti Problemi
Su(H2 O) oluşumu problemi
Kullanılması gereken temel bileşenler ve ilk değerleri
I
mutex = Semafor(1) Mutex: Karşılıklı dışlama(MUTual EXclusion)
I
oksijen = 0 Mutex korumalı sayaç
I
hidrojen = 0 Mutex korumalı sayaç
I
barrier = Barrier(3) bag() fonksiyonunu çağıran üç iplik de eşiğe vardığı
zaman bir sonraki 3lü grubun çalışmaya başlamasına izin verilir
I
oxyQueue = Semafor(0) Oksijen ipliklerinin beklediği semafor
I
hydroQueue = Semafor(0) Hidrojen ipliklerinin beklediği semafor
Kuyruk yapılarına bağlı temel fonksiyonlar ise aşağıdaki gibi ismlendirilmiştir.
I
oxyQueue.wait() : Oksijen kuyruğuna katıl
I
hydroQueue.wait() : Hidrojen kuyruğuna katıl
I
oxyQueue.signal() : Oksijen kuyruğundan bir oksijen ipliğini serbest bırak
I
hydroQueue.signal() : Hidrojen kuyruğundan bir hidrojen ipliğini serbest bırak
BM
BLG 312
İşletim Sistemleri Uygulama 6
Uygulamada adım adım semafor kullanımı
Örnek Senkronizasyon Problemleri - H2 O
Örnek Senkronizasyon Problemleri - Sushi Bar
Örnek Senkronizasyon Problemleri - Parti Problemi
Su(H2 O) oluşumu problemi
Kullanılması gereken temel bileşenler ve ilk değerleri
I
mutex = Semafor(1) Mutex: Karşılıklı dışlama(MUTual EXclusion)
I
oksijen = 0 Mutex korumalı sayaç
I
hidrojen = 0 Mutex korumalı sayaç
I
barrier = Barrier(3) bag() fonksiyonunu çağıran üç iplik de eşiğe vardığı
zaman bir sonraki 3lü grubun çalışmaya başlamasına izin verilir
I
oxyQueue = Semafor(0) Oksijen ipliklerinin beklediği semafor
I
hydroQueue = Semafor(0) Hidrojen ipliklerinin beklediği semafor
Kuyruk yapılarına bağlı temel fonksiyonlar ise aşağıdaki gibi ismlendirilmiştir.
I
oxyQueue.wait() : Oksijen kuyruğuna katıl
I
hydroQueue.wait() : Hidrojen kuyruğuna katıl
I
oxyQueue.signal() : Oksijen kuyruğundan bir oksijen ipliğini serbest bırak
I
hydroQueue.signal() : Hidrojen kuyruğundan bir hidrojen ipliğini serbest bırak
BM
BLG 312
İşletim Sistemleri Uygulama 6
Uygulamada adım adım semafor kullanımı
Örnek Senkronizasyon Problemleri - H2 O
Örnek Senkronizasyon Problemleri - Sushi Bar
Örnek Senkronizasyon Problemleri - Parti Problemi
Su(H2 O) oluşumu problemi
I
Başlangıçta hydroQueue ve oxyQueue semaforları kilitlenmiş durumda.
I
I
I
hydroQueue = 0
oxyQueue = 0
Eşiğe ulaşan bir O ipliği, 2 H ipliğinin işleme girmesine izin vermelidir
I
I
hydroQueue semaforunun değerini 2 arttırmalıdır.
Arttırma işleminden sonra H ipliklerinin eşiğe varmasını beklemelidir
BM
BLG 312
İşletim Sistemleri Uygulama 6
Uygulamada adım adım semafor kullanımı
Örnek Senkronizasyon Problemleri - H2 O
Örnek Senkronizasyon Problemleri - Sushi Bar
Örnek Senkronizasyon Problemleri - Parti Problemi
Su(H2 O) oluşumu problemi
Oksijen için özet kod:
3
8
13
mutex . w a i t ( )
o k s i j e n++
i f ( h i d r o j e n >= 2 )
hydroQueue . s i g n a l ( 2 )
h i d r o j e n −= 2
oxyQueue . s i g n a l ( )
o k s i j e n −=1
else
mutex . s i g n a l ( )
oxyQueue . w a i t ( )
bag ( )
b a r r i e r . wait ()
mutex . s i g n a l ( )
BM
BLG 312
İşletim Sistemleri Uygulama 6
Uygulamada adım adım semafor kullanımı
Örnek Senkronizasyon Problemleri - H2 O
Örnek Senkronizasyon Problemleri - Sushi Bar
Örnek Senkronizasyon Problemleri - Parti Problemi
Su(H2 O) oluşumu problemi
Hidrojen için özet kod:
1
6
11
mutex . w a i t ( )
h i d r o j e n++
i f ( h i d r o j e n >=2 and o k s i j e n >=1)
hydroQueue . s i g n a l ( 2 )
h i d r o j e n −= 2
oxyQueue . s i g n a l ( )
o k s i j e n −=1
else
mutex . s i g n a l ( )
hydroQueue . w a i t ( )
bag ( )
b a r r i e r . wait ()
BM
BLG 312
İşletim Sistemleri Uygulama 6
Uygulamada adım adım semafor kullanımı
Örnek Senkronizasyon Problemleri - H2 O
Örnek Senkronizasyon Problemleri - Sushi Bar
Örnek Senkronizasyon Problemleri - Parti Problemi
Sushi bar problemi
Imagine a sushi bar with 5 seats. If you arrive while there is an empty seat, you can
take a seat immediately. But if you arrive when all 5 seats are full, that means that all
of them are dining together, and you will have to wait for the entire party to leave
before you sit down.
BM
BLG 312
İşletim Sistemleri Uygulama 6
Uygulamada adım adım semafor kullanımı
Örnek Senkronizasyon Problemleri - H2 O
Örnek Senkronizasyon Problemleri - Sushi Bar
Örnek Senkronizasyon Problemleri - Parti Problemi
Çözümde kullanılacak değişkenler
2
eating = waiting = 0
mutex = Semaphore ( 1 )
b l o c k = Semaphore ( 0 )
m u s t w a i t = F a l s e //
// k e e p t r a c k o f t h e number o f t h r e a d s
// mutex p r o t e c t s b o t h c o u n t e r s
// i n c o m i n g c u s t o m e r s ’ qu eu e ( r e g u l a r meaning )
i n d i c a t e s that the bar i s f u l l
BM
BLG 312
İşletim Sistemleri Uygulama 6
Uygulamada adım adım semafor kullanımı
Örnek Senkronizasyon Problemleri - H2 O
Örnek Senkronizasyon Problemleri - Sushi Bar
Örnek Senkronizasyon Problemleri - Parti Problemi
Çözüm denemesi
1
mutex . w a i t ( )
i f must wait :
w a i t i n g += 1
mutex . s i g n a l ( )
block . wait ()
6
mutex . w a i t ( )
w a i t i n g −= 1
11
// r e a c q u i r e mutex
e a t i n g += 1
m u s t w a i t = ( e a t i n g == 5 )
mutex . s i g n a l ( )
// e a t s u s h i
16
21
mutex . w a i t ( )
e a t i n g −= 1
i f e a t i n g == 0 :
n = min ( 5 , w a i t i n g )
block . s i g n a l (n)
must wait = False
mutex . s i g n a l ( )
BM
BLG 312
İşletim Sistemleri Uygulama 6
Uygulamada adım adım semafor kullanımı
Örnek Senkronizasyon Problemleri - H2 O
Örnek Senkronizasyon Problemleri - Sushi Bar
Örnek Senkronizasyon Problemleri - Parti Problemi
Bir çözüm
3
8
mutex . w a i t ( )
i f must wait :
w a i t i n g += 1
mutex . s i g n a l ( )
block . wait ()
else :
e a t i n g += 1
m u s t w a i t = ( e a t i n g == 5 )
mutex . s i g n a l ( )
// e a t s u s h i
13
18
mutex . w a i t ( )
e a t i n g −= 1
i f e a t i n g == 0 :
n = min ( 5 , w a i t i n g )
w a i t i n g −= n
e a t i n g += n
m u s t w a i t = ( e a t i n g == 5 )
block . s i g n a l (n)
mutex . s i g n a l ( )
BM
BLG 312
İşletim Sistemleri Uygulama 6
Uygulamada adım adım semafor kullanımı
Örnek Senkronizasyon Problemleri - H2 O
Örnek Senkronizasyon Problemleri - Sushi Bar
Örnek Senkronizasyon Problemleri - Parti Problemi
Bir başka çözüm
4
9
mutex . w a i t ( )
i f must wait :
w a i t i n g += 1
mutex . s i g n a l ( )
block . wait ()
// when we resume , we h a v e t h e mutex
w a i t i n g −= 1
e a t i n g += 1
m u s t w a i t = ( e a t i n g == 5 )
i f w a i t i n g and n o t m u s t w a i t :
block . s i g n a l ()
// and p a s s t h e mutex
else :
mutex . s i g n a l ( )
14
// e a t s u s h i
19
mutex . w a i t ( )
e a t i n g −= 1
i f e a t i n g == 0 : m u s t w a i t = F a l s e
if
24
w a i t i n g and n o t m u s t w a i t :
block . s i g n a l ()
// and p a s s t h e mutex
else :
mutex . s i g n a l ( )
BM
BLG 312
İşletim Sistemleri Uygulama 6
Uygulamada adım adım semafor kullanımı
Örnek Senkronizasyon Problemleri - H2 O
Örnek Senkronizasyon Problemleri - Sushi Bar
Örnek Senkronizasyon Problemleri - Parti Problemi
Parti Problemi
Yurtta yapılacak bir parti için aşağıdaki kısıtlar geçerlidir:
I
I
Bir odada aynı anda birçok öğrenci bulunabilir
Yurt müdiresi bir odaya iki durumda dalabilir
I
I
Odada öğrenci yoksa, odayı aramak için
Odada 50den fazla öğrenci varsa partiyi dağıtmak için
I
Müdire odadayken başka öğrenci odaya giremez ancak öğrenciler odadan ayrılabilir
I
Müdire odayı ancak oda boşalınca terk eder.
I
Sadece bir müdire teftişten sorumludur.
Bütün bu kısıtları karşılayan bir simülsayon yazınız.
BM
BLG 312
İşletim Sistemleri Uygulama 6
Uygulamada adım adım semafor kullanımı
Örnek Senkronizasyon Problemleri - H2 O
Örnek Senkronizasyon Problemleri - Sushi Bar
Örnek Senkronizasyon Problemleri - Parti Problemi
Parti Problemi
Kullanılması gereken temel bileşenler ve ilk değerleri
I
ogrenci = 0 Öğrenci sayısı
I
mudire = ‘‘odada değil’’ Müdire durumunu tutan bir enum
I
mutex = Semafor(1) Öğrenci ve müdire durumlarını korumak için
I
turnike = Semaphore(1) Dekan odadayken öğrencileri dışarıda tutmak için
I
odaHazir = Semaphore(0) Müdire dışarıda ve oda boşsa
I
ogrencilerCikti = Semaphore(0) Müdire içeride ve oda boşaldıysa
BM
BLG 312
İşletim Sistemleri Uygulama 6
Uygulamada adım adım semafor kullanımı
Örnek Senkronizasyon Problemleri - H2 O
Örnek Senkronizasyon Problemleri - Sushi Bar
Örnek Senkronizasyon Problemleri - Parti Problemi
Parti Problemi
Kullanılması gereken temel bileşenler ve ilk değerleri
I
ogrenci = 0 Öğrenci sayısı
I
mudire = ‘‘odada değil’’ Müdire durumunu tutan bir enum
I
mutex = Semafor(1) Öğrenci ve müdire durumlarını korumak için
I
turnike = Semaphore(1) Dekan odadayken öğrencileri dışarıda tutmak için
I
odaHazir = Semaphore(0) Müdire dışarıda ve oda boşsa
I
ogrencilerCikti = Semaphore(0) Müdire içeride ve oda boşaldıysa
BM
BLG 312
İşletim Sistemleri Uygulama 6
Uygulamada adım adım semafor kullanımı
Örnek Senkronizasyon Problemleri - H2 O
Örnek Senkronizasyon Problemleri - Sushi Bar
Örnek Senkronizasyon Problemleri - Parti Problemi
Parti Problemi
Kullanılması gereken temel bileşenler ve ilk değerleri
I
ogrenci = 0 Öğrenci sayısı
I
mudire = ‘‘odada değil’’ Müdire durumunu tutan bir enum
I
mutex = Semafor(1) Öğrenci ve müdire durumlarını korumak için
I
turnike = Semaphore(1) Dekan odadayken öğrencileri dışarıda tutmak için
I
odaHazir = Semaphore(0) Müdire dışarıda ve oda boşsa
I
ogrencilerCikti = Semaphore(0) Müdire içeride ve oda boşaldıysa
BM
BLG 312
İşletim Sistemleri Uygulama 6
Uygulamada adım adım semafor kullanımı
Örnek Senkronizasyon Problemleri - H2 O
Örnek Senkronizasyon Problemleri - Sushi Bar
Örnek Senkronizasyon Problemleri - Parti Problemi
Parti Problemi
Kullanılması gereken temel bileşenler ve ilk değerleri
I
ogrenci = 0 Öğrenci sayısı
I
mudire = ‘‘odada değil’’ Müdire durumunu tutan bir enum
I
mutex = Semafor(1) Öğrenci ve müdire durumlarını korumak için
I
turnike = Semaphore(1) Dekan odadayken öğrencileri dışarıda tutmak için
I
odaHazir = Semaphore(0) Müdire dışarıda ve oda boşsa
I
ogrencilerCikti = Semaphore(0) Müdire içeride ve oda boşaldıysa
BM
BLG 312
İşletim Sistemleri Uygulama 6
Uygulamada adım adım semafor kullanımı
Örnek Senkronizasyon Problemleri - H2 O
Örnek Senkronizasyon Problemleri - Sushi Bar
Örnek Senkronizasyon Problemleri - Parti Problemi
Parti Problemi
Kullanılması gereken temel bileşenler ve ilk değerleri
I
ogrenci = 0 Öğrenci sayısı
I
mudire = ‘‘odada değil’’ Müdire durumunu tutan bir enum
I
mutex = Semafor(1) Öğrenci ve müdire durumlarını korumak için
I
turnike = Semaphore(1) Dekan odadayken öğrencileri dışarıda tutmak için
I
odaHazir = Semaphore(0) Müdire dışarıda ve oda boşsa
I
ogrencilerCikti = Semaphore(0) Müdire içeride ve oda boşaldıysa
BM
BLG 312
İşletim Sistemleri Uygulama 6
Uygulamada adım adım semafor kullanımı
Örnek Senkronizasyon Problemleri - H2 O
Örnek Senkronizasyon Problemleri - Sushi Bar
Örnek Senkronizasyon Problemleri - Parti Problemi
Parti Problemi
Kullanılması gereken temel bileşenler ve ilk değerleri
I
ogrenci = 0 Öğrenci sayısı
I
mudire = ‘‘odada değil’’ Müdire durumunu tutan bir enum
I
mutex = Semafor(1) Öğrenci ve müdire durumlarını korumak için
I
turnike = Semaphore(1) Dekan odadayken öğrencileri dışarıda tutmak için
I
odaHazir = Semaphore(0) Müdire dışarıda ve oda boşsa
I
ogrencilerCikti = Semaphore(0) Müdire içeride ve oda boşaldıysa
BM
BLG 312
İşletim Sistemleri Uygulama 6
Uygulamada adım adım semafor kullanımı
Örnek Senkronizasyon Problemleri - H2 O
Örnek Senkronizasyon Problemleri - Sushi Bar
Örnek Senkronizasyon Problemleri - Parti Problemi
Parti Problemi
Kullanılması gereken temel bileşenler ve ilk değerleri
I
ogrenci = 0 Öğrenci sayısı
I
mudire = ‘‘odada değil’’ Müdire durumunu tutan bir enum
I
mutex = Semafor(1) Öğrenci ve müdire durumlarını korumak için
I
turnike = Semaphore(1) Dekan odadayken öğrencileri dışarıda tutmak için
I
odaHazir = Semaphore(0) Müdire dışarıda ve oda boşsa
I
ogrencilerCikti = Semaphore(0) Müdire içeride ve oda boşaldıysa
BM
BLG 312
İşletim Sistemleri Uygulama 6
Uygulamada adım adım semafor kullanımı
Örnek Senkronizasyon Problemleri - H2 O
Örnek Senkronizasyon Problemleri - Sushi Bar
Örnek Senkronizasyon Problemleri - Parti Problemi
Parti Problemi
Kullanılması gereken temel bileşenler ve ilk değerleri
I
ogrenci = 0 Öğrenci sayısı
I
mudire = ‘‘odada değil’’ Müdire durumunu tutan bir enum
I
mutex = Semafor(1) Öğrenci ve müdire durumlarını korumak için
I
turnike = Semaphore(1) Dekan odadayken öğrencileri dışarıda tutmak için
I
odaHazir = Semaphore(0) Müdire dışarıda ve oda boşsa
I
ogrencilerCikti = Semaphore(0) Müdire içeride ve oda boşaldıysa
BM
BLG 312
İşletim Sistemleri Uygulama 6
Uygulamada adım adım semafor kullanımı
Örnek Senkronizasyon Problemleri - H2 O
Örnek Senkronizasyon Problemleri - Sushi Bar
Örnek Senkronizasyon Problemleri - Parti Problemi
Parti Problemi
Kullanılması gereken temel bileşenler ve ilk değerleri
I
ogrenci = 0 Öğrenci sayısı
I
mudire = ‘‘odada değil’’ Müdire durumunu tutan bir enum
I
mutex = Semafor(1) Öğrenci ve müdire durumlarını korumak için
I
turnike = Semaphore(1) Dekan odadayken öğrencileri dışarıda tutmak için
I
odaHazir = Semaphore(0) Müdire dışarıda ve oda boşsa
I
ogrencilerCikti = Semaphore(0) Müdire içeride ve oda boşaldıysa
BM
BLG 312
İşletim Sistemleri Uygulama 6
Uygulamada adım adım semafor kullanımı
Örnek Senkronizasyon Problemleri - H2 O
Örnek Senkronizasyon Problemleri - Sushi Bar
Örnek Senkronizasyon Problemleri - Parti Problemi
Parti Problemi
Kullanılması gereken temel bileşenler ve ilk değerleri
I
ogrenci = 0 Öğrenci sayısı
I
mudire = ‘‘odada değil’’ Müdire durumunu tutan bir enum
I
mutex = Semafor(1) Öğrenci ve müdire durumlarını korumak için
I
turnike = Semaphore(1) Dekan odadayken öğrencileri dışarıda tutmak için
I
odaHazir = Semaphore(0) Müdire dışarıda ve oda boşsa
I
ogrencilerCikti = Semaphore(0) Müdire içeride ve oda boşaldıysa
BM
BLG 312
İşletim Sistemleri Uygulama 6
Uygulamada adım adım semafor kullanımı
Örnek Senkronizasyon Problemleri - H2 O
Örnek Senkronizasyon Problemleri - Sushi Bar
Örnek Senkronizasyon Problemleri - Parti Problemi
Parti Problemi
Kullanılması gereken temel bileşenler ve ilk değerleri
I
ogrenci = 0 Öğrenci sayısı
I
mudire = ‘‘odada değil’’ Müdire durumunu tutan bir enum
I
mutex = Semafor(1) Öğrenci ve müdire durumlarını korumak için
I
turnike = Semaphore(1) Dekan odadayken öğrencileri dışarıda tutmak için
I
odaHazir = Semaphore(0) Müdire dışarıda ve oda boşsa
I
ogrencilerCikti = Semaphore(0) Müdire içeride ve oda boşaldıysa
BM
BLG 312
İşletim Sistemleri Uygulama 6
Uygulamada adım adım semafor kullanımı
Örnek Senkronizasyon Problemleri - H2 O
Örnek Senkronizasyon Problemleri - Sushi Bar
Örnek Senkronizasyon Problemleri - Parti Problemi
Parti Problemi
Kullanılması gereken temel bileşenler ve ilk değerleri
I
ogrenci = 0 Öğrenci sayısı
I
mudire = ‘‘odada değil’’ Müdire durumunu tutan bir enum
I
mutex = Semafor(1) Öğrenci ve müdire durumlarını korumak için
I
turnike = Semaphore(1) Dekan odadayken öğrencileri dışarıda tutmak için
I
odaHazir = Semaphore(0) Müdire dışarıda ve oda boşsa
I
ogrencilerCikti = Semaphore(0) Müdire içeride ve oda boşaldıysa
BM
BLG 312
İşletim Sistemleri Uygulama 6
Uygulamada adım adım semafor kullanımı
Örnek Senkronizasyon Problemleri - H2 O
Örnek Senkronizasyon Problemleri - Sushi Bar
Örnek Senkronizasyon Problemleri - Parti Problemi
Parti Problemi
Kullanılması gereken temel bileşenler ve ilk değerleri
I
ogrenci = 0 Öğrenci sayısı
I
mudire = ‘‘odada değil’’ Müdire durumunu tutan bir enum
I
mutex = Semafor(1) Öğrenci ve müdire durumlarını korumak için
I
turnike = Semaphore(1) Dekan odadayken öğrencileri dışarıda tutmak için
I
odaHazir = Semaphore(0) Müdire dışarıda ve oda boşsa
I
ogrencilerCikti = Semaphore(0) Müdire içeride ve oda boşaldıysa
BM
BLG 312
İşletim Sistemleri Uygulama 6
Uygulamada adım adım semafor kullanımı
Örnek Senkronizasyon Problemleri - H2 O
Örnek Senkronizasyon Problemleri - Sushi Bar
Örnek Senkronizasyon Problemleri - Parti Problemi
Parti Problemi
Mudire için özet kod:
1
mutex . w a i t ( )
i f o g r e n c i > 0 and o g r e n c i < 5 0 :
mudire =
bekliyor
mutex . s i g n a l ( )
odaHazir . wait ()
# and g e t mutex from t h e s t u d e n t .
6
# ogrenci
if
11
say
s
0 ya da >= 50 o l m a l
o g r e n c i >= 5 0 :
mudire =
odada
dagit ()
turnike . wait () # g i r i s i k i l i t l e
mutex . s i g n a l ( )
o g r e n c i l e r C i k t i . wait ()
turnike . signal ()
# g i r i s k i l i d i n i ac
16
else :
21
# ogrenci
ara ()
mudire =
odada
mutex . s i g n a l ( )
sayisi 0 olmali
degil
BM
BLG 312
İşletim Sistemleri Uygulama 6
Uygulamada adım adım semafor kullanımı
Örnek Senkronizasyon Problemleri - H2 O
Örnek Senkronizasyon Problemleri - Sushi Bar
Örnek Senkronizasyon Problemleri - Parti Problemi
Parti Problemi
Öğrenci için özet kod:
4
mutex . w a i t ( )
i f m u d i r e ==
odada
:
mutex . s i g n a l ( )
turnike . wait ()
turnike . signal ()
mutex . w a i t ( )
o g r e n c i += 1
9
if
o g r e n c i == 50 and m u d i r e ==
odaHazir . s i g n a l ()
else :
mutex . s i g n a l ( )
bekliyor
:
# mutexi mudireye aktar
party ()
14
mutex . w a i t ( )
o g r e n c i −= 1
if
19
24
o g r e n c i == 0 and m u d i r e ==
bekliyor
:
odaHazir . s i g n a l ()
# odaBos u m u d i r e y e a k t a r
e l i f o g r e n c i == 0 and m u d i r e ==
odada
:
# o g r e n c i l e r C i k t i y i mudireye aktar
o g r e n c i l e r C i k t i . signal ()
else :
mutex . s i g n a l ( )
BM
BLG 312

Benzer belgeler

model atc-2004 - Nokta Elektronik

model atc-2004 - Nokta Elektronik - LINK hızını gösterir (100M olduğunda Yeşil yanar) ACT - Seri port ile Ethernet portu arasında data alışverişi oluyor. PWR - Besleme göstergesi 4.0 ATC-2004 Konfigürasyonu Bilgisayarınıza 192.168....

Detaylı

Isletim Sistemleri Uygulama 4 - Unix`de semafor islemleri

Isletim Sistemleri Uygulama 4 - Unix`de semafor islemleri : 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ğ...

Detaylı

Isletim Sistemleri Uygulama 7 - Ölümcül kilitlenme

Isletim Sistemleri Uygulama 7 - Ölümcül kilitlenme Joseph Heller’in Catch-22 adlı romanı bir çelişki üzerine kuruludur. Romanda, olayın gerçekleşmesi bir şarta bağlıdır ancak o şartın gerçekleşmesi de aynı olaya bağlıdır. I

Detaylı

Beyin MR Takip Gör¨unt¨ulerinin Otomatik C¸ akıstırılması Automatic

Beyin MR Takip Gör¨unt¨ulerinin Otomatik C¸ akıstırılması Automatic Medikal imgelerin çakıştırılması vücuttaki patolojik yapıların ve anatomik bölgelerin analizlerinde kullanılan önemli yöntemlerden biridir. Bu çalışmada beyindeki deformasyondan etkilenmedi...

Detaylı