Amaliy ish 5 Mavzu: Time-Of-Check-To-Time-Of-Use tahdidini amalga oshirish va himoyalash. Ishdan maqsad
Download 183.17 Kb.
|
- Bu sahifa navigatsiya:
- Nazariy qism
- Thread 1 Thread 2
Amaliy ish - 5 Mavzu: Time-Of-Check-To-Time-Of-Use tahdidini amalga oshirish va himoyalash. Ishdan maqsad: Tezkor murojaat sharti tahdidi haqida tushumcha hosil qilish, TOCTOU tahdidi haqida tushumcha hosil qilish, tahdidlarning oldini olish ko‘nikmasini shakllantirish. Nazariy qism Tezkor murojaat sharti tahdidi (Race condition) bu dasturiy mahsulotning yoki elektron tizimning o‘zini tutish holati bo‘lib, chiqish qiymati boshqarib bo‘lmas boshqa hodisalar ketma-ketligi yoki vaqtiga bog‘liq bo‘ladi. Dasturlashda bu holda xatolik yuzaga kelib, ikkita signal birinchi chiqish uchun harakat qiladi. Bu hodisa asosan, dasturlashda parallel hisoblashda (thread) yuzaga keladi. 5.1 – rasm. Tezkor murojaatda misol Uch turdagi mustaqil oqimlar bo‘lishi mumkin: - Oqimlar (thread); - Jarayonlar; - Vazifalar. Ushbu hodisaning yuzaga kelishi uchun uch turdagi xususiyat mavjud: - Konkurensiyaning mavjudligi. Kamida ikkita oqim amalga oshirilgan bo‘lishi shart; - Taqsimlangan obyekt. Taqsimlangan obyektlar barcha konkurent oqimlar tomonidan boshqarilishi shart; - Holatni o‘zgarishi. Kamida bitta oqim tezkor murojaatni amalag oshirishi shart. Quyida ikkita oqim tomonidan o‘z qiymatini birga oshirish uchun bajargan tezkor murojati keltirilgan. Agar tizim to‘g‘ri ishlaganda quyidagi natija olinishi shart edi.
Ammo, tezkor murojaat natijasida quyidagi holat kelib chiqdi:
Bu tahdid mavjud dasturiy mahsulotlarda time-of-check-to-time-of-use (TOCTTOU) zaifligi mavjud bo‘ladi. Muammo biror oqim “check-then-act” ni amalga oshirish vaqtida (masalan, "check" agar X biror kattalikga teng bo‘lsa, u holda "act" X bilan bog‘liq biror amal) va boshqa bir oqim bu qiymatga "check" va "act" oralig‘iga ta’sir qiladi. Masalan: if (x == 5) //"Check" { y = x * 2; //"Act" // agar boshqa biror oqim x ni "if (x == 5)" va "y = x * 2" oralig‘ida o‘zgartirsa // y kattalik 10 ga teng bo‘lmaydi. } Odatda bu tahdidlarni oldini olishda dasturlash tillarida global o‘zgaruvchini qulflab qo‘yish usullaridan foydalaniladi. // x uchun qulflashni amalga oshirish if (x == 5) { y = x * 2; // qulflash olib tashlagmagunga qadar boshqa oqim tomonidan o‘zgartirib bo‘lmaydi // SHuning uchun y = 10 } // x ni qulfdan ozod etish Amaliy qism Quyida oqimdan foydalangan holda va asosiy funksiya ichida chop etish buyrug‘idan foydalanilib, qiymatlar chop etilgan kod berilgan: #include { for (int i = -100; i < 0; i++) std::cout << "thread function: " << i << "\n"; } int main() { std::thread t(&thread_function); for (int i = 0; i < 100; i++) std::cout << "main thread: " << i << "\n"; t.join(); return 0; } 5.1 – rasm. Dasturning kompilatsiya qilingan holati Natijadan ko‘rinib turibdiki, bu holda tartib buzilgan. Bu holatni oldini olish uchun C++ dasturlash tilida mutex: funksiyasidan foydalaniladi va u bilan chop etish buyrug‘i qulflanadi: #include #include void shared_cout(std::string msg, int id) { mu.lock(); std::cout << msg << ":" << id << std::endl; mu.unlock(); } void thread_function() { for (int i = -100; i < 0; i++) shared_cout("thread function",i); } int main() { std::thread t(&thread_function); for (int i = 0; i < 100; i++) shared_cout("main thread", i); t.join(); return 0; } 5.1 – rasm. Dasturning mutex funksiyasi bilan kompilatsiya qilingan holati Topshiriq TOCTOU va Race Conditional tahdidlariga bir donadan misol keltirish va tahdidlarning oldini olish yo‘llarini qo‘llash. Download 183.17 Kb. Do'stlaringiz bilan baham: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling