11-Ma’ruza. Operatsion tizimda oqim (threads) tushunchasi oqimlar (thread tredy- )
Reja
Oqim.
Oqimlarning tasnifi
Oqim(thread) - bu operatsion tizimning mohiyati, protsessordagi ko'rsatmalar to'plamini, aniqrog'i dastur kodini bajarish jarayoni. Mavzularning umumiy maqsadi protsessorda parallel ravishda ikki yoki undan ortiq turli xil vazifalarni bajarishdir. Siz taxmin qilganingizdek, iplar ko'p vazifali OS uchun birinchi qadam edi. OS rejalashtiruvchisi, ipning ustuvorligini boshqaradi, vaqt bo'laklarini har xil iplar o'rtasida taqsimlaydi va ularni bajarish uchun qo'yadi.
Oqim bilan birga, jarayon kabi mavjudot ham mavjud. Jarayon(jarayon) bu jarayonning barcha resurslarini (ochiq fayllar, xotira bilan bog'langan fayllar ...) va ularning tavsiflovchilarini, oqimlarini va boshqalarni o'z ichiga olgan mavhumlikdan boshqa narsa emas. Har bir jarayonda kamida bitta ip bor. Shuningdek, har bir jarayon o'z virtual manzil maydoniga va ijro etish kontekstiga ega va bitta jarayonning iplari jarayonning manzil maydonini baham ko'radi.
Har bir oqim, har bir jarayon singari, o'z mazmuniga ega. Kontekst - bu quyidagi elementlar saqlanadigan tuzilma:
Protsessor registrlari.
Mavzu / jarayonlar to'plamiga ko'rsatgich.
Shuni ham ta'kidlash kerakki, agar tizim chaqiruvi ish zarrachasi tomonidan bajarilsa va foydalanuvchi rejimidan yadro holatiga o'tkazilsa, oqimlar to'plami yadro to'plamiga almashtiriladi. Bitta jarayonning ish zarrachasini boshqasiga o'tkazishda OS virtual xotira mexanizmlari uchun mas'ul bo'lgan ba'zi protsessor registrlarini yangilaydi (masalan, CR3), chunki har xil jarayonlar turli xil virtual manzil maydonlariga ega. Bu erda men yadro rejimiga oid jihatlarga alohida to'xtamayman, chunki bunday narsalar ma'lum bir OS uchun xosdir.
Umuman olganda, quyidagi tavsiyalar amal qiladi:
Agar sizning vazifangiz intensiv parallellashtirishni talab qilsa, bir nechta jarayonlar o'rniga bitta jarayondan oqimlardan foydalaning. Buning sababi, kontekstni almashtirish jarayoni kontekstni almashtirishga qaraganda ancha sekinroq.
Oqimdan foydalanganda, yadro tizimining qo'ng'iroqlarini talab qiladigan sinxronizatsiya vositalarini (masalan, mutekslar) haddan tashqari ishlatishdan ehtiyot bo'ling. Yadro tayyorligiga o'tish bu juda qimmat operatsiya!
Agar siz ring0-da ishlaydigan kodni yozsangiz (masalan, haydovchi), qo'shimcha mavzulardan qochishga harakat qiling, chunki kontekstni o'zgartirish qimmat operatsiya hisoblanadi.
Fiber foydalanuvchi rejimida ishlaydigan engil oqimdir. Elyaf sezilarli darajada kam resurslarni talab qiladi va ba'zi hollarda tizim qo'ng'iroqlari sonini minimallashtirishga va natijada ishlashni oshirishga imkon beradi. Elyaflar odatda ularni yaratgan oqim kontekstida bajariladi va ularni almashtirishda faqat protsessor registrlarini saqlashni talab qiladi. Nima bo'lishidan qat'iy nazar, lekin tolalar kerakli mashhurlikni topa olmadi. Ular bir vaqtning o'zida ko'plab BSD operatsion tizimlarida amalga oshirilgan, ammo vaqt o'tishi bilan ular u erdan chiqarib yuborilgan. Win32 API shuningdek tolalar mexanizmini amalga oshiradi, ammo u faqat boshqa operatsion tizim uchun yozilgan dasturiy ta'minotni osonlashtirish uchun ishlatiladi. Shuni ta'kidlash kerakki, yoki jarayon darajasidagi rejalashtiruvchi tolalarni almashtirish uchun javobgardir yoki kommutatsiya dasturning o'zida, boshqacha aytganda qo'lda amalga oshirilishi kerak :)
Do'stlaringiz bilan baham: |