Przypadki użycia barier w czasie rzeczywistym (DSB, DMB, ISB) w ARM

Rozumiem, że DSB, DMB i ISB są barierami uniemożliwiającymi zmianę kolejności instrukcji. Mogę też znaleźć wiele bardzo dobrych wyjaśnień dla każdego z nich, ale trudno sobie wyobrazić, że muszę z nich korzystać.

Ponadto z kodów otwartego źródła widzę te bariery od czasu do czasu, ale trudno jest zrozumieć, dlaczego są one używane. Na przykład w jądrze Linuksa 3.7 funkcja tcp_rcv_synsent_state_process znajduje się następująca linia:

    if (unlikely(po->origdev))
            sll->sll_ifindex = orig_dev->ifindex;
    else
            sll->sll_ifindex = dev->ifindex;

    smp_mb();

    if (po->tp_version <= TPACKET_V2)
            __packet_set_status(po, h.raw, status);

gdzie smp_mb () jest w zasadzie DMB. Czy mógłbyś podać mi kilka przykładów z życia? Pomogłoby to lepiej zrozumieć bariery.

questionAnswers(3)

yourAnswerToTheQuestion