• Thread 1 Thread 2
  • Teskor murojaat sharti tahdidi




    Download 179.63 Kb.
    Sana08.04.2024
    Hajmi179.63 Kb.
    #191062
    Bog'liq
    Amaliy ish 5 Mavzu Time-Of-Check-To-Time-Of-Use tahdidini amalg
    623854, 1-mavzu(INF ASOS), 419t, 151113, AXBOROT JARAYONLARINI, AXBOROT JARAYONLARINI, Материалы к экзамену по учебной дисциплине Базы данных, Нигматов Kompyuter tizimlari va tarmoqlari китоб, Ko\'rsatkichlar, Переменную мы определяли как именованную область памяти, Dastuiry vositalar xavfsizligi, Tasviriy san\'at пед амалиёт, 1-laboratoriya ishi ims tayyorlash texnologiyasi va klassifikats, 7-laboratoriya Mavzu mt da yasalgan kuchaytirgich sxemasini tad-fayllar.org


    Mavzu: Teskor murojaat sharti tahdidi
    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

    Download 179.63 Kb.




    Download 179.63 Kb.