Isbaran Akcayir
Canakkale 18 Mart Univ. Bilgisayar Muh.
http://ish.kodzilla.org
TSL INSTRUCTION ( Test and Set Lock )
Intel x86 islemcilerde 'Bit test and Set' (BTS) versiyonu bulunan "TSL instruction", 'race conditions' (yaris durumu) icin donanimdan
yardim alarak cozum uretir. Cogu bilgisayar - ozellikle de cift islemcili olanlar - TSL denen talimatlara (instruction) sahiptirler.
Oncelikle bellekten okudugunu islemci ustundeki bir register'a kaydeder ve ardindan bellekteki bu goze sifirdan farkli bir deger aktarir.
RX bir register, flag ise bellekteki bir degisken olsun.
RX = flag
flag = 1
Bellek gozunun okunmasi ve deger aktariminin araliksiz yapilacagi garantidir, baska bir islemci instruction bitene kadar bellek gozune
erisemez. TSL instruction'u calistiran islemci, veri yolunu (memory bus) diger islemci (CPU) 'lerin is bitmeden bellege erismelerini
engellemek icin kitler.
TSL Instruction kullanabilmek icin paylasimli bellek bolgesine erisimi denetleyecek ortak kullanimli bir degisken'e - flag - ihtiyacimiz var.
Degisken(Flag, Bayrak) '0' iken isteyen process bayragin degerini 1 yaparak bellek bolgesini kullanmaya baslayabilir. Isi bittiginde
process bayragin degerini 0 yaparak bellegi kullanima acar.
Asagidaki assembly kodunda TSL'nin bu isi nasil gerceklestirdigini gorebilirsiniz.
bolgeye_gir:
tsl register, flag
cmp register, #0
jnz kritik_bolge
ret
bolgeden_cik:
mov flag, #0
ret
Ilk komut bayragin (flag) eski degerini bir register'a kopyaliyor ve sonra bayragin degerini '1' yapiyor. Sonra bayragin eski degeri
0 ile karsilastiriliyor ve 0 dan farkli bir degerse ( zaten kilitli ) deger 0 olana kadar ( kritik bolgede olan surec isini bitirene
kadar ) dongude kaliyor. Deger 0 oldugunda da kendisi kritik bolgeye giriyor.
Kilidin acilmasi ikinci kisimda oldukca basit gosterilmis. Program sadece bayraga 0 degeri atiyor. Ozel talimatlara gerek duyulmuyor.
Kritik bolge problemleri icin gelistirilmis bu yontem ile kritik bolgesine girmeden once process 'bolgeye gir''i cagirarak uzunca sure
kilidin acilmasini bekliyor ve acik gordugunde kritik bolgeye giriyor. Process isi bittiginde 'bolgeden_cik'
calistirarak bayragi 0 yapiyor. Boylece kilit acilmis oluyor.
Kritik bolge problemlerinin cogunda oldugu gibi bu yontemde de surec 'bolgeye_gir' ve 'bolgeden_cik' i dogru zamanda cagirmalidir.
Bir process hile yaparsa 'mutual exclusion' (karsilikli dislama) durumu bozulur.
'Peterson's Solution' gibi TSL Instruction metodu da dogrudur. Ama yeterince etkin degildir. Oyleki
- Sira icin uzunca sure beklemeleri gerekir
- Bos yere islemci devri (CPU cycle) harcanir
- Oncelik degistirme problemine neden olur:
Bir yuksek oncelikli (H) bir de az oncelikli (L) iki surec oldugunu varsayalim, ve L'nin kritik bolgede oldugunu, H'nin de kritik
bolgeye girmek icin L'nin cikmasini bekledigini dusunelim. Boyle bir durumda H Yuksek oncelikli olmasina ragmen L yuzunden sonsuza
kadar bekleyebilir, cunku zamanlayici L'ye etki etmeyecektir.
Boyle bir durumda diger sureclerin calisabilmesi ve islemci devirlerinin bosa harcanmamasi icin isletim sisteminden yardim alinir ve
'bolgeye_gir' icerisinde bir sistem cagirisina yer verilir. Bu sistem cagrisi diger surecin uzunca beklememesi icin sureci 'BLOKE' durumuna
alir ve diger sureclerin islemesi devam eder. Boylelikle yukarida bahsedilen dezavantajlar engellenmis olur.
Kaynaklar:
Modern Operating Systems -> Andrew S. Tanenbaum
Interprocess Communication DN -> Ibrahim Korpeoglu
Interprocess Communication DN -> Mark Handley
Introduction to System Programming DN -> Avishai Wool
DN = 'Ders Notlari'
Hata Bildir :)