Интернет магазин китайских планшетных компьютеров



Компьютеры - Spinlock

13 мая 2011


Оглавление:
1. Spinlock
2. Специфика многопроцессорных и однопроцессорных конфигураций
3. Применение спинлоков
4. Проблемы спинлоков и методы их решения
5. Альтернативы спинлоков



Спинлок — низкоуровневый примитив синхронизации, применяемый в многопроцессорных системах для реализации взаимного исключения.

Физическая реализация

Физически спинлок представляет собой переменную в памяти и реализуется на атомарных операциях, которые должны присутствовать в системе команд процессора. Каждый процессор, желающий получить доступ к разделяемому ресурсу, атомарно записывает условное значение «занято» в эту переменную, используя аналог операции swap. Если предыдущее значение переменной было «свободно» то считается, что данный процессор получил доступ к ресурсу, в противном случае, процессор возвращается к операции swap и крутится в цикле ожидая, пока спинлок будет освобождён. После работы с разделяемым ресурсом процессор-владелец спинлока должен записать в него условное значение «свободно».

Пример реализации спинлока на ассемблере x86:

mov eax, spinlock_address
mov ebx, SPINLOCK_BUSY
wait_cycle:
lock xchg , ebx
cmp ebx, SPINLOCK_FREE
jnz wait_cycle
 
;<спинлок захвачен данным процессором, работа с разделяемым ресурсом>
 
mov eax, spinlock_address
mov ebx, SPINLOCK_FREE
lock xchg , ebx

Более интеллектуальная реализация будет использовать обычную, а не атомарную операцию, для опроса в цикле, а атомарную операцию — только для попыток захвата. Дело в том, что реализация атомарных операций с памятью происходит путем аппаратного блокирования системной шины процессором на время выполнения атомарной операции. В течении выполнения этих трёх операций выполнение каких-либо других операций на шине невозможно, это снижает производительность других процессоров в системе, даже если они не имеют никакого отношения к данному спинлоку.

Также используются т. н. queued spinlocks — «спинлоки с очередью». В них вместо присвоения 0 или 1 в атомарную переменную используется атомарное добавление структуры на голову списка, при том, что голова списка есть атомарная переменная типа «указатель».

Полезные свойства queued spinlockов:

  • гарантия порядка предоставления в порядке запроса, гарантия от «голоданий»
  • в цикле опроса каждый процессор опрашивает свою локальную переменную
  • ровно 1 атомарная операция при захвате и ровно 1 при освобождении

Спинлоки применяются для синхронизации небольших участков кода, когда использование более сложных механизмов неоправданно или невозможно. Реализация примитивов синхронизации и диспетчера потоков обязательно требует блокировок, защищающих списки нитей, готовых к исполнению, и списки нитей, ожидающих на объектах. Такая блокировка может быть только спинлоком ввиду её очень низкого уровня. Таким образом, спинлок есть низший примитив синхронизации, на котором основана реализация всех остальных.



Просмотров: 4087


<<< Tenex