Context switch — protsessorning bir bajarilayotgan jarayon yoki oqim holatini saqlab, boshqa jarayon yoki oqim holatini tiklash jarayonidir. Operatsion tizim rejalashtiruvchisi ko‘p vazifalilikni amalga oshirish, ustuvor ishni ishga tushirish yoki bloklangan vazifa o‘rniga tayyor vazifani bajarish uchun kontekstni almashtiradi.
Saqlanadigan holat
Kontekstga buyruq ko‘rsatkichi, stek ko‘rsatkichi, umumiy registrlar, protsessor bayroqlari va arxitekturaga bog‘liq boshqa registrlar kiradi. Jarayonlar orasida almashishda xotira manzil makoni ham o‘zgarishi mumkin; oqimlar bir jarayon ichida bo‘lsa, ular odatda kod va xotirani bo‘lishadi, lekin har birining o‘z steki va registr holati bor.
Yadro bu ma’lumotni jarayon yoki oqim boshqaruv tuzilmasida saqlaydi. Keyingi rejalashtirishda saqlangan holat qayta yuklanadi va dastur to‘xtagan nuqtadan davom etadi. Dastur uchun bu tanaffus ko‘pincha ko‘rinmaydi, ammo vaqt o‘lchovida sezilishi mumkin.
Almashish sabablari
Vaqt kvanti tugashi majburiy, ya’ni involuntary almashishga sabab bo‘ladi. Yuqori ustuvor vazifa tayyor bo‘lishi yoki apparat uzilishi ham joriy oqimni siqib chiqarishi mumkin. Voluntary almashishda oqim fayl, tarmoq, qulf yoki taymerni kutish uchun bloklanadi va protsessorni boshqa ishga beradi.
Har bir tizim chaqiruvi to‘liq context switch emas. Foydalanuvchi rejimidan yadro rejimiga o‘tish imtiyoz darajasini almashtiradi, lekin ayni oqim bajarilishda qolishi mumkin. Shuningdek, uzilishni qayta ishlashdan keyin ham o‘sha vazifa davom etishi ehtimol.
Unumdorlik narxi
Registrlarni saqlash va tiklashning bevosita narxi bor. Bundan tashqari, yangi vazifaning kod va ma’lumotlari protsessor keshida bo‘lmasligi mumkin. Jarayonlar orasida manzil makoni o‘zgarganda TLB yozuvlari yangilanishi yoki manzil-makoni identifikatorlari orqali ajratilishi kerak. Shu bilvosita kesh ta’siri ko‘pincha oddiy registr operatsiyalaridan qimmatroq bo‘ladi.
Juda ko‘p faol oqim yaratish rejalashtirish va kesh bosimini oshiradi. I/O kutuvchi vazifalarda ko‘proq concurrency foydali bo‘lishi mumkin, CPUga bog‘liq ishda esa oqimlar sonini yadro sonidan ancha oshirish ko‘pincha samara bermaydi. Thread pool va asinxron I/O ortiqcha almashishlarni boshqarishga yordam beradi.
Kuzatish va tahlil
Operatsion tizim hisoblagichlari ixtiyoriy va majburiy context switch sonini ko‘rsatishi mumkin. Bir sonning o‘zi muammo isboti emas: tarmoq serverida ko‘plab kutishlar tabiiy. Uni CPU bandligi, run queue uzunligi, kechikish, bloklanish va kesh ko‘rsatkichlari bilan birga talqin qilish kerak.
Profil yaratishda qaysi oqimlar tez-tez uyg‘onayotgani, qisqa qulf kutishlari va ortiqcha taymerlar aniqlanadi. Yechim sifatida vazifalarni yiriklashtirish, qulf raqobatini kamaytirish, oqimlar sonini cheklash yoki hodisaviy modelga o‘tish mumkin. Rejalashtiruvchi siyosatini o‘zgartirish esa butun tizimga ta’sir qilgani uchun o‘lchov asosida bajariladi.
Real vaqt tizimlarida faqat o‘rtacha narx emas, eng yomon almashish kechikishi ham muhim. Protsessor yaqinligi oqimni bir yadroda ushlab, kesh lokaliligini yaxshilashi mumkin, biroq yukni notekis taqsimlash xavfini keltiradi.
Konteyner va virtual mashina
Konteyner alohida yadroga ega emas, shuning uchun undagi oqimlar mezbon rejalashtiruvchisida boshqa ishlar bilan raqobatlashadi. CPU kvotasi tugashi ilova ichidagi kechikishni oshirishi mumkin. Virtual mashinada esa mehmon va mezbon rejalashtiruvchilari birga ta’sir qiladi; “steal time” virtual CPU mezbon tomonidan kutdirilgan vaqtni ko‘rsatadi. Bu ko‘rsatkich qo‘shni virtual mashinalar yukidan keladigan kechikishni ilova ichidagi muammodan ajratishga yordam beradi.
Bog‘liq tushunchalar
Jarayon, Oqim, Rejalashtiruvchi, Thread pool, TLB, Protsessor keshi