2017-02-16 6 views
1

Во время чтения Операционная система Три легких пьес я нашел следующее предложение:Почему блокировки спина не имеют никакого смысла на одном процессоре?

«Для правильной работы на одном процессоре, это требует упреждающего планировщика (то есть один, который будет прерывать поток через таймер, в для того, чтобы время от времени запускать другую тему). Без превенция, блокировка спинов не имеет особого смысла ни на одном CPU, поскольку нить, вращающаяся на процессоре, никогда не откажется от нее ».

Почему нить, вращающаяся на одном процессоре, никогда не откажется от нее, хотя многопоточность поддерживается для одного процессора? Это потому, что spin-lock просто тратит слишком много ресурсов процессора в этом случае? Как количество ядер ЦП влияет на производительность различных замков, таких как мьютексы и блокировки спинов?

+3

Обратите внимание на ту часть, где говорится: * «Без предоплаты, ...» * –

+1

ohhh .. получил! благодаря!! –

ответ

2

На одном CPU, одноядерном CPU вы все равно можете иметь threadmulti-tasking (многопоточность), с оговоркой, что только один поток обычно может выполняться сразу из-за отсутствия нескольких исполнительных блоков. Без нескольких исполнительных блоков (аппаратная многопоточность) аппаратное обеспечение полагается на стратегию «software multi-threading», определенную ядром, - программное обеспечение операционной системы низкого уровня, определяющее, что нужно выполнять и когда.

Preemption - стратегия, которая включает в себя более активный пастух (так сказать), эти многочисленные потоки выполнения по одному пути, которые обычно реализуются частично с помощью прерываний, основанных на использовании таймера. Противоположность preemption - cooperative scheduling - использует более простой подход, оставляя его до активных потоков, чтобы сигнализировать о его завершении.

В результате кооперативная схема планирования позволяет нити одного процесса нити, чтобы удержать единственный вычислительный ресурс (в данном случае) дольше:

enter image description here

Но что, если активный поток в таком схема должна была стараться оставаться активной навсегда? Вот что происходит здесь, по существу.

Спин-блокировка - активное ожидание блокировки запрашиваемого ресурса. Поток будет просто сидеть там, ожидая, что какой-либо другой поток заблокирует ресурс, который он хочет от него отказаться. Поскольку текст указывает, что аппаратная ситуация позволит только один активный поток за раз, если запрашиваемый ресурс заблокирован, это означает, что он заблокирован неактивным потоком.

Без предварительного исправления до тех пор, пока не будет принято решение прекратить выполнение. Следовательно, когда активная нить закручивает, она будет сидеть там вечно - то, что называется зависанием. Чтобы остановить это, пользователю, вероятно, придется физически отключить систему, очищающую кэш/динамическую память.

С превентивными потоками планирования реализованы как time slices. Когда доступ к конкретным ресурсам необходим, прежде чем дальнейшая работа может быть завершена в потоке, имеет смысл spinlock - оживленное ожидание.

С предопределением ядро ​​будет автоматически force context switch после определенного количества времени, поэтому даже с одним процессором не будет зависания. В конце концов поток с ресурсом lock получит некоторое время и освободит его ресурс. Когда поток спин-блокировки получит свое следующее запланированное время, он сможет заблокировать ресурс и продолжить.

В целом это означает, что вы не повесите.

Однако спинлки все еще страдают более сложные проблемами с упреждающим планированием, такие как тупик ... когда два потока, каждый spinlocked держа ресурсы друг друга:

enter image description here

Однако такие случаи часто можно избежать посредством защиты ядра от запросов блокировки ресурсов.

В идеальном мире совместное планирование с тщательным дизайном потоков может потенциально привести к более быстрому выполнению критических процессов. Следовательно, это был общий подход в более старых ОС, таких как Mac OS и Windows 3.x. Однако с увеличением вычислительных требований становится все труднее избежать недостатков совместного планирования, поэтому практически все современные ядра операционной системы используют предварительный планировщик.

+1

Благодарим вас за предоставленную информацию. – LWimsey

+0

Рад помочь! Потратил меня на то, чтобы выследить удовлетворительные фотографии, но я думаю, что эти особенности дают хорошие визуальные связи с обсуждением. –

Смежные вопросы