OTdagi jarayonlarni sinxronlashtirish
Jarayonni sinxronlashtirish muammosi
Bir misolni ko'rib chiqing: tizimda chop etish navbati bilan ishlaydigan ikkita dastur jarayoni mavjud.
N1, N2, ... - oxirgi bo'sh katakka ko'rsatgichlar. Ko'rsatkichlar jarayon tomonidan siljiydi va o'zgartiriladi, keyin jarayon o'zgaradi.
Shunday qilib, ish uzluksiz davom etishi kerak bo'lgan manba mavjud (bu misolda bu hisobga olinmaydi). Ushbu resurslar bilan ishlashda tizim sinxronizatsiyaga muhtoj.
Tanqidiy qism usuli
Muhim bo'lim dasturning umumiy manbaga kiradigan qismidir.
Sinxronizatsiya vazifasi ishni har qanday vaqtda ushbu manba bilan bog'liq bo'lgan muhim bo'limda ko'pi bilan bitta jarayon bo'lishi uchun tuzishdir. Ushbu usul o'zaro istisno deb ataladi .
Keling, tanqidiy qismni qanday amalga oshirishni ko'rib chiqaylik.
Uzilishlarni o'chirib qo'ying
O'zaro istisno qilishning eng oddiy usuli bu muhim bo'limdagi jarayonga barcha uzilishlarni o'chirishga ruxsat berishdir. Biroq, bu usul qiyin, chunki tizimni boshqarish uchun foydalanuvchi jarayoniga ishonish xavfli; u uzoq vaqt davomida protsessorni egallashi mumkin va agar jarayon muhim sohada ishlamay qolsa, butun tizim ishdan chiqadi, chunki uzilishlarga hech qachon yo'l qo'yilmaydi.
Bloklash o'zgaruvchisidan foydalanish (semafor)
Semafor - bu manfiy bo'lmagan butun son qiymatlarini oladigan va hisoblash jarayonlarini sinxronlashtirish uchun ishlatiladigan o'zgaruvchidir.
Ikkilik semafor D 2 ma'noga ega:
D = 1: resurssiz
D = 0: resurs band
Kritik bo'limga kirishdan oldin jarayon D resursining bo'sh yoki bo'shligini tekshiradi.Agar u band bo'lsa, u holda tekshirish tsiklik takrorlanadi, agar u bo'sh bo'lsa, u holda D o'zgaruvchining qiymati 0 ga o'rnatiladi va jarayon tanqidiy bo'lim. Jarayon D umumiy resursida barcha amallarni bajargandan so'ng, D o'zgaruvchisining qiymati 1 ga qaytariladi.
Agar barcha jarayonlar yuqoridagi konventsiyalar yordamida yozilgan bo'lsa, u holda o'zaro istisno kafolatlanadi. Shuni ta'kidlash kerakki, blokirovka qiluvchi o'zgaruvchini tekshirish va sozlash operatsiyasi bo'linmas bo'lishi kerak. Keling, buni tushuntirib beraylik. O'zgaruvchini tekshirish natijasida jarayon resursning bepul ekanligini aniqladi, ammo shundan so'ng darhol o'zgaruvchini 0 ga o'rnatishga ulgurmay, u to'xtatildi. U to'xtatilganda, boshqa jarayon resursni oldi, uning muhim qismiga kirdi, lekin umumiy resurs bilan ishini tugatmasdan ham to'xtatildi. Boshqarish birinchi jarayonga qaytarilganda, u resurs bo'sh deb hisoblab, band belgisini o'rnatdi va o'zining muhim qismini bajarishga kirishdi. Shunday qilib, nomaqbul oqibatlarga olib kelishi mumkin bo'lgan o'zaro istisno tamoyili buzilgan.
Bloklash o'zgaruvchilari yordamida muhim bo'limlarni amalga oshirish muhim kamchilikka ega: bir jarayon muhim bo'limda bo'lgan vaqt davomida, xuddi shu resursga muhtoj bo'lgan boshqa jarayon blokirovka o'zgaruvchisini so'rov qilish uchun odatiy harakatlarni amalga oshiradi va CPU vaqtini behuda sarflaydi. Bunday vaziyatlarni bartaraf etish uchun hodisa apparati deb ataladigan vositalardan foydalanish mumkin. Ushbu vosita nafaqat o'zaro istisno qilish muammolarini, balki jarayonni sinxronlashtirishning umumiy muammolarini ham hal qilishi mumkin. Turli xil operatsion tizimlarda hodisa apparati o'ziga xos tarzda amalga oshiriladi, ammo har holda, shunga o'xshash maqsadli tizim funktsiyalari qo'llaniladi, biz ularni shartli ravishda WAIT (x) va POST (x) deb ataymiz, bu erda x identifikator hisoblanadi. qandaydir hodisa. Agar resurs band bo'lsa, jarayon tsiklik so'rovni amalga oshirmaydi,
Sxemani modernizatsiya qilish:
Misolni ko'rib chiqing: ikkita dastur buferga yozadi va o'qiydi.
Программа 1:
#define №256
int e=N, f=0, b=1;
void writer
{
while(1)
{
PrepNextRec();
P(e);
P(b);
AddToBuf();
V(b);
V(f);
}
}
Программа 2:
void reader
{
while( )
{
P(f);
P(b);
GetFromBuf();
V(b);
V(e);
ProcRec();
}
}
Do'stlaringiz bilan baham: |