Ta'rif. Semafor - sinxronizatsiya ob'ekti bo'lib , u bir vaqtning o'zida ma'lum bir manbaga kirish huquqiga ega bo'lgan foydalanuvchilar (topshiriqlar, jarayonlar) sonini belgilaydi . Har bir semafor hisoblagich (semafor qiymati) va kutish navbati (jarayonlar, hisoblagichning ma'lum bir qiymatni qabul qilishini kutayotgan vazifalar) bilan bog'langan. Farqlash:
ikkilik (mantiqiy) semaforlar muhim umumiy resursni himoya qilish uchun o'zaro istisno mexanizmi; bunday semaning hisoblagichining boshlang'ich qiymati 1 ga teng;
hisoblash semaforlari bir vaqtning o'zida cheklangan belgilangan miqdordagi vazifalardan ko'p bo'lmagan n tomonidan ishlatilishi mumkin bo'lgan resursni himoya qilish uchun o'zaro istisno mexanizmi ; bunday semaning hisoblagichining boshlang'ich qiymati n.
Semaforlarda quyidagi elementar amallar aniqlanadi ( k . dan past). = 1 mantiqiy semaforlar uchun)
semadan k tani oling, ya'ni. hisoblagichni k ga kamaytiring (agar hisoblagichda k bo'lmasa , u holda bu operatsiya vazifani semaforda kamida k borligini kutish holatiga qo'yadi va uni kutish navbatining oxiriga qo'shadi. bu semafor);
birliklarga qaytish , ya'ni. hisoblagichni k ga oshiring (agar semafor boshqa vazifani kutayotgan bo'lsa va unga bitta hisoblagichning yangi joriy qiymatidan ko'p bo'lmasa, uni faollashtirish, kutish navbatdan olib tashlash va joriy vazifani oldindan belgilash mumkin, masalan , agar uning ustuvorligi yuqoriroq bo'lsa);
k birlik olishga harakat qiling (agar hisoblagich > k birlik bo'lsa, undan k birlik oling , aks holda vazifani kutish holatiga o'tkazmasdan semafor bandi ko'rsatkichini qaytaring);
semaforni tekshiring, ya'ni. hisoblagichning qiymatini oling;
semaforni blokirovka qilish, ya'ni. undan qancha birlik bor bo'lsa, shuncha birlik oling (bir vaqtning o'zida, ba'zida bu operatsiya ikki xil bo'ladi: hozir qancha bo'lsa, shuncha qabul qiling yoki boshlang'ich daqiqada qancha bo'lsa, shuncha qabul qiling, ya'ni, maksimal mumkin bo'lgan raqam, ya'ni oxirgi odatda qulf deb ataladi, chunki bunday vazifa resursga mutlaq egalik qiladi);
semaforni ochish, ya'ni. blokirovka qilish buyrug'i bo'yicha ushbu vazifa tomonidan olingan jami birliklarni qaytaring.
Ikkilik semaforlarning mantiqiy tuzilishi ayniqsa sodda. Yaratilganda semafor hisoblagichi 1 ga ishga tushiriladi . Unga kirish uchun ikkita ibtidoiy operatsiya aniqlanadi:
Get ( s ) - olish (yoki yopish) semafor s , ya'ni . resurs so'rash; bu amal 1 hisoblagichdan ayiradi;
Put ( s ) - semaforni qaytarish (yoki ochish), ya'ni. resursni chiqarish; bu operatsiya hisoblagichga 1 qo'shadi .
Ushbu operatsiyalar bo'linmas, ya'ni . ularni bajarish vaqtida vazifalarni almashtirish taqiqlanadi. Ish paytida hisoblagichning holati quyidagicha bo'lishi mumkin:
1 - resurs bepul,
0 - resurs band, kutish navbati bo'sh,
m < 0 - resurs band, |w| mavjud vazifalar.
Bir misolni ko'rib chiqing.
A. _ Oling - vazifa A resursni o'z zimmasiga oldi,
C. _ Oling - C vazifasi band bo'lgan resursni so'radi, shuning uchun C vazifasi bloklangan va kutish navbatiga qo'yilgan,
B. Oling - B vazifasi band bo'lgan resursni so'radi , shuning uchun B vazifasi bloklanadi va kutish navbatiga qo'yiladi,
A. _ Qo'ying - vazifa A kutish navbatdagi birinchi vazifaga o'tkazilgan resursni chiqardi, ya'ni. C (bu o'z navbatida faollashtirilgan),
S. Put - C vazifasi kutish navbatdagi birinchi vazifaga o'tkazilgan resursni chiqardi, ya'ni. B (bu o'z navbatida faollashadi),
B. Qo'yish - B topshirig'i Resursni bo'shatdi , u Get chaqiradigan birinchi vazifaga o'tadi .
Ba'zan shaxsiy yoki shaxsiy semaforlar ko'rib chiqiladi. Bunday sema T vazifasi bilan darhol yopiq holatda yaratiladi . Bunday holda, T vazifasi faqat Get funktsiyasini va boshqa barcha vazifalarni - faqat Put funktsiyasini chaqirish huquqiga ega . Bunday semaforlar yordamida mijoz-server tipidagi vazifalar o'rtasida almashinuvni tashkil qilish oson. Vazifa Tt (server) boshlangandan so'ng darhol xususiy semafor St yaratadi va funksiyani chaqiradi St - GetQ . Shunday qilib, u semafor Sit chiqarilgunga qadar bloklanadi . Vazifa T% (mijoz) ishga tushirilgandan so'ng darhol shaxsiy semaforni yaratadi S % , Tt topshirig'i bilan birgalikda xotirada ma'lumotlarni tayyorlaydi va funksiyani chaqiradi St - PutQ . Bu Tt vazifasining faollashishiga olib keladi - Th topshiriq davom etadi va Sz funksiyasini chaqiradi - GetQ , S semafor chiqarilguncha blokirovka qilish -2, - Vazifa Tt (server) ma'lumotlarni qayta ishlash oxirida funktsiyalarni chaqiradi Sz - PutQ , St - GetQ , T% (mijoz) vazifasini faollashtirish va o'zini blokirovka qilish. Quyida mijoz-server o'zaro aloqasini amalga oshirishning boshqa usullarini ko'rib chiqamiz.
Ishlanmalar
Do'stlaringiz bilan baham: |