Jetonlarni seriyalash - Serializing tokens

Yilda Kompyuter fanlari, tokenlarni seriyalash ning doimiy rivojlanishidan kelib chiqadigan paralellik nazorati tushunchasi DragonFly BSD. Ga binoan Metyu Dillon, ular juda o'xshash SPLlar, belgidan tashqari bir nechta ishlaydi CPU SPLlar faqat bitta CPU domenida ishlaydi.

Serializatsiya nishonlari dasturchilarga yozishga imkon beradi ko'p protsessor - o'zlari yoki pastki darajadagi quyi tizimlarsiz xavfsiz kod, bir xil belgini ushlab turishi mumkin bo'lgan har bir mavjudot to'g'risida xabardor bo'lishi kerak.

O'zaro chiqarib tashlash bilan taqqoslash (mutex)

Tokenlar va o'zaro chiqarib tashlash (mutex) mexanizmlari qulflar. Mutekslardan farqli o'laroq, nishonlar bloklangan yoki uxlab yotgan paytda boshqa iplarni manbaga kirishini istisno qilmaydi. Resurslarni boshqa mavzular bilan baham ko'rishni to'xtatish va boshlash turli sabablarga ko'ra amalga oshiriladi:

  1. Vaqtni takrorlash: foydalanuvchi maydoni (AQSh) rejalashtiruvchisi barcha oqimlarning ishlash uchun etarli imkoniyatga ega bo'lishini ta'minlashga harakat qiladi, shuning uchun u har bir ish zarrachasini qisqa vaqt ichida ishlaydi (vaqtni ajratish) va keyin boshqa oqimga o'tadi.
  2. Bir vaqtning o'zida bajarilishi: ko'p protsessorli kompyuterlarda ish zarrachasi boshqa protsessordagi boshqa ish zarrachasi bilan bir vaqtda bajarilishi mumkin.
  3. Preemption: ish zarrachasi ustuvorligi pastroq bo'lgan ustuvorlikni, masalan, apparatni uzib qo'yishi yoki engil vaznli yadro iplari.
  4. Ixtiyoriy ravishda blokirovka qilish: agar biror narsa kutish kerak bo'lsa, ishi bo'lmasa yoki blokirovka qiladigan funktsiyani chaqirsa, uxlashi mumkin. Hatto qulfni sotib olish uchun qilingan qo'ng'iroq ham bloklanishi mumkin.

Quyidagi jadvalda nishonlar va mutekslarning xususiyatlari umumlashtirilgan.

Mutexes va boshqalarni ketma-ketlashtirish
 Jetonlarni seriyalashMutekslar
Vaqt nusxasiIshlaydiIshlaydi
Bir vaqtning o'zida ijro etishIshlaydiIshlaydi
Oldindan olishIshlaydiIshlaydi
Ixtiyoriy ravishda blokirovka qilishMuvaffaqiyatsizIshlaydi
Muammolardan qochadiHaYo'q
Birinchi darajali inversiyani oldini oladiHaYo'q

Kabi masalalar boshi berk va ustuvor inversiya oldini olish juda qiyin bo'lishi mumkin va yadroning ko'p darajalarida muvofiqlashtirishni talab qiladi. Tokenlar bilan blokirovka blokirovka qilinmaydi va orttirilgan tokenlar keyingi operatsiyalar bloklanganda atom bo'lmasligi kerak, bu mutexlarga qaraganda ancha sodda kodga imkon beradi.

... Agar siz FreeBSD-5-ga qarasangiz, siz juda chuqur protsessual darajaga vaqtincha muteksni almashtirish yoki blokirovka qilish yoki bitim tuzish uchun vaqtincha qo'yib yuborish uchun imkon beradigan mutexlarni subroutine stackidan pastga o'tkazib yuborganligini sezasiz. boshi berk ko'chadan. FreeBSD-5-da juda ko'p kodli ifloslanish mavjud (bu erda ba'zi protseduralar to'g'ri ishlashi uchun boshqa bog'liq bo'lmagan protseduralar tomonidan o'rnatilgan mutekslar haqida ma'lumot berilishi kerak).

— Metyu Dillon

Misol

Quyidagi psevdokod va tushuntirishlar tokenlarning seriyali ishlashini ko'rsatadi.

Serializatsiya belgilaridan foydalangan holda PseudoCode misoli
Ip AB mavzuAmal
lwkt_gettoken (T1); iter = list1.head;
... lwkt_gettoken (T1); // bloklar // T1 tokenini kutish
A T1 tokenini oladi va undan ikkala satrda bo'lishiladigan list1 ga sinxronlashtirilgan kirish huquqini olish uchun foydalanadi.
lwkt_gettoken (T2); // bloklar
// T1 belgisini kutish
Lwkt_gettoken (T2) ga qo'ng'iroq blokirovka qilish funktsiyasidir, shuning uchun A uxlab qoladi va o'z belgilarini vaqtincha yo'qotadi. Rejalashtiruvchi ikkala T1 va T2 mavjudligini ko'rganda uyg'onadi.
// T1 va T2 ni kutish
list1.head = list1.head.next; lwkt_releasetoken (T1);
B T1 ni oladi va ro'yxat 1ni o'zgartiradi. E'tibor bering, A "iter" hali ham ro'yxatning eski boshiga ishora qiladi.
// boshning yangi versiyasini oling: iter = list1.head; // yangi ro'yxat tuzing: while (iter! = null) {list2.tail = iter; iter = iter.next;} lwkt_releasetoken (T1); lwkt_releasetoken (T2);
 Rejalashtiruvchi T1 va T2 ikkalasi ham mavjudligini ko'radi, shuning uchun u A ipini uyg'otadi, chunki A to'g'ri kodlanganligi sababli, u o'z listatorini list1 ning yangi rahbari bilan yangilaydi va unda ba'zi blokirovka qilmaydigan amallarni bajaradi. E'tibor bering, A uchun boshida ikkala tokenni so'rash ham yaxshi bo'lar edi.

Darvin yadrosidagi oldingi san'at

Mac OS X "s Darvin yadro shunga o'xshash texnikadan foydalanadi (a deb nomlanadi huni ga kirishni ketma-ketlashtirish uchun BSD yadroning bir qismi.

Shuningdek qarang

Adabiyotlar