Amaliy ish 5 Mavzu: Time-Of-Check-To-Time-Of-Use tahdidini amalga oshirish va himoyalash. Ishdan maqsad


Download 183.17 Kb.
Sana21.04.2023
Hajmi183.17 Kb.
#1371319

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.

Thread 1

Thread 2


Integer value




0

read value




0

increase value



0

write back




1


read value



1


increase value


1


write back



2

Ammo, tezkor murojaat natijasida quyidagi holat kelib chiqdi:



Thread 1

Thread 2


Integer value




0

read value




0


read value



0

increase value



0


increase value


0

write back




1


write back



1

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 #include void thread_function()
{
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 #include #include std::mutex mu;
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