I>Так вот, как видно в функции XXXX_ShmemCopy, копирование данных в область и из нее, производится вызовом memcpy, обернутым в семафор и дополнительным отключением прерываний на момент копирования, чтобы обеспечить атомарность операции. Есть ли вообще смысл в такой перестраховке на однопроцессорной системе?
На однопроцессорной машине достаточно одного запрета прерываний.
I> Минус в использовании _disable()/_enable() при больших объемах копирования (которых скорее всего не будет), на момент выполнения операции, стопорится работа всей системы, или если вызовов XXXX_ShmemCopy будет много (а их скорее всего будет много), то рискуем то и делать что бесконечно выключать/включать прерывания.
Обработчик прерывания может обратиться к той же памяти в середине операции, кроме того по выходу из обработчика планировщик может переключить контекст на другой процесс, поэтому к спинлокам добавляют запрет прерываний.
Семафоров же одних достаточно.
I> Так же есть ли необходимость оборачивания простых операций вида "Область->переменная = что-то записать", понятное дело не делая справа от "=" сложных операций, будет ли такая операция выполнена атомарно?
Нужно использовать atomic_* функции или atomic_t тип. Выражение справа роли не играет.
У сложных вещей обычно есть и хорошие, и плохие аспекты.
Берегите Родину, мать вашу. (ДДТ)