Интернет магазин китайских планшетных компьютеров |
|
Компьютеры - Spinlock13 мая 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ов:
Спинлоки применяются для синхронизации небольших участков кода, когда использование более сложных механизмов неоправданно или невозможно. Реализация примитивов синхронизации и диспетчера потоков обязательно требует блокировок, защищающих списки нитей, готовых к исполнению, и списки нитей, ожидающих на объектах. Такая блокировка может быть только спинлоком ввиду её очень низкого уровня. Таким образом, спинлок есть низший примитив синхронизации, на котором основана реализация всех остальных. Просмотров: 4249
|