Bosh sahifa Wiki Atomic Instruction

Atomic Instruction

Atomic Instruction — ko‘p oqim yoki protsessor kuzatuvchisiga bo‘linmas yagona amal sifatida ko‘rinadigan mashina buyrug‘i. U umumiy xotiradagi qiymatni o‘qish va yangilash orasiga boshqa yozuv kirib qolmasligini ta’minlab, lock, hisoblagich va lock-free ma’lumot tuzilmalarini qurishga asos beradi.

Read-modify-write

Compare-and-swap xotiradagi qiymatni kutilgan qiymat bilan solishtiradi va teng bo‘lsa yangisini yozadi. Exchange yangi qiymatni yozib, eskisini qaytaradi. Fetch-add qiymatni oshirib, oldingi yoki yangi natijani beradi. Har biri o‘qish va yozishni tashqi kuzatuvchi uchun bitta atomik hodisa qiladi.

Atomiklik butun tizim doirasida tegishli kesh coherence protokoli orqali ta’minlanadi. Yadro kesh satriga eksklyuziv egalik oladi va raqib yozuvlarni tartiblaydi. Bu “barcha protsessorlar to‘xtaydi” degani emas; odatda faqat tegishli xotira satri bo‘yicha muvofiqlashtirish yuz beradi.

Load-linked va store-conditional

Ayrim ISAlar LL/SC juftligini beradi. Load-linked qiymatni o‘qib rezervatsiya o‘rnatadi; store-conditional orada tegishli o‘zgarish bo‘lmasa yozadi, aks holda muvaffaqiyatsiz tugaydi. Dastur muvaffaqiyatsizlikda siklni qaytaradi. Rezervatsiya interrupt, konteks almashuvi yoki yaqin manzildagi yozuv bilan ham bekor bo‘lishi mumkin.

Compare-and-swap eski qiymat yana avvalgi holatga qaytganini sezmasligi mumkin; bu ABA muammosi. Versiya hisoblagichi yoki xavfsiz xotira qayta ishlatish usuli obyekt identitetini qiymat bilan birga tekshiradi.

Xotira tartibi

Atomik bo‘linmaslik boshqa barcha load va store qaysi tartibda ko‘rinishini avtomatik belgilamaydi. Relaxed, acquire, release va sequentially consistent variantlar qo‘shimcha ordering kafolatlarini beradi. Keragidan kuchli tartib portativlikni soddalashtirishi, ammo ayrim apparatda ko‘proq fence va coherence xarajati keltirishi mumkin.

Tilning atomik kutubxonasi ISA buyruqlarini xotira modeli bilan bog‘laydi. Oddiy o‘zgaruvchiga parallel murojaatni faqat apparat yozuvi “bir bo‘lak” bo‘lgani uchun xavfsiz deb bo‘lmaydi; til darajasida data race noma’lum yoki taqiqlangan xulq bo‘lishi mumkin.

Chegaralar

Atomik amal qo‘llab-quvvatlanadigan kenglik va tekislanishga ega. Kesh satridan kesib o‘tgan operand sekin maxsus yo‘l, global bloklash yoki istisno talab qilishi mumkin. Memory-mapped qurilma hududi odatiy RAM atomiklarini qo‘llamasligi mumkin.

Yuqori raqobatda bitta atomik hisoblagich coherence “issiq nuqta”ga aylanadi. Sharding, lokal hisoblagich va batch yangilash trafikni kamaytiradi. Lock-free algoritmda bitta atomik buyruq mavjudligi yetarli emas; progress kafolati, xotira tartibi va obyekt umrini boshqarish birga isbotlanadi.

Progress va kutish

Compare-and-swap sikli raqobatda takroran muvaffaqiyatsiz bo‘lishi mumkin. Exponential backoff coherence trafikini kamaytiradi, lekin kechikishni oshiradi. Wait/notify yoki monitor kabi apparat yordami qiymat o‘zgarmaguncha yadroga past quvvatda kutish imkonini beradi. Bu busy-wait’dan samaraliroq, ammo uyg‘onish yo‘qolmasligi uchun tekshirish va uyqu atomik protokolga birlashtiriladi.

Lock-free algoritm tizim bo‘yicha kamida bir oqim oldinga siljishini kafolatlaydi; har alohida oqimning adolatli tugashi shart emas. Wait-free kuchliroq kafolat beradi. Bitta atomic instruction ishlatilgani algoritmni avtomatik lock-free qilmaydi, chunki yordamchi allocator, retry sikli yoki kernel yo‘li bloklanishi mumkin.

Atomik operand noto‘g‘ri tekislangan bo‘lsa, apparat kafolati yo‘qolishi yoki qimmat fallback kerak bo‘lishi mumkin. Til kutubxonasi type alignment’ni ta’minlaydi; packed struktura ichiga atomik maydonni majburan joylash portativ emas.

Atomik operatsiyaning muvaffaqiyati alohida status yoki qaytgan eski qiymat orqali tekshiriladi.

Bog‘liq tushunchalar

compare-and-swap, load-linked, store-conditional, memory ordering, lock-free algorithm, cache coherence